gensim的word2vec如何得出词向量(python)

首先需要具备gensim包,然后需要一个语料库用来训练,这里用到的是skip-gram或CBOW方法,具体细节可以去查查相关资料,这两种方法大致上就是把意思相近的词映射到词空间中相近的位置。

语料库test8下载地址:

http://mattmahoney.net/dc/text8.zip

这个语料库是从http://blog.csdn.net/m0_37681914/article/details/73861441这篇文章中找到的。

检查语料是否需要做预处理:
将数据下载好了解压出来,在做词向量之前我们需要了解数据的存储结构,判断它是否满足gensim包里word2vec函数对输入数据的形式要求。word2vec函数的输入最好是一整篇文字,不含标点符号以及换行符。那么我们应该检查test8数据是否符合。然而双击打开test8是行不通的,因为文件过大。那么就需要我们用程序打开它。代码如下:

with open(‘/text8‘,‘r‘,encoding=‘utf-8‘) as file:
for line in file.readlines():
print(line)
程序会返回警告,内存不够,打印不出来。明显是因为有一行内容太多导致的。可以进行如下验证:

with open(‘/text8‘,‘r‘,encoding=‘utf-8‘) as file:
for line in file.readlines():
print(len(line))

输出只有一个值,表示数据只有一行,且显示这一行有100000000个字符长度。由于文件内数据结构一致,那么我们没有必要将数据全部输出来看,只需要输出一部分就知道它的数据结构,那么修改代码如下:

a = 0
b = 0
with open(‘/text8‘,‘r‘,encoding=‘utf-8‘) as file:
line = file.read()
for char in line:
b+=1
print(char,end=‘‘)
if b-a == 100:
a = b
print(‘\n‘)
if a == 5000:
break
我们输出前5000个字符来看看,并且每100个字符换一行。

这里只是开头一部分,可以看到数据完全没有标点符号,且之前验证过所有数据都是在同一行,表示没有换行符。那么我们无需对数据进行预处理。接下来是数据处理部分。

数据处理部分:
from gensim.models import word2vec
import logging
logging.basicConfig(format=‘%(asctime)s : %(levelname)s : %(message)s‘, level=logging.INFO)
sentences = word2vec.Text8Corpus(‘/text8‘)
model = word2vec.Word2Vec(sentences, sg=1, size=100, window=5, min_count=5, negative=3, sample=0.001, hs=1, workers=4)
model.save(‘/text82.model‘)
print(model[‘man‘])
那么
logging.basicConfig(format=‘%(asctime)s : %(levelname)s : %(message)s‘, level=logging.INFO)
这一行表示我们的程序会输出日志信息,形式(format)为日期(asctime):信息级别(levelname):日志信息(message),信息级别为正常信息(logging.INFO)。关于logging的知识,大家可以去自行学习。https://www.cnblogs.com/bjdxy/archive/2013/04/12/3016820.html点击打开链接

上图就是输出的日志信息。实际工作中,我们也可以不加这个日志,但这么做的前提是我们确定程序一定正确,不会出错,因为一旦出错我们就需要根据日志信息来推断错误发生的可能。

将语料库保存在sentence中

sentences = word2vec.Text8Corpus(‘/text8‘)
生成词向量空间模型

model = word2vec.Word2Vec(sentences, sg=1, size=100, window=5, min_count=5, negative=3, sample=0.001, hs=1, workers=4)
这里讲下参数含义:

