【问题标题】:How to train for multi-label text classification in Sagemaker?如何在 Sagemaker 中训练多标签文本分类?
【发布时间】:2020-01-14 23:08:57
【问题描述】:

我选择了 Sagemaker 提供的 BlazingText 算法。

我的训练集中的文本可以有一个或多个标签,我想预测一篇文章最有可能的标签。

我没有找到如何为此准确设置培训文件。我在训练文件中制作了以下格式的行

__label__1 __label__2 token1 token2 ... __label__2 token token token ...

我做得对吗?

【问题讨论】:

  • 训练格式看起来不错!它会返回错误吗?
  • 不,它不会返回任何错误。

标签: text-classification amazon-sagemaker multilabel-classification


【解决方案1】:

通常,多标签意味着您有多个标签要分类,而不是每个句子在训练集中都应该有多个标签。

如果同一个句子有多个标签,可以为每个标签复制句子。

代替:

__label__1 __label__2 token1 token2 

用途:

__label__1 token1 token2 
__label__2 token1 token2 

在测试或预测时间内检索前k个预测,你可以在配置中设置k:

"configuration": {"k": 3}

【讨论】:

  • 对于 k=3,我希望预测返回如下概率: __label__1: 0.85 __label__2: 0.75, __label__3: 0.45 。简而言之,我希望每个标签的预测都是独立的。如果我听从你的建议,BlazingText 会将预测视为互斥的(所有标签的概率总和为 1),不是吗?
  • 我不认为这是正确的。根据sklearn 文档,“多类分类意味着具有两个以上类的分类任务”(这就是您所说的),而“多标签分类为每个样本分配一组目标标签”,这就是@ AayushKarki 正在询问。 (来源:scikit-learn.org/stable/modules/multiclass.html)。我不是 100% 确定,但我认为您提到的“多类”方法将返回总和为 1 的概率,因此不会相互独立。
【解决方案2】:

以下是使用Sagemaker内置算法的多标签文本分类的可能选项,包括BlazingText:

  1. 使用2臂嵌入式模型,如SageMaker Object2vec,可以在一段文本和任意数量的标签之间学习亲和力。实际上是demo for multilabel text classification here
  2. 使用一个blazingtext实例作为多标签分类器:在培训时间,每行馈送多个空格分离的标签(没有尝试使用blazingtext,但似乎支持fasttext)或所有可能的标签文本对,以及推理时间要求使用"k" parameter"configuration": {"k": N}
  3. 使用多个BlazingText分类器,每个标签一个。这可能更多 发展比上面的选项的复杂,但不一定更多 鉴于BlazingText是一个非常浅薄和快速的神经网络昂贵 网络

【讨论】:

  • 我很困惑。 docs.aws.amazon.com/sagemaker/latest/dg/blazingtext.html @ 987654324的官方文档说“BlazingText的实施监督多级,多标签文本分类算法扩展了FastText文本分类器......”。这是什么意思? span>
  • 编辑了我的答案,FastText似乎支持多标签很好,所以机会也是BlazingText(自基于FastText)。 Object2VEC具有给您更具表现力的优势(嵌入池,而且还要讨论汇编,也可以让您在添加句子嵌入的可能性之外的可能性。 span>
猜你喜欢
  • 2019-05-20
  • 1970-01-01
  • 2019-11-04
  • 2020-04-09
  • 2021-01-26
  • 1970-01-01
  • 2018-03-07
  • 2020-12-01
  • 2017-08-17
相关资源
最近更新 更多