首先需要具备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
版权声明:本文为博主原创文章,转载请附上博文链接!

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

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

    1 大纲概述 文本分类这个系列将会有十篇左右,包括基于word2vec预训练的文本分类,与及基于最新的预训练模型(ELMo,BERT等)的文本分类.总共有以下系列: word2vec预训练词向量 te ...

  2. word2vec 构建中文词向量

    词向量作为文本的基本结构——词的模型,以其优越的性能,受到自然语言处理领域研究人员的青睐.良好的词向量可以达到语义相近的词在词向量空间里聚集在一起,这对后续的文本分类,文本聚类等等操作提供了便利,本文 ...

  3. 使用word2vec训练中文词向量

    https://www.jianshu.com/p/87798bccee48 一.文本处理流程 通常我们文本处理流程如下: 1 对文本数据进行预处理:数据预处理,包括简繁体转换,去除xml符号,将单词 ...

  4. gensim中word2vec和其他一些向量的使用

    直接上代码吧,word2vec # test from gensim.models.word2vec import Word2Vec txt_file = open('data.txt') sente ...

  5. word2vec预训练词向量

    NLP中的Word2Vec讲解 word2vec是Google开源的一款用于词向量计算 的工具,可以很好的度量词与词之间的相似性: word2vec建模是指用CBoW模型或Skip-gram模型来计算 ...

  6. [Algorithm & NLP] 文本深度表示模型——word2vec&doc2vec词向量模型

    深度学习掀开了机器学习的新篇章,目前深度学习应用于图像和语音已经产生了突破性的研究进展.深度学习一直被人们推崇为一种类似于人脑结构的人工智能算法,那为什么深度学习在语义分析领域仍然没有实质性的进展呢? ...

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

    看了几天word2vec的理论,终于是懂了一些.理论部分我推荐以下几篇教程,有博客也有视频: 1.<word2vec中的数学原理>:http://www.cnblogs.com/pegho ...

  8. 基于word2vec训练词向量(二)

    转自:http://www.tensorflownews.com/2018/04/19/word2vec2/ 一.基于Hierarchical Softmax的word2vec模型的缺点 上篇说了Hi ...

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

    上一篇博客用词袋模型,包括词频矩阵.Tf-Idf矩阵.LSA和n-gram构造文本特征,做了Kaggle上的电影评论情感分类题. 这篇博客还是关于文本特征工程的,用词嵌入的方法来构造文本特征,也就是用 ...

随机推荐

  1. 数据库设计 ch.7

    数据库建设的基本规律 三分技术 七分管理 十二分基础数据 阶段 需求分析阶段 概念设计阶段 逻辑设计阶段 物理设计阶段 数据库实施阶段 数据库维护阶段 1 需求分析 2 概念设计 形成概念模型 3 逻 ...

  2. 1、jxl导入/导出excel案例,黏贴即可运行

    package junit.test; import java.io.File; import java.io.IOException; import java.util.ArrayList; imp ...

  3. Oracle ORA-01861

    Oracle 插入时间时 报错:ORA-01861: 文字与格式字符串不匹配 的解决办法 解决方法:   这个错误一般出现在时间字段上,即你插入的时间格式和数据库现有的时间格式不一致,解决的方法是格式 ...

  4. Python实例 复制文件

    import  shutil import  os import  os.path src = " d:\\download\\test\\myfile1.txt " dst = ...

  5. 洛谷P1313 [NOIP2011提高组Day2T1]计算系数

    P1313 计算系数 题目描述 给定一个多项式(by+ax)^k,请求出多项式展开后x^n*y^m 项的系数. 输入输出格式 输入格式: 输入文件名为factor.in. 共一行,包含5 个整数,分别 ...

  6. Axure之母版窗口

  7. Poj 2104区间第k大(归并树)

    题目链接 K-th Number Time Limit: 20000MS Memory Limit: 65536K Total Submissions: 36890 Accepted: 11860 C ...

  8. 2017年2月27日Unicorn, US (148) and China (69), followed by the U.K. (10), India (9), Israel (5) and Germany (5).

    Revisiting The Unicorn Club Get to know the newest crowd of billion dollar startups In 2013, when Ai ...

  9. Thread.sleep

    Thread.sleep() The current thread changes state from Running to Waiting/Blocked as shown in the diag ...

  10. 论C#的多继承

    意外中看到这篇博客,很有意思! 本文转自:http://www.cnblogs.com/leotsai/p/csharp-multi-inheritance.html C#多继承的讨论似乎是个古老的问 ...