做者|Devyanshu Shukla
編譯|Flin
來源|mediumgit
在這篇文章中,咱們將討論關於語言模型(LM)的全部內容github
NLP中的語言模型是計算句子(單詞序列)的機率或序列中下一個單詞的機率的模型。即api
句子的機率:
網絡
下一個單詞的機率:
機器學習
語言模型經常與單詞嵌入混淆。主要的區別在於,在語言模型中,單詞順序很重要,由於它試圖捕捉單詞之間的上下文,而在單詞嵌入的狀況下,只捕捉語義類似度(https://en.wikipedia.org/wiki... ,由於它是經過預測窗口中的單詞來訓練的,而無論順序如何。ide
語言是NLP的主要組成部分,在不少地方都有使用,好比,函數
有不一樣的方法來生成語言模型,讓咱們逐一查看它們。post
N-grams(https://en.wikipedia.org/wiki... 是給定語料庫中N個單詞的序列。對於「I like pizza very much」這句話,bigram將是 ‘I like’, ‘like pizza’, ‘pizza very’ 和 ‘very much’。學習
比方說,咱們有一個句子‘students opened their’,咱們想找到它的下一個單詞,好比w。使用4-gram,咱們能夠用下面的方程來表示上面的問題,這個方程返回‘w’是下一個單詞的機率。測試
這裏,count(X)表示X出如今語料庫中的時間。
對於咱們的LM,咱們必須計算並存儲整個語料庫中的全部n-grams,隨着語料庫愈來愈大,這須要大量的存儲空間。假設,咱們的LM給出了一個單詞列表,以及它們成爲下一個單詞的機率,如今,咱們能夠抽樣從給定列表中選擇一個單詞。
能夠看出,對於一個N-gram,下一個單詞老是取決於句子的最後N-1個單詞。所以,當咱們添加更多的單詞時,句子的上下文和依賴關係就會丟失。
「Today the price of gold per ton,while production of shoe lasts and shoe industry,the bank intervened just after it considered and rejected an IMF demand to rebuild depleted European stocks, sept 30th end primary 76 cts a share.’’
上面的文字是用商業和金融新聞語料庫中的N-grams(N=3)生成的,它符合語法知識但不連貫,由於咱們只考慮最後兩個單詞來預測下一個單詞。
這種方法也容易受到稀疏性問題的影響,當單詞「w」在給定的句子以後從未出現,就會出現稀疏性問題,所以「w」的機率始終爲0。
爲了使用神經網絡生成LM,咱們考慮使用一個固定的窗口,即每一次的單詞數都固定。以下圖所示,而後以獨熱向量的形式表示單詞,並與詞嵌入向量相乘,鏈接以建立矩陣e。而後將該矩陣展平並經過隱藏層。最後使用softmax函數輸出。
該方法解決了稀疏性問題,與N-grams相比不須要太多存儲空間,但也存在一些自身的問題。因爲神經網絡使用固定的輸入窗口,所以由該模型生成的文本長度是固定的,所以使用起來不太靈活。隨着窗口大小的增大,模型的大小也隨之增大,從而變得效率低下。
爲了解決固定輸入長度問題,咱們使用遞歸神經網絡(RNNs)。正如咱們在N-grams方法中看到的,N-grams方法缺乏長期依賴。若是咱們使用vanilla-RNNs(https://medium.com/@apiltaman...) ,因爲RNNs中的梯度消失,咱們仍然會有相同的長期依賴問題。然而,一種稱爲LSTM的特殊RNN解決了上述問題。
LSTMs可以學習長期依賴關係。它們是由Hochreiter&Schmidhuber(1997)(http://www.bioinf.jku.at/publ...) 提出的,並在隨後的工做中被許多人改進和推廣。
全部的RNNs都是由一系列重複的神經網絡模塊組成的。在標準RNN中,這個重複模塊將有一個很是簡單的結構,好比一個單一的tanh層。在LSTMs中,重複模塊具備不一樣的結構。不是隻有一個神經網絡層,而是有四個,以一種很是特殊的方式相互做用。請在此處詳細閱讀LSTMs(https://colah.github.io/posts...。
咱們須要對模型進行評估,以改進它或將其與其餘模型進行比較。困惑度被用來評估語言模型。它是一種測量機率模型預測測試數據的能力。
咱們衡量咱們的模型有多低的困惑度,低困惑度意味着模型生成了連貫、結構良好的句子,而高困惑度則表示不連貫和混亂的句子。所以,低困惑度是好的,高困惑度是壞的。
從數學上講,困惑度是測試集的反機率,由單詞數規範化。
LM的困惑度:
語言模型是NLP的重要組成部分,能夠用於許多NLP任務。咱們看到了如何建立本身的語言模型,以及每種方法都會出現什麼問題。咱們得出的結論是,LSTM是製做語言模型的最佳方法,由於它考慮並處理了長期依賴問題。
原文連接:https://medium.com/@devyanshu...
歡迎關注磐創AI博客站:
http://panchuang.net/
sklearn機器學習中文官方文檔:
http://sklearn123.com/
歡迎關注磐創博客資源彙總站:
http://docs.panchuang.net/