class gensim.models.word2vec.Word2Vec(sentences=None,size=100,alpha=0.025,window=5, min_count=5,max_vocab_size=None, sample=0.001,seed=1, workers=3,min_alpha=0.0001, sg=0, hs=0, negative=5, cbow_mean=1,hashfxn=<built-in function hash>,iter=5,null_word=0, trim_rule=None, sorted_vocab=1, batch_words=10000)
参数:
1.sentences:可以是一个List,对于大语料集,建议使用BrownCorpus,Text8Corpus或·ineSentence构建。
2.sg: 用于设置训练算法,默认为0,对应CBOW算法;sg=1则采用skip-gram算法。
3.size:是指输出的词的向量维数,默认为100。大的size需要更多的训练数据,但是效果会更好. 推荐值为几十到几百。
4.window:为训练的窗口大小,8表示每个词考虑前8个词与后8个词(实际代码中还有一个随机选窗口的过程,窗口大小<=5),默认值为5。
5.alpha: 是学习速率
6.seed:用于随机数发生器。与初始化词向量有关。
7.min_count: 可以对字典做截断. 词频少于min_count次数的单词会被丢弃掉, 默认值为5。
8.max_vocab_size: 设置词向量构建期间的RAM限制。如果所有独立单词个数超过这个,则就消除掉其中最不频繁的一个。每一千万个单词需要大约1GB的RAM。设置成None则没有限制。
9.sample: 表示 采样的阈值,如果一个词在训练样本中出现的频率越大,那么就越会被采样。默认为1e-3,范围是(0,1e-5)
10.workers:参数控制训练的并行数。
11.hs: 是否使用HS方法,0表示不使用,1表示使用 。默认为0
12.negative: 如果>0,则会采用negativesamp·ing,用于设置多少个noise words
13.cbow_mean: 如果为0,则采用上下文词向量的和,如果为1(default)则采用均值。只有使用CBOW的时候才起作用。
14.hashfxn: hash函数来初始化权重。默认使用python的hash函数
15.iter: 迭代次数,默认为5。
16.trim_rule: 用于设置词汇表的整理规则,指定那些单词要留下,哪些要被删除。可以设置为None(min_count会被使用)或者一个接受()并返回RU·E_DISCARD,uti·s.RU·E_KEEP或者uti·s.RU·E_DEFAU·T的函数。
17.sorted_vocab: 如果为1(defau·t),则在分配word index 的时候会先对单词基于频率降序排序。
18.batch_words:每一批的传递给线程的单词的数量,默认为10000
这里再把生成的空间模型保存下来,以便下次使用。

model.save(‘/text8.model‘)

下次使用就不在需要加载语料库和生成模型了。只需要:

‘‘‘
sentences = word2vec.Text8Corpus(‘/text8‘)
model = word2vec.Word2Vec(sentences, sg=1, size=100, window=5, min_count=5, negative=3, sample=0.001, hs=1, workers=4)
model.save(‘/text8.model‘)
‘‘‘
model = word2vec.Word2Vec.load(‘/text8.model‘)
最后是查看某个词的词向量:

print(model[‘man‘])

当然model函数还可以做更多的事情,比如查看两个词的相似度等等,想知道的请自行百度
---------------------
作者:lwn556u5ut
来源:CSDN
原文:https://blog.csdn.net/weixin_40292043/article/details/79571346
版权声明:本文为博主原创文章,转载请附上博文链接!

原文地址:https://www.cnblogs.com/jfdwd/p/11089155.html

时间: 2024-10-07 11:40:07

gensim的word2vec如何得出词向量(python)的相关文章

word2vec 构建中文词向量

词向量作为文本的基本结构--词的模型,以其优越的性能,受到自然语言处理领域研究人员的青睐.良好的词向量可以达到语义相近的词在词向量空间里聚集在一起,这对后续的文本分类,文本聚类等等操作提供了便利,本文将详细介绍如何使用word2vec构建中文词向量. 一.中文语料库 本文采用的是搜狗实验室的搜狗新闻语料库,数据链接 http://www.sogou.com/labs/resource/cs.php 下载下来的文件名为: news_sohusite_xml.full.tar.gz 二.数据预处理

文本分类实战(一)—— word2vec预训练词向量

1 大纲概述 文本分类这个系列将会有十篇左右,包括基于word2vec预训练的文本分类,与及基于最新的预训练模型(ELMo,BERT等)的文本分类.总共有以下系列: word2vec预训练词向量 textCNN 模型 charCNN 模型 Bi-LSTM 模型 Bi-LSTM + Attention 模型 RCNN 模型 Adversarial LSTM 模型 Transformer 模型 ELMo 预训练模型 BERT 预训练模型 所有代码均在textClassifier仓库中, 觉得有帮助,

