當前位置:
首頁 > 最新 > TensoFlow 實戰 3層網路求解嵌入詞向量,附代碼詳解

TensoFlow 實戰 3層網路求解嵌入詞向量,附代碼詳解

已經介紹了Word2Vec中的Skip-Gram模型的基本原理,以及訓練過程的3個策略,詳細請參考:

接下來開始動手用 TensorFlow 實現自己的 Word2Vec 模型,本篇文章將利用 TensorFlow 來完成 Skip-Gram 模型。還不是很了解Skip-Gram思想的小夥伴可以參考以上推送文章。

本篇 TensorFlow 實戰參考 天雨粟 的實現思路,實戰代碼的主要目的是加深對Skip-Gram 模型中一些思想和訓練技巧的理解,選用了滿足自己訓練目的的語料規模,對語料質量和演算法細節做基本的約束要求,儘可能的降低訓練成本。同時,運用 TensorFlow 框架建立網路結構,求解嵌入的詞向量。

實戰工具

Skip-Gram 模型的訓練所使用的語言,庫,及工具如下所示:

語言:Python 3

包:TensorFlow包,Numpy包

編輯器:Pycharm

線上GPU:floyd (https://www.floydhub.com/),這是一個非常不錯的在線訓練深度學習神經網路的平台

數據集:維基百科英文文章預料,參考 天雨粟 給出的預料,預料位元組數為90+M.

數據預處理

首先,導入用到的包,如下:

載入訓練網路所用的語料,如下:

數據預處理部分主要做的工作包括:

替換文本中特殊符號,比如:逗號,分號,感嘆號等

對文本分詞

去除低頻詞,減少噪音

構建語料

單詞映射表

替換文本中的特殊字元:

根據空格分詞

剔除低頻詞

去重後的辭彙表

在辭彙表中建立映射關係

去除低頻率的單詞,同時去除高頻出現的停用詞,例如「the」, 「of」以及「for」這類單詞進行剔除。剔除這些單詞以後能夠加快我們的訓練過程,同時減少訓練過程中的噪音。採用以下公式:

其中t是一個閾值參數,一般為 1e-3 至 1e-5

fwi)是單詞 wi 在整個數據集中的出現頻次

P(wi)是單詞被刪除的概率

輸入樣本

Skip-Gram模型的輸入是基於中心詞的上下文窗依次配對,通過一定批次大小構建輸入樣本。

對於一個給定詞,離它越近的詞可能與它越相關,離它越遠的詞越不相關,這裡我們設置窗口大小為 5,對於每個訓練單詞,我們還會在 [1:5] 之間隨機生成一個整數 R,用 R 作為我們最終選擇 output word 的窗口大小。這裡之所以多加了一步隨機數的窗口重新選擇步驟,是為了能夠讓模型更聚焦於當前 input word 的鄰近詞。

三層網路

該部分主要包括:

詳細實現代碼如下:

驗證

抽取幾個詞,找出各自最相近的 topk 個單詞。首先把測試樣本加入到圖中,

接下來,運行以上默認圖:


每 1000 個時步列印一次,從最後的訓練結果來看,模型還是學到了一些常見詞的語義,比如 one 等計數詞以及 gold 之類的金屬詞,animals 中的相似詞也相對準確,列表如下:

為了能夠更全面地觀察我們訓練結果,我們採用 sklearn 中的 TSNE 來對高維詞向量進行可視化。

以上便是在 TensorFlow 中完整源碼實現Word2vec之Skip-Gram模型的詳細過程代碼。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 演算法channel 的精彩文章:

深度學習和自然語言處理:介紹

TAG:演算法channel |