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 ...
随机推荐
- (网络流 匹配 KM) Going Home --poj -- 2195
链接: http://acm.hust.edu.cn/vjudge/contest/view.action?cid=82835#problem/D 有n个人有n栋房子,每栋房子里能进一个人,但每走一格 ...
- Linux下的ICMP反弹后门:PRISM
搜索的时候无意中看见的这款基于ping的ICMP后门.于是到作者的github上看看,居然是阴文的,为了过级,只能强忍着看了,学生狗伤不起.还好比较简单易懂,正如简介说的一样:“PRISM is an ...
- Docker load与Docker import
docker load与docker import 首先,想要清楚的了解docker load与docker import命令的区别,就必须了解镜像与容器的区别: 镜像:用来启动容器的只读模板,是 ...
- 【转】PHP操作MongoDB【NoSQL】
原文:http://blog.sina.com.cn/s/blog_4b67d3240101519b.html 一.MongoDB简介 MongoDB (名称来自"humongous&quo ...
- jvm linux 时区设置
# 背景 在接入集团一个平台的时候,发现录制某个接口到测试环境回放,发现接口入参一致,一个start_day 一个end_day,但回放的时候会多调用一次数据库查询,很是奇怪: 查阅业务代码,发现确实 ...
- 【WPF】UserControl 的 Load事件
经过查看MSDN,总结下 UserControl 的 Load 事件: Q1:Load事件什么时候发生? 在控件第一次变为可见之前发生. Load事件发生在创建 UserControl 时,因此有些情 ...
- NLayerAppV3--.net Core2实现的DDD分层架构
虽然每天的工作都是CURD.还是使用着传统的三层架构.使用着.net Framework,但是这并不能影响我学习DDD和.net core. 总是希望软件在应对复杂多变的场景时能够游刃有余,在解决问题 ...
- Prism 的 TabControl 导航
基于Prism 7.1 最近工作中可能会用到TabControl所以作为小菜的我提前预习了一下,结果并没有我想的那么简单,于是乎 各种网上查,本来用wpf的人就不多 prism 的可查的资料就更少的可 ...
- Mac OS 10.12 - 安装Homebrew,像Ubuntu里面的apt一样简单地安装和删除软件!
Homebrew — macOS 不可或缺的套件管理器,Homebrew官方网站如此介绍自己!!! 中文官网:https://brew.sh/index_zh-cn.html 一,安装 打开shell ...
- 《Python绝技:运用Python成为顶级黑客》 Python实用小工具
1.实现简单探测 使用socket模块,connect()方法建立与指定IP和端口的网络连接:revc(1024)方法将读取套接字中接下来的1024B数据 mport socket import sy ...