編輯導語:NLP為Neuro-Linguistic Programming的縮寫,是研究思維、語言和行為中的規律;這是一種對優秀(excellence)進行編碼和複製的方式,它能使你不斷達到你和你的公司想要的結果;本文是作者關於NLP知識中詞的表達的分享,我們一起來看一下。
個人認為pm懂一點技術好處是大大的有。
總結這個系列,把NLP相關的常見模型進行了梳理,分為詞的表達、RNN、seq2seq、transformer和bert五個部分。
基本的想法是重點理解模型是什麼(what)、為什麼要用這種模型(why)以及哪些場景中可以用這種模型(where),至於如何實現模型(how)可以留給RD小哥哥們。
一、詞的表達要知道計算機是看不懂人類語言的,要想讓機器理解語言、實現自然語言處理,第一步就是把自然語言轉化成計算機語言——數字。
由於詞是人類語言表達時的一種基本單位(當然更細的單位是字或者字母),NLP處理的時候很自然的想要用一組特定的數字代表一個特定的詞,這就是詞的表達,把這些表示詞的數字連起來就可以表達一句話、一篇文章了。
這一part裏有很多常見的名詞,distributed representation、word embedding、word2vec等等,它們的關係大概是這樣的:
1. one-hot representation v.s. distributed representation
表達方式,我覺得就是自然語言到機器語言怎麼轉化的一套規則;比如“我”這個詞轉化到機器語言應該用“1”還是“100”表示呢?而且機器語言中代表“我”的這個數還不能和代表其他詞的數重複吧,必須是一個唯一的id。
順着id這個思路,假設我們的詞典收錄了10個詞,那麼我們就給詞典裏的每一個詞分配一個唯一的id;詞表示的時候用一個和字典一樣長的向量表示,這個向量裏只有id這一位為1,其他位都為0;比如説abandon這個詞的id是1,那麼就表示成abandon=[1 0 0 0 0 0 0 0 0 0],這就是one-hot representation。
這種表示好理解,但是也有問題:
問題一:向量會隨着字典變大而變大。
很明顯如果我的詞典有100000個詞的話,每一個詞都要用長度100000的向量表示;如果一句話有20個詞,那麼就是一個100000*20的矩陣了,按這種操作基本就走遠了。
另外一個問題是這種表示不能體現語義的相關性。
比如香蕉和蘋果在人看來是非常類似的,但是用one-hot表示香蕉可能是[1,0,0,0,0],蘋果可能是[0,0,1,0,0],之間沒有任何相關性;這樣的話如果我們用“我吃了香蕉”訓練模型,結果模型可能並不能理解“我吃了蘋果”,泛化能力就很差。
於是機智的大佬們提出了一個假説,就是distributed hypothesis:詞的語義由其上下文決定。
基於這種假説生成的表示就叫做distributed representation,用在詞表示時也就是word embedding,中文名有詞向量、詞嵌入;所以distributed representation≈word embedding,因為現階段主流的nlp處理大都是基於詞的,當然也有對字、句子、甚至文章進行embedding的,所以不能説完全完全相等。
至於具體如何基於這種假説實現詞表示,根據模型不同可以分成基於矩陣(GloVe)、基於聚類、基於神經網絡(NNLM、Word2Vec等)的方法。
2. word embedding個人理解,從字面意思上看word embedding就是把一個one-hot這樣的稀疏矩陣映射成一個更稠密的矩陣;比如上邊栗子中abandon用one-hot(詞典大小為10)表示為[1 0 0 0 0 0 0 0 0 0];但word embedding可能用維度為2的向量[0.4 0.5]就可以表示;解決了前邊説的one-hot的維度過大問題,還增大了信息熵,所以word embedding表示信息的效率要高於one-hot。
但詞向量這個名字沒有體現出它表示語義的本質,所以第一次看到很容易會不知所云;為了説明word embedding可以體現語義,這時候就可以搬出著名的queen、king、woman、man的栗子了。
(圖來自Andrew Ng deeplearning.ai)
上圖是通過訓練得出的詞向量,man=[-1 0.01 0.03 0.09],woman=[1 0.02 0.02 0.01],king=[-0.95 0.93 0.70 0.02],queen=[0.97 0.95 0.69 0.01]。
矩陣相減man-woman=[-2 -0.01 0.01 0.08],king-queen=[-1.92 -0.02 0.01 0.01],兩個差值非常相近,或者説兩個向量的夾角很小,可以理解為man和woman之間的關係與king和queen之間非常相近;而apple-orange=[-0.01 -0.01 0.05 -0.02]就和man-woman、king-queen相差很大。
很有意思的是最初word embedding其實是為了訓練NNLM(Neural Network Language Model)得到的副產品。
訓練語言模型會得到一個lookup table,這個lookup table有點像地下工作者用的密碼本;通過這個密碼本可以將one-hot向量轉換成更低維度的word embedding向量,可見詞向量實現的關鍵就是得到密碼本lookup table。
後來更高效的得到word embedding的模型之一就是word2Vec,word2Vec又有兩種模型,分別是CBOW和skip-gram;兩者都可以得到lookup table,具體模型和實現不在這裏展開。
word embedding可以作為判斷語義相似度的一種手段,但更多的是作為其他nlp任務的第一步。
實際中如果不是特殊領域(軍事、法律等)的詞典,word embedding可以用別人訓練好的,提高效率;所以word embedding也可以看做神經網絡預處理的一種。
另外説一下,word embedding有個最大的問題是不能處理多義詞。
舉個栗子“蘋果員工愛吃蘋果”,第一個蘋果是指蘋果公司,第二個是指水果;但對於word embedding來説二者只能對應一個向量(比如[0.1 -0.3]),在處理後續任務時只要是蘋果就對應成[0.1 -0.3],所以通過詞向量並不能區分出蘋果的不同詞義。
總結一下,詞的表達我覺得要知道:
- 為什麼需要詞表達。
- 幾個常見名詞(one-hot representation、distributed representation、word embedding、word2Vec)之間的關係。
- word embedding比one-hot強在哪裏。
- word embedding有什麼缺點。
本文由 @LCC 原創發佈於人人都是產品經理,未經許可,禁止轉載。
題圖來自Unsplash,基於CC0協議。