gensim学习笔记
1、词向量建模的word2vec模型和用于长文本向量建模的doc2vec模型
在Gensim中实现word2vec模型非常简单。首先,我们需要将原始的训练语料转化成一个sentence的迭代器;每一次迭代返回的sentence是一个word(utf8格式)的列表:
class MySentences(object):
def __init__(self, dirname):
self.dirname = dirname def __iter__(self):
for fname in os.listdir(self.dirname):
for line in open(os.path.join(self.dirname, fname)):
yield line.split() sentences = MySentences('/some/directory') # a memory-friendly iterator
接下来,我们用这个迭代器作为输入,构造一个Gensim内建的word2vec模型的对象(即将原始的one-hot向量转化为word2vec向量):
model = gensim.models.Word2Vec(sentences)
我们也可以指定模型训练的参数,例如采用的模型(Skip-gram或是CBoW);负采样的个数;embedding向量的维度等。
Word2vec对象还支持online learning。我们可以将更多的训练数据传递给一个已经训练好的word2vec对象,继续更新模型的参数:
model = gensim.models.Word2Vec.load('/tmp/mymodel')
model.train(more_sentences)
若要查看某一个word对应的word2vec向量,可以将这个word作为索引传递给训练好的模型对象:
model['computer'] # raw NumPy vector of a word
Doc2vec是Mikolov在word2vec基础上提出的另一个用于计算长文本向量的工具。它的工作原理与word2vec极为相似——只是将长文本作为一个特殊的token id引入训练语料中。在Gensim中,doc2vec也是继承于word2vec的一个子类。因此,无论是API的参数接口还是调用文本向量的方式,doc2vec与word2vec都极为相似。
主要的区别是在对输入数据的预处理上。Doc2vec接受一个由LabeledSentence对象组成的迭代器作为其构造函数的输入参数。其中,LabeledSentence是Gensim内建的一个类,它接受两个List作为其初始化的参数:word list和label list。
from gensim.models.doc2vec import LabeledSentence
sentence = LabeledSentence(words=[u'some', u'words', u'here'], tags=[u'SENT_1'])
类似地,可以构造一个迭代器对象,将原始的训练数据文本转化成LabeledSentence对象:
class LabeledLineSentence(object):
def __init__(self, filename):
self.filename = filename def __iter__(self):
for uid, line in enumerate(open(filename)):
yield LabeledSentence(words=line.split(), labels=['SENT_%s' % uid])
准备好训练数据,模型的训练便只是一行命令:
from gensim.models import Doc2Vec
model = Doc2Vec(dm=1, size=100, window=5, negative=5, hs=0, min_count=2, workers=4)
该代码将同时训练word和sentence label的语义向量。如果我们只想训练label向量,可以传入参数train_words=False
以固定词向量参数,传入参数训练可用
model.train(sentense)
2、ldamodel LDA主题聚类模型
- num_terms:获取字典中词的个数,一般就是训练样本中所有不同词的个数;num_topics:获取主题的个数,一般是训练时自己设的,默认值是100;num_updates:获取文档的个数,字面上是获取更新的次数,在这里,每一个文档都是一次更新,所以就是文档个数。
- get_topic_terms(topicid, topn=10):获取某个主题下的前topn个词语,越相关的在前面,topicid是要显示主题的id值;
- get_term_topics(word_id, minimum_probability=None):获取某个词最有可能的主题列表,word_id为词id值,minimum_probability为阈值;
- get_document_topics(bow, minimum_probability=None, minimum_phi_value=None, per_word_topics=False):per_word_topics为False时获取某个文档最有可能具有的主题列表,per_word_topics为True时还得到文档中每个词属于的主题列表,bow为文档,minimum_probability确定主题的阈值,minimum_phi_value判断词属于主题的阈值。
如果用get_term_topics(word_id),只会获得在整个样本下,某个词属于某些主题的可能性,而并不是针对特定文档的某个词属于某些主题的可能性。显然,使用get_document_topics(bow, per_word_topics=True)可以得到,比如:
算法部分,确实主题是根据上下文有变化的,在gensim包中,应用的是EM算法,但却不是原始论文中使用的变分EM算法,当然主要思想是一致的。就像批最优化与随机最优化的关系,哈夫曼的算法中,没有将所有文档整体带入进行迭代计算,而是对每一篇文档进行迭代计算,使得当前文档具有最优的doc-topic和topic-word分布,直至所有文档迭代完。所以在计算新文档时,只需对新文档再进行一次迭代更新(这也是为什么num_updates等于文档数的,因为每个文档都会更新一次)就可获得新文档相应的分布。
gensim学习笔记的更多相关文章
- gensim word2vec |来自渣渣硕的学习笔记
最近写论文跑模型,要用到word2vec,但是发现自己怎么也看不懂网上的帖子,还是自己笨吧,所以就有了我的第一篇博客!!! 关于word2vec工具打算写一个系列的,当然今天这篇文章只打算写: 如何 ...
- 学习笔记之Data Science
Data science - Wikipedia https://en.wikipedia.org/wiki/Data_science Data science, also known as data ...
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- PHP-自定义模板-学习笔记
1. 开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2. 整体架构图 ...
- PHP-会员登录与注册例子解析-学习笔记
1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...
- 2014年暑假c#学习笔记目录
2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...
- JAVA GUI编程学习笔记目录
2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...
- seaJs学习笔记2 – seaJs组建库的使用
原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...
- CSS学习笔记
CSS学习笔记 2016年12月15日整理 CSS基础 Chapter1 在console输入escape("宋体") ENTER 就会出现unicode编码 显示"%u ...
随机推荐
- 求解1^2+2^2+3^2+4^2+...+n^2的方法(求解1平方加2平方加3平方...加n平方的和)
利用公式 (n-1)3 = n3 -3n2 +3n-1 设 S3 = 13 +23 +33 +43 +...+n3 及 S2 = 12 +22 +32 +42 +...+n2 及 S1 = 1 +2 ...
- hdu 4974 贪心
http://acm.hdu.edu.cn/showproblem.php?pid=4974 n个人进行选秀,有一个人做裁判,每次有两人进行对决,裁判可以选择为两人打分,可以同时加上1分,或者单独为一 ...
- 深浅 buffer
var str = "深入浅出"; var buf = new Buffer(str, 'utf-8'); console.log(buf); 这种情况下是数字 var str = ...
- Oracle EBS 采购 接收入库 接口开发
http://blog.itpub.net/25164132/viewspace-746657/ 接收入库是项目中会经常碰到的开发,这类开发一般来说比较简单,但是接收入库在Oracle中其实涉及到很多 ...
- 抱SQL SERVER大腿之我爱用视图(对大数据量的管理)
我们拥有一个巨大的表,两千多万条记录.也许在行家眼里,两千多万条记录顶多算条毛,不过这条毛也忒粗壮了一点:我们的数据库占用的空间已经达到5G多了.不要以为是日志文件在搞鬼,日志文件可以自动收缩的,最多 ...
- Python学习-17.Python中的错误处理(二)
错误是多种多样的,在 except 语句中,可以捕获指定的异常 修改代码如下: import io path = r'' mode = 'w' try: file = open(path,mode) ...
- Python2.7升级至Python3.6
Python2.7升级至Python3.6 今天在CentOS7.2上将python2.7升级至python3.6时遇到了诸多问题,下面将升级步骤以及解决方法一一列举. 1.安装Python3.6 安 ...
- Tomcat监听443端口的方法
当我们需要更安全的访问网站的时候就会选择使用https协议,而https协议默认的端口号为443端口,这就是我们为什么向让Tomcat监听在443端口的原因,因为监控在非80端口和443端口的web服 ...
- python中list的sort方法
转:https://www.cnblogs.com/zle1992/p/6271105.html 使用python对列表(list)进行排序,说简单也简单,说复杂也复杂,我一开始学的时候也搞不懂在说什 ...
- 在AbpZero中hangfire后台作业的使用——开启hangfire
AbpZero框架已经集成了hangfire,但它默认是关闭的,我们可以在运行站点下的Startup.cs文件中把这行代码注释取消就行了,代码如下: //Hangfire (Enable to ...