首页 > 解决方案 > Spacy 训练数据格式

问题描述

我正在尝试使用 Spacy 构建 NLP,但在格式化训练数据时遇到了问题。我希望我的应用能够识别实体和意图。例如,在“我想订购披萨”中。意图是“place_order”,实体是披萨。如何格式化 Spacy 中实体和意图的训练数据?

标签: machine-learningnlpartificial-intelligencespacy

解决方案


这取决于您如何将问题视为 NLP 挑战。您可以尝试使用命名实体识别器来识别像“pizza”这样的实体,但请注意,此模型主要是为真正命名的实体设计的 - 即具有引用现实世界中唯一实体的名称的实体,如 London 或 Google。

尽管如此,我们已经看到了 NER 模型对非命名实体相当有效的用例。您可以按照此处的培训指南对数据进行格式化,如下所示:

TRAIN_DATA = [
    ("Who is Shaka Khan?", {"entities": [(7, 17, "PERSON")]}),
    ("I like London and Berlin.", {"entities": [(7, 13, "LOC"), (18, 24, "LOC")]}),
]

这种“披萨”实体的另一种潜在方法是基于规则的匹配/字典查找,这取决于您期望的种类有多大。您可以在此处找到有关 spaCy 中基于规则的匹配策略的更多信息。请注意,这种方法不需要训练数据,但您需要仔细制定规则。

对于“意图”,您也有几个选择。要么将其作为 NER 挑战来查找动词短语“下订单”,但同样需要注意的是,这不是一个真正的命名实体。也许更好的方法是将其视为文本分类挑战,并预测整个句子的“意图”标签。您可以在此处找到有关文本分类的文档,并且数据格式需要是字典,每个潜在标签都获得 a1.0或 a 0.0

TRAIN_DATA = [
    ("I'm so happy.", {"cats": {"POSITIVE": 1.0, "NEGATIVE": 0.0}}),
    ("I'm so angry", {"cats": {"POSITIVE": 0.0, "NEGATIVE": 1.0}}),
]

最后,一种更复杂的方法是使用依赖解析器进行意图分类,参见此处的代码示例。虽然这似乎更难上手,也难以为其注释数据,但它也可能是最强大的选择。


推荐阅读