尊敬的讀者您好:筆者很高興自己的文章能被閱讀,但原創與編輯均不易,所以轉載請必須註明本文出處並附上本文地址超鏈接以及博主博客地址:https://blog.csdn.net/vensmallzeng。若覺得本文對您有益處還請幫忙點個贊鼓勵一下,筆者在此感謝每一位讀者,如需聯繫筆者,請記下郵箱:[email protected],謝謝合作!
以前在做自然語言處理任務時,都是用別人訓練好的詞向量字典,感覺這一塊依賴性太強了,怕會影響到後期的業務需求,所以最近沒事就自己親手做了一個屬於自己的詞向量字典。
1、如果需要本文源碼請自行轉向“https://download.csdn.net/download/vensmallzeng/11211311”。
2、筆者準備了兩個語料庫,一個是“倚天屠龍記.txt”還有一個是“English Corpora”,後者的數據量會遠大於前者,所以爲了方便實驗,筆者選擇了數據量少一點的前者即-倚天屠龍記.txt,它們的具體格式分別如下圖所示:
倚天屠龍記.txt(筆者選用):
English Corpora:
3、在對語料數據進行訓練之前,先要將語料中的句子進行分詞並做數據清洗,因此這裏寫了一個cut_txt函數用於實現上述目的,其中主要功能代碼如下:
句子分詞部分:
數據清洗部分:
4、接下來就是用分好詞的語料進行模型訓練並生成詞向量,因此這裏寫了一個model_train函數用於實現上述目的,其中主要功能代碼如下:
5、最後就是寫一個主函數,用於調用cut_txt函數實現分詞,調用model_train函數產生詞向量,並將獲得的詞及其對應的詞向量按字典的格式寫入文本文件中,另外還可以實現計算一些詞之間的相似度以及獲取其近義詞功能。
詞與詞向量在文本文件中存儲效果如下:
6、至此本文該寫的就寫完了。對於word2vec這個函數,更多的只是調用,所以在給這個函數傳參數時,需要注意一下參數的含義,爲此下面特意給出了各參數的含義以供參考。
1.sentences:可以是一個List,對於大語料集,建議使用BrownCorpus,Text8Corpus或·ineSentence構建。
2.sg: 用於設置訓練算法,默認爲0,對應CBOW算法;sg=1則採用skip-gram算法。
3.size:是指輸出的詞的向量維數,默認爲100。大的size需要更多的訓練數據,但是效果會更好. 推薦值爲幾十到幾百。
4.window:爲訓練的窗口大小,8表示每個詞考慮前8個詞與後8個詞(實際代碼中還有一個隨機選窗口的過程,窗口大小<=5),默認值爲5。
5.alpha: 是學習速率
6.seed:用於隨機數發生器。與初始化詞向量有關。
7.min_count: 可以對字典做截斷. 詞頻少於min_count次數的單詞會被丟棄掉, 默認值爲5。
8.max_vocab_size: 設置詞向量構建期間的RAM限制。如果所有獨立單詞個數超過這個,則就消除掉其中最不頻繁的一個。每一千萬個單詞需要大約1GB的RAM。設置成None則沒有限制。
9.sample: 表示 採樣的閾值,如果一個詞在訓練樣本中出現的頻率越大,那麼就越會被採樣。默認爲1e-3,範圍是(0,1e-5)
10.workers:參數控制訓練的並行數。
11.hs: 是否使用HS方法,0表示: Negative Sampling,1表示:Hierarchical Softmax 。默認爲0
12.negative: 如果>0,則會採用negative samping,用於設置多少個noise words
13.cbow_mean: 如果爲0,則採用上下文詞向量的和,如果爲1(default)則採用均值。只有使用CBOW的時候才起作用。
14.hashfxn: hash函數來初始化權重。默認使用python的hash函數
15.iter: 迭代次數,默認爲5。
16.trim_rule: 用於設置詞彙表的整理規則,指定那些單詞要留下,哪些要被刪除。可以設置爲None(min_count會被使用)或者一個接受()並返回RU·E_DISCARD,uti·s.RU·E_KEEP或者uti·s.RU·E_DEFAU·T的函數。
17.sorted_vocab: 如果爲1(defau·t),則在分配word index 的時候會先對單詞基於頻率降序排序。
18.batch_words:每一批的傳遞給線程的單詞的數量,默認爲10000
注:如果在建立自己的詞向量庫時報如下錯誤:
RuntimeError:you must first build vocabulary before training the model
一般是因爲所給的訓練語料不滿足最低要求,說白了就是詞太少了, 沒有達到默認的最少計數 mincount。
解決方法:
① 擴大語料規模或尋找一個合適大小的語料
② 修改min_count以適應自己的語料庫規模
日積月累,與君共進,增增小結,未完待續。