標籤:

機器學習系列-word2vec篇

作者:向日葵

開篇

深度學習方向當下如火如荼,就差跑進樓下大媽的聊天內容了。深度學習的寶藏很多,一個小領域的一段小代碼,都可以發出璀璨的光芒。如果你也剛剛踏入這方向,一開始難免有一些彷徨,但慢慢會有,清晨入古寺 初日照高林,那種博大的體驗。

word2vec就是這樣的一小段代碼,如果你對word2vec的代碼了如指掌,那你可以直接return。這是一篇關於word2vec介紹的文章,讀完以後你會欣喜的發現自己會靈活的使用word2vec,但你也可能會鬱悶,因為還是會覺得像是盲人摸象一樣,完全對深度學習沒有一點頭緒。沒關係,誰不是這樣一點一滴的積累起來的呢。

從需求入門

美國大選剛剛落幕,川普勝出。假設反過來想,給你一個川普的詞,你會聯想到哪些?正常的話,應該是美國、大選、希拉里、奧巴馬;也就是相似詞語的選取了。對於相識詞的選取,演算法非常的多。也有許多人用了很簡單的辦法就能求得兩樣東西的相似性,比如購物車裡物品的相似度,最簡單的辦法就是看看同時買了這樣東西的用戶還同時買了什麼,用簡單的數據結構就很容易實現這樣的一個演算法。這種演算法很簡單也很方便,但就是這種簡單而使他忽略了很多的問題。例如時間順序,下面會有提到。

還是回歸到相識度的問題。歸結到數學問題上,最經常用的是把每個詞都歸結到一個坐標系下,再用距離公式(如:皮爾遜公式)可方便的求出各個詞語之間的相識度。

這也是word2vec的方法,word2vec 通過訓練,可以把對文本內容的處理簡化為 K 維向量空間中的向量運算,而向量空間上的相似度可以用來表示文本語義上的相似度。 如圖,下面是有五維向量空間的單詞:

演算法的關鍵步驟就是如何求出詞語的向量空間。

word2vec演算法介紹

word2vec是2013年Google中開源的一款工具。2013年神經網路的各種演算法都已經相當的成熟了,word2vec核心是神經網路的方法,採用 CBOW(Continuous Bag-Of-Words,即連續的詞袋模型)和 Skip-Gram 兩種模型,將詞語映像到同一坐標系,得出數值向量的高效工具。

一般來說演算法採用神經網路的話,要注意他的輸入和輸出。因為使用神經網路進行訓練需要有輸入和輸出,輸入通過神經網路後,通過和輸入對比,進行神經網路的重新調整,達到訓練網路的目的。抓住輸入輸出就能夠很好的理解神經網路的演算法過程。

語言模型採用神經網路,就要判斷什麼東西要作為輸入,什麼東西要作為輸出。這是演算法可以創新的地方,語言模型有許多種,大部分的原理也是採用根據上下文,來推測這個詞的概率。

word2vec輸入輸出也算是鬼斧神功,演算法跟哈夫曼樹有關係。哈夫曼樹可以比較準確的表達這邊文章的結構。

a,b,c,d分別表示不同詞,並附加找個詞出現的頻率,這些詞就能有自己的路徑和編碼。

關於哈夫曼樹就不仔細詳細說明了,他是一種壓縮演算法,能很好的保持一篇文章的特性。

訓練的過程是,把每一段落取出來,每個詞都通過哈夫曼樹對應的路徑和編碼。編碼是(0和1),作為神經網路的輸出,每個路徑初始化一個給定維數的向量,跟自己段落中的每個詞作為輸入,進行反向的迭代,就可以訓練出參數。

這就是演算法的整個過程。

快速入門

  1. 代碼下載: word2vec.googlecode.com
  2. 針對個人需求修改 makefile 文件,比如作者使用的 linux 系統就需要把 makefile 編譯選項中的-Ofast 要更改為-O2 或者-g(調試時用), 同時刪除編譯器無法辨認的-march=native 和-Wno-unused-result 選項。 有些系統可能還需要修改相關的 c 語言頭文件,具體網上搜搜應該可以解決。
  3. 運行「 make」編譯 word2vec 工具。

  4. 運行 demo 腳本: ./demo-word.sh

    demo-word.sh主要工作為:

  • 1)編譯( make)
  • 2)下載訓練數據 text8,如果不存在。 text8 中為一些空格隔開的英文單詞,但不含標點符號,一共有 1600 多萬個單詞。
  • 3)訓練,大概一個小時左右,取決於機器配置
  • 4)調用distance,查找最近的詞

python版本的命令如下:

Python的命令為python word2vec.py -train tx -model vb -cbow 0 -negative 0 -dim 5

應用

word2vec是根據文章中每個詞的上下關係,把每個詞的關係映射到同一坐標系下,構成了一個大矩陣,矩陣下反映了每個詞的關係。這些詞的關係是通過上下文相關得出來的,它具有前後序列性,而Word2vec同時採用了哈夫曼的壓縮演算法,對是一些熱門詞進行了很好的降權處理。因此他在做一些相似詞,或者詞語的擴展都有很好的效果。

這種相識性還可以用在,物品的推薦上,根據用戶購買物品的順序,把每個物品當成一個單詞,相當於一門外語了,誰也看不懂而已,但裡面放映了上下文的關係,這個是很重要的,也是我們一開頭那種普通演算法無法做到的,同時對一些熱門的物品自然有降權的處理,非常的方便。

word2vec自然規避了兩大問題:詞語的次序和熱門詞語的降權處理。


推薦閱讀:

機器學習43條軍規:解密谷歌機器學習工程最佳實踐(上)
使用「對象檢測」實現智能結賬體驗
最簡單的 GAN 解釋 (生成對抗網路)
【翻譯 - CS229】對於機器學習應用的建議
CS 294: Deep Reinforcement Learning(11)

TAG:机器学习 |