N5 - 使用Gensim库训练word2vec模型



环境

安装gensim和jieba库

pip install gensim jieba

步骤

分词

使用jieba进行分词,通过调整一些人名的词频,防止人名被分词。

names = ['沙瑞金', '田国富', '高育良', '候亮平', '钟小艾', '陈岩石', '欧阳菁', '易学习', '王大路', '蔡成功', '陈连城', '季昌明', '丁义珍', '郑西坡', '赵东来', '高小琴', '赵瑞龙', '林华华', '陆亦可', '刘新建', '刘庆祝', '赵德汉']

for name in names:
	jieba.suggest_freq(name, True)

然后读取文本,进行分词

with open('in_the_name_of_peoples.txt', encoding='utf-8') as f:
	result_cut = []
	lines = f.readlines()
	for line in lines:
		result_cut.append(jieba.lcut(line))
f.close()

添加自定义停用词,把一些标点,空格,符号等去除

stopwords_list = [',', '。', '\n', '\u3000', ' ', ':', '!', '?', "…"]

# 删除停用词
def remove_stopwords(ls):
	return [word for word in ls if word not in stopwords_list]
result_stop = [remove_stopwords(x) for x in result_cut if remove_stopwords(x)]

随机打印几行文字,看下效果

print(result_stop[100:103])

分词效果

训练word2vec模型

直接调用gensim提供的工具函数来进行模型训练

from gensim.models import Word2Vec

# vector_size 代表了特征向量的维度
# window=5 意思是一个句子中当前单词和被预测单词的最大距离
# min_count=1 可以对字典做截断,词频少于min_count次数的单词会被丢弃,不能在一起特征向量计算
model = Word2Vec(result_stop, vector_size=100, window=5, min_count=1)

模型应用

计算词汇间的相似度

可以使用similarity()方法计算两个词汇间的余弦相似度

print(model.wv.similarity('沙瑞金', '季昌明'))
print(model.wv.similarity('沙瑞金', '田国富'))

相似度
还可以在模型中选择出与给定的词汇最相似的n个词汇

for word, similarity in model.wv.most_similar(positive=['沙瑞金'], topn=5):
	print(word, similarity)

最相似的5个词汇

找出不匹配的词汇

odd_word = model.wv.doesnt_match(['苹果', '香蕉', '橙子', '书'])
print(f"在这组词汇中不匹配的词汇是: {odd_word}")

不匹配的词汇

计算词汇的词频

word_frequency = model.wv.get_vecattr('沙瑞金', 'count')
print(f"沙瑞金:{word_frequency}")

词汇的词频
说明沙瑞金这个词汇在所有的句子中一共出现了353次。

总结与心得体会

通过本次实验,我发现传统的机器学习与深度学习任务比起来,节约的计算机性能不是一点半点。因此在一个任务使用传统的机器学习方法就可以取得不错的效果时,其实根本就没有必要使用深度学习模型。
通过word2vec模型的部分应用效果,感觉效果比深度学习模型差别很大,有可能是因为停用词只去除了标点符号,但是中文有很多常见的停用词,如“的”,“了”这种词汇,但是有些动词在句子中是有意义的,在相似问题中却是没什么意义,就像上面搜索与沙瑞金相似度较高的词汇,竟然出现了“做”, “像”这种动词,显然是不太合理的。这可能就是Word2Vec模型的弊端,它并不能从句子角度来分析,只能在词汇的角度进行一些统计意义上的分析与建模。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值