我一直在使用gensim的word2vec库尝试word2vec一段时间.我的问题是我是否必须从输入文本中删除停用词?因为,基于我最初的实验结果,我可以看到像'of','when'......(停用词)这样的词语,当我这样做时model.most_similar('someword')......
但是我没有看到任何提到word2vec需要删除停用词的地方?word2vec是否应该处理停用词,即使你不删除它们?
有什么必须做预处理事情(比如主题建模,你几乎必须要删除掉词)?
我有大量的文本,每个文本都在快速增长.我需要实现相似性搜索.
我们的想法是将每个单词嵌入为word2vec,并通过向量添加每个单词的嵌入来将每个文本表示为标准化向量.随后对文本的添加只会通过向其添加新的单词向量来优化结果文本的向量.
是否可以通过在文档中仅存储每个文本的规范化向量的坐标来使用弹性搜索来进行余弦相似性?如果是这样,这种搜索的正确索引结构是什么?
我使用gensim在我自己的语料库上训练了doc2vec和相应的word2vec.我想用t-sne用文字来形象化word2vec.如图所示,图中的每个点都有"单词".
我在这里看了一个类似的问题:t-sne on word2vec
在它之后,我有这个代码:
import gensim import gensim.models as g
from sklearn.manifold import TSNE
import re
import matplotlib.pyplot as plt
modelPath="/Users/tarun/Desktop/PE/doc2vec/model3_100_newCorpus60_1min_6window_100trainEpoch.bin"
model = g.Doc2Vec.load(modelPath)
X = model[model.wv.vocab]
print len(X)
print X[0]
tsne = TSNE(n_components=2)
X_tsne = tsne.fit_transform(X[:1000,:])
plt.scatter(X_tsne[:, 0], X_tsne[:, 1])
plt.show()
Run Code Online (Sandbox Code Playgroud)
这给出了一个带点但没有单词的图形.那是我不知道哪个点代表哪个词.如何用点显示单词?
我一直在阅读很多关于NLP的论文,并且遇到了很多模型.我得到了SVD模型并用2-D表示它,但我仍然没有得到如何通过给word2vec/skip-gram模型提供语料库来创建单词向量?它是每个单词的共生矩阵表示吗?你可以通过一个示例语料库来解释它:
Hello, my name is John.
John works in Google.
Google has the best search engine.
Run Code Online (Sandbox Code Playgroud)
基本上,跳转克如何转换John为向量?
根据mllib.feature.Word2Vec - spark 1.3.1文档[1]:
def setNumIterations(numIterations: Int): Word2Vec.this.type
Run Code Online (Sandbox Code Playgroud)
设置迭代次数(默认值:1),该值应小于或等于分区数.
def setNumPartitions(numPartitions: Int): Word2Vec.this.type
Run Code Online (Sandbox Code Playgroud)
设置分区数(默认值:1).使用较小的数字来提高准确性.
但是在这个Pull Request [2]中:
为了使我们的实现更具可伸缩性,我们分别训练每个分区,并在每次迭代后合并每个分区的模型.为了使模型更准确,可能需要多次迭代.
问题:
参数numIterations和numPartitions如何影响算法的内部工作?
考虑到以下规则,在设置分区数和迭代次数之间是否需要权衡?
更准确 - >更多迭代a/c到[2]
更多迭代 - >更多分区a/c到[1]
更多分区 - >精度更低
我要去看这篇论文http://cs.stanford.edu/~quocle/paragraph_vector.pdf
它说明了这一点
"对图矢量和单词矢量进行平均或连接以预测上下文中的下一个单词.在实验中,我们使用连接作为组合矢量的方法."
连接或平均如何工作?
示例(如果第1段包含word1和word2):
word1 vector =[0.1,0.2,0.3]
word2 vector =[0.4,0.5,0.6]
concat method
does paragraph vector = [0.1+0.4,0.2+0.5,0.3+0.6] ?
Average method
does paragraph vector = [(0.1+0.4)/2,(0.2+0.5)/2,(0.3+0.6)/2] ?
Run Code Online (Sandbox Code Playgroud)
也是从这张图片:
据说:
段落标记可以被认为是另一个单词.它充当记忆,记住当前上下文中缺少的内容 - 或段落的主题.出于这个原因,我们经常将此模型称为段落向量的分布式存储模型(PV-DM).
段落标记是否等于段落向量等于on?
例如,我们使用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以便可视化形成主题的类似单词?谢谢.
该Tensorflow教程这里指的是他们的基本实现,你可以在github上找到这里,这里的Tensorflow作者实现word2vec矢量嵌入培训/评估与Skipgram模型.
我的问题是关于generate_batch()函数中(目标,上下文)对的实际生成.
在这一行上, Tensorflow作者从单词滑动窗口中的"中心"单词索引中随机抽取附近的目标索引.
但是,他们还保留了一个数据结构targets_to_avoid,他们首先添加"中心"上下文单词(当然我们不想采样),但在我们添加它们之后还要添加其他单词.
我的问题如下:
word2vec_basic.py(他们的"基本"实现)似乎很奇怪.targets_to_avoid?如果他们想要真正随机,他们会使用替换选择,如果他们想确保他们获得所有选项,他们应该只使用一个循环并首先获得所有选项!谢谢!
背景
我有一些带有一些样本数据的向量,每个向量都有一个类别名称(地点,颜色,名称).
['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世界的新手而犯的任何错误.
word2vec ×10
gensim ×6
nlp ×6
python ×4
apache-spark ×1
doc2vec ×1
scikit-learn ×1
similarity ×1
tensorflow ×1