如何在Tensorflow中使用Doc2Vec中的向量

时间:2018-04-22 16:00:55

标签: python tensorflow nlp word2vec doc2vec

我正在尝试使用Doc2Vec将句子转换为向量,然后使用这些向量来训练张量流分类器。

我对使用什么标签感到困惑,以及如何在完成培训后从Doc2Vec中提取所有文档向量。

到目前为止我的代码如下:

fake_data = pd.read_csv('./sentences/fake.txt', sep='\n')
real_data = pd.read_csv('./sentences/real.txt', sep='\n')
sentences = []

for i, row in fake_data.iterrows():
    sentences.append(TaggedDocument(row['title'].lower().split(), ['fake', len(sentences)]))

for i, row in real_data.iterrows():
    sentences.append(TaggedDocument(row['title'].lower().split(), ['real', len(sentences)]))

model = gensim.models.Doc2Vec(sentences)

当我print(model.docvecs[1])等时,我得到了矢量,但每次重新制作模型时它们都不同。

首先:我是否正确使用了Doc2Vec? 第二:有没有办法可以抓住所有标记为“真实”的文件。或者'假的',然后将它们变成一个numpy数组并将其传递给tensorflow?

1 个答案:

答案 0 :(得分:0)

我相信您为每个tag使用的TaggedDocument并非您所期望的。 Doc2Vec算法是学习指定标签的矢量表示(其中一些可以在文档之间共享)。因此,如果您的目标仅仅是将句子转换为向量,则建议选择标记是某种独特的句子标识符,例如句子索引。

然后将学习的模型存储在model.docvecs中。例如,如果您使用句子索引作为标记,则可以通过访问标记model.docvecs的{​​{1}},第二个文档 - 标记"0"来获取第一个文档向量,等等上。

示例代码:

"1"

顺便说一下,要控制模型的随机性,请使用documents = [doc2vec.TaggedDocument(sentence, ['real-%d' % i]) for i, sentence in enumerate(sentences)] model = doc2vec.Doc2Vec(documents, vector_size=10) # 10 is just for illustration # Raw vectors are stored in `model.docvecs.vectors_docs`. # It's easier to access each one by the tag, which are stored in `model.docvecs.doctags`. for tag in model.docvecs.doctags.keys(): print(tag, model.docvecs[tag]) # Prints the learned numpy array for this tag 类的seed参数。