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

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


回答:

假设

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

  • 注意:虽然词义消歧(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

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

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