我正在尝试使用Spacy构建NLP,但是在格式化训练数据时遇到了麻烦。我希望我的应用能够识别实体和意图。例如,在“我想订购比萨饼”中。目的是“ place_order”,实体将是披萨。如何在Spacy中格式化两个实体和意图的训练数据?
答案 0 :(得分:0)
这取决于您如何将问题作为NLP挑战来解决。您可以尝试使用“命名实体识别器”来识别诸如“比萨饼”之类的实体,但要注意,此模型主要是为真正的命名实体设计的-即名称与实体中唯一实体相关的实体世界,例如伦敦或Google。
尽管如此,我们看到了一些用例,其中NER模型对于未命名实体相当有效。您可以按照培训指南here设置数据格式,如下所示:
TRAIN_DATA = [
("Who is Shaka Khan?", {"entities": [(7, 17, "PERSON")]}),
("I like London and Berlin.", {"entities": [(7, 13, "LOC"), (18, 24, "LOC")]}),
]
此“比萨饼”实体的另一种潜在方法是基于规则的匹配/字典查找,具体取决于您期望的变化量。您可以在spaCy here中找到有关基于规则的匹配策略的更多信息。请注意,这种方法不需要训练数据,但是您需要仔细制定规则。
对于“意图”,同样有一些选择。可以将其作为NER挑战来查找动词短语“下订单”,但要注意的是,这不是一个真正的命名实体。也许更好的方法是将其视为文本分类挑战,并预测整个句子的“意图”标签。您可以找到有关文本分类here的文档,并且数据格式将需要是一个字典,每个潜在标签都需要一个1.0
或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}}),
]
最后,一种更复杂的方法是将依赖性解析器用于您的意图分类,请参见代码示例here。尽管开始和注释数据似乎比较困难,但这也可能是最强大的选择。