關於詞嵌入

詞向量化

將詞向量化的一個很簡單的思路:
(1)統計語料中出現的每個單詞,並按照詞頻由高到低排列,得到一個字典
(2)根據字典將句子轉爲由整數表示的向量
有了字典,給定一個詞,就能找到它在字典中的位置。比如單詞a,在字典中a的位置爲3;評論中出現的詞在字典中不存則爲0。把每個詞用其在字典中的index來表示。每句話都將會構造一個對應長度的詞向量。
舉個栗子:
評論爲“I like this movie!”
‘I’在字典中的index爲9;
‘like’在字典中的index爲37;
‘this’‘在字典中的index爲10;
‘movie’在字典中的index爲16;
‘!’在字典中的index爲28;
這個評論對應的詞向量爲[9 37 10 16 28]
(3)使用one-hot將每個一維詞向量轉爲二維的向量做爲模型輸入
假如字典的大小爲1000,最短的句子爲“I like this movie!”,長度爲5,如果使用one-hot編碼將詞向量爲[9 37 10 16 28]編碼得到的向量維度爲(6, 1000)。其中6爲句子長度,1000爲字典大小。行向量表示一個單詞,且只有在索引位置處值爲1,其他位置爲0.因此,這樣的編碼方式得到的輸入非常稀疏,耗費不必要的計算資源和時間。
那麼有沒有高效的方法呢?肯定是有的。
試想一下,將整數組的詞向量編碼得到另外一種形式的詞向量,我們可以理解爲中間通過了某種映射關係。這種映射關係能夠自定義,比如上述的例子中字典大小隻有1000,用10位2進制數不就能完全表示這1000個詞嗎?使用這樣編碼方式得到的向量大小隻有(N, 10), N爲句子長度。我們還能夠通過模型去學習得到映射關係,神經網絡模型不就能夠將輸入映射到一個高維空間嗎?詞嵌入方法Word2Vec,GloVe就是基於這樣的想法實現的。

推薦文章

文章(1)詳細介紹瞭如何實現訓練一個自己嵌入模型對輸入編碼和使用現有的嵌入模型進行編碼,文章(2)詳細介紹如何keras對詞向量或者圖片等如何設置。詳細的代碼,拿來就用。
(1) How to Use Word Embedding Layers for Deep Learning with Keras
(2)在Keras模型中one-hot編碼,Embedding層,使用預訓練的詞向量/處理圖片

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章