【NLP实战】tensorflow词向量训练实战
實戰是學習一門技術最好的方式,也是深入了解一門技術唯一的方式。因此,NLP專欄計劃推出一個實戰專欄,讓有興趣的同學在看文章之余也可以自己動手試一試。
本篇介紹自然語言處理中最基礎的詞向量的訓練。
作者&編輯 | 小Dream哥
1?語料準備?
用于詞向量訓練的語料應該是已經分好詞的語料,如下所示:
2 詞向量訓練
(1) 讀取語料數據
讀取數據的過程很簡單,就是從壓縮文件中讀取上面顯示的語料,得到一個列表。
def read_data(filename):
(2) 根據語料,構建字典
構建字典幾乎是所有NLP任務所必須的步驟。
def build_dataset(words):
(vocabulary_size - 1))
? ? ?dictionary = dict()
(3) 根據語料,獲取一個batch的數據
這里需要解釋一下,此次詞向量的訓練,采用的是skip gram的方式,即通過一個詞,預測該詞附近的詞。generate_batch函數中,skip_window表示取該詞左邊或右邊多少個詞,num_skips表示總共取多少個詞。最后生成的batch數據,batch是num_skips*batch_size個詞,label是中間的batch_size個詞。
def generate_batch(batch_size, num_skips, skip_window):
(4) 用tensforslow訓練詞向量
首先,構造tensorflow運算圖,主要包括以下幾個步驟:
1.用palceholder先給訓練數據占坑;
2.初始化詞向量表,是一個|V|*embedding_size的矩陣,目標就是優化這個矩陣;
3.初始化權重;
4.構建損失函數,這里用NCE構建;
5.構建優化器;
6.構建變量初始化器
graph = tf.Graph()? ?# input data# operations and variables# construct the variables for the NCE loss
? ? ? nce_biases = tf.Variable(tf.zeros([vocabulary_size]))
? ? ?ncs_loss_test=tf.nn.nce_loss(weights=nce_weights, biases=nce_biases,labels=train_labels, inputs=embed, num_sampled=num_sampled, num_classes=vocabulary_size) ? ?
? ? ?loss = tf.reduce_mean(tf.nn.nce_loss(weights=nce_weights, biases=nce_biases, labels=train_labels, inputs=embed, num_sampled=num_sampled, num_classes=vocabulary_size))? ?# construct the SGD optimizer using a learning rate of 1.0?# compute the cosine similarity between minibatch examples and all embeddings
? ?# add variable initializer
然后,開始訓練詞向量:
num_steps = 1000?# we must initialize all variables before using them# loop through all training steps and keep track of loss ?# generate a minibatch of training data?# we perform a single update step by evaluating the optimizer operation (including it
(5) 保存詞向量
將訓練好的詞向量寫到文件中備用。
final_embeddings = normalized_embeddings.eval()
最后,我們將詞向量寫到了vector.txt里面,得到了一份很大的詞向量表,我們看看它長成什么樣子:
可以看到,詞向量就是將每個中文詞用一個向量來表示,整個詞表及其詞向量構成了這份詞向量表。
這里留一個作業,讀者可以自己試一下,從表中讀取出來幾個詞的向量,計算出來他們的相似度,看訓練出來的詞向量質量如何。
至此本文介紹了如何利用tensorflow平臺自己寫代碼,訓練一份自己想要的詞向量,代碼在我們有三AI的github可以
https://github.com/longpeng2008/yousan.ai/tree/master/natural_language_processing
找到word2vec文件夾,執行python3 w2v_skip_gram.py就可以運行,訓練詞向量了。
總結
這里講述了詞向量的具體訓練過程,相關的原理在我之前的系列文章里有詳細的講述,感興趣的同學可以好好看一下:
詞向量是NLP開始邁進“現代化”的關鍵,是各種面試必問的基礎,需重視。
我們也會在知識星球討論代碼的具體實現和優化,感興趣掃描下面的二維碼了解。
讀者們可以留言,或者加入我們的NLP群進行討論。感興趣的同學可以微信搜索jen104,備注"加入有三AI NLP群"。
下期預告:貝葉斯文本分類介紹
知識星球推薦
掃描上面的二維碼,就可以加入我們的星球,助你成長為一名合格的自然語言處理算法工程師。
知識星球主要有以下內容:
(1) 聊天機器人。考慮到聊天機器人是一個非常復雜的NLP應用場景,幾乎涵蓋了所有的NLP任務及應用。所以小Dream哥計劃以聊天機器人作為切入點,通過介紹聊天機器人的原理和實踐,逐步系統的更新到大部分NLP的知識,會包括語義匹配,文本分類,意圖識別,語義匹配命名實體識別、對話管理以及分詞等。
(2) 知識圖譜。知識圖譜對于NLP各項任務效果好壞的重要性,就好比基礎知識對于一個學生成績好壞的重要性。他是NLP最重要的基礎設施,目前各大公司都在著力打造知識圖譜,作為一個NLP工程師,必須要熟悉和了解他。
(3) NLP預訓練模型?;诤A繑祿?#xff0c;進行超大規模網絡的無監督預訓練。具體的任務再通過少量的樣本進行Fine-Tune。這樣模式是目前NLP領域最火熱的模式,很有可能引領NLP進入一個全新發展高度。你怎么不深入的了解?
轉載文章請后臺聯系
侵權必究
往期精選
總結
以上是生活随笔為你收集整理的【NLP实战】tensorflow词向量训练实战的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【完结】16篇图像分类干货文章总结,从理
- 下一篇: 【NLP-ChatBot】搜索引擎的最终