代码之家  ›  专栏  ›  技术社区  ›  Natalie

带有监督数据预定义标签的doc2vec gensim

  •  0
  • Natalie  · 技术社区  · 7 年前

    我正在尝试使用gensim的doc2vec创建一个模型,该模型将接受一组文档和一组标签的培训。标签是手动创建的,需要放入程序中进行培训。到目前为止,我有两个列表:一个是句子列表,一个是对应于那个句子的标签列表。我需要特别使用doc2vec。这是我到目前为止所做的努力。

    from gensim import utils
    from gensim.models import Doc2Vec
    
    tweets = ["A tweet", "Another tweet", "A third tweet", ... , "A thousandth-something tweet"]
    labels_list = [1, 1, 3, ... , 16]
    
    tagged_data = [tweets, labels_list]
    model = Doc2Vec(size=20, alpha=0.025, min_alpha=0.00025, min_count=1, dm=1)
    model.build_vocab(tagged_data)
    for epoch in range(max_epochs):
        model.train(tagged_data, total_examples=model.corpus_count, 
    epochs=model.iter)
        model.alpha -= 0.0002
        model.min_alpha = model.alpha
    

    我在网上查到这个错误 model.build_vocab(tagged_data) 有一个 AttributeError: 'list' object has no attribute 'words' 是的。我在google上搜索了这个,上面说要把它放到一个有标签的句子对象中,但我不确定如果我有预定义的标签的话,这是否可行。那么有人知道如何将预定义的标签放入doc2vec吗?提前谢谢。

    1 回复  |  直到 7 年前
        1
  •  1
  •   gojomo    7 年前

    语料库 Doc2Vec 应该是一个 可迭代的 类似于 TaggedDocument gensim包含的示例类:带有 words 字符串标记列表,以及 tags 标签列表。(标签是通过训练从每个文本中学习到的文档向量的关键,通常是唯一的文档ID,但也可以是在多个文档上重复的已知标签,或者同时是ID和标签。)

    你的 tagged_data ,有一个非标记化字符串列表和一个标签列表,与预期的格式完全不同。

    你应该看看并仔细研究一些关于 DOC2矢量 在根西姆 docs/notebooks 目录,例如 doc2vec-lee.ipynb doc2vec-IMDB.ipynb 是的。也可以在线查看,例如:

    https://github.com/RaRe-Technologies/gensim/blob/develop/docs/notebooks/doc2vec-lee.ipynb

    而且,你可能不需要或不想打电话 train() 多次-很容易出错。(如果您已经从一个在线示例中复制了该方法,则该示例可能已过时。)调用一次,并在 epochs 参数。