1. 程式人生 > >機器學習--如何將NLP應用到深度學習(3)

機器學習--如何將NLP應用到深度學習(3)

關系 http 命令 構建 time 原理 最簡 gcc 復雜

數據收集以後,我們下面接著要幹的事情是如何將文本轉換為神經網絡能夠識別的東西。

詞向量

作為自然語言,只有被數學化才能夠被計算機認識和計算。數學化的方法有很多,最簡單的方法是為每個詞分配一個編號,這種方法已經有多種應用,但是依然存在一個缺點:不能表示詞與詞的關系。

詞向量是這樣的一種向量[2.1, -3.31, 83.37, 93.0, -18.2, ……],每一個詞對應一個向量,詞義相近的詞,他們的詞向量距離也會越近(歐氏距離、夾角余弦)

詞向量有一個優點,就是維度一般較低,一般是50維或100維,這樣可以避免維度災難,也更容易使用深度學習

詞向量的原理?

詞向量的訓練是一種無監督學習,也就是沒有標註數據,給我

n篇文章,我就可以訓練出詞向量。

基於三層神經網絡構建n-gram語言模型(詞向量順帶著就算出來了)的基本思路:

技術分享

最下面的w是詞,其上面的C(w)是詞向量,詞向量一層也就是神經網絡的輸入層(第一層),這個輸入層是一個(n-1)×m的矩陣,其中n-1是詞向量數目,m是詞向量維度

第二層(隱藏層)是就是普通的神經網絡,以H為權重,以tanh為激活函數

第三層(輸出層)|V|個節點,|V|就是詞表的大小,輸出以U為權重,以softmax作為激活函數以實現歸一化,最終就是輸出可能是某個詞的概率。

另外,神經網絡中有一個技巧就是增加一個從輸入層到輸出層的直連邊(線性變換

),這樣可以提升模型效果,這個變換矩陣設為W

假設C(w)就是輸入的x,那麽y的計算公式就是y = b + Wx + Utanh(d+Hx)

這個模型裏面需要訓練的有這麽幾個變量:CHUW。利用梯度下降法訓練之後得出的C就是生成詞向量所用的矩陣,C(w)表示的就是我們需要的詞向量

怎樣得到我們需要的詞向量?

感覺別個寫的很復雜的樣子呀,不會怎麽辦,有個簡單有效的解決方案就是googleword2vec工具,我們可以把需要訓練的樣本數據通過word2vec轉換為二進制集合。

環境準備:

1centos7.0

2gcc

3python-jieba

4locale zh_CN.UTF-8

第一步 準備工作

咱們要準備一個分好詞的文本文件,用jieba分詞即可。

命名為train.txt

技術分享

接著下載word2vec工具,這個c寫的,需要編譯,我已經編譯完成,可以直接使用。編譯後:

技術分享

第二步 訓練詞向量

訓練命令:

./word2vec -train train.txt -output vectors.bin -cbow 0 -size 200 -window 5 -negative 0 -hs 1 -sample 1e-3 -thread 12 -binary 1

技術分享

訓練成功後會生成一個vectors.bin文件,這個就是訓練好的詞向量的二進制文件

第三步 測試,利用詞向量尋找近義詞

技術分享

如上圖,則說明我們的詞向量訓練成功。

技術分享

機器學習--如何將NLP應用到深度學習(3)