如何使用spacy或nltk检索句子的主要意图? [英] How to retrieve the main intent of a sentence using spacy or nltk?

查看:17
本文介绍了如何使用spacy或nltk检索句子的主要意图?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个要使用Spacy或nltk或任何NLP库提取句子的主要有意义部分的用例。

例句1:"我怎样才能高声反对骚扰" 意图是:"大声反对骚扰"

例句2:"唐老鸭是由哪个漫画家/哪个人/谁创作的?" 意图为:"唐老鸭创建者"

例句3:"如何使用spacy或nltk检索句子的主要意图"? 意图:"使用空格nltk检索句子的主要意图"

我是依赖项解析的新手,不知道如何做这件事。请帮帮我。

推荐答案

TL;DR

您必须定义要执行的最终任务,并确切定义什么是"意图"/"主要信息"或"文本意义"。

在长

乍一看,您似乎是在要求神奇地解决自然语言问题。但让我们来看看这个问题和你真正想要的是什么,让我们(暂时)避免所有意图/标签或语言的概念,只看看输入/输出是什么:

[in]:  "How Can I raise my voice against harassment"
[out]: "raise voice against harassment"

[in]:  "Donald Duck is created by which cartoonist/which man/whom ?" 
[out]: "Donald duck is created by"

[in]:  "How to retrieve the main intent of a sentence using spacy or nltk ?" 
[out]: "retrieve main intent of sentence using spacy nltk"

似乎您所有的输出标记/单词都只是从您的输入中引用的,在这种情况下,如果您只是将您的问题视为一个"span/equence注解"任务,即

[in]:  "How Can I raise my voice against harassment"
[out]: [0, 0, 0, 1, 0, 1, 1, 1] 

[in]:  "Donald Duck is created by which cartoonist/which man/whom ?" 
[out]: [1, 1, 1, 1, 0, 0, 0]

[in]:  "How to retrieve the main intent of a sentence using spacy or nltk ?" 
[out]: [0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]

假设每个单词都是二进制标签,则输出应为要从输入提取的单词标记1,为不提取的单词标记0

现在假设这是一个简单的二进制序列标记任务,可以简单地做:

但后退一点

  • 意图始终是输入的一部分是否真的如此?
  • 什么是意图?它是如何定义的?
  • 如果意图不在输入中,会发生什么?

好吧,即使我们不谈"意图",只是想提取主要意思,

  • 这句话到底是什么意思,是不是只是提取了"重要的词"?如果是这样的话,是什么让这个词变得"重要"?如何定义"重要"?
  • 只有不停的词不重要吗?如果是这样的话,您可以简单地删除停用词,例如Stopword removal with NLTK。还有,什么是停顿?

但我听到人们使用依赖项分析

什么是依赖项分析?

简而言之,它提供了文本的结构化表示。但传统依赖形式主义中的非结构具有"意图"的概念。

证明:CTR+F位于https://web.stanford.edu/~jurafsky/slp3/15.pdf

因此,除非在您的场景中更好地定义了"意图"的概念,否则我不认为简单地使用依赖关系树解析文本会有帮助。

这个训练模型以确定意图的Spacy工具怎么样?

发件人https://github.com/explosion/spaCy/blob/master/examples/training/train_intent_parser.py

是的,这是一个组合使用解析标签和序列标签并将其定义为"Intent"的示例,更具体地说,我们看到https://github.com/explosion/spaCy/blob/master/examples/training/train_intent_parser.py#L31

中的示例
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"],
        },
    ),

每个训练数据由

  1. 文本
  2. 依赖项头部索引
  3. 依赖项头部相关的Intent标签

https://github.com/explosion/spaCy/blob/master/examples/training/train_intent_parser.py#L173的输入/输出示例

[in]:  find a hotel with good wifi
[out]:
    [
      ('find', 'ROOT', 'find'),
      ('hotel', 'PLACE', 'find'),
      ('good', 'QUALITY', 'wifi'),
      ('wifi', 'ATTRIBUTE', 'hotel')
    ]

上面的示例显示,整个三元组列表被定义为一个意图,而不仅仅是原始字符串。三元组是指(dependent, relation, head),例如hotelPLACEfind中的('hotel', 'PLACE', 'find')

注意:这只是"语义"或"意图"的简单概念,这不是错误的,但定义得很好,因此执行此任务的模型可以在有监督的机器学习范例中进行训练。详情,请参阅https://spacy.io/usage/examples

根据您定义为意图/语义的方式和内容,输入/输出将发生变化,要训练的模型可能会有所不同。

但你为什么要把它弄得这么复杂,我只想要意图字符串?!

因为如果它只是一个字符串,那么"主要含义"或"意图"意味着什么?

我们回到了缺乏定义的问题,这使得这项任务成为一项神奇的任务,而不是计算机可以完成的任务。

这篇关于如何使用spacy或nltk检索句子的主要意图?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