在gensim中,当我提供一个字符串作为培训doc2vec模型的输入时,我收到此错误:
TypeError('不知道如何处理uri%s'%repr(uri))
我提到了这个问题Doc2vec : TaggedLineDocument() 但仍然对输入格式有疑问。
documents = TaggedLineDocument('myfile.txt')
myFile.txt是否应该将令牌作为列表列表或每个文档或字符串的每行中的单独列表?
For eg
- 我有两份文件。
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"] ]
案例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"]
当我在测试数据上运行它时,我想要预测doc向量的句子格式应该是什么?它应该像下面的案例1或案例2还是别的什么?
model.infer_vector(testSentence, alpha=start_alpha, steps=infer_epoch)
testSentence应该是:
案例1:字符串
testSentence = "Machine learning is an evolving field"
案例2:令牌列表
testSentence = ["Machine", "learning", "is", "an", "evolving", "field"]
答案 0 :(得分:5)
TaggedLineDocument
是一个便利类,它希望它的源文件(或类文件对象)是以空格分隔的标记,每行一个。 (也就是说,你在第一个问题中称之为“案例1”。)
但是你可以编写自己的可迭代对象来作为Doc2Vec
语料库传递给gensim documents
,只要这个语料库(1)可以迭代地返回{Tag}文档中的next()
个对象。 ,有words
和tags
列表;并且(2)可以多次迭代,因为多次传递Doc2Vec
需要初始词汇量调查和iter
训练传球。
infer_vector()
方法采用令牌列表,类似于单个words
的{{1}}属性 - 类似对象。 (也就是说,你在第二个问题中称之为“案例2”。)