【AnyQ】百度开源 FAQ 问答系统—AnyQ介绍

前言

近年来,随着人工智能技术的发展,人机对话技术得到越来越多的关注,人机对话产品也不断涌现。其中,智能客服作为人机对话的一个典型场景表现出极大的商业潜力和很强的研究价值,各企业也争先恐后的推出自己的智能客服产品。

FAQ 问答技术作为智能客服系统最核心技术之一,在智能客服系统中发挥重要作用。通过该技术,可实现在知识库中快速找到与用户问题相匹配的问答,为用户提供满意的答案,从而极大提升客服人员效率,改善客服人员服务化水平,降低企业客服成本。

百度在今年 7 月的 AI 开发者大会上开源了首个工业级基于语义计算的 FAQ 问答系统——AnyQ,旨在赋能开发者,为人工智能技术及应用蓬勃发展贡献力量。

FAQ 问答技术难题与现状

FAQ 问答主要有以下技术难题:

1、用户问题较为口语化,包含大量省略、指代等现象;

2、用户问题复杂多样,基于字面信息很难精准匹配语义相同问题;

3、实际产品应用中,对系统鲁棒性、整体性能要求较高;

学术界研究的 FAQ 问答技术主要集中在问题匹配单点技术上,对整体 FAQ 问答系统研究较少。而工业界使用的 FAQ 系统对外则极少披露细节。

AnyQ 系统框架

开源 AnyQ(Answer Your Questions) (https://github.com/baidu/AnyQ) 系统采用配置化、插件化框架设计,搭载由百度自主研发、业界领先的 SimNet 语义匹配技术,针对 FAQ 问答的种种技术难题给出了高效的解决方案。

AnyQ 系统主要由 Question Analysis(问题分析)、Retrieval(检索)、Matching(匹配)、Re-ranking(重排序) 等核心部件构成。系统框架如图示:

 

AnyQ 系统特色

【特色 1】框架设计灵活,插件功能丰富

AnyQ 系统的配置化和插件化设计,使得开发者可以自主配置选择系统的功能,当前支持 20 多个插件。同时,开发者也可根据需要便捷地将定制化的功能以插件的方式加入系统。

•    配置化

AnyQ 系统集成了检索和匹配的丰富插件,通过配置的方式生效;以相似度计算为例,包括字面匹配相似度 Cosine、Jaccard、BM25 等,同时包含了语义匹配相似度。

•    插件化

AnyQ 的所有功能都是通过插件形式加入,用户自定义插件,只需实现对应的接口即可,如 Question 分析方法、检索方式、匹配相似度、排序方式等。

【特色 2】极速语义检索

传统倒排索引只考虑了输入问题和索引问题间的字面重合度,这种技术在智能客服场景中存在很大问题,FAQ 集合通常是专业人员整理,其问题形式比较书面和正式,而用户问题更加口语化,两者之间即使语义一致,但表述上差别迥异。与基于倒排索引的 FAQ 问答系统相比,AnyQ 在检索方面采用了业界前沿的语义检索技术。

语义检索技术将用户问题和 FAQ 集合的相似问题通过深度神经网络映射到语义表示空间的临近位置,检索时,通过高速向量索引技术对相似问题进行检索。语义检索原理如下图:

 

【特色 3】业界领先语义匹配技术 SimNet

问题相似度计算是 FAQ 问答系统的核心,其算法效果好坏决定了整个系统的效果。

AnyQ 使用 SimNet 语义匹配模型构建文本语义相似度,克服了传统基于字面匹配方法的局限。

SimNet 是百度 NLP 于 2013 年自主研发的语义匹配框架,在百度搜索、百度信息流、百度地图等产品广泛应用,主要包括 BOW、CNN、RNN、MM-DNN 等神经网络模型。此外,我们基于 SimNet 框架集成了学术界主流模型:Match-Pyramid、MV-LSTM、K-NRM 等。SimNet 支持 PaddlePaddle 和 Tensorflow 两种平台训练。基于 SimNet 语义匹配框架,开发者可以快速训练已有的语义匹配网络模型。

使用 SimNet 训练出的模型可以便捷的加入 AnyQ 系统中,增强 AnyQ 系统的语义检索和语义匹配能力。

本次开源包含一个基于百度海量搜索数据训练的 SimNet-BOW 模型,在一些真实的 FAQ 问答数据集上,该模型效果相比基于字面的相似度方法 AUC 提升 5% 以上,有效解决特定领域由于标注数据少无法训练出准确语义匹配模型的问题。

总结

AnyQ 系统配置化、插件化的框架设计有助于开发者快速构建、快速定制适用于特定业务场景的 FAQ 系统。AnyQ 包含了百度积累多年的 SimNet 语义匹配框架,开发者可根据自身产品需求训练自己的语义模型,提升产品效果。此外,针对无任何训练数据的开发者,AnyQ 还包含了基于百度海量数据训练的语义匹配模型,开发者可零成本直接使用。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要实现提取问题中的参数并调用API,你需要进行以下步骤: 1. 对问题进行自然语言处理。你可以使用Python中的自然语言处理库,例如NLTK、spaCy、Stanford NLP等,来对问题进行分析和解析。 2. 从问题中提取参数。一旦你对问题进行了解析,就可以使用词性标注和命名实体识别等技术来提取参数。例如,如果问题是“北京天气怎么样?”,你可以使用命名实体识别来找到“北京”这个地点的参数。 3. 调用API。一旦你提取出了参数,就可以使用它们来调用相应的API。例如,如果你想要查询北京的天气,你可以使用天气API,并将“北京”作为参数传递给该API。 下面是一个简单的Python代码示例,演示如何从问题中提取参数并调用API: ```python import requests import json import nltk # 问题 question = "北京天气怎么样?" # 分词和词性标注 tokens = nltk.word_tokenize(question) tags = nltk.pos_tag(tokens) # 命名实体识别 ne_chunked = nltk.ne_chunk(tags) entities = [] for chunk in ne_chunked: if hasattr(chunk, 'label') and chunk.label() == 'GPE': entities.append(' '.join(c[0] for c in chunk)) # 调用API if len(entities) > 0: url = "http://api.openweathermap.org/data/2.5/weather?q={}&appid=your_app_id".format(entities[0]) response = requests.get(url) data = json.loads(response.text) print("天气:{}".format(data['weather'][0]['description'])) else: print("无法识别问题中的地点参数") ``` 在这个示例中,我们使用NLTK库对问题进行了分词和词性标注,然后使用命名实体识别找到了问题中的地点参数。接着,我们使用天气API来查询该地点的天气,并将查询结果输出到控制台中。 希望这个示例可以帮助你实现提取问题中的参数并调用API的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值