gensim训练词向量
# -*- coding: utf-8 -*-
# @Time : 2020/7/7 12:41
# @Author : WngXng
import jieba
from gensim.models import word2vec
import gensim
import warnings
warnings.filterwarnings("ignore")
# 对初始语料进行分词处理后,作为训练模型的语料
with open("corpus.txt", 'r', encoding='utf-8') as f:
text = f.read() # 将整个文件的所有内容读做一个字符串
wordList = jieba.cut(text)
wordText = " ".join(wordList)
wordText = wordText.replace(',', '').replace('。', '').replace('?', '')\
.replace('!', '').replace('“', '').replace('”', '').replace(':', '')\
.replace('…', '').replace('(', '').replace(')', '').replace('—', '')\
.replace('《', '').replace('》', '').replace('、', '').replace('‘', '')\
.replace('’', '')
with open("corpus_cut.txt", 'w', encoding='utf-8') as f:
f.write(wordText)
# 文本必须是分好词的, 词与词之间有间隔
sentences = word2vec.Text8Corpus("corpus_cut.txt")
print("sentences格式:", sentences)
### <gensim.models.word2vec.Text8Corpus object at 0x0000026359A46408>
# 训练 skip-gram 模型
model = gensim.models.Word2Vec(sentences, size=20, min_count=2,
window=3, iter=15)
### 1 保存一般模型
model.save('11.model')
model_1 = word2vec.Word2Vec.load('11.model')
print("模型1:", model_1)
print("两个词的相似度为:", model_1.wv.similarity("热火", "湖人"))
print("两个词的相似度为:", model_1.wv.similarity("热火", "北京"))
# 计算某个词的相关词列表
top_n = model_1.wv.most_similar("科比", topn=3) # 最相关的几个词
print("top_n格式:", top_n)
name_list = ["热火", "湖人", "凯尔特人", "北京"]
print("当中最不相关的词:", model_1.doesnt_match(name_list))
### 第二种方法 以保存词向量的方式保存模型 二进制
model.wv.save_word2vec_format('22.bin', binary=True)
# 通过加载词向量加载模型模型
model_2 = gensim.models.KeyedVectors.load_word2vec_format('22.bin', binary=True)
print("\n模型2:", model_2)
print("两个词的相似度为:", model_2.similarity("热火", "湖人"))
print("两个词的相似度为:", model_2.similarity("热火", "北京"))
# 计算某个词的相关词列表
top_n = model_2.wv.most_similar("湖人", topn=3) # 最相关的几个词
print("湖人top_n格式:", top_n)
name_list = ["热火", "湖人", "凯尔特人", "北京"]
print("当中最不相关的词:", model_2.doesnt_match(name_list))
### 第三种方式 保存词向量 与第二种方法相同 只是非二进制文件
model.wv.save_word2vec_format('33.txt', binary=False)
### 加载模型
model_3 = gensim.models.KeyedVectors.load_word2vec_format('33.txt', binary=False)
print("\n模型3:", model_3)
print("两个词的相似度为:", model_3.similarity("热火", "湖人"))
print("两个词的相似度为:", model_3.similarity("热火", "北京"))
# 计算某个词的相关词列表
top_n = model_3.wv.most_similar("科比", topn=3) # 最相关的几个词
print("top_n格式:", top_n)
name_list = ["热火", "湖人", "凯尔特人", "北京"]
print("当中最不相关的词:", model_3.doesnt_match(name_list))
最原始的文件内容:
分词后的文件
方法一和方法二保存的都是二进制文件,无法查看内容, 方法三的内容为