- 🍨 本文为🔗365天深度学习训练营 中的学习记录博客
- 🍖 原作者:K同学啊
本周任务:
- 了解并学习Word2vec相关知识
- 创建一个.txt文件存放自定义词汇,防止其被切分
对原始语料进行分词
import jieba
import jieba.analyse# 读取自定义词汇文件
with open('./自定义词汇.txt', 'r', encoding='utf-8') as f:custom_words = f.read().splitlines()# 将自定义词汇加载到 jieba 中
for word in custom_words:jieba.suggest_freq(word, True)with open('./in_the_name_of_people.txt') as f:result_cut = []lines = f.readlines()for line in lines:result_cut.append(list(jieba.cut(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)]
训练Word2Vec模型
from gensim.models import Word2Vecmodel = Word2Vec(result_stop, vector_size=100, window=5, min_count=5)
模型应用
计算词汇相似度
# 计算两个词的余弦相似度
print(model.wv.similarity('沙瑞金', '季昌明'))
print(model.wv.similarity('沙瑞金', '田国富'))
0.9982539
0.99830014
# 选出最相似的5个词
for e in model.wv.most_similar(positive=['沙瑞金'], topn=5):print(e[0], e[1])
李达康 0.9990676045417786
对 0.9987690448760986
话 0.998748242855072
学生 0.9986950755119324
有些 0.9985189437866211
找出不匹配的词汇
# 选出不同的词
odd_word = model.wv.doesnt_match(['苹果','香蕉','橙子','书'])
print(f'在这组词汇中不匹配的词汇:{odd_word}')
在这组词汇中不匹配的词汇:书
计算词汇的词频
# 计算词汇的词频
word_frequency = model.wv.get_vecattr('沙瑞金', 'count')
print(f"沙瑞金:{word_frequency}")
沙瑞金:353
总结
- Word2Vec是一种词嵌入方法,是一种用于生成词向量的浅层神经网络模型
- 与此类似,前几周的embedding也是一种词嵌入方法
- Word2Vec的优势是其可以成功捕捉单词之间的相似性和类比关系