在python下實(shí)現(xiàn)word2vec詞向量訓(xùn)練與加載實(shí)例
項(xiàng)目中要對(duì)短文本進(jìn)行相似度估計(jì),word2vec是一個(gè)很火的工具。本文就word2vec的訓(xùn)練以及加載進(jìn)行了總結(jié)。
word2vec的原理就不描述了,word2vec詞向量工具是由google開發(fā)的,輸入為文本文檔,輸出為基于這個(gè)文本文檔的語(yǔ)料庫(kù)訓(xùn)練得到的詞向量模型。
通過(guò)該模型可以對(duì)單詞的相似度進(jìn)行量化分析。
word2vec的訓(xùn)練方法有2種,一種是通過(guò)word2vec的官方手段,在linux環(huán)境下編譯并執(zhí)行。
在github上下載word2vec的安裝包,然后make編譯。查看demo-word.sh腳本,得到word2vec的執(zhí)行命令:
./word2vec -train text8 -output vectors.bin -cbow 1 -size 200 -window 8 -negative 25 -hs 0 -sample 1e-4 -threads 20 -binary 1 -iter 15
參數(shù)解釋:
1)-train:需要訓(xùn)練的語(yǔ)料庫(kù),text8為語(yǔ)料庫(kù)文件名
2)-output:輸出的詞向量文件,vectors.bin為輸出詞向量文件名,.bin后綴為二進(jìn)制文件。若要以文檔的形式查看詞向量文件,需要將-binary參數(shù)的值由1改為0
3)-cbow:是否使用cbow模型進(jìn)行訓(xùn)練。參數(shù)為1表示使用cbow,為0表示不使用cbow
4)-size:詞向量的維數(shù),默認(rèn)為200維。
5)-window:訓(xùn)練過(guò)程中截取上下文的窗口大小,默認(rèn)為8,即考慮一個(gè)詞前8個(gè)和后8個(gè)詞
6)-negative:若參數(shù)非0,表明采樣隨機(jī)負(fù)采樣的方法,負(fù)樣本子集的規(guī)模默認(rèn)為25。若參數(shù)值為0,表示不使用隨機(jī)負(fù)采樣模型。使用隨機(jī)負(fù)采樣比Hierarchical Softmax模型效率更高。
7)-hs:是否采用基于Hierarchical Softmax的模型。參數(shù)為1表示使用,0表示不使用
8)-sample:語(yǔ)料庫(kù)中的詞頻閾值參數(shù),詞頻大于該閾值的詞,越容易被采樣。默認(rèn)為e^-4.
9)-threads:開啟的線程數(shù)目,默認(rèn)為20.
10)-binary:詞向量文件的輸出形式。1表示輸出二進(jìn)制文件,0表示輸出文本文件
11)-iter:訓(xùn)練的迭代次數(shù)。一定范圍內(nèi),次數(shù)越高,訓(xùn)練得到的參數(shù)會(huì)更準(zhǔn)確。默認(rèn)值為15次.
./word2vec -train mytext.txt -output vectors.txt -cbow 1 -size 200 -window 5 -negative 25 -hs 0 -sample 1e-4 -threads 20 -binary 0 -iter 30
示例為訓(xùn)練一個(gè)名mytext.txt的文檔。設(shè)置輸出詞向量的格式為.txt文本文檔,所以還需要將-binary參數(shù)設(shè)置為0.
訓(xùn)練模型采用基于隨機(jī)負(fù)采樣的cbow模型。由于短文本字?jǐn)?shù)極為有限,所以-window參數(shù)設(shè)置為5,設(shè)置詞向量的維數(shù)
為200,為了使得到的參數(shù)更準(zhǔn)確,將迭代次數(shù)增加至30.其他參數(shù)使用默認(rèn)值。
訓(xùn)練以后得到一個(gè)txt文本,該文本的內(nèi)容為:每行一個(gè)單詞,單詞后面是對(duì)應(yīng)的詞向量。
gensim加載詞向量:
保存詞向量模型到pkl中(注意:這里是對(duì)詞向量模型進(jìn)行構(gòu)建)
from gensim.models import KeyedVectors
if not os.path.exists(pkl_path): # 如果pickle模型不存在,則構(gòu)建一個(gè)
print '詞向量模型不存在,開始構(gòu)建詞向量模型...'
Word2Vec = KeyedVectors.load_word2vec_format(vecs_path, binary=False) # 加載詞向量模型
f = file(pkl_path, 'wb')
pickle.dump(Word2Vec, f, True)
f.close()
print '詞向量模型構(gòu)建完畢...'
f= file(pkl_path, 'rb')# 打開pkl文件
word2vec=pickle.load(f)# 載入pkl
第二種方法是使用gensim模塊訓(xùn)練詞向量:
from gensim.models import Word2Vec from gensim.models.word2vec import LineSentence try: import cPickle as pickle except ImportError: import pickle sentences = LineSentence(path)# path為要訓(xùn)練的txt的路徑 # 對(duì)sentences表示的語(yǔ)料庫(kù)進(jìn)行訓(xùn)練,訓(xùn)練200維的詞向量,窗口大小設(shè)置為5,最小詞頻設(shè)置為5 model = Word2Vec(sentences, size=200, window=5, min_count=5) model.save(model_path)#model_path為模型路徑。保存模型,通常采用pkl形式保存,以便下次直接加載即可 # 加載模型 model = Word2Vec.load(model_path)
完整的訓(xùn)練,加載通常采用如下方式:
if not os.path.exists(model_path):
sentences = LineSentence(path)
model = Word2Vec(sentences, size=200, window=5, min_count=5)
model.save(model_path)
model = Word2Vec.load(model_path)
這樣一來(lái),就可以通過(guò)pkl化的詞向量模型進(jìn)行讀取了。pkl的目的是為了保存程序中變量的狀態(tài),以便下次直接訪問(wèn),
不必重新訓(xùn)練模型。
詳細(xì)內(nèi)容間gensim官方庫(kù)
https://radimrehurek.com/gensim/models/word2vec.html
以上這篇在python下實(shí)現(xiàn)word2vec詞向量訓(xùn)練與加載實(shí)例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- Python word2vec訓(xùn)練詞向量實(shí)例分析講解
- Python機(jī)器學(xué)習(xí)NLP自然語(yǔ)言處理Word2vec電影影評(píng)建模
- python使用Word2Vec進(jìn)行情感分析解析
- python初步實(shí)現(xiàn)word2vec操作
- Python實(shí)現(xiàn)word2Vec model過(guò)程解析
- python gensim使用word2vec詞向量處理中文語(yǔ)料的方法
- 對(duì)Python中g(shù)ensim庫(kù)word2vec的使用詳解
- python+Word2Vec實(shí)現(xiàn)中文聊天機(jī)器人的示例代碼
相關(guān)文章
Python利用scikit-learn實(shí)現(xiàn)近鄰算法分類的示例詳解
scikit-learn已經(jīng)封裝好很多數(shù)據(jù)挖掘的算法,這篇文章就來(lái)用scikit-learn實(shí)現(xiàn)近鄰算法分類,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2023-02-02
python 讀取txt,json和hdf5文件的實(shí)例
今天小編就為大家分享一篇python 讀取txt,json和hdf5文件的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-06-06
Django 數(shù)據(jù)庫(kù)同步操作技巧詳解
這篇文章主要介紹了Django 數(shù)據(jù)庫(kù)同步操作技巧詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07
LangChain簡(jiǎn)化ChatGPT工程復(fù)雜度使用詳解
這篇文章主要為大家介紹了LangChain簡(jiǎn)化ChatGPT工程復(fù)雜度使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03
在Python下進(jìn)行UDP網(wǎng)絡(luò)編程的教程
這篇文章主要介紹了在Python下進(jìn)行UDP網(wǎng)絡(luò)編程的教程,UDP編程是Python網(wǎng)絡(luò)編程部分的基礎(chǔ)知識(shí),示例代碼基于Python2.x版本,需要的朋友可以參考下2015-04-04
Python讀取GSMap數(shù)據(jù)的問(wèn)題
這篇文章主要介紹了Python讀取GSMap數(shù)據(jù)的問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03
使用Pandas進(jìn)行Excel數(shù)據(jù)處理的操作和技巧
在數(shù)據(jù)處理和分析的過(guò)程中,Excel是一個(gè)非常常見的工具,然而,當(dāng)數(shù)據(jù)量變大,操作復(fù)雜度增加時(shí),Excel的效率和功能可能無(wú)法滿足需求,Pandas是一個(gè)強(qiáng)大的Python數(shù)據(jù)處理庫(kù),本文將介紹如何使用Pandas進(jìn)行Excel數(shù)據(jù)處理,并展示一些常見的操作和技巧2023-11-11
Python利用matplotlib繪制約數(shù)個(gè)數(shù)統(tǒng)計(jì)圖示例
這篇文章主要介紹了Python利用matplotlib繪制約數(shù)個(gè)數(shù)統(tǒng)計(jì)圖,結(jié)合實(shí)例形式詳細(xì)分析了Python使用matplotlib進(jìn)行統(tǒng)計(jì)圖繪制的相關(guān)操作技巧,需要的朋友可以參考下2019-11-11

