Python NLP 意图识别
Python NLP Intent Identification
我是 Python 和 NLP 的新手,我的问题是如何找出给定问题的意图,例如我有这样一组问题和答案:
question:What is NLP; answer: NLP stands for Natural Language Processing
我对上述问题中的给定问题做了一些基本的 POS tagger
我得到 entety [NLP]
我也做了 String Matching
using this algo。
基本上我遇到了以下问题:
- 如果用户问
what is NLP
那么它将 return 准确答案
- 如果用户询问
meaning of NLP
则失败
- 如果用户询问
Definition of NLP
则失败
- 如果用户询问
What is Natural Language Processing
则失败
那么我应该如何识别给定问题的用户意图,因为在我的情况下,字符串匹配或模式匹配不起作用。
我认为这实际上取决于您如何构建问题和领域。 Here is a dataset that might be useful for question type classification and here 是一个实现。
有关基于问答系统的一般知识和优秀示例列表,请在此处列出行业 NLP 排行榜:https://rajpurkar.github.io/SQuAD-explorer/
根据您域的复杂性和范围,此过程实际上可能会变得非常复杂。例如,更高级的方法应用一阶+命题逻辑和复杂的神经网络。
我见过的最令人印象深刻的解决方案之一是双向注意力流:https://github.com/allenai/bi-att-flow, demo is here: http://beta.moxel.ai/models/strin/bi-att-flow/latest
在实践中,我发现如果你的语料库有更多特定领域的术语,你将需要建立自己的词典。在您的示例中,"NLP" 和 "Natural Language Processing" 是同一个实体,因此您需要将其包含在字典中。
基本上,如果您能够仅使用余弦距离等纯统计方法就可以逃脱惩罚,那么您就认为自己真的很幸运。您可能还需要结合基于词典的方法。我完成的所有 NLP 项目都有特定领域的术语和 "slang",因此我结合使用了基于统计和词典的方法,特别是对于主题、意图和实体等特征提取。
您可以使用 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')
]
更多详情请查看下方link。
https://spacy.io/usage/examples#intent-parser
你可以用DeepPavlov做意图识别,它支持多标签分类。可以在 http://docs.deeppavlov.ai/en/master/components/classifiers.html 中找到更多信息
演示页面 https://demo.ipavlov.ai
我是 Python 和 NLP 的新手,我的问题是如何找出给定问题的意图,例如我有这样一组问题和答案:
question:What is NLP; answer: NLP stands for Natural Language Processing
我对上述问题中的给定问题做了一些基本的 POS tagger
我得到 entety [NLP]
我也做了 String Matching
using this algo。
基本上我遇到了以下问题:
- 如果用户问
what is NLP
那么它将 return 准确答案 - 如果用户询问
meaning of NLP
则失败 - 如果用户询问
Definition of NLP
则失败 - 如果用户询问
What is Natural Language Processing
则失败
那么我应该如何识别给定问题的用户意图,因为在我的情况下,字符串匹配或模式匹配不起作用。
我认为这实际上取决于您如何构建问题和领域。 Here is a dataset that might be useful for question type classification and here 是一个实现。
有关基于问答系统的一般知识和优秀示例列表,请在此处列出行业 NLP 排行榜:https://rajpurkar.github.io/SQuAD-explorer/ 根据您域的复杂性和范围,此过程实际上可能会变得非常复杂。例如,更高级的方法应用一阶+命题逻辑和复杂的神经网络。 我见过的最令人印象深刻的解决方案之一是双向注意力流:https://github.com/allenai/bi-att-flow, demo is here: http://beta.moxel.ai/models/strin/bi-att-flow/latest
在实践中,我发现如果你的语料库有更多特定领域的术语,你将需要建立自己的词典。在您的示例中,"NLP" 和 "Natural Language Processing" 是同一个实体,因此您需要将其包含在字典中。
基本上,如果您能够仅使用余弦距离等纯统计方法就可以逃脱惩罚,那么您就认为自己真的很幸运。您可能还需要结合基于词典的方法。我完成的所有 NLP 项目都有特定领域的术语和 "slang",因此我结合使用了基于统计和词典的方法,特别是对于主题、意图和实体等特征提取。
您可以使用 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')
]
更多详情请查看下方link。 https://spacy.io/usage/examples#intent-parser
你可以用DeepPavlov做意图识别,它支持多标签分类。可以在 http://docs.deeppavlov.ai/en/master/components/classifiers.html 中找到更多信息 演示页面 https://demo.ipavlov.ai