Vector Representations of Words -- TensorFlow官網word2vec教程翻譯
本文為Tensorflow Tutorials 詞向量教程的翻譯版本,翻譯過程即學習過程,同時也會在日後根據當前階段的理解,重新翻閱更新。
在此教程中,我們借用Mikolov等人論文中提到的word2vec模型,此模型可將單詞對映成特定的向量,這一過程被稱為word embedding(詞嵌入)
。
著重介紹
本教程著重介紹運用TensorFlow框架構建word2vec模型的有趣、實質性部分。
- 我們從動機開始解釋,為什麼要把單詞轉換成向量。
- 我們觀察模型背後直覺的知識(intuition),以及它是如何被訓練的(用一些數學方法來衡量)。
- 我們還在TensorFlow中展示了該模型的一個簡單實現。
- 最後,我們來看看如何使這個簡單版本的模型具有更好的延伸性。
我們將在後面的教程中介紹這些程式碼,但是如果您喜歡直接學習這些程式碼,請隨意檢視tensorflow/examples/tutorials/word2vec/word2vec_basic.py中的極簡實現。這個基本的例子包含了下載資料,對其進行訓練以及結果視覺化所需的程式碼。一旦您熟悉了基本版本的閱讀和執行,您就可以學習models/tutorials/embedding/word2vec.py。這是一個更嚴謹的實現,它展示了一些更高階的TensorFlow原則,比如如何有效地使用執行緒將資料移動到文字模型中,如何在訓練期間進行檢查點等。
但是首先,讓我們看看為什麼要在最開始學習word embeddings(詞嵌入)
動機:為何學習詞嵌入
影象和音訊處理系統使用豐富的高維資料集,這些資料集被編碼為影象資料的單個原始畫素強度的向量,或者音訊資料的功率譜密度係數。對於目標或語音識別等任務來說,我們知道成功執行這些任務所需的所有資訊都編碼在資料中(因為人類可以直接從原始資料執行這些任務)。然而,自然語言處理系統一般將單詞視為離散的原子符號,因此’cat’可以表示為Id537
,’dog’表示為Id143
。這些編碼是任意的,並且沒有為系統提供關於符號之間可能存在的關係的有用資訊。這意味著,當該模型處理有關’狗’的資料時,它從已經學習過的’貓’身上可利用的資訊非常少(儘管它們都是動物、四條腿的、寵物等)。將單詞表示為惟一離散的標籤會導致資料稀疏
Baroni等人更詳細地闡述了它們的區別,但簡而言之:基於計數的方法計算某個單詞與相鄰單詞在大型文字語料庫中共存的頻率的統計資料,然後將這些統計資料對映到每個單詞的一個小而密集的向量。預測模型直接根據學習到的小而密集的嵌入向量(考慮到模型的引數)來預測鄰居的單詞。
Word2vec是從原始文字中學習詞嵌入的一種特別有效的計算預測模型。它有兩種風格,連續的詞袋模型(CBOW)和Skip-Gram模型(Mikolov等人的3.1和3.2節)。在演算法上,這些模型是相似的:CBOW從源上下文單詞(‘the cat sit on the’)預測目標詞(‘mat’),而skip-gram正好相反,從目標單詞預測源上下文單詞。這種倒置看起來似乎是一種隨意的選擇,但從統計學上講,它的效果是CBOW平滑了許多分佈資訊(通過將整個上下文視為一個觀察結果)。在大多數情況下,這對於較小的資料集是有用的。然而,skip-gram將每個上下文目標對視為一個新的觀察物件,當我們有更大的資料集時,這往往會做得更好。在本教程的其餘部分中,我們將重點介紹skip-gram模型。