使用Spacy训练数据格式

我正在尝试使用Spacy构建NLP系统,但我在格式化训练数据时遇到了麻烦。我希望我的应用程序能够识别实体和意图。例如,在“我想订购披萨”这句话中,意图是“place_order”,实体是披萨。我该如何在Spacy中为实体和意图同时格式化训练数据呢?


回答:

这取决于你如何将问题定义为NLP挑战。你可以尝试使用命名实体识别器来识别像“披萨”这样的实体,但要注意,这个模型主要是为真正的命名实体设计的——即那些在现实世界中指代唯一实体的命名实体,比如伦敦或谷歌。

尽管如此,我们已经看到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挑战来查找动词短语“place an order”,但同样要注意这不是一个真正的命名实体。或许更好的方法是将其视为文本分类挑战,并为整个句子预测“意图”标签。你可以在这里找到关于文本分类的文档,数据格式需要是一个字典,每个潜在标签得到一个1.00.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}}),]

最后,一个更复杂的方法是使用依赖解析器进行意图分类,参见这里的代码示例。虽然这看起来开始起来更困难,并且为其标注数据也更复杂,但它也可能是最强大的选项。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注