Python NLP 意图识别

Python NLP Intent Identification

我是 Python 和 NLP 的新手,我的问题是如何找出给定问题的意图,例如我有这样一组问题和答案:

question:What is NLP; answer: NLP stands for Natural Language Processing

我对上述问题中的给定问题做了一些基本的 POS tagger 我得到 entety [NLP] 我也做了 String Matching using this algo

基本上我遇到了以下问题:

  1. 如果用户问 what is NLP 那么它将 return 准确答案
  2. 如果用户询问 meaning of NLP 则失败
  3. 如果用户询问 Definition of NLP 则失败
  4. 如果用户询问 What is Natural Language Processing 则失败

那么我应该如何识别给定问题的用户意图,因为在我的情况下,字符串匹配或模式匹配不起作用。

我认为这实际上取决于您如何构建问题和领域。 Here is a dataset that might be useful for question type classification and here 是一个实现。

话虽这么说,但我认为您可能需要通过 Chunker, SRL 等方式对您的文本进行注释,并提取有趣的模式。

有关基于问答系统的一般知识和优秀示例列表,请在此处列出行业 NLP 排行榜:https://rajpurkar.github.io/SQuAD-explorer/ 根据您域的复杂性和范围,此过程实际上可能会变得非常复杂。例如,更高级的方法应用一阶+命题逻辑和复杂的神经网络。 我见过的最令人印象深刻的解决方案之一是双向注意力流:https://github.com/allenai/bi-att-flow, demo is here: http://beta.moxel.ai/models/strin/bi-att-flow/latest

在实践中,我发现如果你的语料库有更多特定领域的术语,你将需要建立自己的词典。在您的示例中,"NLP" 和 "Natural Language Processing" 是同一个实体,因此您需要将其包含在字典中。

基本上,如果您能够仅使用余弦距离等纯统计方法就可以逃脱惩罚,那么您就认为自己真的很幸运。您可能还需要结合基于词典的方法。我完成的所有 NLP 项目都有特定领域的术语和 "slang",因此我结合使用了基于统计和词典的方法,特别是对于主题、意图和实体等特征提取。

您可以使用 spacy 为聊天意图语义训练自定义解析器。

spaCy 的解析器组件可用于训练以预测输入文本上的任何类型的树结构。您还可以预测整个文档或聊天记录的树,以及用于注释话语结构的句子根之间的连接。

例如: "show me the best hotel in berlin"

('show', 'ROOT', 'show')
('best', 'QUALITY', 'hotel') --> hotel with QUALITY best
('hotel', 'PLACE', 'show') --> show PLACE hotel
('berlin', 'LOCATION', 'hotel') --> hotel with LOCATION berlin

要训练模型,您需要以下格式的数据:

# training data: texts, heads and dependency labels
# for no relation, we simply chose an arbitrary dependency label, e.g. '-'
TRAIN_DATA = [
    ("find a cafe with great wifi", {
        'heads': [0, 2, 0, 5, 5, 2],  # index of token head
        'deps': ['ROOT', '-', 'PLACE', '-', 'QUALITY', 'ATTRIBUTE']
    }),
    ("find a hotel near the beach", {
        'heads': [0, 2, 0, 5, 5, 2],
        'deps': ['ROOT', '-', 'PLACE', 'QUALITY', '-', 'ATTRIBUTE']
    })]

TEST_DATA:
input : show me the best hotel in berlin
output: [
      ('show', 'ROOT', 'show'),
      ('best', 'QUALITY', 'hotel'),
      ('hotel', 'PLACE', 'show'),
      ('berlin', 'LOCATION', 'hotel')
    ]

更多详情请查看下方link。 https://spacy.io/usage/examples#intent-parser

你可以用DeepPavlov做意图识别,它支持多标签分类。可以在 http://docs.deeppavlov.ai/en/master/components/classifiers.html 中找到更多信息 演示页面 https://demo.ipavlov.ai