日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

【转】python-word2vec模块使用详解

發(fā)布時間:2024/9/18 python 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【转】python-word2vec模块使用详解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

安裝

安裝方法:pip install --upgrade gensim
安裝分詞:pip install jieba

中文訓(xùn)練預(yù)料處理

首先去網(wǎng)上下載一本小書,然后將其另存為utf-8格式

文本文件準(zhǔn)備好,現(xiàn)在開始用python對此txt文檔進(jìn)行處理。

from gensim.models import word2vec import os import gensim from word2vec import model_train import jieba# 此函數(shù)作用是對初始語料進(jìn)行分詞處理后,作為訓(xùn)練模型的語料 def cut_txt(old_file):global cut_file # 分詞之后保存的文件名cut_file = old_file + '_cut.txt'try:fi = open(old_file, 'r', encoding='utf-8')except BaseException as e: # 因BaseException是所有錯誤的基類,用它可以獲得所有錯誤類型print(Exception, ":", e) # 追蹤錯誤詳細(xì)信息text = fi.read() # 獲取文本內(nèi)容new_text = jieba.cut(text, cut_all=False) # 精確模式str_out = ' '.join(new_text).replace(',', '').replace('。', '').replace('?', '').replace('!', '') \.replace('“', '').replace('”', '').replace(':', '').replace('…', '').replace('(', '').replace(')', '') \.replace('—', '').replace('《', '').replace('》', '').replace('、', '').replace('‘', '') \.replace('’', '') # 去掉標(biāo)點符號fo = open(cut_file, 'w', encoding='utf-8')fo.write(str_out)

注意open中必須指明編碼方式,否則就會報錯;上面的函數(shù)若要單獨(dú)運(yùn)行,須要更改old_file變量為原文件名。

模型訓(xùn)練

準(zhǔn)備好訓(xùn)練語料(注意訓(xùn)練語料文件越大越好,越大最后的訓(xùn)練效果越好),之后就開始寫訓(xùn)練模型了,訓(xùn)練模型的代碼如下所示:

from gensim.models import word2vec import gensim import loggingdef model_train(train_file_name, save_model_file): # model_file_name為訓(xùn)練語料的路徑,save_model為保存模型名# 模型訓(xùn)練,生成詞向量logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)sentences = word2vec.Text8Corpus(train_file_name) # 加載語料model = gensim.models.Word2Vec(sentences, size=200) # 訓(xùn)練skip-gram模型; 默認(rèn)window=5model.save(save_model_file)model.wv.save_word2vec_format(save_model_file + ".bin", binary=True) # 以二進(jìn)制類型保存模型以便重用

參數(shù)說明:

model=gensim.models.Word2Vec(sentences,sg=1,size=100,window=5,min_count=2,negative=3,sample=0.001,hs=1,workers=4)#該步驟也可分解為以下三步(但沒必要): #model=gensim.model.Word2Vec() 建立一個空的模型對象 #model.build_vocab(sentences) 遍歷一次語料庫建立詞典 #model.train(sentences) 第二次遍歷語料庫建立神經(jīng)網(wǎng)絡(luò)模型#sg=1是skip—gram算法,對低頻詞敏感,默認(rèn)sg=0為CBOW算法 #size是神經(jīng)網(wǎng)絡(luò)層數(shù),值太大則會耗內(nèi)存并使算法計算變慢,一般值取為100到200之間。 #window是句子中當(dāng)前詞與目標(biāo)詞之間的最大距離,3表示在目標(biāo)詞前看3-b個詞,后面看b個詞(b在0-3之間隨機(jī)) #min_count是對詞進(jìn)行過濾,頻率小于min-count的單詞則會被忽視,默認(rèn)值為5。 #negative和sample可根據(jù)訓(xùn)練結(jié)果進(jìn)行微調(diào),sample表示更高頻率的詞被隨機(jī)下采樣到所設(shè)置的閾值,默認(rèn)值為1e-3, #negative: 如果>0,則會采用negativesamping,用于設(shè)置多少個noise words #hs=1表示層級softmax將會被使用,默認(rèn)hs=0且negative不為0,則負(fù)采樣將會被選擇使用。 #workers是線程數(shù),此參數(shù)只有在安裝了Cpython后才有效,否則只能使用單核

我們并不需要全部了解,大部分參數(shù)都可以使用其默認(rèn)值(不輸入),而其中比較重要的有:

# min_count,是去除小于min_count的單詞 # size,神經(jīng)網(wǎng)絡(luò)層數(shù) # sg, 算法選擇 # window, 句子中當(dāng)前詞與目標(biāo)詞之間的最大距離 # workers,線程數(shù)

訓(xùn)練后的模型用普通方式和二進(jìn)制方式進(jìn)行保存,以便下次直接使用,避免每次訓(xùn)練耗費(fèi)大量時間。

word2vec模型調(diào)用

兩個功能都以函數(shù)方式實現(xiàn)了,現(xiàn)在準(zhǔn)備編寫主函數(shù)代碼,在主函數(shù)中負(fù)責(zé)調(diào)用各個方法實現(xiàn)預(yù)處理和模型訓(xùn)練,以此做后面的相關(guān)計算。

# if not os.path.exists(cut_file): # 判斷文件是否存在,參考:https://www.cnblogs.com/jhao/p/7243043.html cut_txt('倚天屠龍記.txt') # 須注意文件必須先另存為utf-8編碼格式save_model_name = '倚天屠龍記.model' if not os.path.exists(save_model_name): # 判斷文件是否存在model_train(cut_file, save_model_name) else:print('此訓(xùn)練模型已經(jīng)存在,不用再次訓(xùn)練')# 加載已訓(xùn)練好的模型 model_1 = word2vec.Word2Vec.load(save_model_name) # 計算兩個詞的相似度/相關(guān)程度 word_1 = "金毛獅" word_2 = "謝遜" y1 = model_1.similarity(word_1, word_2) print(word_1, "和", word_2, "的相似度為:", y1) print("-------------------------------\n")# 計算某個詞的相關(guān)詞列表 word_3 = "張無忌" y2 = model_1.most_similar(word_3, topn=10) # 10個最相關(guān)的 print(u"和", word_3, "最相關(guān)的詞有:\n") for item in y2:print(item[0], item[1]) print("-------------------------------\n")# 某個詞的詞向量 print(model_1['張無忌'])

最后的運(yùn)行結(jié)果如下所示:

最終的結(jié)果一定程序上還是取決于分詞的準(zhǔn)確率,使用jieba分詞時可以針對性的加入用戶自定義詞典(jieba.load_userdict(“userDict.txt”) # 加載用戶自定義詞典),可以提高對人名,地名等未登陸詞的識別效果,提高分詞性能。

總結(jié)

以上是生活随笔為你收集整理的【转】python-word2vec模块使用详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。