從語言學角度看詞嵌入模型
本文為 AI 研習社編譯的技術部落格,原標題 :
Moving beyond the distributional model for word representation.
作者 | Tanay Gahlot
翻譯 | 喬叔叔
校對 | 醬番梨 整理 | 菠蘿妹
原文連結:
https://towardsdatascience.com/https-medium-com-tanaygahlot-moving-beyond-the-distributional-model-for-word-representation-b0823f1769f8
從語言學角度看詞嵌入模型
在任何一個基於機器學習的自然語言處理(NLP)流水線中,詞的向量化是其中典型的一個步驟,因為我們不能直接給計算機“喂單詞”。在詞的向量化過程中,我們為一個單詞指定一個N維的向量,用來表示它的詞義。結果,這成了處理過程中最為重要的一個步驟之一,因為一個“壞的”表示會導致失敗以及為接下來的NLP任務帶來不願看到的影響。
在詞向量化的最常用的技術之一就是詞的分散式表示模型。它基於的一個假設是一個詞的意思能夠從它所在的上下文中推斷出來。大部分深度學習論文使用基於該分散式理論而來的詞向量,因為它們是“任務普適”(它們不是針對特定任務)而且“語言普適”(它們不是針對特定語言)。不幸的是,分散式方法並不是詞向量化任務的魔效武器。在本博文中,我們會指出這個方法的一些問題並提供一些潛在的解決方案,以改善詞向量化的過程。
分散式表示模型有以下的問題,讓人感覺非常痛苦:
罕見詞:對於在語料中出現頻率較低的詞,它們無法通過分散式表示學習得到一個很好的表示。
多義混同:它們將一個詞的所有詞義混成一個表示。例如,單詞“bank”,在英文中可以指“河岸”或者是“金融機構(銀行)”。分散式模型卻將所有的這些詞義混合在一個表示中。
形態缺失:在表示學習的時候,它們並沒有考慮一個單詞多種形態。比如,“evaluate”和“evaluates”具有相似的意思,但是分散式表示模型卻將它們視為兩個不同的單詞。(譯者注:在英語中,一個單詞可能有多種形態,特別是動詞,有時態、人稱、主動被動等對應的不同形態。在本例中evaluates是evaluate的第三人稱單數的一般現在時的形態。)
幸運的是,為了解決這些問題,大家進行了非常廣泛的研究。大致上,這些解決辦法可以分為3個主要類別。我們將會按照下面的順序一一介紹:
形態敏感嵌入
在詞嵌入中,將語言或功能約束進行增強。
多詞義處理
形態敏感嵌入
這些技術在學習詞嵌入的時候,將詞的形態進行了考慮。Fasttext就是這種技術的一個典型代表。它將一個單詞表示成了n-grams(n元模子)字元的彙總。例如單詞where就可以表示成。 每個n-gram字元被指定一個向量,這個向量接下來會被用來計算上下文向量與目標向量匹配度的分值:
在使用這種方法(下表的sisg)對一些詞彙形態豐富的語言,比如德語(De)、法語(FR)、西班牙語(ES),俄語(RU)和捷克語(Cs),進行語言建模的時候,經評估,相較於沒有使用預訓練詞向量的LSTM,以及使用了預訓練詞向量卻沒有相關詞根資訊的LSTM模型(下表的sg),效果都有了改善。
而且,既然fasttext將單詞表示為n元字元(n-gram)的組合,因此它就能為那些語料庫中從來沒有出現過的詞提供嵌入。在一些領域如生命科學領域,由於詞彙表非常有限(長尾現象),語料中大部分的單詞都歸入到未知類別中,該技術就顯得尤其有用。
Morphfitting提供了另外一個技術選項用來將詞的形態輸入到詞嵌入模型中。在這項工作中,他們用“相吸相斥”(Attract-Repel)方法來“後處理”(post-process)詞嵌入,該方法“吸引”曲折形態(通過詞的形式變化來表達有意義的句法資訊,比如動詞時態,卻不改變詞義),而“排斥”派生形態(新形式的單詞出現同時詞義也發生遷移變化)。在下一部分我們會詳細討論“相吸相斥”方法。
通過注入語言形態學的約束,Morphfitting在SimLex和SimVerb兩個資料集上的相關係數評估中都超過了下表給出的10個標準嵌入模型。
在詞嵌入中,將語言或功能約束進行增強
另外一類詞空間定義的方法是在詞嵌入的後處理中進行語言/功能約束。在上一節中我們已經看到這類方法的一個例子—Morphfitting。在這一節,我們將會探索一下Morphfitting中使用的定義詞嵌入的方法—相吸相斥法(Attract-Repel)。
相吸相斥法(Attract-Repel)是一種後處理技術,它根據語言約束將預訓練的詞嵌入進行進一步定義。例如,在Morphfitting中,語言約束是以兩種集合的形式來表達,再次給出表格2如下:
表格的上半部分是“相吸集合”(譯者注:由多個詞義相同的單詞對組成的集合),下半部分是“相斥集合”(譯者注:由多個詞義不同的單詞對組成的集合)。利用這些集合,一個迷你批次就形成了,它可以用來優化下面的損失函式:
損失函式中的第一項對應的是相吸集合,第二項對應的是相斥集合。第三項則保留了分散式表示。而且,前面兩項也會引入負樣例,這是採用了PARAGRAM模型的主意。損失函式(又:成本函式)的前兩項由下式給出:
第三項由下式給出:
人們可以用“相吸相斥”法注入用相吸相斥集來表示的語言約束,比如“同義與反義”或者“曲折形態與派生形態”。而相應地,那些無法利用語言約束來表達的“相似性”或者“非相似性”,人們就不能進行詞嵌入定義了。例如,不同“治療”型別的關係,就無法用相吸相斥法來捕獲。為了適應這樣的功能關係,我們介紹另外一種方法叫做“功能改裝”(Functional Retrofitting)。
在功能改裝方法中,關係的語義學習與詞空間的學習是同步進行的。而獲得這一點的方法,主要是將相吸相斥法中的點積替換成一個優化學習過程得來的函式。
上式中的第一項保留了分散式嵌入,第二項和第三項則引入了知識圖譜中的正向關係空間(E+)與負向關係空間(E-)(譯者注:負向關係空間是沒有在知識圖譜中標明的關係的集合),最後一項在學習函式中執行正則化功能。
通過在國際系統醫學術語集(SNOMED-CT)之上預測兩個實體(i,j)之間的關係(r)而做的鏈路預測,功能改裝方法的語義學習效果得到了驗證。四種不同型別的功能改裝方法分別對四種關係( “具有發現部位Has Finding Site”、 “具有病理過程Has Pathological Process”、 “誘因Due to”、 “症狀Cause of”)進行了預測,其結果如下表所示:
更多關於功能改裝的資訊,你可以參考一篇由Christopher Potts寫的優秀blog。如果你需要功能或語言約束來進一步定義你的詞嵌入,請試用Linked Open Data Cloud上優秀的、具有互聯關係的本體彙編。
上述的方法更新了各次彙報的詞嵌入。如果你對定義整個詞空間感興趣,你可以用反向傳播來這麼做,正如Ivan Vulić和Nikola Mrkšić在EMNLP 2018論文中建議的那樣(Adversarial Propagation and Zero-Shot Cross-Lingual Transfer of Word Vector Specialization)。
多詞義處理
最後一類詞嵌入定義技術是考慮詞的多義性,或者是考慮詞的上下文,或者是利用詞義庫。讓我們先從前一類方法開始 – ELMO。
在ELMO中,詞是基於上下文而被向量化的。因此為了能夠用向量表達一個詞,人們也需要指定某個詞出現的上下文。與那些沒有考慮上下文的向量化技術相比較,這個方法已經證明是非常有效的。下例比較了ELMO(biLM)和Glove的最近鄰。
ELMO背後的基本思想是得出雙向語言模型(BiLM)各個中間層的內部狀態加權彙總以及最後一層的字元卷積網路表示。
ELMO的詞嵌入在三個下游任務SQuAD、SNLI和SRL中進行了測試,相較於基準它有了顯著的改進。
更多關於ELMO的資訊,請參考這篇AllenNLP寫的博文。如果你想從分散式詞表示中使用詞彙資源來壓縮語義,你可以用DECONF。在這個方法中,Mohammad Taher Pilehvar提出了一種機制來使用下面的優化標準,從而從分散式嵌入中壓縮語義嵌入:
上式中,第一項保留了語義分佈表示的近似,第二項會將詞義嵌入向發生偏移的詞義推得更加靠近一些。這個過程可以很清晰地用下圖來描述。
偏移詞集是用一個定製的Page Rank演算法基於一個詞彙術語(利用詞彙資源建立而來)的語義網路計算而來的。
我們使用四個單詞相似度基準方法分別做了皮爾森相關相關性和斯皮爾曼相關性評估,DECONF在絕大多數任務中都取得了最先進的結果,如下表所示:
結論
如果如處在沒有足夠訓練資料來從頭學習詞嵌入的境況,我高度推薦使用上面提及的詞表示的方法來取得一些百分比的改善。關於本話題更深入的討論,我高度推薦Ivan Vulić在ESSLLI 2018中Word vector specialisation的課程。
想要繼續檢視該篇文章相關連結和參考文獻?
長按連結點選開啟:
https://ai.yanxishe.com/page/TextTranslation/1181
AI研習社每日更新精彩內容,觀看更多精彩內容:
這5種計算機視覺技術,重新整理你的世界觀
遷移學習:如何將預訓練CNN當成特徵提取器
新手必看:深度學習是什麼?它的工作原理是什麼?
Python高階技巧:用一行程式碼減少一半記憶體佔用
等你來譯:
預訓練模型及其應用
一文帶你讀懂線性分類器
(Python)3D人臉處理工具face3d
讓你的電腦擁有“視力”,用卷積神經網路就可以!
相關文章
- 詞嵌入系列部落格Part1:基於語言建模的詞嵌入模型模型
- 05.序列模型 W2.自然語言處理與詞嵌入模型自然語言處理
- 轉享:從Java或C++角度看 Objective-C 語言JavaC++Object
- NLP領域的ImageNet時代:詞嵌入已死,語言模型當立模型
- 從元語言角度評價華為倉頡
- NLP領域的ImageNet時代到來:詞嵌入「已死」,語言模型當立模型
- 數學語言看世界
- 聊聊Netty那些事兒之從核心角度看IO模型Netty模型
- 從JDK角度看物件克隆JDK物件
- 從一組漫畫看程式語言學習曲線
- 從卷積拆分和分組的角度看CNN模型的演化卷積CNN模型
- 從彙編角度分析C語言的過程呼叫C語言
- 從商業利益看 Go 程式語言Go
- 從JDK原始碼角度看FloatJDK原始碼
- 從JDK原始碼角度看LongJDK原始碼
- 從JDK原始碼角度看IntegerJDK原始碼
- 從 JDK 原始碼角度看 BooleanJDK原始碼Boolean
- 從 JDK 原始碼角度看 ObjectJDK原始碼Object
- 從JDK原始碼角度看ShortJDK原始碼
- 從Swift語言看ORM的定位錯誤SwiftORM
- 【雜談】從實現角度看ChannelFuture
- 從原始碼角度看ContentProvider原始碼IDE
- 從NewSQL的角度看Apache ShardingSphereSQLApache
- 從經濟模型角度看比特幣和以太坊存在的問題模型比特幣
- 從語言建模到隱馬爾可夫模型:一文詳述計算語言學隱馬爾可夫模型
- 嵌入式C語言學習筆記2C語言筆記
- 從程式語言排行看程式設計師信仰程式設計師
- 從設計模式角度看OkHttp原始碼設計模式HTTP原始碼
- [譯] 從設計師的角度看 ReduxRedux
- 從觀麥前端框架的角度看css前端框架CSS
- 00 預訓練語言模型的前世今生(全文 24854 個詞)模型
- C語言英文單詞C語言
- 語言大模型大模型
- 大語言模型模型
- 從面試角度學完 Kafka面試Kafka
- 從神經學的角度來告訴你嗅覺和語言是緊密相關的
- 世界是平的嗎?——從不同角度看前端前端
- 從原始碼角度看CPU相關日誌原始碼