AIPM要知道的NLP知識(shí)(1):詞的表達(dá)
編輯導(dǎo)語:NLP為Neuro-Linguistic Programming的縮寫,是研究思維、語言和行為中的規(guī)律;這是一種對(duì)優(yōu)秀(excellence)進(jìn)行編碼和復(fù)制的方式,它能使你不斷達(dá)到你和你的公司想要的結(jié)果;本文是作者關(guān)于NLP知識(shí)中詞的表達(dá)的分享,我們一起來看一下。
個(gè)人認(rèn)為pm懂一點(diǎn)技術(shù)好處是大大的有。
總結(jié)這個(gè)系列,把NLP相關(guān)的常見模型進(jìn)行了梳理,分為詞的表達(dá)、RNN、seq2seq、transformer和bert五個(gè)部分。
基本的想法是重點(diǎn)理解模型是什么(what)、為什么要用這種模型(why)以及哪些場(chǎng)景中可以用這種模型(where),至于如何實(shí)現(xiàn)模型(how)可以留給RD小哥哥們。
一、詞的表達(dá)
要知道計(jì)算機(jī)是看不懂人類語言的,要想讓機(jī)器理解語言、實(shí)現(xiàn)自然語言處理,第一步就是把自然語言轉(zhuǎn)化成計(jì)算機(jī)語言——數(shù)字。
由于詞是人類語言表達(dá)時(shí)的一種基本單位(當(dāng)然更細(xì)的單位是字或者字母),NLP處理的時(shí)候很自然的想要用一組特定的數(shù)字代表一個(gè)特定的詞,這就是詞的表達(dá),把這些表示詞的數(shù)字連起來就可以表達(dá)一句話、一篇文章了。
這一part里有很多常見的名詞,distributed representation、word embedding、word2vec等等,它們的關(guān)系大概是這樣的:
1. one-hot representation v.s. distributed representation
表達(dá)方式,我覺得就是自然語言到機(jī)器語言怎么轉(zhuǎn)化的一套規(guī)則;比如“我”這個(gè)詞轉(zhuǎn)化到機(jī)器語言應(yīng)該用“1”還是“100”表示呢?而且機(jī)器語言中代表“我”的這個(gè)數(shù)還不能和代表其他詞的數(shù)重復(fù)吧,必須是一個(gè)唯一的id。
順著id這個(gè)思路,假設(shè)我們的詞典收錄了10個(gè)詞,那么我們就給詞典里的每一個(gè)詞分配一個(gè)唯一的id;詞表示的時(shí)候用一個(gè)和字典一樣長(zhǎng)的向量表示,這個(gè)向量里只有id這一位為1,其他位都為0;比如說abandon這個(gè)詞的id是1,那么就表示成abandon=[1 0 0 0 0 0 0 0 0 0],這就是one-hot representation。
這種表示好理解,但是也有問題:
問題一:向量會(huì)隨著字典變大而變大。
很明顯如果我的詞典有100000個(gè)詞的話,每一個(gè)詞都要用長(zhǎng)度100000的向量表示;如果一句話有20個(gè)詞,那么就是一個(gè)100000*20的矩陣了,按這種操作基本就走遠(yuǎn)了。
另外一個(gè)問題是這種表示不能體現(xiàn)語義的相關(guān)性。
比如香蕉和蘋果在人看來是非常類似的,但是用one-hot表示香蕉可能是[1,0,0,0,0],蘋果可能是[0,0,1,0,0],之間沒有任何相關(guān)性;這樣的話如果我們用“我吃了香蕉”訓(xùn)練模型,結(jié)果模型可能并不能理解“我吃了蘋果”,泛化能力就很差。
于是機(jī)智的大佬們提出了一個(gè)假說,就是distributed hypothesis:詞的語義由其上下文決定。
基于這種假說生成的表示就叫做distributed representation,用在詞表示時(shí)也就是word embedding,中文名有詞向量、詞嵌入;所以distributed representation≈word embedding,因?yàn)楝F(xiàn)階段主流的nlp處理大都是基于詞的,當(dāng)然也有對(duì)字、句子、甚至文章進(jìn)行embedding的,所以不能說完全完全相等。
至于具體如何基于這種假說實(shí)現(xiàn)詞表示,根據(jù)模型不同可以分成基于矩陣(GloVe)、基于聚類、基于神經(jīng)網(wǎng)絡(luò)(NNLM、Word2Vec等)的方法。
2. word embedding
個(gè)人理解,從字面意思上看word embedding就是把一個(gè)one-hot這樣的稀疏矩陣映射成一個(gè)更稠密的矩陣;比如上邊栗子中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。
但詞向量這個(gè)名字沒有體現(xiàn)出它表示語義的本質(zhì),所以第一次看到很容易會(huì)不知所云;為了說明word embedding可以體現(xiàn)語義,這時(shí)候就可以搬出著名的queen、king、woman、man的栗子了。
(圖來自Andrew Ng deeplearning.ai)
上圖是通過訓(xùn)練得出的詞向量,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],兩個(gè)差值非常相近,或者說兩個(gè)向量的夾角很小,可以理解為man和woman之間的關(guān)系與king和queen之間非常相近;而apple-orange=[-0.01 -0.01 0.05 -0.02]就和man-woman、king-queen相差很大。
很有意思的是最初word embedding其實(shí)是為了訓(xùn)練NNLM(Neural Network Language Model)得到的副產(chǎn)品。
訓(xùn)練語言模型會(huì)得到一個(gè)lookup table,這個(gè)lookup table有點(diǎn)像地下工作者用的密碼本;通過這個(gè)密碼本可以將one-hot向量轉(zhuǎn)換成更低維度的word embedding向量,可見詞向量實(shí)現(xiàn)的關(guān)鍵就是得到密碼本lookup table。
后來更高效的得到word embedding的模型之一就是word2Vec,word2Vec又有兩種模型,分別是CBOW和skip-gram;兩者都可以得到lookup table,具體模型和實(shí)現(xiàn)不在這里展開。
word embedding可以作為判斷語義相似度的一種手段,但更多的是作為其他nlp任務(wù)的第一步。
實(shí)際中如果不是特殊領(lǐng)域(軍事、法律等)的詞典,word embedding可以用別人訓(xùn)練好的,提高效率;所以word embedding也可以看做神經(jīng)網(wǎng)絡(luò)預(yù)處理的一種。
另外說一下,word embedding有個(gè)最大的問題是不能處理多義詞。
舉個(gè)栗子“蘋果員工愛吃蘋果”,第一個(gè)蘋果是指蘋果公司,第二個(gè)是指水果;但對(duì)于word embedding來說二者只能對(duì)應(yīng)一個(gè)向量(比如[0.1 -0.3]),在處理后續(xù)任務(wù)時(shí)只要是蘋果就對(duì)應(yīng)成[0.1 -0.3],所以通過詞向量并不能區(qū)分出蘋果的不同詞義。
總結(jié)一下,詞的表達(dá)我覺得要知道:
- 為什么需要詞表達(dá)。
- 幾個(gè)常見名詞(one-hot representation、distributed representation、word embedding、word2Vec)之間的關(guān)系。
- word embedding比one-hot強(qiáng)在哪里。
- word embedding有什么缺點(diǎn)。
本文由 @LCC 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)許可,禁止轉(zhuǎn)載。
題圖來自Unsplash,基于CC0協(xié)議。
特地注冊(cè)賬號(hào)來好評(píng)!這個(gè)解釋對(duì)入門來說太友好了,順便問下有什么入門書籍可以推薦的嗎
感謝~可以看看吳恩達(dá)的在線課程講RNN那一節(jié)
多話不說,感謝~~
技術(shù)的活pm干的那么起勁干嘛
那個(gè)。。。NLP=natural language processing。。。