Nlp Doc2Vec:培训模型的反馈循环最佳实践

Nlp Doc2Vec:培训模型的反馈循环最佳实践,nlp,python-3.4,gensim,word2vec,Nlp,Python 3.4,Gensim,Word2vec,我正在学习Doc2Vec和gensim图书馆。我已经能够通过创建文档集来训练我的模型,例如 LabeledSentence(['what', 'happens', 'when', 'an', 'army', 'of', 'wetbacks', 'towelheads', 'and', 'godless', 'eastern', 'european', 'commies', 'gather', 'their', 'forces', 'south', 'of', 'the', 'border', '

我正在学习Doc2Vec和gensim图书馆。我已经能够通过创建文档集来训练我的模型,例如

LabeledSentence(['what', 'happens', 'when', 'an', 'army', 'of', 'wetbacks', 'towelheads', 'and', 'godless', 'eastern', 'european', 'commies', 'gather', 'their', 'forces', 'south', 'of', 'the', 'border', 'gary', 'busey', 'kicks', 'their', 'butts', 'of', 'course', 'another', 'laughable', 'example', 'of', 'reagan-era', 'cultural', 'fallout', 'bulletproof', 'wastes', 'a', 'decent', 'supporting', 'cast', 'headed', 'by', 'l', 'q', 'jones', 'and', 'thalmus', 'rasulala'], ['LABELED_10', '0'])`
请注意,此特定文档有两个标记,即“标记为10”和“0”

现在,在我加载模型并执行

print(model.docvecs.most_similar("LABELED_10"))
我明白了

[('LABELED_107', 0.48432376980781555), ('LABELED_110', 0.4827481508255005), ('LABELED_214', 0.48039984703063965), ('LABELED_207', 0.479473352432251), ('LABELED_315', 0.47931796312332153), ('LABELED_307', 0.47898322343826294), ('LABELED_124', 0.4776897132396698), ('LABELED_222', 0.4768940210342407), ('LABELED_413', 0.47479286789894104), ('LABELED_735', 0.47462597489356995)]
太完美了!因为我得到的所有标签都与标记为_10的标签最为相似

现在我希望在训练我的模型时有一个反馈循环。因此,如果我给我的模型一个新文档,我想在标记该文档并将其添加到我的语料库之前,知道该模型的分类是好是坏。使用Doc2Vec我将如何做到这一点?那么,我如何知道标记为_107和标记为_10的文档实际上是否相似呢。这里是我想到的一个方法。下面是我的随机森林分类器的代码

result = cfun.rfClassifer(n_estimators, trainingDataFV, train["sentiment"],testDataFV)
这里是函数

def rfClassifer(n_estimators, trainingSet, label, testSet):

    logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)

    forest = RandomForestClassifier(n_estimators)
    forest = forest.fit(trainingSet, label)
    result = forest.predict(testSet)

    return result
我终于可以做到了

output = pd.DataFrame(data={"id": test["id"], "sentiment": result})

output.to_csv("../../submits/Doc2Vec_AvgVecPredict.csv", index=False, quoting=3)
反馈过程

  • 保留正确标记的验证集

  • 移除标记后,将标记的验证集馈送到分类器,并将结果保存在csv中

  • 将结果与另一个具有正确标记的csv进行比较

  • 对于每个不匹配,将这些文档添加到标记的训练集中,然后再次训练模型

  • 重复此操作可获得更多验证集

  • 这种方法正确吗?此外,我是否可以增量培训doc2vec模型?假设最初我用100k标记的文档训练我的doc2vec模型。现在,在验证步骤之后,我需要对我的模型进行进一步的10k文档培训。我必须从一开始就训练我的模特吗?这意味着我需要在最初的10万份带标签的文档上再次培训我的模型吗

    我非常感谢你的见解


    感谢

    根据我对Doc2Vec的理解,您可以重新训练您的模型,只要您拥有该模型的所有先前向量

    从以下链接中,您可以看到他们如何执行验证:

    这些标签有什么意义吗,还是只是句子索引?每个句子都有独立的句子情感,是吗?每个句子都有自己的情感。标签可以是句子索引,如本例中所示,但我也尝试了使用多个标签。这意味着指数的标签和情绪的标签