doc2vec - python中doc2vec training和infer_vector()的输入格式

Dre*_*ams 2 python gensim word2vec doc2vec

在gensim中,当我提供一个字符串作为训练doc2vec模型的输入时,我收到此错误:

TypeError('不知道如何处理uri%s'%repr(uri))

我提到了这个问题Doc2vec:TaggedLineDocument() 但仍然对输入格式有疑问.

documents = TaggedLineDocument('myfile.txt')

myFile.txt是否应该将令牌作为列表列表,或者每个文档或字符串的每行中都有单独的列表?

For eg - 我有2份文件.

Doc 1:机器学习是从模式识别研究演变而来的计算机科学的一个子领域.

Doc 2:Arthur Samuel将机器学习定义为"让计算机具备学习能力的研究领域".

那么,它应该是myFile.txt什么样的?

案例1:每行中每个文档的简单文本

机器学习是从模式识别研究演变而来的计算机科学的一个子领域

Arthur Samuel将机器学习定义为一个让计算机具备学习能力的研究领域

案例2:列表中包含每个文档的标记

[ ["Machine", "learning", "is", "a", "subfield", "of", "computer", "science", "that", "evolved", "from", "the", "study", "of", "pattern", "recognition"],

["Arthur", "Samuel", "defined", "machine", "learning", "as", "a", "Field", "of", "study", "that", "gives", "computers" ,"the", "ability", "to", "learn"] ]
Run Code Online (Sandbox Code Playgroud)

案例3:单独行中每个文档的标记列表

["Machine", "learning", "is", "a", "subfield", "of", "computer", "science", "that", "evolved", "from", "the", "study", "of", "pattern", "recognition"]

["Arthur", "Samuel", "defined", "machine", "learning", "as", "a", "Field", "of", "study", "that", "gives", "computers" ,"the", "ability", "to", "learn"]
Run Code Online (Sandbox Code Playgroud)

当我在测试数据上运行它时,我想要预测doc向量的句子的格式应该是什么?它应该像下面的案例1或案例2还是其他什么?

model.infer_vector(testSentence, alpha=start_alpha, steps=infer_epoch)

testSentence应该是:

案例1:字符串

testSentence = "Machine learning is an evolving field"
Run Code Online (Sandbox Code Playgroud)

案例2:令牌列表

testSentence = ["Machine", "learning", "is", "an", "evolving", "field"]
Run Code Online (Sandbox Code Playgroud)

goj*_*omo 5

TaggedLineDocument是一个便利类,它希望它的源文件(或类文件对象)是以空格分隔的标记,每行一个.(也就是说,你在第一个问题中称为"案例1".)

但是你可以编写自己的可迭代对象来Doc2Vec作为documents语料库提供给gensim ,只要这个语料库(1)可以迭代地返回next()像TaggedDocument那样的对象wordstags列表; (2)可以多次迭代,因为多次通过Doc2Vec需要初始词汇调查和iter训练通过.

infer_vector()方法采用令牌列表,类似于类似words个体TaggedDocument的对象的属性.(也就是说,你在第二个问题中称为"案例2".)