如何在 Tensorflow 中使用来自 Doc2Vec 的向量
How to use vectors from Doc2Vec in Tensorflow
我正在尝试使用 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
?
第二:有没有一种方法可以获取所有标记为 'real' 或 'fake' 的文档,然后将它们转换为一个 numpy 数组并将其传递给 tensorflow?
我相信您为每个 TaggedDocument
使用的 tag
不是您所期望的。 Doc2Vec 算法正在学习指定 标签 的矢量表示(其中一些可以在文档之间共享)。所以如果你的目标只是将句子转换为向量,建议选择的标签是某种唯一的句子标识符,比如句子索引。
然后将学习的模型存储在 model.docvecs
中。例如,如果您使用句子索引作为标签,则可以通过访问 model.docvecs
获取第一个文档向量以获得标签 "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
参数Doc2Vec
class。
我正在尝试使用 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
?
第二:有没有一种方法可以获取所有标记为 'real' 或 'fake' 的文档,然后将它们转换为一个 numpy 数组并将其传递给 tensorflow?
我相信您为每个 TaggedDocument
使用的 tag
不是您所期望的。 Doc2Vec 算法正在学习指定 标签 的矢量表示(其中一些可以在文档之间共享)。所以如果你的目标只是将句子转换为向量,建议选择的标签是某种唯一的句子标识符,比如句子索引。
然后将学习的模型存储在 model.docvecs
中。例如,如果您使用句子索引作为标签,则可以通过访问 model.docvecs
获取第一个文档向量以获得标签 "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
参数Doc2Vec
class。