做企业网站 目的,亚马逊seo什么意思,如何在小红书上做推广,精品课程网站建设项目验收单本文为365天深度学习训练营 中的学习记录博客原作者#xff1a;K同学啊 任务#xff1a; ●1. 阅读NLP基础知识里Word2vec详解一文#xff0c;了解并学习Word2vec相关知识 ●2. 创建一个.txt文件存放自定义词汇#xff0c;防止其被切分
数据集#xff1a;选择《人民的名义… 本文为365天深度学习训练营 中的学习记录博客原作者K同学啊 任务 ●1. 阅读NLP基础知识里Word2vec详解一文了解并学习Word2vec相关知识 ●2. 创建一个.txt文件存放自定义词汇防止其被切分
数据集选择《人民的名义》的小说原文作为语料在代码里命名为“in_the_name_of_people.txt”。
一、准备工作 安装Gensim库 使用pip进行安装!pip install gensim 对原始语料分词
选择《人民的名义》的小说原文作为语料先采用jieba进行分词。这里是直接添加的自定义词汇没有选择创建自定义词汇文件。任务2代码处
因为在默认情况下open() 函数在 Windows 系统上使用 gbk 编码而文件可能是使用其他编码例如 UTF-8保存的这导致了 UnicodeDecodeError的问题。
如果不确定“in_the_name_of_people.txt”文件的编码可以尝试以下方法可以使用 chardet 库来检测文件的编码。
import chardetwith open(./N7/in_the_name_of_people.txt, rb) as f:result chardet.detect(f.read())print(result){encoding: UTF-8-SIG, confidence: 1.0, language: }检测到UTF-8-SIG编码后再使用正确的编码打开文件。在下面的 open() 函数中显式指定UTF-8的文件编码打开文件。 当然也可以直接跳过上面的检测文件的代码直接在open() 函数中显式指定UTF-8的文件编码打开文件。
import jieba
import jieba.analysejieba.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(./N7/in_the_name_of_people.txt,encodingutf-8) as f:result_cut []lines f.readlines() for line in lines:result_cut.append(list(jieba.cut(line)))f.close()代码输出
Building prefix dict from the default dictionary ...
Loading model from cache C:\Users\Administrator\AppData\Local\Temp\jieba.cache
Loading model cost 0.776 seconds.
Prefix dict has been built successfully.# 添加自定义停用词
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的效果。
print(result_stop[100:103])代码输出
[[侯亮平, 也, 很, 幽默, 一把, 抓住, 了, 赵德汉, 的, 手, 哎, 赵, 处长, 我, 既, 来, 了, 还, 真, 舍不得, 和, 你, 马上, 就, 分手, 哩, 咱们, 去, 下, 一个点, 吧, 说, 罢, 从, 赵家, 桌上, 杂物, 筐, 里, 准确, 地, 拿出, 一张, 白色, 门卡, 插到, 了, 赵德汉, 的, 上衣, 口袋, 里], [赵德汉, 慌, 了, 忙, 把门, 卡往, 外, 掏, 这, 这, 什么, 呀, 这, 是], [你, 帝京, 苑, 豪宅, 的, 门, 卡, 啊, 请, 继续, 配合, 我们, 执行公务, 吧]]二、训练Word2Vec模型
from gensim.models import Word2Vecmodel Word2Vec(result_stop, # 用于训练的语料数据vector_size100, # 是指特征向量的维度默认为100。window5, # 一个句子中当前单词和被预测单词的最大距离。min_count1) # 可以对字典做截断词频少于min_count次数的单词会被丢弃掉, 默认值为5。三、模型应用
1.计算词汇相似度
可以使用similarity()方法计算两个词汇之间的余弦相似度。
# 计算两个词的相似度
print(model.wv.similarity(沙瑞金, 季昌明))
print(model.wv.similarity(沙瑞金, 田国富))代码输出
0.9991677
0.9992704# 选出最相似的5个词
for e in model.wv.most_similar(positive[沙瑞金], topn5):print(e[0], e[1])代码输出
这位 0.9998722076416016
有些 0.9997892379760742
这是 0.9997782707214355
情况 0.999778151512146
一位 0.9997725486755371找出不匹配的词汇
使用doesnt_match()方法我们可以找到一组词汇中与其他词汇不匹配的词汇。
odd_word model.wv.doesnt_match([苹果, 香蕉, 橙子, 书])
print(f在这组词汇中不匹配的词汇{odd_word})代码输出
在这组词汇中不匹配的词汇书计算词汇的词频
我们可以使用get_vecattr()方法获取词汇的词频。
word_frequency model.wv.get_vecattr(沙瑞金, count)
print(f沙瑞金{word_frequency})代码输出
沙瑞金353