使用语义词表示(例如 word2vec)构建分类器

Using semantic word representation (e.g. word2vec) to build a classifier

我想为论坛帖子构建一个 classifier 来自动对这些帖子进行分类 发布到一些定义的类别(所以 multiclass classification 不仅仅是二进制 classification) 通过使用语义词表示。对于这个任务,我想利用 word2vec 和 doc2vec 并检查使用这些模型支持快速的可行性 classifier 的训练数据选择。此刻我已经尝试了两种模型和 他们工作起来很有魅力。但是,由于我不想手动标记每个句子来预测 它描述了什么,我想把这个任务留给 word2vec 或 doc2vec 模型。所以, 我的问题是:对于 classifier,我可以在 Python 中使用什么算法? ( 我刚在想 在 word2vec 或 doc2vec 上应用一些聚类 - 手动标记每个聚类(这 需要一些时间并且不是最好的解决方案)。以前,我利用 "LinearSVC"(来自 SVM)和 OneVsRestClassifier,然而,我标记了每个句子(通过 手动训练向量 "y_train" ) 以预测 class 新测试 句会属于。 python 中有什么好的算法和方法可以用于 这种类型的 classifier(利用语义词表示来训练数据)?

word2vec/doc2vec 等问题——实际上是任何受监督的分类器——的问题在于它只使用上下文。所以,例如,如果我有一个像 "Today is a hot day" 的句子和另一个像 "Today is a cold day" 这样的句子,它认为热和冷非常相似,应该在同一个集群中。

这使得标记变得非常糟糕。无论哪种方式,python 的 gensim 模块中都有 Doc2Vec 和 Word2Vec 的良好实现 - 您可以快速使用 google-news 数据集的预构建二进制文件并测试您是否获得有意义的集群。

您可以尝试的另一种方法是在您的计算机上实施一个简单的 lucene/solr 系统并开始随机标记几个句子。随着时间的推移 lucene/solr 将为您的文档建议清晰的标签,如果您的数据不是很糟糕,它们确实是相当不错的标签。

这里的问题是您要解决的问题不是特别容易,也不是完全可以解决的 - 如果您有很多 good/clear 数据,那么您可能能够自动分类大约 80-90% 的数据...但如果它不好,你将无法对其进行自动分类。

对于多 class class 句子化问题,doc2vec 可以很好地工作,因为上下文在句子中很少发生太大变化。

如果你只想使用 python,我会推荐 doc2vec(用于构建特征),然后是 xgboost(用于训练 classifier),它在类似问题中对我有用。