Skip_gram(NLP-1)
雲日隱層闕是什麼動物
什麼是word2vec
詞嵌入word embedding,將語言(文字)轉化為數值的形式,也就是嵌入到一個數學空間裡面。透過一個詞嵌入的空間使得語義上相似的詞在空間距離很近。
Skip_gram 使用一個詞作為輸入,預測周圍的上下文
CBOW 一個詞的上下文來輸入,預測詞的本身
Skip_gram
建立模型
透過模型獲取詞嵌入詞向量
模型的訓練The Fake Task
獲得模型基於訓練資料得到的隱層權重
選取一個詞作為輸入詞
獲取詞的上下文。skip-window,選取多少詞進入視窗,num_skips代表最終輸出詞的個數
神經網路基於訓練資料輸出一個機率分佈,代表每個詞output_word的可能性
模型的細節
從訓練樣本抽取n個不重複的單片語成詞彙表,one-hot編碼,每個單詞都是一個n維的向量。輸入是n維的向量、輸出也是n維的向量。包含了n個機率。每個機率代表輸入樣本中output_word的機率大小。訓練的樣本(input word,output_word)
隱層,單詞的表示 n x 300, 隱層的權重為 n * 300 。學習最終的目標是學習隱層的權重矩陣
輸出層是一個softmax分類器,輸出一個0-1之間的機率值
模型的訓練
神經網路超級大
要避免過擬合
計算量大
最佳化點
常見的單詞組合或者片語作為單個words來處理
高頻次的單詞抽樣來減少訓練樣本的個數
最佳化目標negative sampling,每個訓練樣本更新小部分的模型權重,降低計算負擔
抽樣率:單詞出現的頻率增高,被保留的機率也會越來越小
負取樣:提高訓練速度改善詞向量質量的一種方法。每次讓訓練樣本只更新小部分的權重,降低梯度下降過程中的計算量
。
negative word
:訓練樣本(fox,quick)經過one-hot處理,quick對應的神經元節點是1,其餘是0。輸出時0的神經元節點所對應的單詞是negative - word。隨機選取小部分negative words進行權重的更新
negative words的選取:
一個單詞被選座negative的機率和出現的頻次有關。出現的頻次越高,很容易被選成nagative words。負取樣是,在0-1億範圍內生成一個隨機數,選擇表中索引中的單詞作為nagative word就行。
skip-gram的訓練以及實現
資料的預處理、訓練樣本構建、模型構建、模型的驗證
資料的預處理
替換原始文字中特殊符號,降低低頻詞
文字分詞
構建語料
單詞對映表
訓練樣本的構建
計算每個單詞被刪除的頻率,基於機率進行取樣
構造batch
模型的構建
輸入到嵌入層
嵌入層到輸出層(共享權重矩陣)
模型的驗證
檢視相似詞的變化
計算詞的相似度
提升效果
增大訓練樣本,語料庫
增加window size 獲取更多的上下文資訊
增加embedding size 減少資訊維度的損失。一般取50-300