问题:什么是NLP;答案:NLP代表自然语言处理
我在上述问题中对给定的问题进行了一些基本的 POS标记器
,我得到了实体[NLP]
,我还使用了字符串匹配
使用此算法。
基本上我面临以下问题:
- 如果用户问
什么是NLP
,那么它将返回确切的答案 - 如果用户问
NLP的含义
,则失败 - 如果用户问
NLP的定义
,则失败 - 如果用户问
什么是自然语言处理
,则失败
那么我应该如何确定给定问题的用户意图,因为在我的情况下,字符串匹配或模式匹配无效。
问题:什么是NLP;答案:NLP代表自然语言处理
我在上述问题中对给定的问题进行了一些基本的 POS标记器
,我得到了实体[NLP]
,我还使用了字符串匹配
使用此算法。
基本上我面临以下问题:
什么是NLP
,那么它将返回确切的答案NLP的含义
,则失败NLP的定义
,则失败什么是自然语言处理
,则失败那么我应该如何确定给定问题的用户意图,因为在我的情况下,字符串匹配或模式匹配无效。
您可以使用DeepPavlov进行意图识别,它支持多标签分类。更多信息请参见http://docs.deeppavlov.ai/en/master/components/classifiers.html 演示页面https://demo.ipavlov.ai
('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')
]
对于基于问题和回答系统的一般知识和优秀示例清单,这里列出了工业领域的自然语言处理(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项目都有领域特定术语和"俚语",因此我使用了统计和词典的结合方法,特别是用于特征提取如主题、意图和实体。
Intent
意味着用户提问的意图,例如:位置、天气、订单、定义
等。更多信息请查看此聊天机器人架构。 - Neo-coder