基于ChatGLM的Deepin文档问答Bot

news2024/11/25 22:34:31

一、背景介绍

  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.coloradmin.cn/o/872916.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【第358场周赛】翻倍以链表形式表示的数字,Java解密。

LeetCode 第358场周赛 恒生专场。 文章目录 剑指Offer:翻倍以链表形式表示的数字示例:限制:解题思路:剑指Offer:翻倍以链表形式表示的数字 【题目描述】 给你一个 非空 链表的头节点 head ,表示一个不含前导零的非负数整数。 将链表 翻倍 后,返回头节点 head 。 示例…

django——创建 Django 项目和 APP

2.创建 Django 项目和 APP 命令: 创建Django项目 django-admin startproject name 创建子应用 python manager.py startapp name 2.1 创建工程 在使用Flask框架时,项目工程目录的组织与创建是需要我们自己手动创建完成的。 在django中,…

第四课 学习动词短语

文章目录 前言动词短语动副词组及物动副词组实义动词副词介词动宾词组固定特殊可分开动词短语时态变化规则 一、动副词组1、go ahead 先走,进行 不及物go along 前进,向前走,与....一道去go away 走开,离去,逃走&#…

全网最全的接口自动化测试教程

为什么要做接口自动化 相对于UI自动化而言,接口自动化具有更大的价值。 为了优化转化路径或者提升用户体验,APP/web界面的按钮控件和布局几乎每个版本都会发生一次变化,导致自动化的代码频繁变更,没有起到减少工作量的效果。 而…

用友 U8 CRM 任意文件上传+读取漏洞复现(HW0day)

0x01 产品简介 用友U8 CRM客户关系管理系统是一款专业的企业级CRM软件,旨在帮助企业高效管理客户关系、提升销售业绩和提供优质的客户服务。 0x02 漏洞概述 用友 U8 CRM客户关系管理系统 getemaildata.php 文件存在任意文件上传和任意文件读取漏洞,攻击…

RK3399平台开发系列讲解(入门篇)Linux内核常见的规则

🚀返回专栏总目录 文章目录 一、编码风格二、内核结构分配和初始化三、面向对象的思想沉淀、分享、成长,让自己和他人都能有所收获!😄 📢 本篇将介绍在内核代码的演化过程中应该遵守标准规则 一、编码风格 参考一下内核编码风格手册,它位于内核源代码树的 Documentat…

Flink 火焰图

方式一 使用 Flink Web UI 的 Flame Graph Flink 自己也支持了 Task 粒度的 Flame Graphs 功能,并且可以细化到 subtask 粒度。 第一步:配置启用功能 Flink 作业动态参数里增加配置:“rest.flamegraph.enabled”: “true” 并重启作业。当前该功能没有默认开启,因为这个功…

ROS2 学习(一)介绍,环境搭建,以及个人安装的一些建议

ROS2 学习 学习自b站课程:https://www.bilibili.com/video/BV16B4y1Q7jQ?p1 (up主:古月居GYH) ROS 介绍 Robot OS,为机器人开发提供了相对完善的 middleware,工具,软件等。 ROS1 对嵌入式设…

ProsperEx 的野望:借势 RWA 浪潮,构建全新的链上衍生品体系

真实资产代币化(RWA)并不是一个新概念了,以 USDT、USDC、DAI 等一系列美元稳定币是行业内最早的 RWA 概念资产,这些资产以美元为价值基础通过不同信用的机制,将其价值映射至链上,并以加密货币的形式体现&am…

关于memset的小实验

关于memset的小实验 memset是包含在<string.h>的函数&#xff0c;用来给字符数组赋值。然而人们常常把它拿来给整型变量赋值。 void *MEMSET (void *dstpp, int c, size_t len)memset是一个返回通用指针的函数&#xff0c;返回的地址便是输入的地址 int c表示对这块内…

Linux学习之awk函数

awk里边的函数分为内置函数和自定义函数。 内置函数有下边的几种&#xff1a; 算术函数&#xff08;arithmetic&#xff09; 字符串函数&#xff08;string&#xff09; 输入/输出函数和通用函数&#xff08;input/output, and general&#xff09; 自定义函数格式如下&#xf…

