深度学习-nlp系列(4):Word2Vec 字词向量的训练和使用
前言
?word2vec 是靜態(tài)詞向量構(gòu)建方法的一種,與 Embedding 詞向量相似。本文將介紹 word2vec 詞向量是如何訓(xùn)練的,訓(xùn)練好的 word2vec 詞向量如何使用。由于不同的 gensim 的版本不同,在調(diào)用一些函數(shù)時(shí)會(huì)有差異。隱藏本文的 gensim 的版本為 4.2.0 ,以下代碼都依此版本為準(zhǔn)。
數(shù)據(jù)?
本文使用的數(shù)據(jù)是 THUCNews 中train.txt、dev.txt、test.txt 中所有的中文數(shù)據(jù),一共用20000條。
?圖1 訓(xùn)練數(shù)據(jù)
字向量
處理數(shù)據(jù)
# 得到每一行的數(shù)據(jù) []datas = open('data/word.txt', 'r', encoding='gbk').read().split("\n")# 得到一行的單個(gè)字 [[],...,[]]word_datas = [[i for i in data if i != " "] for data in datas]?圖2 將數(shù)據(jù)處理成字
訓(xùn)練
model = Word2Vec(word_datas, # 需要訓(xùn)練的文本vector_size=10, # 詞向量的維度window=2, # 句子中當(dāng)前單詞和預(yù)測(cè)單詞之間的最大距離min_count=1, # 忽略總頻率低于此的所有單詞 出現(xiàn)的頻率小于 min_count 不用作詞向量workers=8, # 使用這些工作線程來訓(xùn)練模型(使用多核機(jī)器進(jìn)行更快的訓(xùn)練)sg=0, # 訓(xùn)練方法 1:skip-gram 0;CBOW。epochs=10 # 語(yǔ)料庫(kù)上的迭代次數(shù))?圖3 模型結(jié)構(gòu)內(nèi)容1
訓(xùn)練好字向量后,我們使用最多的是?index_to_key 、?key_to_index 、字向量,根據(jù)前面兩個(gè),就可以對(duì)文字進(jìn)行編碼與解碼。
?圖4?模型結(jié)構(gòu)內(nèi)容2
注:模型中的 index_to_key 、?key_to_index 、字向量 都可以單獨(dú)保存
pkl.dump([model.wv.index_to_key, model.wv.key_to_index, model.wv.vectors], open("PartialWeight.pkl", "wb"))保存模型
# 字向量保存model.wv.save_word2vec_format('word_data.vector', # 保存路徑binary=False # 如果為 True,則數(shù)據(jù)將以二進(jìn)制 word2vec 格式保存,否則將以純文本格式保存)# 模型保存model.save('word.model')通過保存字向量(word_data.vector),第一行第一個(gè)數(shù)字表示一共有多少字,第二個(gè)數(shù)字表示一個(gè)字用10的數(shù)字表示。
比如:0 --> [0.99632174 2.0563052 -0.72112525 3.789005 -4.6471505 -2.838667 -4.621025 4.180826 3.625088 3.2602801]
?圖6 字向量部分內(nèi)容
使用?
加載模型
# 1 通過模型加載詞向量(recommend)model = gensim.models.Word2Vec.load('word.model')# 2 通過字向量加載vector = KeyedVectors.load_word2vec_format('word_data.vector')?查看
model.wv.index_to_key?圖7 查看 index_to_key 的部分內(nèi)容
model.wv['提'] --》通過模型進(jìn)行查看??圖8?通過模型進(jìn)行查看字 “提” 的向量
vector['提'] --》通過字向量進(jìn)行查看圖9?通過字向量進(jìn)行查看字 “提” 的向量?
可以發(fā)現(xiàn)兩種方法得到的結(jié)果都是一樣的
詞向量
處理數(shù)據(jù)
datas = open("data/word.txt", "r", encoding="gbk").read().split("\n")words_datas = [[i for i in (jieba.cut(data))] for data in datas]?圖10 將數(shù)據(jù)處理成詞
訓(xùn)練與保存模型
model = Word2Vec(words_datas, vector_size=10, window=2, min_count=1, workers=8, sg=0, epochs=10)model.wv.save_word2vec_format('words_data.vector', binary=False)model.save('words.model')源碼獲取
Word2Vec 字&詞向量
總結(jié)
以上是生活随笔為你收集整理的深度学习-nlp系列(4):Word2Vec 字词向量的训练和使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于SSM福来客栈民宿预约管理系统
- 下一篇: 人脸伪造DFDC数据集下载 附网盘地址