Python自然语言处理意图识别

9
我是Python和NLP的新手,我的问题是如何找出给定问题的意图,例如我有一组类似以下的问题和答案:

问题:什么是NLP;答案:NLP代表自然语言处理

我在上述问题中对给定的问题进行了一些基本的 POS标记器,我得到了实体[NLP],我还使用了字符串匹配使用此算法

基本上我面临以下问题:

  1. 如果用户问什么是NLP,那么它将返回确切的答案
  2. 如果用户问NLP的含义,则失败
  3. 如果用户问NLP的定义,则失败
  4. 如果用户问什么是自然语言处理,则失败

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


这是一个没有简单(或明确)答案的难题。如果你是自然语言处理的新手,这不是一个好的起点任务。 - lenz
什么是“意图”? - Daniel
2
@Daniel Intent 意味着用户提问的意图,例如:位置、天气、订单、定义等。更多信息请查看此聊天机器人架构 - Neo-coder
4个回答

12

3
你可以使用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')
    ]

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

虽然这个链接可能回答了问题,但最好在此处包含答案的基本部分并提供参考链接。如果链接页面更改,仅有链接的答案可能会失效。- 来自审查 - MisterMiyagi
2
谢谢您的评论。我已经更新了答案,如有任何更正,请随时回复评论 :) - manish Prasad

2

对于基于问题和回答系统的一般知识和优秀示例清单,这里列出了工业领域的自然语言处理(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"和"Natural Language Processing"是同一实体,因此需要将其包含在字典中。

基本上,如果你可以只使用纯统计方法如余弦距离,那么你会非常幸运。你可能需要结合基于词典的方法。我所做过的所有NLP项目都有领域特定术语和"俚语",因此我使用了统计和词典的结合方法,特别是用于特征提取如主题、意图和实体。


0

我认为这主要取决于你如何构建问题和领域。这里有一个可能对问题类型分类有用的数据集,这里有一个实现方案。

话虽如此,我认为你需要通过分块器SRL等方式注释你的文本,并提取有趣的模式。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接