Sub*_*ick 2 nlp nltk pos-tagger spacy dependency-parsing
我有一个用例,我想使用 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"
Run Code Online (Sandbox Code Playgroud)
似乎您所有的输出标记/单词都只是您输入的引用,在这种情况下,如果您只是将您的问题视为“跨度/序列注释”任务,即
[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]
Run Code Online (Sandbox Code Playgroud)
假设每个单词都是一个二元标签,输出应该标记1你想从输入中提取的单词和你不想提取的单词0。
现在考虑到它是一个简单的二进制序列标记任务,可以简单地执行以下操作:
但退后一点,
好吧,即使我们不谈“意图”,只想提取主要含义,
什么是依赖解析?
简而言之,它提供了文本的结构化表示。但是传统依赖形式主义中的结构没有“意图”的概念。
证明:https : //web.stanford.edu/~jurafsky/slp3/15.pdf 上的 CTR + 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"],
},
),
Run Code Online (Sandbox Code Playgroud)
每个训练数据由
以及来自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')
]
Run Code Online (Sandbox Code Playgroud)
上面的例子表明,整个三元组列表被定义为一个意图,而不仅仅是原始字符串。三胞胎是指(dependent, relation, head),例如将hotel是PLACE对find从三胞胎('hotel', 'PLACE', 'find')。
注意:这仅仅是“语义”或“意图”的 SpaCy 概念,它没有错误但定义明确,因此执行此任务的模型可以在有监督的机器学习范式中进行训练。详情见 https://spacy.io/usage/examples
根据您定义为意图/语义的方式和内容,输入/输出会发生变化,并且要训练的模型可能会有所不同。
因为如果它只是一个字符串,那么“主要含义”或“意图”是什么意思?
我们回到定义的缺乏,这使得任务成为一项神奇的任务,而不是计算机可以执行的任务。
| 归档时间: |
|
| 查看次数: |
999 次 |
| 最近记录: |