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