我在一组文档上使用Gensim HDP模块.
>>> hdp = models.HdpModel(corpusB, id2word=dictionaryB)
>>> topics = hdp.print_topics(topics=-1, topn=20)
>>> len(topics)
150
>>> hdp = models.HdpModel(corpusA, id2word=dictionaryA)
>>> topics = hdp.print_topics(topics=-1, topn=20)
>>> len(topics)
150
>>> len(corpusA)
1113
>>> len(corpusB)
17
Run Code Online (Sandbox Code Playgroud)
为什么主题数量与语料库长度无关?
例如,我们使用gensim以下方法训练word2vec模型:
from gensim import corpora, models, similarities
from gensim.models.word2vec import Word2Vec
documents = ["Human machine interface for lab abc computer applications",
"A survey of user opinion of computer system response time",
"The EPS user interface management system",
"System and human system engineering testing of EPS",
"Relation of user perceived response time to error measurement",
"The generation of random binary unordered trees",
"The intersection graph of paths in trees",
"Graph minors IV Widths of trees and well quasi ordering", …Run Code Online (Sandbox Code Playgroud) 我使用Python的Gensim库训练有素的Word2vec模型.我有一个标记化列表如下.词汇大小是34,但我只是给出了34个中的一些:
b = ['let',
'know',
'buy',
'someth',
'featur',
'mashabl',
'might',
'earn',
'affili',
'commiss',
'fifti',
'year',
'ago',
'graduat',
'21yearold',
'dustin',
'hoffman',
'pull',
'asid',
'given',
'one',
'piec',
'unsolicit',
'advic',
'percent',
'buy']
Run Code Online (Sandbox Code Playgroud)
模型
model = gensim.models.Word2Vec(b,min_count=1,size=32)
print(model)
### prints: Word2Vec(vocab=34, size=32, alpha=0.025) ####
Run Code Online (Sandbox Code Playgroud)
如果我尝试通过model['buy']列表中的一个单词来获得相似性得分,我得到了
KeyError:"词'买'不在词汇中"
你们可以告诉我我做错了什么以及检查模型的方法有哪些可以进一步用于训练PCA或t-sne以便可视化形成主题的类似单词?谢谢.
我试图在Python中使用自然语言处理库中的word2vec模块gensim.
文档说要初始化模型:
from gensim.models import word2vec
model = Word2Vec(sentences, size=100, window=5, min_count=5, workers=4)
Run Code Online (Sandbox Code Playgroud)
gensim输入句子的格式是什么?我有原始文本
"the quick brown fox jumps over the lazy dogs"
"Then a cop quizzed Mick Jagger's ex-wives briefly."
etc.
Run Code Online (Sandbox Code Playgroud)
我需要进行哪些额外的处理word2fec?
更新:这是我尝试过的.当它加载句子时,我什么也得不到.
>>> sentences = ['the quick brown fox jumps over the lazy dogs',
"Then a cop quizzed Mick Jagger's ex-wives briefly."]
>>> x = word2vec.Word2Vec()
>>> x.build_vocab([s.encode('utf-8').split( ) for s in sentences])
>>> x.vocab
{}
Run Code Online (Sandbox Code Playgroud) 在word2vec模型中,有两个线性变换,它们将词汇空间中的单词带到隐藏层("in"向量),然后返回到词汇空间("out"向量).通常这个out向量在训练后被丢弃.我想知道是否有一种简单的方法来访问gensim python中的out向量?同样,我如何访问out矩阵?
动机:我想实现最近这篇论文中提出的想法:文档排名的双嵌入空间模型
这里有更多细节.从上面的参考文献中我们得到以下word2vec模型:
这里,输入层的大小为$ V $,词汇量大小,隐藏层大小为$ d $,输出层大小为$ V $.两个矩阵是W_ {IN}和W_ {OUT}.通常,word2vec模型仅保留W_IN矩阵.这是返回的地方,在gensim中训练word2vec模型后,你会得到如下内容:
模型[ '土豆'] = [ - 0.2,0.5,2,...]
如何访问或保留W_ {OUT}?这可能在计算上非常昂贵,而且我真的希望在gensim中使用一些内置方法来执行此操作,因为我担心如果我从头开始编写代码,它就不会提供良好的性能.
背景
我有一些带有一些样本数据的向量,每个向量都有一个类别名称(地点,颜色,名称).
['john','jay','dan','nathan','bob'] -> 'Names'
['yellow', 'red','green'] -> 'Colors'
['tokyo','bejing','washington','mumbai'] -> 'Places'
Run Code Online (Sandbox Code Playgroud)
我的目标是训练一个模型,该模型采用新的输入字符串并预测它属于哪个类别.例如,如果新输入是"紫色",那么我应该能够将"颜色"预测为正确的类别.如果新输入是"卡尔加里",则应将"地点"预测为正确的类别.
APPROACH
我做了一些研究,遇到了Word2vec.该库具有我可以使用的"相似性"和"最相似性"功能.所以我想到的一种蛮力方法如下:
因此,例如对于输入"粉红色",我可以计算其与向量"名称"中的单词的相似性取平均值,然后对其他2个向量也执行此操作.给出最高相似度平均值的向量将是输入所属的正确向量.
问题
鉴于我在NLP和机器学习方面的知识有限,我不确定这是否是最好的方法,因此我正在寻找有关解决问题的更好方法的帮助和建议.我对所有建议持开放态度,并请指出我可能因为我是机器学习和NLP世界的新手而犯的任何错误.
使用Gensim提供的Word2vec和Doc2vec方法,他们有一个使用BLAS,ATLAS等加速的分布式版本(详情请参见此处).但是,它支持GPU模式吗?如果使用Gensim,是否可以让GPU工作?
我正在尝试使用Gensim的Word2Vec实现.Gensim警告说,如果你没有C编译器,训练速度会慢70%.有没有确认Gensim正确使用我安装的C编译器?
我在Windows 10上使用Anaconda Python 3.5.
我已将Gensim字典保存到磁盘.当我加载它时,id2token不会填充属性dict.
保存字典的一段简单代码:
dictionary = corpora.Dictionary(tag_docs)
dictionary.save("tag_dictionary_lda.pkl")
Run Code Online (Sandbox Code Playgroud)
现在,当我加载它(我在一个jupyter笔记本中加载它)时,它仍然适用于将令牌映射到ID,但id2token不起作用(我无法将ID映射到令牌),实际上id2token根本没有填充.
> dictionary = corpora.Dictionary.load("../data/tag_dictionary_lda.pkl")
> dictionary.token2id["love"]
Out: 1613
> dictionary.doc2bow(["love"])
Out: [(1613, 1)]
> dictionary.id2token[1613]
Out:
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input> in <module>()
----> 1 dictionary.id2token[1613]
KeyError: 1613
> list(dictionary.id2token.keys())
Out: []
Run Code Online (Sandbox Code Playgroud)
有什么想法吗?
我想知道gensim word2vec的两个相似性度量之间的区别:most_similar()和most_similar_cosmul().我知道第一个使用单词向量的余弦相似性,而另一个使用Omer Levy和Yoav Goldberg提出的乘法组合目标.我想知道它对结果有何影响?哪一个给出语义相似性?等.例如:
model = Word2Vec(sentences, size=100, window=5, min_count=5, workers=4)
model.most_similar(positive=['woman', 'king'], negative=['man'])
Run Code Online (Sandbox Code Playgroud)
结果:[('queen',0.50882536),...]
model.most_similar_cosmul(positive=['baghdad', 'england'], negative=['london'])
Run Code Online (Sandbox Code Playgroud)
结果:[(u'iraq',0.8488819003105164),...]
gensim ×10
python ×9
nlp ×6
word2vec ×5
similarity ×2
compilation ×1
gpu ×1
installation ×1
lda ×1
optimization ×1
semantics ×1