从候选词列表中选择最相关的词

数据挖掘 机器学习 nlp
2022-02-26 00:52:26

假设我有 1000 个训练示例,其中每个训练示例都包含一个桶,例如'engineering',或者'management'和一个标签列表,例如['software', 'python', 'product'],人类为用例选择了最相关的标签,例如'software'.

所以我们的数据是这样的:

bucket         tags                        best_tag
engineering    [fullstack, software]       software
engineering    [java, python, software]    software
management     [technical, product]        product

什么样的模型或方法适合获取标签列表并根据某种潜在的潜在层次结构预测最佳标签?

1个回答

有很多方法可以解决这个问题

  • 词嵌入

如果您手头有词嵌入,您可以查看标签和存储桶之间的距离,然后选择距离最小的那个。

  • 频率论方法

您可以简单地查看存储桶/标签对的频率并选择它。可能不是最好的模型,但可能已经走了很长一段路。

  • 推荐系统

给定一个桶,您的目标是推荐最佳标签。您可以使用协同过滤或神经方法来训练推荐者。我觉得这可以很好地工作,尤其是在数据稀疏的情况下(即很多不同的标签,很多桶)。

使用这种方法我会看到的警告是,从技术上讲,您总是会比较所有标签,这仅在标签 A 始终优于标签 B 时才有效,无论向用户建议哪些标签。

  • 排名问题

您可以将其视为排名问题,我建议您阅读此博客以更好地了解如何训练此类模型。

  • 分类问题

如果您将问题转化为以下内容,这将成为一个分类问题:给定一个存储桶和两个标签(A 和 B),如果首选标签 A,则返回 0,如果首选标签 B,则返回 1。您可以将训练数据创建为数据中两个标签的每个组合,乘以 2(交换 A 和 B)。

需要注意的是,给定 N 个标签,由于成对性质,您可能需要进行循环或锦标赛方法来知道哪个标签是获胜者。

  • 循环/卷积网络

如果您想隐式处理问题的可变长度性质,您可以将标签作为序列传递。由于您的标签没有特定的顺序,因此这将为标签的每个排列创建不同的输入。在训练期间,这提供了更多的数据点,在推理期间,这可以用来创建一个集成(即预测每个排列的标签并进行多数投票)。

如果您认为标签呈现给用户的顺序很重要,那么请按照它在数据中的顺序处理该顺序。

你的 LSTM/CNN 基本上会学习为每个项目输出一个分数,这样得分最高的项目就是所需的项目。