【ModelScope】快速搭建FAQ智能问答机器人

本文涉及的产品
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
模型训练 PAI-DLC,5000CU*H 3个月
交互式建模 PAI-DSW,5000CU*H 3个月
简介: 本文主要介绍FAQ问答模型的使用,基于海量的标注/弱标注数据训练的FAQ模型可用作相似度计算,小样本分类,FAQ问答等多种场景,效果杠杠的

简介

  • ModelScope是阿里达摩院打造的模型即服务共享平台,为泛AI开发者提供灵活、易用、低成本的一站式模型服务产品,让模型应用更简单!在这里,你可以免费使用平台提供的预训练模型,支持免费下载运行,一行命令实现模型预测,简单快速验证模型效果
  • 本文主要介绍FAQ问答模型的使用,基于海量的标注/弱标注数据训练的FAQ模型可用作相似度计算,小样本分类,FAQ问答等多种场景,效果杠杠的


环境准备

  • 本地环境安装,modelscope相关文档比较详细,本文就不赘述了,可参考 环境安装
  • 【推荐使用】Notebook预装了modelscope环境,可直接使用,注意需要确认启动的是modelcope-0.4版本以上;

  • 快速体验,注意:模型输出的是每个label的分值;

FAQ问答核心组件

模型链接

模型调试:获取句子向量

frommodelscope.pipelinesimportpipelinefrommodelscope.utils.constantimportTasks# 获取句向量表示,可用于构建向量索引;emb_ins=pipeline(Tasks.faq_question_answering, 'damo/nlp_structbert_faq-question-answering_chinese-base')
sentence_embs=emb_ins.get_sentence_embedding(['如何使用优惠券', '在哪里领券', '购物评级怎么看'], max_len=30)

模型调试:FAQ排序

frommodelscope.pipelinesimportpipelinefrommodelscope.utils.constantimportTasksfaq_ins=pipeline(Tasks.faq_question_answering, 'damo/nlp_structbert_faq-question-answering_chinese-base')
outputs=faq_ins({"query_set": ['如何使用优惠券', '在哪里领券', '购物评级怎么看'],
"support_set": [{'text': '卖品代金券怎么用', 'label': '6527856'}, 
                                   {'text': '怎么使用优惠券', 'label': '6527856'}, 
                                   {'text': '这个可以一起领吗', 'label': '1000012000'}, 
                                   {'text': '付款时送的优惠券哪里领', 'label': '1000012000'}, 
                                   {'text': '购物等级怎么长', 'label': '13421097'}, 
                                   {'text': '购物等级二心', 'label': '13421097'}]})
# 类维度排序# {'output': [[{'label': '6527856', 'score': 0.9982811212539673}, {'label': '1000012000', 'score': 0.0280130784958601}, {'label': '13421097', 'score': 8.978261757874861e-05}], #             [{'label': '1000012000', 'score': 0.8750997185707092}, {'label': '6527856', 'score': 0.0031510782428085804}, {'label': '13421097', 'score': 0.0007711253711022437}], #             [{'label': '13421097', 'score': 0.6274582743644714}, {'label': '1000012000', 'score': 0.0035026895347982645}, {'label': '6527856', 'score': 0.001228355336934328}]]}

快速搭建端到端FAQ问答机器人

  • 数据准备,通常FAQ的数据结构包括知识标题、相似问法、答案、FAQID,我们使用公开的保险知道数据进行实验,为了简化,仅保留知识标题和答案内容,每条知识的相似问只有一条就是知识标题,数据获取参考链接
fromdataclassesimportdataclassfromtypingimportListimportpandasaspdimportjson@dataclassclassFAQ:
title: strsim_questions: List[str]
answer: strfaq_id: intori_data=pd.read_csv('baoxianzhidao_filter.csv')
data= []
exist_titles=set()
forindex, rowinenumerate(ori_data.iterrows()):
row_dict=row[1]
title=row_dict['title']
iftitlenotinexist_titles:
data.append(FAQ(title=title, answer=row_dict['reply'], sim_questions=[title], faq_id=index))
exist_titles.add(title)
  • 构建索引,在实际业务场景中,由于FAQ知识库候选数量很多(通常是千级别的知识数量,万级别的问法数量),需要通过检索缩减候选数量,提升模型性能,以满足线上性能要求; (本文仅使用向量检索进行实验,为了更高的性能也可以使用elasticsearch)
  • 获取向量
frommodelscope.pipelinesimportpipelinefrommodelscope.utils.constantimportTaskspipeline_ins=pipeline(Tasks.faq_question_answering, 'damo/nlp_structbert_faq-question-answering_chinese-base')
bsz=32all_sentence_vecs= []
batch= []
sentence_list= [faq.titleforfaqindata]
fori,sentinenumerate(sentence_list):
batch.append(sent)
iflen(batch) ==bszor (i==len(sentence_list)-1andlen(batch)>0):
sentence_vecs=pipeline_ins.get_sentence_embedding(batch)
all_sentence_vecs.extend(sentence_vecs)
batch.clear()
  • 向量索引构建
importfaissimportnumpyasnp#说明:v1.3版本之后,请使用 hidden_size = pipeline_ins.model.network.bert.config.hidden_sizehidden_size=pipeline_ins.model.bert.config.hidden_sizeindex=faiss.IndexFlatIP(hidden_size)
vecs=np.asarray(all_sentence_vecs, dtype='float32')
index.add(vecs)
  • FAQ问答,问答流程包括检索+排序,来一个用户query,首先通过检索,召回候选数据,再通过faq模型给出最后的预测结果;
  • 问答函数:其中包括了检索 + 排序
