基于ChatGLM的Deepin文档问答Bot

一、背景介绍

  1. 题目来源:2023全国大学生计算机系统能力大赛操作系统设计赛-功能挑战赛
  2. 题目地址:proj225-document-question-answering-bot
  3. 题目描述:https://wiki.deepin.org 上有900多条deepin系统相关的中文教程和词条,请编写能根据这些内容回答问题的中文聊天机器人。使用者通过命令行界面输入问题,机器人输出回答和参考的wiki文档的链接。
  4. 参考文档:
  • deepin wiki 仓库
  • 问答系统用例
  • 问答系统 wiki
  1. 题目要求:
  • (必须)完成一个聊天机器人,能根据 deepin wiki 内容回答问题
  • (必须)通过训练模型,使回答和问题要有80%以上概率的相关性。
  • (必须)编写博客,记录开发过程的心得与体会,并将博客投递至 planet.deepin.org
  • (可选)添加玲珑使用手册内容,支持回答玲珑使用的问题。
  • (可选)使用web或qt为机器人添加可视化界面支持,能在deepin系统上使用。

二、题目分析

该题目要求做一个基于文档建立的问答系统,结合如今的深度学习技术,我们无需梳理意图、词槽,无需进行问题和答案的整理,只需准备文本格式的教程和词条文档,就可以得到一个问答系统,回答用户的各种问题。

通过结合大语言模型的推理能力和向量数据库的存储和检索能力,来实现通过向量检索到最相关的语义片段,然后让大语言模型结合相关片段上下文来进行正确的推理得到结论。在这个过程中主要有两个流程:后端数据处理和存储流程、前端问答流程,同时其底层主要依赖两个模块:基于大语言模型的推理模块、基于向量数据库的向量数据管理模块。
在这里插入图片描述

三、技术路线

ChatGLM-6B

ChatGLM-6B 是一个开源的、支持中英双语的对话语言模型,基于 General Language Model (GLM) 架构,具有 62 亿参数。ChatGLM-6B 使用了和 ChatGPT 相似的技术,针对中文问答和对话进行了优化。经过约 1T 标识符的中英双语训练,辅以监督微调、反馈自助、人类反馈强化学习等技术的加持,62 亿参数的 ChatGLM-6B 已经能生成相当符合人类偏好的回答。
时下主流的预训练框架有三种:autoregressive自回归模型(如GPT)、autoencoding自编码模型(如BERT)、encoder-decoder编码-解码模型(如T5、BigBird)。GLM模型基于autoregressive blank infilling方法,结合了上述三种预训练模型的思想。

使用ChatGLM做文档问答的大致思路如下:

  1. 将教程和词条整理为纯文本的格式,把每个文档切成若干个小的chunks。
  2. 调用文本转向量的接口,将每个chunk转为一个向量,并存入向量数据库。
  3. 当用户发来一个问题的时候,将问题同样转为向量,并检索向量数据库,得到相关性最高的一个chunk。
  4. 将问题和chunk合并重写为一个新的请求发给chatglm的api。

q-d匹配与q-q匹配

这里实际做的是将用户请求的query和document做匹配,也就是所谓的q-d匹配。q-d匹配的问题在于query和document在表达方式存在较大差异,通常query是以疑问句为主,而document则以称述说明为主,这种差异可能会影响最终匹配的效果。一种改进的方法是,不直接做q-d匹配,而是先通过document生成一批候选的question,当用户发来请求的时候,首先是把query和候选的question做匹配,进而找到相关的document片段,这种方法就是’q-q匹配’,具体思路如下:

  1. 将教程和词条整理为纯文本的格式,把每个文档切成若干个小的chunks
  2. 调用ChatGLM的API,根据每个chunk生成5个候选的question,使用的prompt格式为’请根据下面的文本生成5个问题: …'。
  3. 调用文本转向量的接口,将生成的question转为向量,并存入向量数据库,并记录question和原始chunk的对应关系。
  4. 当用户发来一个问题的时候,将问题同样转为向量,并检索向量数据库,得到相关性最高的一个question,进而找到对应的chunk。
  5. 将问题和chunk合并重写为一个新的请求发给chatglm的api。

总结来说,即让AI根据每段文本生成大量问题,再将用户问题跟AI生成问题匹配,找到问题所在的文本段落并生成prompt。

SimBERTv2

