Python word2vec訓(xùn)練詞向量實(shí)例分析講解
1.詞向量預(yù)訓(xùn)練模型的優(yōu)勢(shì):
(1)訓(xùn)練和保存含有語(yǔ)義信息的詞向量,在用于模型訓(xùn)練之前,enbedding的過(guò)程同樣帶有語(yǔ)義信息,使模型訓(xùn)練的效果更好;
(2)可以用預(yù)訓(xùn)練好的詞向量模型直接計(jì)算兩個(gè)詞和文本的相似度,常推薦用余弦相似度計(jì)算;
2.詞向量預(yù)訓(xùn)練模型的限制因素:
(1)對(duì)訓(xùn)練語(yǔ)料的要求非常高,要求訓(xùn)練語(yǔ)料大而全,所以訓(xùn)練起來(lái)比較費(fèi)時(shí)間,并且訓(xùn)練語(yǔ)料的來(lái)源也是個(gè)問(wèn)題;
(2)公開(kāi)的預(yù)訓(xùn)練模型一般都是用大量的公共數(shù)據(jù)訓(xùn)練的,如百科、文獻(xiàn)、報(bào)紙等公開(kāi)數(shù)據(jù)集,所以只能適用于一些通用型的機(jī)器學(xué)習(xí)任務(wù),像醫(yī)學(xué)、生物等領(lǐng)域就不太實(shí)用。
3.自己訓(xùn)練詞向量的全流程:
(1)準(zhǔn)備數(shù)據(jù):我這邊是訓(xùn)練的電子病歷數(shù)據(jù),將來(lái)也是用于電子病歷的enbedding過(guò)程,所以我這邊只準(zhǔn)備了電子病歷數(shù)據(jù),大概是1000w+的數(shù)據(jù)。
(2)清洗數(shù)據(jù):電子病歷數(shù)據(jù)的清洗比較麻煩,首先,二次脫敏,保證將姓名、醫(yī)院名、地市名稱(chēng)以及一些相關(guān)的電話和編號(hào)等信息脫敏干凈,一是防止隱私泄露,二是防止這些噪聲的影響訓(xùn)練效果。
(3)選用模型:word2vec中的CBOW:
(4)代碼如下:
from gensim.models import Word2Vec import pandas as pd import numpy as np import re import jieba
數(shù)據(jù)讀?。簲?shù)據(jù)量太大,不建議用excel,無(wú)內(nèi)存限制當(dāng)我沒(méi)說(shuō)
pd_data = pd.read_excel('data/emr_500w.xlsx')
清洗一下數(shù)據(jù):
def clean_data(data): res = re.sub('[\s@\u3000\u2002\?\*%#¥&::,,。.-_——?、《》;;]+', ' ' ,data) return res res = pd_data.text.apply(lambda x : jieba.lcut(clean_data(x))).to_list() train_data = [i for lis in res for i in lis if i.strip()] train_data_02 = [] for i in res: lis_ = [j for j in i if j.strip()] train_data_02.append(lis_)
參數(shù)設(shè)置和參數(shù)解釋?zhuān)?/p>
· sentences:可以是一個(gè)list,對(duì)于大語(yǔ)料集,建議使用BrownCorpus,Text8Corpus或·ineSentence構(gòu)建。
· sg: 用于設(shè)置訓(xùn)練算法,默認(rèn)為0,對(duì)應(yīng)CBOW算法;sg=1則采用skip-gram算法。
· size:是指特征向量的維度,默認(rèn)為100。大的size需要更多的訓(xùn)練數(shù)據(jù),但是效果會(huì)更好. 推薦值為幾十到幾百。
· window:表示當(dāng)前詞與預(yù)測(cè)詞在一個(gè)句子中的最大距離是多少。Harris 在 1954 年提出的分布假說(shuō)( distributional hypothesis)指出, 一個(gè)詞的詞義由其所在的上下文決定。所以word2vec的參數(shù)中,窗口設(shè)置一般是5,而且是左右隨機(jī)1-5(小于窗口大?。┑拇笮?,是均勻分布,隨機(jī)的原因應(yīng)該是比固定窗口效果好,增加了隨機(jī)性,個(gè)人理解應(yīng)該是某一個(gè)中心詞可能與前后多個(gè)詞相關(guān),也有的詞在一句話中可能只與少量詞相關(guān)(如短文本可能只與其緊鄰詞相關(guān))。
· alpha: 是學(xué)習(xí)速率
· seed:用于隨機(jī)數(shù)發(fā)生器。與初始化詞向量有關(guān)。
· min_count: 可以對(duì)字典做截?cái)? 詞頻少于min_count次數(shù)的單詞會(huì)被丟棄掉, 默認(rèn)值為5。該模塊在訓(xùn)練結(jié)束后可以通過(guò)調(diào)用model.most_similar('電影',topn=10)得到與電影最相似的前10個(gè)詞。如果‘電影’未被訓(xùn)練得到,則會(huì)報(bào)錯(cuò)‘訓(xùn)練的向量集合中沒(méi)有留下該詞匯’。
· max_vocab_size: 設(shè)置詞向量構(gòu)建期間的RAM限制。如果所有獨(dú)立單詞個(gè)數(shù)超過(guò)這個(gè),則就消除掉其中最不頻繁的一個(gè)。每一千萬(wàn)個(gè)單詞需要大約1GB的RAM。設(shè)置成None則沒(méi)有限制。
· sample: 高頻詞匯的隨機(jī)降采樣的配置閾值,默認(rèn)為1e-3,范圍是(0,1e-5)
· workers參數(shù)控制訓(xùn)練的并行數(shù)。
· hs: 如果為1則會(huì)采用hierarchica·softmax技巧。如果設(shè)置為0(defau·t),則negative sampling會(huì)被使用。
· negative: 如果>0,則會(huì)采用negativesamp·ing,用于設(shè)置多少個(gè)noise words
· cbow_mean: 如果為0,則采用上下文詞向量的和,如果為1(defau·t)則采用均值。只有使用CBOW的時(shí)候才起作用。
· hashfxn: hash函數(shù)來(lái)初始化權(quán)重。默認(rèn)使用python的hash函數(shù)
· iter: 迭代次數(shù),默認(rèn)為5
· trim_rule: 用于設(shè)置詞匯表的整理規(guī)則,指定那些單詞要留下,哪些要被刪除??梢栽O(shè)置為None(min_count會(huì)被使用)或者一個(gè)接受()并返回RU·E_DISCARD,uti·s.RU·E_KEEP或者uti·s.RU·E_DEFAU·T的函數(shù)。
· sorted_vocab: 如果為1(defau·t),則在分配word index 的時(shí)候會(huì)先對(duì)單詞基于頻率降序排序。
· batch_words:每一批的傳遞給線程的單詞的數(shù)量,默認(rèn)為10000。這里我認(rèn)為是在訓(xùn)練時(shí),控制一條樣本(一個(gè)句子)中詞的個(gè)數(shù)為10000,大于10000的截?cái)?;?xùn)練時(shí)依次輸入batch_words的2*window(實(shí)際上不一定是2*window,因?yàn)榇a內(nèi)部還對(duì)[0,window]取了隨機(jī)。
模型訓(xùn)練:sg沒(méi)寫(xiě),默認(rèn)CBOW;訓(xùn)練50維度;word2vec的參數(shù)中,窗口設(shè)置一般是5,而且是左右隨機(jī)1-5(小于窗口大?。┑拇笮?,是均勻分布,隨機(jī)的原因應(yīng)該是比固定窗口效果好,增加了隨機(jī)性;min_count = 1控制詞頻和篩選;iter = 10迭代10次;
model = Word2Vec(train_data_02, size=50, window=5, min_count=1, workers=8, sg=0, batch_words=1500,iter = 10)
模型保存:
# 第一種 # model = Word2Vec.load(word2vec.model) model.save('emr2vec.model') # 第二種 # model = gensim.models.KeyedVectors.load_word2vec_format('word2vec.bin',binary=True) model.wv.save_word2vec_format('emr2vec.bin') # 第三種 # gensim.models.KeyedVectors.load_word2vec_format('word2vec.txt',binary=False) model.wv.save_word2vec_format('emr2vec.txt')
測(cè)試:導(dǎo)入模型
model = Word2Vec.load("emr2vec.model") #篩選10個(gè)與當(dāng)前詞最近的詞向量 model.wv.similar_by_word("腦梗死", topn=10)
結(jié)果:
到此這篇關(guān)于Python word2vec訓(xùn)練詞向量實(shí)例分析講解的文章就介紹到這了,更多相關(guān)Python word2vec內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Python機(jī)器學(xué)習(xí)NLP自然語(yǔ)言處理Word2vec電影影評(píng)建模
- python使用Word2Vec進(jìn)行情感分析解析
- python初步實(shí)現(xiàn)word2vec操作
- 在python下實(shí)現(xiàn)word2vec詞向量訓(xùn)練與加載實(shí)例
- 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刪除java文件頭上版權(quán)信息的方法
在使用他人代碼時(shí),為不保留文件頭部版權(quán)信息,需要一個(gè)個(gè)刪掉,下面是用python刪除java文件頭上的版權(quán)信息的方法2014-07-07關(guān)于Python?Tkinter?復(fù)選框?->Checkbutton
這篇文章主要介紹了關(guān)于Python?Tkinter復(fù)選框Checkbutton,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-09-09Python網(wǎng)頁(yè)解析利器BeautifulSoup安裝使用介紹
這篇文章主要介紹了Python網(wǎng)頁(yè)解析利器BeautifulSoup安裝使用介紹,本文用一個(gè)完整示例一步一步安裝了BeautifulSoup的安裝和使用過(guò)程,需要的朋友可以參考下2015-03-03Django admin實(shí)現(xiàn)TextField字段changelist頁(yè)面換行、空格正常顯示
本文主要介紹了Django admin實(shí)現(xiàn)TextField字段changelist頁(yè)面換行、空格正常顯示,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01利用Python實(shí)現(xiàn)個(gè)性化日歷
雖然市面上已經(jīng)存在現(xiàn)成的日歷功能,并且有第三方庫(kù)可以直接調(diào)用實(shí)現(xiàn),但我們?nèi)匀幌Mㄟ^(guò)自己編寫(xiě)日歷程序來(lái)引出我認(rèn)為好用的日歷實(shí)現(xiàn),所以下面就跟隨小編一起學(xué)習(xí)一下如何使用Python編寫(xiě)一個(gè)簡(jiǎn)單的日歷程序吧2024-02-02對(duì)sklearn的使用之?dāng)?shù)據(jù)集的拆分與訓(xùn)練詳解(python3.6)
今天小編就為大家分享一篇對(duì)sklearn的使用之?dāng)?shù)據(jù)集的拆分與訓(xùn)練詳解(python3.6),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-12-12