在自然語言處理工作(NLP)中,會遇到這樣的一個應用問題:如何挖掘文本中某一關鍵詞的語義相似詞或近義詞?解決該問題的辦法很多,比如使用近義詞詞庫進行匹配,或檢索詞語類的知識庫(HowNet),也可用word2vec之類的詞向量技術進行cosine相似計算。再高級點,可利用像BERT之類的預訓練模型進行預測,但這種方式對中文詞不太友好。此外,上述的挖掘方法都存在一個共同的缺陷,都沒考慮關鍵詞所在的語義環境。
針對上述場景,今天分享一篇基於上下文語義來挖掘相似詞或近義詞的paper,論文為《CASE: Context-Aware Semantic Expansion》,論文題目的意思為基於上下文感知的語義擴充,解決的場景如下圖。如要挖掘句子中與「胺基酸」(amino acid)相似的語義詞,若不考慮語義環境,與之匹配的有維生素(vitamin)、抗氧化劑(antioxidant)、脂肪(fat)等等;但若考慮文本語義,脂肪不能作為胺基酸擴充的語義詞,因為青稞草(amino acid)不富含脂肪,這在語料庫中也不會有類似的描述。
2 模型paper先定義如下學習任務:
其中 C為句子文本,"__"為替代文本中seed term(s)的佔位符,T表示潛在與佔位符同級的下義詞(hyponym)集合,任務的目標即為找到除s外的語義詞,即訓練目標如下:
表示為,在輸入句子文本C與種子詞s條件下,求除種子詞的其他詞最大概率。下圖為模型的整體框架。
從模型圖可以看出,主要分三個部分:Context Encoder、Seed Encoder、Prediction Layer,下面簡單介紹下這三個模塊。
2.1 Context Encoder文中作者提出四種編碼方法,第一種為Neural Bag-of-Words Encoder,該方法是利用N-gram的思路,通過looksup詞表的方式,得到句子的所有詞向量,然後以縱向相加求平均得到句子向量; 第二,三種分布為RNN-Based Encoders 、 CNN-Based Encoders,通過兩種編碼網絡得到句子向量;第四種為Position-Aware Encoders,具體採用類似CNN+PF的方式,將位置信息也嵌入進行學習。最後,通過Context Encoder得到句子向量V_C。
2.2 Seed Encoder關於句子中Seed Term的編碼,文章同樣是採用Neural Bag-of-Words Encoder,因為Seed Term有可能是由多個word組成的,所以得到的向量V_S如下:
模型的第三部分就是預測擴充的詞條,Predicting Expansion Terms,具體為想將上述兩個編碼層得到的兩個向量 concatenation方式得到最終向量x,然後輸入softmax層進行預測:
在實際中,相似的語義詞有可能很多,而softmax正常只是輸出概率最大的一個。文中為了緩解該問題,作者採用sampled softmax loss的方式,實現multi-label的方式進行預測,這樣可以大大提高預測效率。
此外,文中在Context Encoder部分還嘗試了Attention機制,並提出兩種結合方式,一種為Seed-Oblivious Attention,該方法是將句子每個詞學一個權重,然後再加權計算最終句子向量;另中為Seed-Aware Attention,該方法是將句子每個詞相對Seed Term學一個權重,這裡文中提出DOT與TRANS-DOT兩種計算方法,然後再加權計算最終句子向量。此環節詳情若有興趣可查看原文。
3 實驗在實驗部分,文中使用的是WebIsA數據集,該數據集180萬的訓練集,400萬的下位詞。實驗的最終結果為:
顯示相對之前別人的方法,作者的模型在四個評價指標平均有4%的提升,此外作者也驗證了前面提到的四種句子編碼方式,方法Neural Bag-of-Words Encoder(NBoW)方式效果最好,如下圖所示。
可以看出,多種常規的編碼方法效果都沒有超過最簡單的NBoW方式,這也讓我有點驚訝。我想該任務也挺適合上BERT等預訓練模型的,因為BERT就是基於上下文進行編碼的,不過文中並沒有對比在預訓練模型下的預測效果。
上圖是對應前言列舉的句子中amino acid(胺基酸)的語義詞學到的結果,其中加粗的為擴充的正確相似語義詞,其他為擴充的噪聲詞。左邊一列顯示在TRANS-DOT注意力機制下,預測的噪聲詞fat從top10之列移除了,並且有效詞得到提升,說明了該方法的有效性。此外,兩列一起驗證了是否考慮下位詞(Hypernym)的效果,結果來看,使用下位詞效果稍微好一點,但影響並不大。
4 結語從paper解決的任務來看,覺得還是挺有意思,它可視為挖掘近義詞或同義詞的更細粒度的任務,它考慮了詞的語義環境。從實驗結果來看,該任務的預測難度還很大,top10的召回率也只有23%左右的效果,說明離實際應用還是有點距離;從Table5顯示的結果來看,若不考慮語義環境,只作為近義詞的擴充,其實效果還是很不錯的。儘管文中提出的方法很簡單,但還是被2020年的AAAI會議接受,所以也啟發我們,做學術不用太追求模型,方法,踏踏實實把實驗做好,做的更落地些,也是能被人青睞,而這篇就具備這樣的特點。
此外,我個人覺得該方向作為學術點還是可以繼續優化下去的,在如何深入考慮上下文信息上還是有不少可嘗試的方法。如果有興趣的朋友,可以私下交流,也可以嘗試合作~~
更多文章可關注筆者公眾號:自然語言處理算法與實踐