第N7周:调用Gensim库训练Word2Vec模型

时间:2024-11-15 12:40:12
  • ???? 本文为????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.99906760454177860.99876904487609860.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的优势是其可以成功捕捉单词之间的相似性和类比关系