使用 doc2vec gensim 进行二进制文本分类的最佳训练方法

best training methods for binary text classification using doc2vec gensim

我正在尝试使用 doc2vec 进行基于文档主题的文本 class化,例如,我想将所有关于体育的文档class化为 1,所有其他文档为 0。我想通过首先使用训练数据训练 doc2vec 模型然后使用 class 化模型(例如逻辑回归)来 class 将文本确定为正面或负面。

我在网上看到了很多这样的例子[1,2],它们采用了不同的方法,但我不清楚一些细节,比如他们为什么使用某些方法,以及哪种方法最适合文本 class化。

  1. 首先使用上面的示例,仅使用与运动相关的文档还是使用所有主题的文档来训练模型更好。我的想法是,通过仅在体育文档上进行训练,您可以 class 根据文档相似性验证文档(尽管这不会为非体育文档生成用于训练下一个模型的向量)。此外,我觉得如果在所有文档上训练模型,您将需要大量文档来表示除体育以外的所有内容才能获得良好的 class 化。

  2. 其次,实际使用了哪些特征来训练逻辑回归模型。如果在所有文档上训练模型,我假设您会使用某种索引跟踪文档,然后使用带有 class 标签的向量训练逻辑回归模型,这是正确的吗?

  3. 第三,我看到了 TaggedDocument 的各种用途,其中为每个文档放置了一个唯一的 id,并且还使用共享 id 来表示相同的 class,例如,1 = 运动 0 = 非运动。从我读到的共享 id 意味着模型有一个向量代表每个 class,而使用唯一 id 为每个文档提供唯一向量,这是正确的吗?。如果是这样,假设我需要唯一的标记向量来训练逻辑回归模型,那么使用共享 id 有什么意义呢?这不会提供糟糕的 class化结果吗?

如果有人可以帮助我解决上述问题,一般来说,使用 doc2vec 向量进行文本 class化的最佳方法是什么,将不胜感激。

gensim 中包含一个使用 Doc2Vec 进行情感化 class 化的示例,非常接近您的需要。参见:

https://github.com/RaRe-Technologies/gensim/blob/bcee414663bdcbdf6a58684531ee69c6949550bf/docs/src/gallery/howtos/run_doc2vec_imdb.py

(这可能是比您 link 的其他教程更好的模型。特别是,您 link 编辑的 second tutorial 目前对 alpha 在误导的循环中多次调用 train()。)

具体针对您的问题:

(1) 使用尽可能多的数据进行训练,包括所需 class 内外的数据。一个只见过 "positive" 个例子的模型不太可能从完全不同于它所训练的文档的文档中生成有意义的向量。 (特别是,对于像 Doc2Vec 这样的模型,它只知道它在训练期间看到的单词,如果您稍后尝试为包含未知单词的新文档推断向量,这些单词将被完全忽略。)

(2) 是的,(任何算法的)classifier 被提供 已知标签的特征。然后它学习从这些特征中推断出这些标签。

(3) 传统上,Doc2Vec 是用每个文档一个唯一的 ID 'tag' 训练的,并且没有已知标签信息。所以,每个文档都有自己的向量,整个过程是"unsupervised"。可以改为为文档提供多个标签,或者在多个文档上使用相同的标签。而且,您可以使这些标签与已知标签相匹配——因此所有 "sports" 文档共享 'sports' 标签(除了它们的唯一 ID 之外,或者代替它)。但是,与简单的每个文档一个 ID 标签的情况相比,这样做会增加许多其他复杂性。所以我不建议在这个方向上尝试任何事情,直到你得到更简单的案例。 (我见过一些案例,其中将已知标签混合作为额外标签​​会有所帮助,尤其是在多 class class 化问题中,其中每个额外标签仅适用于一小部分所有文件。但这并不能保证——因此只有在你有一个简单的工作基线和可重复的方法来相互评估替代模型之后,才有意义修补它。)