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

一、准备工作

1.安装Gensim库

Gensim是在做自然语言处理 时较为经常用到的一个工具库,主要用来以无监督的方式从原始的非结构化文本当中来学习到文本隐藏层的主题向量表达。

主要包括TF-IDF,LSA,LDA,word2vec,doc2vec等多种模型。

2.对原始语料分词

选择《人民的名义》的小说原文作为语料,先采用jieba进行分词。这里是直接添加的自定义词汇,没有选择创建自定义词汇文件。

python 复制代码
import jieba
import jieba.analyse
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)

with open('F:/jupyter lab/DL-100-days/datasets/NLP/in_the_name_of_people.txt', encoding='utf-8') as f:
    result_cut= []
    lines =f.readlines()
    for line in lines:
        result_cut.append(list(jieba.cut(line)))
        
f.close()
python 复制代码
#添加自定义停用词
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)]

拿到了分词后的文件,在一般的NLP处理中,会需要去停用词。由于word2vec的算法依赖于上下文而上下文有可能就是停词。因此对于word2vec,我们可以不用去停词,仅仅去掉一些标点符号,做一个简单的数据清洗。

现在我们可以直接读分词后的文件到内存。这里使用了word2vec提供的LineSentence类来读文件然后套用word2vec的模型。在实际应用中,可以调参提高词的embedding的效果

python 复制代码
print(result_stop[100:103])

二、训练Word2Vec

python 复制代码
from gensim.models import Word2Vec

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

三、模型应用

1.计算词汇相似度
python 复制代码
#计算两个词的相似度
print(model.wv.similarity('沙瑞金','季昌明'))
print(model.wv.similarity('沙瑞金','田国富'))
复制代码
0.9994106
0.99951524
python 复制代码
#选出最相似的5个词
for e in model.wv.most_similar(positive=['沙瑞金'],topn=5):
    print(e[0],e[1])
复制代码
这位 0.999855637550354
干部 0.999782383441925
做 0.9997743368148804
刘新建 0.9997636675834656
大 0.9997599720954895
2.找出不匹配的词汇
python 复制代码
odd_word = model.wv.doesnt_match(["苹果","香蕉","橙子","书"])
print(f"在这组词汇中不匹配的词汇:{odd_word}")
3.计算词汇的词频
python 复制代码
word_frequency = model.wv.get_vecattr("沙瑞金","count")
print(f"沙瑞金:{word_frequency}")

四、学习心得

本周调用Gensim库训练Word2Vec模型,首先是安装Gensim库,随后进行分词和训练。通过分词可以对数据进行更好地区分。随后对Word2Vec进行训练,随之应用。

相关推荐
@小匠几秒前
Read Frog:一款开源的 AI 驱动浏览器语言学习扩展
人工智能·学习
山间小僧1 小时前
「AI学习笔记」RNN
机器学习·aigc·ai编程
网教盟人才服务平台3 小时前
“方班预备班盾立方人才培养计划”正式启动!
大数据·人工智能
芯智工坊3 小时前
第15章 Mosquitto生产环境部署实践
人工智能·mqtt·开源
菜菜艾3 小时前
基于llama.cpp部署私有大模型
linux·运维·服务器·人工智能·ai·云计算·ai编程
TDengine (老段)3 小时前
TDengine IDMP 可视化 —— 分享
大数据·数据库·人工智能·时序数据库·tdengine·涛思数据·时序数据
小真zzz4 小时前
搜极星:第三方多平台中立GEO洞察专家全面解析
人工智能·搜索引擎·seo·geo·中立·第三方平台
GreenTea4 小时前
从 Claw-Code 看 AI 驱动的大型项目开发:2 人 + 10 个自治 Agent 如何产出 48K 行 Rust 代码
前端·人工智能·后端
火山引擎开发者社区5 小时前
秒级创建实例,火山引擎 Milvus Serverless 让 AI Agent 开发更快更省
人工智能