詞向量是用來幹什麼的?
①有人拿它尋找近義詞或者相關詞,直接根據向量空間裡的距離遠近來判定詞的關係。②也有不少早期的工作,直接拿詞向量做特徵,在現有系統中加入詞向量作為特徵。特徵嘛,就是要個多樣性,雖然不知道詞向量包含了什麼資訊,但是說不定就帶著新的資訊,效果就能提公升了。③還有大量基於神經網路的工作,拿詞向量作為神經網路的初始值。神經網路的初始值選得好,就有可能收斂到更好的區域性最優解。好,就是這三種指標了:語義特性、用作特徵、用作初始值
模型、語料、引數三方面會影響詞向量的訓練:
模型方面,因為所有的詞向量模型都是基於分布假說的(distributional hypothesis):擁有相似上下文的詞,詞義相似。這裡有兩個物件,乙個是我們需要關注的詞(目標詞),另乙個是這個詞對應的上下文。所以,我們從兩個角度去總結模型:1.目標詞和上下文的關係,2.上下文怎麼表示。在這種分類體系下,我們對現有的主流詞向量模型進行了總結和比較,發現,目標詞和上下文的關係主要有兩種,大多數模型都是根據上下文,**目標詞。而 c&w 模型則是對目標詞和上下文這一組合,打分。實驗發現,通過上下文**目標詞的模型,得到的詞向量,更能捕獲替換關係(paradigmatic)。在上下文的表示方面,我們分析了幾種表示方法之後,發現可以通過模型複雜程度對這些模型進行排序。排序之後,實驗結果就容易解釋了:簡單的模型(skip-gram)在小語料下表現好,複雜的模型在大語料下略有優勢。從實踐中看,word2vec 的 cbow 模型在 gb 級別的語料下已經足夠好。我前面提到的 order 模型,加入了詞序資訊,其實很多時候比 cbow 更好,不過帶來的提公升並不大。
語料方面,很多**都提到語料越大越好,我們發現,語料的領域更重要。領域選好了,可能只要 1/10 甚至 1/100 的語料,就能達到乙個大規模泛領域語料的效果。有時候語料選的不對,甚至會導致負面效果(比隨機詞向量效果還差)。文章還做了實驗,當只有小規模的領域內語料,而有大規模的領域外語料時,到底是語料越純越好,還是越大越好。在我們的實驗中,是越純越好。這一部分實驗資料比較豐富,原文相對清楚一些。
引數方面,主要考慮了迭代次數和詞向量的維度。其實詞向量都是迭代演算法,一般迭代演算法都需要多迭代幾次。舊版的 word2vec 只迭代了一次,效果很受限制,換新版就好了(也歡迎用我們**實驗的方法,用 adagrad 優化,相比原版 word2vec 的學習速率下降法,這樣還能在之前的基礎上繼續迭代)。然後迭代次數怎麼選呢?機器學習裡很常用的迭代停止指標是看驗證集的損失是否到達峰值,認為這個時候模型開始過擬合了。按照這個方法,我們可以從訓練語料中分出乙個驗證集看損失函式的變化。但是實驗中我們發現,這種策略並不好。主要原因就是,訓練詞向量的目標是,盡可能精確地**目標詞,這一目標和實際任務並不一致。所以更好的方法是,直接拿實際任務的驗證集來做終止條件。如果實際任務做起來很慢(比如 ner 任務的開源實現大概做一次要兩小時),文章還給了一種參考的方法,隨便挑乙個任務當驗證集用,一般都比損失函式靠譜。
詞向量的維度則只有一些實驗結果。做詞向量語義分析任務的時候,一般維度越大效果越好。做具體 nlp 任務(用作特徵、用作神經網路初始化)的時候,50 維之後效果提公升就比較少了。這部分的結果很依賴於具體任務的實現,或許用上了更先進的神經網路優化方法,詞向量作為初始值帶來的影響又會有新的結論。
套路一:
gensim.models.word2vec(),引數說明在這裡,其中
sg(int ) – defines the training algorithm. if 1, skip-gram is employed; otherwise, cbow is used.
參考部落格
DNN模型訓練詞向量原理
1詞向量 在nlp裡,最細的粒度是詞語,由詞語再組成句子,段落,文章。所以處理nlp問題時,怎麼合理的表示詞語就成了nlp領域中最先需要解決的問題。因為語言模型的輸入詞語必須是數值化的,所以必須想到一種方式將字串形式的輸入詞語轉變成數值型。由此,人們想到了用乙個向量來表示片語。在很久以前,人們常用o...
DNN模型訓練詞向量原理
1詞向量 在nlp裡,最細的粒度是詞語,由詞語再組成句子,段落,文章。所以處理nlp問題時,怎麼合理的表示詞語就成了nlp領域中最先需要解決的問題。因為語言模型的輸入詞語必須是數值化的,所以必須想到一種方式將字串形式的輸入詞語轉變成數值型。由此,人們想到了用乙個向量來表示片語。在很久以前,人們常用o...
DNN模型訓練詞向量原理
1 詞向量 在nlp裡,最細的粒度是詞語,由詞語再組成句子,段落,文章。所以處理nlp問題時,怎麼合理的表示詞語就成了nlp領域中最先需要解決的問題。因為語言模型的輸入詞語必須是數值化的,所以必須想到一種方式將字串形式的輸入詞語轉變成數值型。由此,人們想到了用乙個向量來表示片語。在很久以前,人們常用...