一年多来,MIPT的神经系统和深度学习实验室一直在开发
DeepPavlov-一个用于创建交互式系统的开放库。 它包含一组经过培训的语言分析组件,您可以使用它们有效地解决业务问题。
例如,组织对客户常见问题的解答。 要通过呼叫中心,通过雇用员工在网站或社交网络上的小部件来做到这一点很简单。 紧迫的任务是优化过程,以便自动执行该过程,以最小的错误,并在方便的用户界面中。 例如,在来自“ Yandex”的语音助手“ Alice”中。
在本文中,我们想告诉您如何有效地解决使用自然语言处理的FAQ问题,以及如何将解决方案集成到Alice中。
文本分类及其操作方法在DeepPavlov库的基础上创建问答技能安装DeepPavlov库在爱丽丝上运用技巧结论文本分类及其操作方法
通过确定语义邻近度/文本分类的算法解决了从一组现成的问题-答案对中搜索与给定问题接近的问题的问题。
为了“在生产中”解决此问题,有两种方法:可以在该州雇用NLP专家,也可以将解决方案外包。
两种选择的缺点:1)数据收集的需要; 2)模型训练和质量测量的无休止的迭代; 3)开发人员开发的严格要求。 即使是现成的语言处理解决方案的集成过程也不是一件容易的事,更不用说从头开始创建它了。 国外云解决方案(Google Assistant或Microsoft Cortana)为文本分类问题(DialogFlow,Azure Bot Service)提供了全面的解决方案,但是在缩放,链接到付费API服务以及对俄语的支持方面仍然存在问题。
但要加油-还有一种选择:您可以使用开放的软件库,这大大简化了用俄语回答FAQ并将其集成到语音助手的解决方案的创建。
在DeepPavlov库的基础上创建问答技能
DeepPavlov就是这样一个库。 它包含一组经过培训的语言分析组件,包括文本分类组件。 您可以在
帮助中了解有关DeepPavlov各个组件的更多信息。
与DeepPavlov一起工作不需要开发人员的特殊技能,该库是免费的,并且为微调提供了充足的机会。
您可以在
本教程中找到所有基于知识库的技能创建说明。 我们建议您将教程中的代码重写为单独的脚本,然后通过脚本运行技能。
安装DeepPavlov库
首先,请安装Python 3.6并激活开发环境。 然后安装DeepPavlov。
source activate py36 pip install -q deeppavlov
技能发展
DeepPavlov中的技能(技能)是一个实体,无论其功能(
文本分类 ,
开放域问答等)如何,都具有统一的输入和输出格式。 创建技能后,可以将它们组合到简单对话系统的单个堆栈中,该系统在收到请求后会以最高的信心从技能中获得答案。
创建一个SametimeMatchingSkill类的对象,该对象根据常见问题列表响应用户请求。
from deeppavlov.contrib.skills.similarity_matching_skill import SimilarityMatchingSkill faq = SimilarityMatchingSkill(data_path = 'http://files.deeppavlov.ai/faq/dataset_ru.csv', x_col_name = 'Question', y_col_name = 'Answer', save_load_path = './model', config_type = 'tfidf_autofaq', edit_dict = {}, train = True)
相似性匹配技能类的对象具有以下参数:
- data_path-CSV数据文件的路径(逗号分隔符)
- x_col_name-CSV文件中带有问题的列的名称(问题,默认)
- y_col_name-CSV文件中带有答案的列的名称(答案,默认)
- config_type是要用于分类的配置的名称。 所有配置列表。
- edit_dict-`dict`,带有要在特定config_type的配置中重写的参数
- save_load_path-保存训练好的模型的路径
- 训练-是否训练模型
要开始使用模型,经过训练后,可以使用以下命令加载模型:
faq = SimilarityMatchingSkill(save_load_path='./model')`.
相似性匹配技能类简化了对文本分类组件的访问。 但是,如果您要更改配置的一部分,则可以通过定义edit_dict参数来完成。 相似性匹配技能类的对象(与任何技能一样)都将三个参数作为输入:分类要约列表,查询历史列表和状态列表(对于“相似性匹配技能”而言,最后两个可以为空列表)。
faq([' ?'],[],[])
典型的对话系统通常包含多种技能。 为了演示使用多种技能,我们将创建PatternMatchingSkill类的几种技能。
from deeppavlov.skills.pattern_matching_skill import PatternMatchingSkill hello = PatternMatchingSkill(responses=['', ''], patterns=['', '']) bye = PatternMatchingSkill(responses=['', ' '], patterns=['', ' ']) fallback = PatternMatchingSkill(responses=[' '], default_confidence = 0.3)
PatternMatchingSkill是一个简单的技能类,当用户的请求与模式列表的元素之一匹配并以default_confidence置信度对响应列表的随机元素进行响应时,就会调用此模式。 您可以手动配置default_confidence参数以区分技能响应的优先级。
最后一步是将技能组合到代理中并配置技能选择参数。 参数`HighestConfidenceSelector`确定该技能将以最高置信度调用。
from deeppavlov.agents.default_agent.default_agent import DefaultAgent from deeppavlov.agents.processors.highest_confidence_selector import HighestConfidenceSelector agent = DefaultAgent([hello, bye, faq, fallback], skills_selector=HighestConfidenceSelector())
接下来,使用“端点=常见问题”请求的路径和连接端口“端口= 5000”的路径启动服务器。
from deeppavlov.utils.alice import start_agent_server start_agent_server(agent, host='0.0.0.0', port=5000, endpoint='/faq')
请注意,Yandex.Dialogs要求服务器具有外部IP地址,并通过https作为Webhook URL进行访问。 为了快速进行原型制作,您可以使用
Ngrok-它允许您创建隧道以从本地网络上的DeepPavlov访问服务器。 为此,运行
ngrok http 5000
在您的服务器上使用DeepPavlov。 为此,将创建两个隧道,其中一个用于http和https协议。 复制https的隧道地址,将终结点/常见问题添加到链接中,最后一个链接将是Yandex.Dialog的Webhook URL。
在爱丽丝上运用技巧
要测试与Yandex.Dialogs平台的交互,请转到
dialogs.yandex.ru/developer并创建一个
新对话框 。 设置唯一的名称和激活名称。 对于Webhook URL,指定先前收到的链接。 保存更改。 要与技能互动,请转到“测试”选项卡。
结论
好了,现在您知道了如何使用DeepPavlov库中的文本分类模型来创建问答机器人,如何使用DeepPavlov快速创建技能原型并将其连接到Alice。
顺便说一句,用于连接到Amazon Alexa和Microsoft Bot Framework的接口也在我们的库中实现。
我们欢迎评论中的反馈。 您可以在我们的
论坛上
发表有关DeepPavlov的任何问题。