文本情感分析(二):基于word2vec和glove词向量的文本表示

上一篇博客用词袋模型,包括词频矩阵.Tf-Idf矩阵.LSA和n-gram构造文本特征,做了Kaggle上的电影评论情感分类题. 这篇博客还是关于文本特征工程的,用词嵌入的方法来构造文本特征,也就是用word2vec词向量和glove词向量进行文本表示,训练随机森林分类器. 一.训练word2vec词向量 Kaggle情感分析题给出了三个数据集,一个是带标签的训练集,共25000条评论,一个是测试集,无标签的,用来做预测并提交结果,这两个数据集是上一篇文章里我们用过的. 此外还有一个无标签的数据

文本分布式表示(二):用tensorflow和word2vec训练词向量

博客园的markdown用起来太心塞了,现在重新用其他编辑器把这篇博客整理了一下. 目前用word2vec算法训练词向量的工具主要有两种:gensim 和 tensorflow.gensim中已经封装好了word2vec这个包,用起来很方便,只要把文本处理成规范的输入格式,寥寥几行代码就能训练词向量.这样比较适合在做项目时提高效率,但是对理解算法的原理帮助不大.相比之下,用tensorflow来训练word2vec比较麻烦,生成batch.定义神经网络的各种参数,都要自己做,但是对于理解算法原理

【python gensim使用】word2vec词向量处理英文语料

word2vec介绍 word2vec官网:https://code.google.com/p/word2vec/ word2vec是google的一个开源工具,能够根据输入的词的集合计算出词与词之间的距离. 它将term转换成向量形式,可以把对文本内容的处理简化为向量空间中的向量运算,计算出向量空间上的相似度,来表示文本语义上的相似度. word2vec计算的是余弦值,距离范围为0-1之间,值越大代表两个词关联度越高. 词向量:用Distributed Representation表示词,通常

【python gensim使用】word2vec词向量处理中文语料

word2vec介绍 word2vec官网:https://code.google.com/p/word2vec/ word2vec是google的一个开源工具,能够根据输入的词的集合计算出词与词之间的距离. 它将term转换成向量形式,可以把对文本内容的处理简化为向量空间中的向量运算,计算出向量空间上的相似度,来表示文本语义上的相似度. word2vec计算的是余弦值,距离范围为0-1之间,值越大代表两个词关联度越高. 词向量:用Distributed Representation表示词,通常

word2vec词向量训练及中文文本相似度计算

本文是讲述如何使用word2vec的基础教程,文章比较基础,希望对你有所帮助! 官网C语言下载地址:http://word2vec.googlecode.com/svn/trunk/ 官网Python下载地址:http://radimrehurek.com/gensim/models/word2vec.html 1.简单介绍 参考:<Word2vec的核心架构及其应用 · 熊富林,邓怡豪,唐晓晟 · 北邮2015年> <Word2vec的工作原理及应用探究 · 周练 · 西安电子科技大学

Python与自然语言处理(二)基于Gensim的Word2Vec

继续学习摸索,看到很多博客都在研究Word2Vec,感觉挺有意思,我也来尝试一下. 实验环境:Python3,Java8 Word2Vec的输入是句子序列,而每个句子又是一个单词列表,由于没有这样结构的现成输入,所以决定自己动手对原始语料进行预处理. NLPIR是一个汉语分词系统,挺感谢张华平博士,便利了我们的文本处理工作.下载地址:http://ictclas.nlpir.org/newsdownloads?DocId=389 这里还有一个自然语言处理与信息检索共享平台(感觉挺好的,有资料,还

word2vec词向量处理英文语料

word2vec介绍          word2vec官网:https://code.google.com/p/word2vec/ word2vec是google的一个开源工具,能够根据输入的词的集合计算出词与词之间的距离. 它将term转换成向量形式,可以把对文本内容的处理简化为向量空间中的向量运算,计算出向量空间上的相似度,来表示文本语义上的相似度. word2vec计算的是余弦值,距离范围为0-1之间,值越大代表两个词关联度越高. 词向量:用Distributed Representat