- ???? 本文为????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 Word2Vec
model = 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的优势是其可以成功捕捉单词之间的相似性和类比关系