SimBERT是一个融生成和检索于一体的模型,可以用来作为句向量的一个比较高的baseline,也可以用来实现相似问句的自动生成,可以作为辅助数据扩增工具使用,它以Google开源的BERT模型为基础,基于微软的UniLM思想设计了融检索与生成于一体的任务,来进一步微调后得到的模型,所以它同时具备相似问生成和相似句检索能力。SimBERTv2是SimBERT的升级版,它们主要的区别在于训练的细节上,可以用两个公式进行对比:
S i m B E R T = B E R T + U n i L M + 对比学习 S i m B E R T v 2 = R o f o r m e r + U n i L M + 对比学习 + B A R T + 蒸馏 SimBERT=BERT+UniLM+对比学习 \\ SimBERTv2=Roformer+UniLM+对比学习+BART+蒸馏 SimBERT=BERT+UniLM+对比学习SimBERTv2=Roformer+UniLM+对比学习+BART+蒸馏
SimBERT属于有监督训练,训练语料是自行收集到的相似句对,通过一句来预测另一句的相似句生成任务来构建Seq2Seq部分,[CLS]的向量事实上就代表着输入的句向量,所以可以同时用它来训练一个检索任务,如下图:

在这里插入图片描述

、参考文献

[1]苏剑林. (Jun. 11, 2021). 《SimBERTv2来了!融合检索和生成的RoFormer-Sim模型 》[Blog post]. Retrieved from https://kexue.fm/archives/8454

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/66745.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

后院失火、持续亏损!Mobileye半年报「不回避」竞争压力

"客户在2023年上半年非常谨慎,导致增长率低于正常水平,但我们已经看到下半年回暖趋势,预计下半年交付将比去年同期增长16%,远高于上半年。"这是Mobileye在近日公司半年报发布会上的预判。 公开数据显示,今年…

Mac Neo4j图数据库安装与使用

1. Neo4j简介 图数据库是基于图论实现的一种NoSQL数据库,其数据存储结构和数据查询方式都是以图论为基础的,图数据库主要用于存储更多的连接数据。 Neo4j 是一个知名的图数据库,提供Cypher 查询语言。 2. 安装与启动 安装前要确保Mac 系统中…

jmeter获取mysql数据

JDBC Connection Configuration Database URL: jdbc:mysql:// 数据库地址 /库名 JDBC Driver class:com.mysql.jdbc.Driver Username:账号 Password:密码 JDBC Request 字段含义 字段含义 Variable Name Bound to Pool 数据库连接池配置…

逗号操作符

逗号表达式,就是用逗号隔开的多个表达式。 逗号表达式,从左向右依次执行。整个表达式的结果是最后一个表达式的结果。 运用:

TCP的四次挥手与TCP状态转换

文章目录 四次挥手场景步骤TCP状态转换 四次挥手场景 TCP客户端与服务器断开连接的时候,在程序中使用close()函数,会使用TCP协议四次挥手。 客户端和服务端都可以主动发起。 因TCP连接时候是双向的,所以断开的时候也是双向的。 步骤 三次…

END-TO-END、SCALE HYPERPRIOR、Checkerboard梳理总结

8.9-8.15学习汇报 阅读《END-TO-END OPTIMIZED IMAGE COMPRESSION》、《VARIATIONAL IMAGE COMPRESSION WITH A SCALE HYPERPRIOR》、《Checkerboard Context Model for Efficient Learned Image Compression》 传统的图像或视频压缩方法通常分为多个步骤,包括变换…

【软件测试】Linux系统下安装jdk配置环境变量(详细步骤)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、安装环境 操作…

CentOS-6.3安装MySQL集群

安装要求 安装环境:CentOS-6.3 安装方式:源码编译安装 软件名称:mysql-cluster-gpl-7.2.6-linux2.6-x86_64.tar.gz 下载地址:http://mysql.mirror.kangaroot.net/Downloads/ 软件安装位置:/usr/local/mysql 数据存放位…

贝锐蒲公英:快速搭建连锁门店监控体系,赋能企业高效管理

随着国民生活水平的提高和零售场景的变革,消费者对于餐饮类目的消费支出不断增加,线下社区生鲜商超作为下沉市场最主要的消费场景之一,蕴藏着巨大价值机会。 对于线下连锁生鲜超市而言,连锁门店多、员工多,门店管理时会…

Java多线程编程中的线程死锁

Java多线程编程中的线程死锁 ​ 在多线程编程中,线程死锁是一种常见的问题,它发生在两个或多个线程互相等待对方释放资源的情况下,导致程序无法继续执行。本文将介绍线程死锁的概念、产生原因、示例以及如何预防和解决线程死锁问题。 线程死…

VBA 学习笔记1 对象以及属性

目录 1 取得VBA对象1.1 取得工作簿对象1.2 取得工作表对象1.3 取得单元格对象1.4 取得对象的属性1.5 文档的方法1 进入vba 界面 方式之一: 快捷键:ALTERF11 运行方式之一: 进入vba界面,点击绿色三角符号 1 取得VBA对象 1.1 取得…