【问题标题】:Python NLP Intent IdentificationPython NLP 意图识别
【发布时间】:2017-10-28 01:18:28
【问题描述】:

我是 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,那么它将返回准确的答案
  2. 如果用户询问meaning of NLP 则失败
  3. 如果用户询问 Definition of NLP 则失败
  4. 如果用户询问 What is Natural Language Processing 则失败

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

【问题讨论】:

  • 这是一个没有简单(或明确)答案的难题。如果您是 NLP 新手,这不是一个好的开始。
  • 什么是“意图”?
  • @Daniel Intent 表示用户提问的意图,例如:location, whether, order, definition etc 更多信息请查看chat bot architecture

标签: python machine-learning nlp


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    例如: “告诉我柏林最好的酒店”

    ('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')
        ]
    

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

    【讨论】:

    • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review
    • 感谢您的评论。我已经更新了答案,请随时评论以进行任何更正:)
    【解决方案3】:

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

    在实践中,我发现如果您的语料库中有更多特定领域的术语,您将需要构建自己的字典。在您的示例中,“NLP”和“自然语言处理”是同一个实体,因此您需要将其包含在字典中。

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

    【讨论】:

      【解决方案4】:

      我认为这实际上取决于您如何构建问题和域。 Here 是一个可能对问题类型分类有用的数据集,here 是一个实现。

      话虽如此,我认为您需要注释您的文本,可能是ChunkerSRL 等,并提取有趣的模式。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-07-22
        • 1970-01-01
        • 2018-03-08
        • 2017-11-23
        • 2020-07-02
        • 1970-01-01
        • 1970-01-01
        • 2019-01-05
        相关资源
        最近更新 更多