語言模型及詞向量何為語言模型?這是一個要貫穿整篇文章的問題。所謂語言模型,就是判斷一句話是不是人話的模型,也就判斷出是>的模型。當然,計算機并不認識周杰倫,它只知道0和1,所以我們讓模型進行判斷時,需要將豐富的文字轉換成冷冰冰的數字,這樣計算機才能幫助我們進行計算,這也就是詞向量的由來和存在的意義。 一個好的語言模型就是判斷一句人話的概率盡可能的高,判斷非人話的概率盡可能的低。那什么是一個好的詞向量呢?舉個例子,比如當我們人類看到‘woman’和‘female’時,會覺得這兩個詞應該是相似的意思,那么一個好的詞向量表示就是讓計算機通過計算這兩個詞向量,得出這兩個詞相似的結論。一般就是讓計算機通過計算兩個向量之間的距離來進行判斷。所以如何讓計算機看到的詞向量和我們看到的詞具有相同的意義,這是研究詞向量的究極目標。 語言模型往往需要借助詞向量進行計算,一個好的語言模型的誕生往往會伴隨著質量較高的詞向量的出現,因此詞向量往往是語言模型的副產品。當然,優秀的事務往往不是一蹴而就的,語言模型和詞向量的發展也經歷了多個階段。從詞向量的角度來簡單分類的話,大致可以分為one-hot表示和分布式表示兩個大階段,下面將從這個角度進行介紹。 一、one-hot表示one-hot的想法簡單粗暴,目的單純,在我們的大腦和計算機之間架起了第一道橋梁。one-hot將每一個詞表示成一個固定維度的向量,維度大小是詞表大小,向量中單詞所在位置為1,其他位置為0。舉個栗子,假設我們的詞庫里只有如下7個詞 my,on,the,bank,river,woman,female 那么bank這個單詞就可以表示為[0,0.0,1,0,0,0],on可以表示為[0,1,0,0,0,0,0],以此類推。 但是想法過于簡單總是會出問題的,one-hot存在的兩個明顯問題:維度災難和語義鴻溝。 所謂維度災難就是one-hot的向量維度是和詞庫大小一致的,一般我們的詞庫會很大,比如當我們的詞庫里有100000個詞,那么一個詞向量的維度就是,這就導致one-hot表征的向量維度很大,使得數據樣本稀疏,距離計算困難,造成維度災難。當維度災難發生時,一個樣本的特征就會過于多,導致模型學習過程中極其容易發生過擬合。 所謂語義鴻溝的問題是因為one-hot生成的詞向量都是彼此正交的,體現不出任何語義上的聯系。比如on表示為[0,1,0,0,0,0,0],woman表示為[0,0.0,0,0,1,0],female表示為[0,0.0,0,0,0,1],on和woman這兩個向量相乘結果是0,female和woman這兩個向量相乘也是0,所以無法表現出on和woman不相似,female和woman相似這種語義上的聯系。 二、分布式表示鑒于one-hot表示的缺點,我們希望能有低維稠密的詞向量出現,同時這些向量之間能夠存在語義上的聯系,所以分布式表示就帶著歷史使命出現了。分布式表示描述的是將文本分散嵌入到另一個空間,一般是將高維映射到低維稠密的向量空間。分布式表示依據的理論是Harris在1954年提出的分布式假說,即:上下文相似的詞,其語義也相似。 2.1 基于SVD這一類方法的一般操作是將共現矩陣進行SVD分解,即,然后取分解后的的作為詞向量矩陣(一般取U的子矩陣)。所以啥是共現矩陣,啥是SVD呢? 2.1.1 共現矩陣共現矩陣一般有兩種,第一種叫Window based Co-occurrence Matrix,是通過統計指定窗口大小的單詞共現次數構成的矩陣,舉個栗子,假設我們的語料庫中只有三個句子
選取窗口大小為3,那么構成的共現矩陣如下圖所示 第二種叫Word-Document Matrix,是將單詞在文檔中出現的頻率構成矩陣,再舉個栗子,假設我們一共有三篇文檔 document1: I like deep learning. I enjoy deep learning document2: I like NLP. document3: I enjoy flying. 那么構成的共現矩陣如下圖所示 2.1.2 SVD前面提到,SVD是將矩陣進行分解,,其中是的矩陣,是的矩陣,是的矩陣,是的矩陣,如何求解得到這三個矩陣呢? 首先回顧一下特征值和特征向量的定義: 其中,A是的實對稱矩陣,是一個維向量,則稱是一個特征值,是矩陣的特征值對應的一個特征向量。如果我們求出了個特征值及其對應的特征向量,如果這個特征向量線性無關,那么矩陣就可以表示為 其中,是有個特征向量組成的的矩陣,是由個特征值為主對角線的維矩陣。一般會將進行標準化,即,,,也就是得到了,那么就可以表示為 需要注意的是,直接進行特征分解的矩陣是方陣,而在SVD中的矩陣不一定是方陣,這時需要再做一些推導。 由于,所以 因為是一個的方陣,所以通過求解的特征向量,就可以得到矩陣。同理,通過求解的特征向量,就可以得到矩陣,通過對的特征值矩陣求平方根,就可以得到矩陣的奇異值矩陣\Sigma$。至此,我們得到了矩陣A的分解。 值得注意的是,奇異值是從大到小排列的,通常前10%甚至1%的奇異值的和就占了所有奇異值和的99%以上,奇異值在集合意義上代表了特征的權重,所以我們一般不會選擇將整個矩陣作為詞向量矩陣,而是選擇前k維,最終的詞向量表大小就是,是詞表大小,是詞向量維度。 基于SVD的方法得到了稠密的詞向量,相比于之前的one-hot有了一定提升,能夠表現單詞之間一定的語義關系,但是這種方法也存在很多問題:
2.2 基于語言模型基于語言模型的方法拋棄了共現矩陣這種問題重重的東西,轉而通過構建語言模型來產生詞向量。so,啥是語言模型呢? 標準定義:對于語言序列,語言模型就是計算該序列出現的概率,即 通俗理解:構建一個模型,使得看起來像人話的句子序列出現的概率大,非人話的句子序列出現的概率小,也就是> 語言模型一般包括統計語言模型和神經網絡語言模型,統計語言模型一般就是指N-gram語言模型,神經網絡語言模型包括NNLM、Word2vec等。 2.2.1 N-gramN-gram就是一個語言模型,其目的并非產生詞向量,一般用于判斷語句是否合理或者搜索sug推薦,這里簡單一提。 前面說了,語言模型計算一句人話的概率,也就是,利用鏈式法則可知 直接計算上式計算量太大,所以N-gram模型引入馬爾科夫假設,即當前詞出現的概率只與其前n-1個詞有關 當語料足夠大時 真正常用的N-gram的n不會超過3,一般為n=2。當n=2時,利用上式計算一句話的概率 2.2.2 NNLM使用語言模型產生詞向量的一個里程碑論文是Bengio在2003年提出的NNLM,該模型通過使用神經網絡訓練得到了一個語言模型,同時產生了副產品詞向量。模型的總體架構如下圖所示,表達的思想是利用前n-1個詞去預測第n個詞的概率,所以這里的輸入是n-1個詞,輸出是一個維度為詞表大小的向量,代表每個詞出現的概率。 這個結構在現在看起來是很簡單
優化結束后,得到了一個語言模型,同時得到了詞向量矩陣。 NNLM模型在獲取詞向量上的工作是奠基性的,但是其模型訓練的復雜度還是過高,后續很多算法都是在NNLM的基礎上進行改進,比如耳熟能詳的Word2vec對其訓練的復雜度進行了針對性的改進。 前面所講的都是一些開胃小菜,建立該系列文章的核心概念--詞向量。接下來我們將會對經典算法Word2vec單獨拿出來進行詳細的原理介紹~ 三、word2vecWord2vec是谷歌團隊在2013年開源推出的一個專門用于獲取詞向量的工具包,其核心算法是對NNLM運算量最大的那部分進行了效率上的改進,讓我們來一探究竟。 3.1 Word2vec原理解析word2vec有兩種模型--CBOW和Skip-gram,這兩個模型目的都是通過訓練語言模型任務,得到詞向量。CBOW的語言模型任務是給定上下文預測當前詞,Skip-gram的語言模型任務是根據當前詞預測其上下文。 Word2vec還提供了兩種框架--Hierarchical Softmax和Negative-Sampling,所以word2vec有四種實現方式,下面將對其原理進行介紹。 3.1.1 CBOW3.1.1.1 結構CBOW的核心思想就是利用給定上下文,預測當前詞,其結構表示為 我們知道基于神經網絡的語言模型的目標函數通常是對數似然函數,這里CBOW的目標函數應該就是 其中是單詞的上下文,是詞典。所以我們關注的重點應該就是的構造上,NNLM和Word2vec的本質區別也是在于該條件概率函數的構造方式不同。 3.1.1.2 原理3.1.1.2.1 基于Hierarchical SoftmaxCBOW模型的訓練任務是在給定上下文,預測當前詞。基于Hierarchical Softmax的CBOW結構相當于在NNLM上的改進,如下圖所示 CBOW模型一共是有三層,分別是輸入層(input layer),投影層(projection layer)和輸出層(output layer)。 輸入層:輸入是當前詞的上下文,共個詞向量 投影層:投影層將個詞向量進行累加,得到,即,這里不包含當前詞的向量表示 輸出層:輸出是一個用語料中出現的詞為葉子結點構建的Huffman樹,結點的權值是各詞在語料中出現的次數。圖中的Huffman樹共個結點,對應語料中的個詞,非葉子結點個,即圖中標黃的。 基于Hierarchical Softmax的CBOW模型和之前介紹的NNLM的主要區別:
之前說過,NNLM的主要運算量就是在于隱藏層和輸出層的softmax的計算量,基于Hierarchical Softmax的方法通過對這些關鍵點進行了針對性的優化,去掉了隱藏層,更改了輸出結構,大大提升了運算效率。下面介紹基于Hierarchical Softmax的CBOW是如何利用樹結構訓練得到詞向量的。 對于huffman的某個葉子結點,假設該結點對應詞典中的詞,定義以下符號
下面通過一個示例說明運算原理,如下圖所示,考慮當前詞=“足球”,那么圖中的紅色邊串起來的5個結點就構成路徑,其長度,是路徑的5個結點,其中對應的是根結點,分別是1,0,0,1,即當前詞“足球”的Huffman編碼為1001,分別是路徑上4個非葉子結點對應的向量。 所以,講了這么多,我們的重點究竟是怎么構建的呢? 我們知道詞庫里的每一個詞都可以被表示為一個Huffman編碼,如果把Huffman樹每一個結點都看成一次二分類,那么這個語言模型的任務就變成輸入上下文,使得當前詞的Huffman編碼對應的路徑的概率最大。這里約定將一個結點進行二分類時,分到左邊為負類,分到右邊為正類(主要為了和源碼對應),即 由前面介紹的邏輯回歸可以知道,結點分為正類的概率是 所以分為負類的概率就是。這里的就是當前詞的上下文通過求和得到的,就是每一個結點的,是待訓練參數。 舉個栗子,還是前面說的當前詞是“足球”,從根結點出發到達這個詞一共需要經過4次二分類
所以對于當前詞“足球”,我們的條件概率函數為 由上面的小例子,我們可以擴展出一般的條件概率公式 其中 寫成整體表達式 所以我們要優化的目標函數就是 令 使用隨機梯度上升法進行目標函數優化,下面推導一下梯度的計算 所以,更新參數時 其中,是學習率。 同理可以計算得到 我們最終想優化的向量是詞表中的每一個詞向量,而是當前詞上下文的累加,那么該如何更新每個詞的向量表示呢?word2vec中的做法很簡單直接,就是將的梯度變化等效于每個詞的梯度變化,即 至此,基于Hierarchical Softmax的CBOW模型的原理就介紹完了,通過不斷訓練就可以得到我們想要的詞向量表。 3.1.1.2.2 基于Negative-Sampling基于Negative-Sampling(負采樣,NEG)的方法的目的是進一步提升訓練速度,同時改善詞向量的質量。NEG不再使用相對復雜的huffman樹,而是使用簡單的隨機負采樣,大幅度提升性能。 CBOW是利用上下文預測當前詞,那么將當前詞替換為其他詞時,就構成了一個負樣本。 書面一點,對于給定的,詞就是一個正樣本,其他詞就是負樣本,假設我們通過負采樣方法選取好一個關于的負樣本子集。得到樣本集后,我們的目標是最大化 其中 所以 這里,還是代表上下文的詞向量之和,表示詞對應的一個待訓練輔助向量。直觀上看,這就是最大化的同時,最小化,其中,也就是最大化正樣本的概率的同時最小化負樣本的概率。 對于給定的語料庫C,最終的目標函數是 為了推導梯度更新的過程,令 所以 同理 3.1.2 Skip-gram3.1.2.1 結構Skip-gram的核心思想就是利用給定的當前詞,預測上下文,其結構表示為 我們知道基于神經網絡的語言模型的目標函數通常是對數似然函數,這里Skip-gram的目標函數應該就是 其中是單詞的上下文,是詞典。所以我們關注的重點應該就是的構造上。 3.1.2.2 原理3.1.2.2.1 基于Hierarchical Softmax前面說了,Skip-gram的語言模型任務是根據當前詞預測其上下文,原理上和CBOW很相似,基于Hierarchical Softmax的Skip-gram的結構如下圖所示 輸入層:中心詞的詞向量 投影層:恒等投影,只是為了和CBOW模型進行對稱類比 輸出層:和CBOW一樣,是一顆huffman樹 Skip-gram的重點是條件概率函數的構造,SKip-gram中對于該條件概率函數的定義為 所以,Skip-gram的目標函數為 令 則 所以 同理 3.1.2.2.2 基于 Negative-Sampling基于負采樣的skip-gram模型基本與前面基于負采樣的CBOW推導的類似,目標函數為 也就是當給定當前詞時,希望其上下文出現的概率最大,其中 這里代表的就是上下文中某個詞出現的概率,表示處理詞時生成的負樣本子集,是輸入的當前詞,是待訓練的輔助向量。 所以 可以看出來,這里需要對上下文中的每一個詞做一次負采樣。實際上,作者在源碼實現過程中并沒有這么做,而是針對進行了次負采樣,這樣依賴,我們的目標函數變成 其中 這里表示處理詞時生成的負采樣子集。 最終的目標函數變成 考慮梯度更新,令 所以 同理 3.2 Word2vec不可忽視的問題Word2vec算法雖然在前些年取得了良好的效果,但是也有不足之處,其中最不可忽視的問題就是一詞多義的問題。Word2vec中最后對每一個詞生成一個固定的向量表示,那么對于相同單詞有多個含義時,就不能很好的解決。比如bank,既有銀行的意思,也有岸邊的意思,當算法的結果只有一個固定向量對其進行表征時,必然導致這個詞的表征不夠準確。 既然存在問題,那就存在解決問題的方法,現在比較火的預訓練相關的算法就解決了這個問題。具體咋回事呢?下一篇文章見~ 作者介紹
下期精彩【語言模型系列】原理篇二:從ELMo到ALBERT 招賢納士 |
|