我正在尝试建立神经网络语言模型,看来Mikolov等人的word2vec工具是用于此目的的好工具。我试过了,但是它只是产生单词表示。有人知道我可以通过该工具或任何其他合理的深度学习框架生成语言模型吗?
我偶然发现了这些幻灯片,关于CNN使用word2vec来介绍CNN:http://www.people.fas.harvard.edu/~yoonkim/data/Kim_EMNLP_2014_slides.pdf
在幻灯片20上,第四个要点是:
Words not in word2vec are initialized randomly from U[?a, a]
where a is chosen such that the unknown words have the
same variance as words already in word2vec.
Run Code Online (Sandbox Code Playgroud)
现在我想知道如何计算"a"以及如何计算完全未知单词的整个向量.
我想用集群作为K均值描述我的单词矢量这里。我正在使用的代码片段
# Set "k" (num_clusters) to be 1/5th of the vocabulary size, or an
# average of 5 words per cluster
word_vectors = model.syn0
num_clusters = word_vectors.shape[0] / 5
# Initalize a k-means object and use it to extract centroids
kmeans_clustering = KMeans( n_clusters = num_clusters )
idx = kmeans_clustering.fit_predict( word_vectors )
Run Code Online (Sandbox Code Playgroud)
我收到以下错误 TypeError: 'float' object cannot be interpret as an integer
有人可以帮忙吗
我在一些文章(Tomas Mikolov...)中了解到,形成句子向量的更好方法是连接词向量。
但由于我的数学笨拙,我仍然不确定细节。
例如,
假设词向量的维数为m;并且一个句子有 n 个单词。
连接操作的正确结果是什么?
它是 1 xm*n 的行向量吗?或 mxn 矩阵?
请指教
谢谢
我想使用word2vec的输出嵌入(例如本文中的内容)(通过双重单词嵌入来提高文档排名)。
我知道输入向量在syn0中,如果负采样,输出向量在syn1和syn1neg中。
但是,当我用输出向量计算most_like时,由于删除了syn1或syn1neg,我在某些范围内得到了相同的结果。
这就是我得到的。
IN[1]: model = Word2Vec.load('test_model.model')
IN[2]: model.most_similar([model.syn1neg[0]])
OUT[2]: [('of', -0.04402521997690201),
('has', -0.16387106478214264),
('in', -0.16650712490081787),
('is', -0.18117375671863556),
('by', -0.2527652978897095),
('was', -0.254993200302124),
('from', -0.2659570872783661),
('the', -0.26878535747528076),
('on', -0.27521973848342896),
('his', -0.2930959463119507)]
Run Code Online (Sandbox Code Playgroud)
但是另一个syn1neg numpy向量已经是类似的输出。
IN[3]: model.most_similar([model.syn1neg[50]])
OUT[3]: [('of', -0.07884830236434937),
('has', -0.16942456364631653),
('the', -0.1771494299173355),
('his', -0.2043554037809372),
('is', -0.23265135288238525),
('in', -0.24725285172462463),
('by', -0.27772971987724304),
('was', -0.2979024648666382),
('time', -0.3547973036766052),
('he', -0.36455872654914856)]
Run Code Online (Sandbox Code Playgroud)
我想获得训练期间保留的输出numpy数组(是否为负)。
让我知道如何访问纯syn1或syn1neg或代码,或者某些word2vec模块可以获取输出嵌入。
我正在尝试从gensim包运行doc2vec库。我的问题是,当我训练并保存模型时,模型文件很大(2.5 GB),我尝试使用此行:
model.estimate_memory()
Run Code Online (Sandbox Code Playgroud)
但这并没有改变任何东西。我也尝试过更改max_vocab_size以减少空间。但是没有运气。有人可以帮我解决这个问题吗?
是否可以训练单个文档具有多个标签的 doc2vec 模型?例如,在电影评论中,
doc0 = doc2vec.TaggedDocument(words=review0,tags=['UID_0','horror','action'])
doc1 = doc2vec.TaggedDocument(words=review1,tags=['UID_1','drama','action','romance'])
Run Code Online (Sandbox Code Playgroud)
在每个文档都有一个唯一标签 (UID) 和多个分类标签的情况下,如何在训练后访问向量?例如,调用最合适的语法是什么
model['UID_1']
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 Gensim 中的短语获取句子中的二元组,如下所示。
from gensim.models import Phrases
from gensim.models.phrases import Phraser
documents = ["the mayor of new york was there", "machine learning can be useful sometimes","new york mayor was present"]
sentence_stream = [doc.split(" ") for doc in documents]
#print(sentence_stream)
bigram = Phrases(sentence_stream, min_count=1, threshold=2, delimiter=b' ')
bigram_phraser = Phraser(bigram)
for sent in sentence_stream:
tokens_ = bigram_phraser[sent]
print(tokens_)
Run Code Online (Sandbox Code Playgroud)
即使将“new”、“york”捕获为“new york”,它也不会捕获“machine”,将学习作为“机器学习”
但是,在Gensim 网站上显示的示例中,他们能够将“机器”、“学习”等词捕获为“机器学习”。
请让我知道如何在上面的示例中将“机器学习”作为二元组
我有一个Word2Vec模型,有很多单词向量.我可以这样访问一个单词向量.
word_vectors = gensim.models.Word2Vec.load(wordspace_path)
print(word_vectors['boy'])
Run Code Online (Sandbox Code Playgroud)
产量
[ -5.48055351e-01 1.08748421e-01 -3.50534245e-02 -9.02988110e-03...]
Run Code Online (Sandbox Code Playgroud)
现在我有一个合适的矢量表示,我想用word替换word_vectors ['boy'].
word_vectors['boy'] = [ -7.48055351e-01 3.08748421e-01 -2.50534245e-02 -10.02988110e-03...]
Run Code Online (Sandbox Code Playgroud)
但是引发了以下错误
TypeError: 'Word2Vec' object does not support item assignment
Run Code Online (Sandbox Code Playgroud)
有没有时尚或解决方法来做到这一点?一旦训练模型,那就是手动操纵单词向量?除了Gensim之外的其他平台有可能吗?
我是doc2vec的新手.我最初试图理解doc2vec,下面提到的是我使用Gensim的代码.正如我所希望的,我得到了两个文件的训练模型和文档向量.
但是,我想知道在几个时代重新训练模型的好处以及如何在Gensim中进行训练?我们可以使用iter或alpha参数来做,还是我们必须单独训练它for loop?请让我知道如何更改以下代码以训练20个epoches的模型.
此外,我有兴趣知道word2vec模型还需要多次训练迭代.
# Import libraries
from gensim.models import doc2vec
from collections import namedtuple
# Load data
doc1 = ["This is a sentence", "This is another sentence"]
# Transform data
docs = []
analyzedDocument = namedtuple('AnalyzedDocument', 'words tags')
for i, text in enumerate(doc1):
words = text.lower().split()
tags = [i]
docs.append(analyzedDocument(words, tags))
# Train model
model = doc2vec.Doc2Vec(docs, size = 100, window = 300, min_count = 1, workers = 4)
# Get the vectors …Run Code Online (Sandbox Code Playgroud) word2vec ×10
gensim ×6
python ×6
doc2vec ×3
nlp ×2
convolution ×1
data-mining ×1
k-means ×1
numpy ×1
python-3.x ×1
semantics ×1
text-mining ×1
theano ×1
vector ×1
vector-space ×1