我有一个用例,我想使用spacy或nltk或任何NLP库来提取句子的主要有意义部分。
例句1:“我如何提高反对骚扰的声音”意图将是:“提出反对骚扰的声音”
例句2:“唐老鸭是哪个漫画家/哪个男人/谁创造的?”目的是:“唐老鸭是由...创建的”
例句3:“如何使用spacy或nltk检索句子的主要意图”?意图:“使用spacy nltk检索句子的主要意图”
我是依赖分析的新手,并不完全知道如何执行此操作。请帮助我。
您必须定义要执行的最终任务,并定义“意图” /“主要信息”或“文本含义”的确切含义。
[乍看之下,您似乎要求魔术般解决自然语言问题。但是,让我们看一下问题和您真正要问的是什么,让我们避免使用意图/标签或语言的所有概念(一段时间),而只看输入/输出的内容:
[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"
似乎所有输出标记/单词都只是输入中的引号,在这种情况下,如果您只是将问题视为“跨度/顺序注释”任务,即
[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
标记为不需要的单词。
现在,由于这是一个简单的二进制序列标记任务,因此只需执行以下操作:
但是稍微退后一步,
好的,即使我们不谈论“意图”,而只是想提取主要含义,
什么是依赖项解析?
简而言之,它提供了文本的结构化表示。但是传统的依赖形式主义中的结构都没有“意图”的概念。
证明: CTR + https://web.stanford.edu/~jurafsky/slp3/15.pdf上的F
因此,除非在您的方案中更好地定义“意图”的概念,否则我不认为仅使用依赖关系树来解析文本会有所帮助。
来自https://github.com/explosion/spaCy/blob/master/examples/training/train_intent_parser.py
是的,这是使用组合解析标签和序列标签并将其定义为“意图”的示例,更具体地说,我们从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"], }, ),
每个训练数据由]组成>
- 文本
- 依赖项头的索引
以及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)
,例如hotel
是三元组PLACE
的find
至('hotel', 'PLACE', 'find')
。但是为什么要使其变得如此复杂,我只想要意图字符串?!
因为意图只是一个字符串,这意味着什么?我们回过头来,缺乏定义使任务变得神奇,而不是计算机可以执行的任务。