使用不完整训练集进行文档分类

请提供建议。我有一组文档,这些文档都有一个共同的属性(例如,包含“法语”这个词),其中一些文档被标记为与该集合无关(例如,包含“法式接吻”),但并不是所有文档都保证已被识别。哪种方法最适合找出其他不属于该集合的文档?


回答:

假设

根据你的例子“法语”,我将假设特征是文档中出现的一个词。此外,由于你提到“法式接吻”不相关,我进一步假设在你的案例中,特征是一个在特定意义上使用的词。例如,如果“泳池”是特征,你可能会说提到游泳池的文档是相关的,但提到台球(如斯诺克或台球运动)的文档则不相关。

  • 注意:虽然词义消歧(WSD)方法可以使用,但它们需要太多的努力,对于这个目的来说过于复杂。

建议:局部化语言模型 + 引导学习

可以这样想:你不是有一个不完整的训练集,而是一个较小的训练集。想法是利用这个小训练数据来构建更大的训练数据。这就是引导学习

对于训练数据中特征的每次出现,仅基于其周围的词构建一个语言模型。你不需要为整个文档构建模型。理想情况下,只需包含特征的句子就足够了。这就是我所说的局部化语言模型(LLM)。

从你的训练数据(我们称之为T_0)构建两个这样的LLM:一个用于相关文档,称为M1,另一个用于不相关文档,称为M0。现在,为了构建更大的训练数据,基于M1和M0对文档进行分类。对于每个新文档d,如果d不包含特征词,它将自动被添加为“坏”文档。如果d包含特征词,则考虑d中这个词周围的局部窗口(使用构建LLM时使用的相同窗口大小),并计算这个词序列在M0和M1下的困惑度。将文档分类到困惑度较低的类别中。

为了形式化,伪代码如下:

T_0 := 初始训练集(包含相关/不相关文档)D0 := 需要引导学习的额外数据N := 引导学习的迭代次数for i = 0 to N-1  T_i+1 := 空训练集  使用窗口大小w按上述方法构建M0和M1  for d in D0    if 特征词不在d中    then 将d添加到T_i+1的不相关文档中    else      使用d中特征词周围的窗口大小w计算对应于M0和M1的困惑度得分P0和P1。      if P0 < P1 - delta        将d添加到T_i+1的不相关文档中      else if P1 < P0 - delta        将d添加到T_i+1的相关文档中      else        在T_i+1中不使用d      end    end  end  从T_i+1的相关和不相关文档中随机选择一个小样本,并在需要时手动重新分类。end
  • T_N是你的最终训练集。在上述引导学习中,参数delta需要通过在一些保留数据(也称为开发数据)上的实验来确定。
  • 对小样本进行手动重新分类是为了避免在整个N次迭代中累积噪音。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注