企业计算机服务器中了360后缀勒索病毒怎么办,勒索病毒解密数据恢复

随着计算机技术的不断发展&#xff0c;企业的办公系统得到了很大提升&#xff0c;但是随之而来的网络安全威胁也不断增加&#xff0c;勒索病毒的攻击事件时有发生。近期&#xff0c;我们收到某地连锁超市的求助&#xff0c;企业的计算机服务器遭到了360后缀勒索病毒攻击&#x…

【算法题】螺旋矩阵III (求解n阶蛇形矩阵)

一、问题的提出 n阶蛇形矩阵的特点是按照图1所示的方式排列元素。n阶蛇形矩阵是指矩阵的大小为nn&#xff0c;其中n为正整数。 题目背景 一个 n 行 n 列的螺旋矩阵可由如图1所示的方法生成&#xff0c;观察图片&#xff0c;找出填数规律。填数规则为从 1 开始填到 nn。 图1 …

SPI协议简介

什么是SPI&#xff1f; SPI是串行外设接口&#xff08;Serial Peripheral Interface&#xff09;的缩写&#xff0c;是美国摩托罗拉公司&#xff08;Motorola&#xff09;最先推出的一种同步串行传输规范&#xff0c;也是一种单片机外设芯片串行扩展接口&#xff0c;是一种高速…

[管理与领导-13]:IT基层管理者 - 激励 - 除了薪资奖金,还有哪些激励手段?

目录 前言 第1章 问题现象&#xff1a;对激励的误解 第一个误解&#xff1a;就是激励就是给钱 第二个误解&#xff1a;就是激励当成了升职 第三个误解&#xff1a;把激励当成忽悠 第2章 背后原因 1 没有找到和满足员工真正的需求&#xff1a;不同人&#xff0c;需求不同…

【数据结构与算法——TypeScript】树结构Tree

【数据结构与算法——TypeScript】 树结构(Tree) 认识树结构以及特性 什么是树? &#x1f332; 真实的树&#xff1a;相信每个人对现实生活中的树都会非常熟悉 &#x1f332; 我们来看一下树有什么特点&#xff1f; ▫️ 树通常有一个根。连接着根的是树干。 ▫️ 树干到…

代码随想录算法训练营之JAVA|第二十六天| 332. 重新安排行程

今天是第26天刷leetcode&#xff0c;立个flag&#xff0c;打卡60天。 算法挑战链接 332. 重新安排行程https://leetcode.cn/problems/reconstruct-itinerary/ 第一想法 题目理解&#xff1a;将多个行程的ticket 用第一个行程的结束地点作为下一个行程的开始地点&#xff0c;…

人工智能轨道交通行业周刊-第55期(2023.8.7-8.13)

本期关键词&#xff1a;北京智慧交通规划、成都数智化规划、关门车、集装箱标志、大模型隐私、视觉大模型 1 整理涉及公众号名单 1.1 行业类 RT轨道交通人民铁道世界轨道交通资讯网铁路信号技术交流北京铁路轨道交通网上榜铁路视点ITS World轨道交通联盟VSTR铁路与城市轨道交…

定量分析计算51单片机复位电路工作原理

下面画出等效电路图 可以知道单片机内必然有一个电阻RX&#xff0c;为了简化分析&#xff0c;我们假设他是线性电阻&#xff08;不带电容&#xff0c;电感的支路&#xff09; 还有一个基础知识&#xff1a; 电容器的充电放电曲线&#xff1a; 还需要知道电容电压的变化是连续…

【链表】经典链表题LeetCode

文章目录 160. 相交链表 简单&#x1f525;206. 反转链表 简单&#x1f525;876. 链表的中间结点 简单234. 回文链表 简单&#x1f525;141. 环形链表 简单&#x1f525;142. 环形链表 II 中等&#x1f525;21. 合并两个有序链表 简单&#x1f525;2. 两数相加 中等&#x1f52…