我可以使用任何只有一个功能的机器学习方法吗?
是的!
事实上,许多 NLP 分类任务都是这种格式。给定一段文本,对某物进行分类。例如:
- 给定 1 条评论,对情绪进行分类
- 给定 1 篇新闻文章,对主题进行分类
- 给定 1 条聊天消息,对意图进行分类
现在你有:
可以使用更好的方法吗?
就像你提到的那样,你可以找到Fullname
给定的最常见的name
,每次你得到一个name
你有一个查找表Fullname
。但是,当一个name
你从未见过的东西出现时会发生什么,你如何分类呢?您是否还假设您已经拥有完整的Fullname
s 列表?
假设:你知道所有Name
的 s 和Fullname
s
在这种情况下,请按照您的建议进行操作。创建字典映射Name
-Fullname
通过查找Fullname
每个Name
.
假设:你知道所有Fullname
s 但不是所有Name
s
假设你有映射:
Peter -> Johnson
John -> Smith
然后,有一个您以前从未见过的名称,Pete
例如,它不会出现在您的映射表中。
您可以尝试两种方法:
- 简单的方法 - 查找映射中的哪个名称最接近
Pete
使用一些单词距离度量,例如 Levenshtein。
- 更健壮的方法 - 忘记映射表的概念并使用机器学习模型。您将需要以下物品:
- 一个文本矢量化器,用于将您的文本转换为数字矢量。我建议使用字符级别的 n-gram TF-IDF。
- 一个分类器。如果您使用我建议的矢量化器,那么您将需要一个线性分类器,例如 SVM。
如果您使用方法二,当您遇到 name 时Pete
,它将被转换为 n-gram(例如[pe, et, te, pet, ete]
)并矢量化。
假设:你不知道所有Fullname
s 并且你不知道所有Name
s
这变得更有趣了,因为你可以和Fullname
生成一起工作。
当您移至其他国家/地区的名称时,也可以使用它。
例如,您已经有了映射:
Peter -> Johnson
John -> Smith
然后你开始处理荷兰名字并遇到Pieter
and Jan
。然后,您可能希望获得以下结果,即使Fullname
s 也不同:
Pieter -> Janssen
Jan -> Smeets
为此,您可以使用 seq-to-seq 循环神经网络。该架构可以类似于用于神经语言翻译的架构。
但是,您创建的所有嵌入都必须是字符级别的。不是为每个单词学习嵌入,而是为每个字符学习。您还一次为您的网络提供一个字符。这样,您将不太可能找到“词汇表外”标记(除非您从另一个字母表中找到字符)。