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

一.对原始语料分词

选择《人民的名义》的小说原文作为语料,先采用jieba进行分词:数据集

import jieba
import jieba.analyse
import chardet
jieba.suggest_freq('沙瑞金', True)  # 加入一些词,使得jieba分词准确率更高
jieba.suggest_freq('田国富', True)
jieba.suggest_freq('高育良', True)
jieba.suggest_freq('侯亮平', True)
jieba.suggest_freq('钟小艾', True)
jieba.suggest_freq('陈岩石', True)
jieba.suggest_freq('欧阳菁', True)
jieba.suggest_freq('易学习', True)
jieba.suggest_freq('王大路', True)
jieba.suggest_freq('蔡成功', True)
jieba.suggest_freq('孙连城', True)
jieba.suggest_freq('季昌明', True)
jieba.suggest_freq('丁义珍', True)
jieba.suggest_freq('郑西坡', True)
jieba.suggest_freq('赵东来', True)
jieba.suggest_freq('高小琴', True)
jieba.suggest_freq('赵瑞龙', True)
jieba.suggest_freq('林华华', True)
jieba.suggest_freq('陆亦可', True)
jieba.suggest_freq('刘新建', True)
jieba.suggest_freq('刘庆祝', True)
jieba.suggest_freq('赵德汉', True)
 
result_cut = []
with open('./in_the_name_of_people.txt', 'rb') as f:
    raw_data = f.read()
    encoding = chardet.detect(raw_data)['encoding']
    lines = raw_data.decode(encoding).splitlines()
    for line in lines:
        result_cut.append(list(jieba.cut(line)))
 
# 在这里处理分词结果result_cut
 
# 不需要再调用 f.close(),因为使用了 with 语句会自动关闭文件

 jieba.suggest_freq()是jieba提供的一个函数,用于调整词语在分词过程中的识别频率,从而更加准确地分词。通常情况下,结巴分词能够对大多数文本进行比较准确的分词,但是对于一些特定的场景或者领域,可能会出现一些无法正确分词的情况。这时可以使用suggest_freq()函数来手动调整分词识别的频率,以达到更好的分词效果。

suggest_freq()函数的参数包括一个词语和一个识别频率。识别频率越高,分词时就越容易将该词语作为一个词来进行分词;反之,则越容易将该词语与其他词语组合起来进行分词。可以通过调整识别频率来改变该词语在分词中的权重,从而达到更好的分词效果。

# 添加自定义停用词
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模型 

from gensim.models import Word2Vec
 
model = Word2Vec(result_stop,     # 用于训练的语料数据
                 vector_size=100, # 是指特征向量的维度,默认为100。
                 window=5,        # 一个句子中当前单词和被预测单词的最大距离。
                 min_count=1)   # 可以对字典做截断. 词频少于min_count次数的单词会被丢弃掉, 默认值为5。

词向量模型 (model): 已经训练好的词向量模型存储在变量model中。词向量模型能够将词汇表中的每个词映射到一个向量空间中,这样语义相近的词就会在这个空间中彼此靠近。

三、模型应用

1.计算词汇相似度

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

# 计算两个词的相似度
print(model.wv.similarity('沙瑞金', '季昌明'))
print(model.wv.similarity('沙瑞金', '田国富'))

 

model.wv.similarity是用于计算两个词向量之间余弦相似度的方法,其中model是指训练好的Word2Vec模型。余弦相似度是一种常用的向量相似度度量方法,它可以用于衡量两个向量之间的相似程度,值范围为[-1,1]。当两个词向量的余弦相似度接近1时,表示它们之间的关系较为密切;当余弦相似度接近0时,表示它们之间的关系不明显;当余弦相似度接近-1时,表示它们之间的关系较为矛盾。因此,通过计算两个词向量之间的余弦相似度,我们可以判断它们之间的关系是否密切。

# 选出最相似的5个词
for e in model.wv.most_similar(positive=['沙瑞金'], topn=5):
    print(e[0], e[1])

#这行代码遍历 most_similar 方法返回的结果。
#每个结果 e 是一个元组,其中包含一个词和它与“沙瑞金”在语义上的相似度。
#print(e[0], e[1]) 这行代码打印每个元组的第一个元素(相似的词)和第二个元素(与“沙瑞金”的相似度)。相似度是一个介于0和1之间的浮点数,数值越大表示相似度越高。

model.wv.most_similar(positive=['沙瑞金'], topn=5) 这行代码调用了模型的 most_similar 方法,用于查找与列表positive中的词语最相似的词。这里,positive参数是一个包含一个或多个词的列表,用于指定要寻找相似词的目标。在这个例子中,列表中只有一个词:“沙瑞金”。
topn=5 参数指定了需要返回的最相似词的数量。在这里,它被设置为5,意味着方法将返回与“沙瑞金”最相似的5个词。

2. 找出不匹配的词汇

使用doesnt_match()方法,我们可以找到一组词汇中与其他词汇不匹配的词汇。

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


在这组词汇中不匹配的词汇:书

3. 计算词汇的词频

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

沙瑞金:353

word_frequency = model.wv.get_vecattr("刘新建", "count")
print(f"刘新建:{word_frequency}")


刘新建:164

相关推荐

  1. N5调用Gensim训练Word2Vec模型

    2024-06-07 12:26:03       18 阅读
  2. Word2Vec原理+gensim实现

    2024-06-07 12:26:03       47 阅读

最近更新

  1. 【AI应用探讨】—主成分分析(PCA)应用场景

    2024-06-07 12:26:03       0 阅读
  2. 基数排序算法Python实现

    2024-06-07 12:26:03       0 阅读
  3. qt todoapp

    2024-06-07 12:26:03       0 阅读
  4. 如何减少开发过程中的bug-数据库篇

    2024-06-07 12:26:03       0 阅读
  5. 驻场运维的前途在哪里,这里有金玉良言

    2024-06-07 12:26:03       1 阅读
  6. 认字之 刬

    2024-06-07 12:26:03       1 阅读
  7. lvs集群

    lvs集群

    2024-06-07 12:26:03      0 阅读
  8. AUTOSAR:汽车软件架构的未来

    2024-06-07 12:26:03       0 阅读
  9. 相机光学(二十九)——显色指数(Ra)

    2024-06-07 12:26:03       0 阅读

热门阅读

  1. 化学反应冷媒降温制冷量计算方法

    2024-06-07 12:26:03       11 阅读
  2. GeoJson 几何对象实例说明(2024-06-06)

    2024-06-07 12:26:03       13 阅读
  3. rust嵌入式开发之总结

    2024-06-07 12:26:03       11 阅读
  4. 初识C语言第三十天——设计三子棋游戏

    2024-06-07 12:26:03       10 阅读
  5. nginx自动清理脚本

    2024-06-07 12:26:03       11 阅读
  6. VUE中xslx解析excel日期格式问题

    2024-06-07 12:26:03       11 阅读
  7. MDK(Keil MDK)编辑器配置详解与快捷按键

    2024-06-07 12:26:03       9 阅读
  8. SystemVerilog的基本语法和流水的实现

    2024-06-07 12:26:03       10 阅读