我正在从Doc2Vec
库中学习gensim
模型,并按如下方式使用它:
class MyTaggedDocument(object):
def __init__(self, dirname):
self.dirname = dirname
def __iter__(self):
for fname in os.listdir(self.dirname):
with open(os.path.join(self.dirname, fname),encoding='utf-8') as fin:
print(fname)
for item_no, sentence in enumerate(fin):
yield LabeledSentence([w for w in sentence.lower().split() if w in stopwords.words('english')], [fname.split('.')[0].strip() + '_%s' % item_no])
sentences = MyTaggedDocument(dirname)
model = Doc2Vec(sentences,min_count=2, window=10, size=300, sample=1e-4, negative=5, workers=7)
输入dirname
是一个目录路径,为简单起见,只有2个文件位于每个包含100行以上的文件中。我正在关注异常。
此外,使用print
语句,我可以看到迭代器在目录上迭代了6次。为什么会这样?
任何形式的帮助都将受到赞赏。
答案 0 :(得分:0)
它看起来像一个文本示例对象,其形状应该为TaggedDocument
(具有words
和tags
属性,以前称为LabeledSentence
),不知何故,一个普通的字符串。您是否100%确定屏幕截图中的错误是由您所包含的可迭代代码生成的? (这里的代码看起来只能发出可接受的LabeledSentece
个对象。)
您提供的语料库Iterable被读取一次以进行初始扫描,发现所有单词/标签,然后再次多次进行训练。多少次由iter
参数控制,默认值(在最近版本的gensim中)为5.因此,初始扫描加上5次训练通过等于6次迭代。 (Doc2Vec常见10次或更多次迭代。)