天天看點

一篇很好的參考文章:深度學習算法在自然語言進行中的一些心得

作者簡介:frank chung,htc research engineering blog編輯,專注于各種計算機技術的研究和探索。個人首頁:https://medium.com/@frank_chung

以下為譯文:

深度學習逐漸在nlp(自然語言處理)上發揮重要作用。 在此我就nlp問題的一些技術演變做一些簡單闡述。

<b>n元文法模型</b>

連續文本序列“to be or not to be”可以通過以下方式來模組化:

一進制文法(單個詞): to,be,or,not,to,be

二進制文法(兩個詞): to be, be or, or not, not to, to be

三元文法(三個詞): to be or, be or not, or not to, not to be

n元文法模型可以解決下一個詞預測的問題,例如,如果前面的詞是“to be or not to”,6元文法模型可以預測下一個詞的可能是“be”:

p(be|to be or not to) = c(to be or not to be) / c(to be or not to)

tf-idf表示了單詞的重要性。

一個單詞的詞頻(tf)是該單詞在文檔中出現的次數:

tf(“cow” in document) = c(“cow” in document)/c(all words in document)

一個單詞的檔案頻率是指包含這個單詞的檔案在所有檔案中占的數量

df(“cow”) = log(c(all documents)/c(documents contain “cow”))

例如,如果文檔1中的“cow”出現4次,并且文檔1包含100個詞,則文檔1上的單詞“cow”的詞語頻率為0.04。 如果“cow”存在于100個文檔中并且總共有10000個文檔,則“cow”的文檔頻率為log(10000/100)= 2。是以,tf-idf為0.04 * 2 = 0.08。

<b>潛在語義分析(lsa)</b>

lsa應用tf-idf來計算詞和文檔之間的關系。

一篇很好的參考文章:深度學習算法在自然語言進行中的一些心得

m個單詞和n個文檔

令x是一個矩陣,其中元素(i,j)意味着文檔j中的詞i的tf-idf。 然後我們可以通過矩陣乘積𝑿𝑿ᵀ獲得兩個詞的相關性,并通過矩陣積獲得兩個文檔的相關性。

<b>詞向量</b>

通過神經網絡,出現了一種共享矩陣c的概念,該矩陣c可以将每個詞投影到特征向量中,并且将該向量作為神經網絡的輸入來訓練主要任務。

一篇很好的參考文章:深度學習算法在自然語言進行中的一些心得

假設特征空間的維數為m,詞彙量為v,矩陣c為| v | * m,c(wt)的映射結果為1 * m向量

假設特征空間的次元為m,詞彙為v,則投影c為| v | * m矩陣。 輸入層包含n元文法模型中的n-1個之前的單詞,其由1到| v |編碼表示。 輸出層由| v |組成詞彙表中單詞的機率。

<b>詞嵌入</b>

word2vec是一個兩層神經網絡,可以提取一個詞的特征向量,這被稱為“詞嵌入”。word2vec應用cbow或skip-gram網絡來訓練投影矩陣,而不是通過訓練預測下一個單詞的方式。

一篇很好的參考文章:深度學習算法在自然語言進行中的一些心得

連續單詞包(cbow)通過将周圍單詞輸入到輸入層來預測中心詞的方式來訓練投影矩陣。 而skip-gram網絡則是通過應用中心詞來預測其周圍詞來訓練投影矩陣。 這兩種方式都可以用來訓練用于詞嵌入提取的投影矩陣。

<b>詞相似</b>

一篇很好的參考文章:深度學習算法在自然語言進行中的一些心得

與'sweden'相關的單詞

為了找出目标詞的相關詞,我們可以計算詞彙表中所有其他詞的餘弦相似性(距離)。

一篇很好的參考文章:深度學習算法在自然語言進行中的一些心得

<b>向量偏移</b>

一篇很好的參考文章:深度學習算法在自然語言進行中的一些心得

給出china-&gt;beijing, 找出japan-&gt;?

給定單詞a,綁定c的單詞向量,如果a:b = c:d這樣的關系,我們可以通過v𝚍=v𝐜+(v𝐛-v𝐚)找到結果d。 然後在詞彙表中找出的詞向量具有v𝐝的最小餘弦距離的單詞。

一篇很好的參考文章:深度學習算法在自然語言進行中的一些心得

通過向量偏移找到的相關單詞

<b>遞歸神經網絡</b>

無論cbow還是skip-gram模型都隻考慮相鄰的n個詞來訓練神經網絡。是以如果n變得非常大,則這兩種方式都可能行不通。 為了克服這個缺點,遞歸神經網絡(rnn)應運而生:

一篇很好的參考文章:深度學習算法在自然語言進行中的一些心得

傳統神經網絡

考慮上述用于訓練nlp問題的傳統神經網絡,每個詞被輸入到用于詞向量的投影矩陣w,并且由隐藏層r轉換為輸出s.在這種情況下,r的輸入大小固定為5 * m(假設詞向量中有m個特征)。 如果n被改變為6,則r不能被擴充。

一篇很好的參考文章:深度學習算法在自然語言進行中的一些心得

遞歸神經網絡

在遞歸神經網絡中,代替隐藏層r,我們一次隻訓練兩個向量與隐藏層a,并遞歸地合并兩個詞。 這樣,a的輸入大小始終為2 * m。

<b>循環神經網絡</b>

由于遞歸神經網絡不容易實作,是以就提出了循環神經網絡(rnn)來處理相同的問題。

一篇很好的參考文章:深度學習算法在自然語言進行中的一些心得

循環神經網絡的輸入隻有一個詞,并将隐藏層的輸出重定向到輸入的一部分。 整個輸入大小為| v | + m(m是前面單詞的特征數,v是詞彙表的大小)。

一篇很好的參考文章:深度學習算法在自然語言進行中的一些心得

上述示例是用于下一字元預測的示例。 “h”被回報到隐藏層以獲得其詞向量,并且該向量被回報到具有“e”的輸入的一部分。 在訓練所有詞之後,可以訓練隐藏層(投影矩陣)的參數。

<b></b>

<b>案例學習</b>

一篇很好的參考文章:深度學習算法在自然語言進行中的一些心得

表1. 不同方法訓練的詞向量的句法規則

一篇很好的參考文章:深度學習算法在自然語言進行中的一些心得

表2. 詞向量的不同的訓練方法的語義規律

表1和表2表明:1.無論在文法或語義實驗中,來自rnn的單詞向量都比lsa更準确。2. 如果在應用rnn時增加單詞向量的次元,則準确度會是以增加。

一篇很好的參考文章:深度學習算法在自然語言進行中的一些心得

表3 微軟的完成句子挑戰

表3表明,如果使ship-gram網絡将投影矩陣預訓練到已存在的rnn,則測試精度會變得更好。

一篇很好的參考文章:深度學習算法在自然語言進行中的一些心得

表4. cbow與skip-gram的對比

表4表明skip-gram訓練結果比cbow的好。

<b>引用</b>

<a href="https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?usercode=lwju78qa&amp;utm_source=lwju78qa">數十款阿裡雲産品限時折扣中,趕緊點選領劵開始雲上實踐吧!</a>

本文由北郵@愛可可-愛生活 老師推薦,阿裡雲雲栖社群組織翻譯。

文章原标題《notes for deep learning on nlp》,作者:frank chung,譯者:friday012

繼續閱讀