frommodelscope.outputsimportOutputKeysdefask_faq(input, history=[]):
# step1: get sentence vector of queryquery_vec=pipeline_ins.get_sentence_embedding([input])[0]
query_vec=np.asarray(query_vec, dtype='float32').reshape([1, -1])
# step2: faq dense retrieval_, indices=index.search(query_vec, k=30)
# step3: build support set support_set= []
foriinindices.tolist()[0]:
faq=data[i]
support_set.append({"text": faq.title, "label": faq.faq_id, "index": i})
# step4: faq rankingrst=pipeline_ins(input={"query_set": input, "support_set": support_set})
rst=rst[OutputKeys.OUTPUT][0][0]
pred_label=rst['label']
pred_score=rst['score']
# get answer by faq_idpred_answer=""pred_title=""forfaqindata:
iffaq.faq_id==pred_label:
pred_answer=faq.answerpred_title=faq.titlebreakhistory.append((input, f'{pred_answer}|(pred_title:{pred_title},pred_score:{pred_score:.3f})'))
returnhistory, history
  • UI接入,通过gradio库可快速搭建chatbot UI界面进行体验
importgradioasgrgr.Interface(fn=ask_faq,
theme="default",
css=".footer {display:none !important}",
inputs=["text", "state"],
outputs=["chatbot", "state"]).launch(share=True)


至此,一个简单的端到端FAQ问答系统就搭建好了,此外,该模型还有多种应用场景,包括

  • 相似度计算:1.通过获取句向量,计算句子相似度;2. support_set中仅设置一个样本;
  • 小样本分类:support_set每个类传入少量几条样本等;
目录
相关文章
|
4月前
|
传感器 人工智能 监控
智能耕耘机器人
智能耕耘机器人
104 3
|
1月前
|
人工智能 算法 机器人
机器人版的斯坦福小镇来了,专为具身智能研究打造
【8月更文挑战第12天】《GRUtopia:城市级具身智能仿真平台》新论文发布,介绍了一款由上海AI实验室主导的大规模3D城市模拟环境——GRUtopia。此平台包含十万级互动场景与大型语言模型驱动的NPC系统,旨在解决具身智能研究中的数据稀缺问题并提供全面的评估工具,为机器人技术的进步搭建重要桥梁。https://arxiv.org/pdf/2407.10943
164 60
|
19天前
|
机器人 C# 人工智能
智能升级:WPF与人工智能的跨界合作——手把手教你集成聊天机器人,打造互动新体验与个性化服务
【8月更文挑战第31天】聊天机器人已成为现代应用的重要组成部分,提供即时响应、个性化服务及全天候支持。随着AI技术的发展,聊天机器人的功能日益强大,不仅能进行简单问答,还能实现复杂对话管理和情感分析。本文通过具体案例分析,展示了如何在WPF应用中集成聊天机器人,并通过示例代码详细说明其实现过程。使用Microsoft的Bot Framework可以轻松创建并配置聊天机器人,增强应用互动性和用户体验。首先,需在Bot Framework门户中创建机器人项目并编写逻辑。然后,在WPF应用中添加聊天界面,实现与机器人的交互。
33 0
|
4月前
|
自然语言处理 机器人 Go
【飞书ChatGPT机器人】飞书接入ChatGPT,打造智能问答助手
【飞书ChatGPT机器人】飞书接入ChatGPT,打造智能问答助手
273 0
|
1月前
|
机器人 TensorFlow 算法框架/工具
智能聊天机器人
【8月更文挑战第1天】智能聊天机器人。
68 2
|
1月前
|
人工智能 自然语言处理 安全
盘点国内:AI写作助手_ai智能问答机器人
AI写作助手是利用人工智能技术,特别是自然语言处理(NLP)技术,来辅助用户进行写作的工具。这类助手通过分析大量文本数据,能够理解语言的结构和含义,从而生成、编辑或优化文本内容。AI写作助手通常具有自动纠错、语法检查、内容生成和风格调整等功能,帮助用户提高写作效率和质量。
|
1月前
|
自然语言处理 监控 搜索推荐
使用 LangChain 创建高度互动和智能的聊天机器人
【8月更文第3天】随着自然语言处理(NLP)技术的进步,聊天机器人已成为企业和用户之间互动的重要渠道。LangChain 是一个强大的框架,旨在简化构建复杂语言模型应用程序的过程。本文将详细介绍如何使用 LangChain 框架创建高度互动和智能的聊天机器人,包括选择合适的语言模型、设计对话流程、上下文管理以及集成外部API和服务等内容。
84 0
|
4月前
|
传感器 人工智能 自然语言处理
智能咖啡厅助手:人形机器人 +融合大模型,行为驱动的智能咖啡厅机器人
智能咖啡厅助手:人形机器人 +融合大模型,行为驱动的智能咖啡厅机器人
智能咖啡厅助手:人形机器人 +融合大模型,行为驱动的智能咖啡厅机器人
|
4月前
|
传感器 机器学习/深度学习 算法
植保机器人具备智能感知与决策能力
植保机器人具备智能感知与决策能力
50 2