【问题标题】:Fasttext inconsistent on one label model classificationFasttext 在一个标签模型分类上不一致
【发布时间】:2020-12-10 08:40:58
【问题描述】:

我正在使用官方 FastText python 库 (v0.9.2) 进行意图分类。

import fasttext

model = fasttext.train_supervised(input='./test.txt',
  loss='softmax',
  dim=200,
  bucket=2000000,
  epoch=25,
  lr=1.0)

其中 test.txt 仅包含一个示例文件,例如:

__label__greetings hi

并预测两个话语的结果是:

print(model.words)
print('hi', model.predict('hi'))
print('bye', model.predict('bye'))
app_1  | ['hi']
app_1  | hi (('__label__greetings',), array([1.00001001]))
app_1  | bye ((), array([], dtype=float64))

这是我的预期输出,同时如果为同一个标签设置两个样本:

__label__greetings hi
__label__greetings hello

OOV 的结果不正确。

app_1  | ['hi', '</s>', 'hello']
app_1  | hi (('__label__greetings',), array([1.00001001]))
app_1  | bye (('__label__greetings',), array([1.00001001]))

我知道问题出在&lt;/s&gt; 标记上,也许是文本文件中的\n?,当词汇表上没有任何单词时,文本将替换为&lt;/s&gt;。是否有任何火车选项或方法可以跳过此行为?

谢谢!

【问题讨论】:

    标签: python-3.x fasttext


    【解决方案1】:

    除了 gojomo 的回答,我们可以说你的训练数据集绝对太小了

    如果您没有重要的标注数据集,可以尝试零样本分类:从预训练的语言模型开始,您只需设置一些标签,让模型尝试对句子进行分类。

    Here你可以看到并测试一个有趣的演示。

    另请阅读good article,了解关于零镜头分类的理论和实现。

    【讨论】:

      【解决方案2】:

      FastText 是一种大型的、需要大量数据的算法,它从随机初始化开始。在玩具大小的数据集上,您不应该期望结果是合理的或确实符合任何一组期望 - 其中(例如)您的 n-gram 存储桶的 100%-minus-epsilon 不会接受任何训练。

      我也不希望 supervised 模式能够可靠地预测现实数据集上的任何标签 - 它希望其所有训练数据都有标签,而且我没有看到提到它用于预测隐含“不在训练数据中”的“幽灵”类别与单个已知标签(如“one-class classification”)。

      (推测,我认为您可能必须明确提供 FastText supervised 模式 __label__not-greetings 标记的对比度数据——如果你没有别的东西,也许只是合成随机字符串——以便它有任何有意义地预测的希望“不问候”。)

      鉴于此,我认为您输入 bye 的第一个结果不正确,第二个结果也不正确。两者都只是一个训练不足的模型被要求做出一种它不知道能够做出的区分的噪音结果。

      【讨论】:

      • 感谢您的回复,我理解您的意思,fasttext毕竟是另一个文本分类器模型,我的困惑是因为我使用了nodejs(绑定)实现并且在阅读您的评论后像我暴露的那样工作我检查实现本身,并在预测之前检查标记是否在词汇表中。再次感谢您的澄清。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-17
      • 2018-04-09
      相关资源
      最近更新 更多