基于Langchain-Chatchat的知识库问答系统

文章目录

  • 文章背景
  • 构建知识库
  • 资源及相关配置
  • 相关问题
    • 检索问题
      • 检索结果不准确
    • LLM问题
      • LLM回答错误、遗漏或多余
  • 参考

文章背景

Langchain-Chatchat项目是一种利于langchain思想实现的基于本地知识库的问答应用,是一个可以实现完全本地化推理的知识库增强方案,具有重点解决数据安全保护,私域化部署的企业痛点的能力。
本文主要对构建一个基于Langchain-Chatchat的知识库问答系统,可能存在的问题以及相关改进方案的说明。
项目地址:https://github.com/chatchat-space/Langchain-Chatchat
项目更多详情:https://github.com/chatchat-space/Langchain-Chatchat/wiki/

构建知识库

将七月近两年整理的大厂面试题PDF文件作为源文件来进行知识库的构建。
在这里插入图片描述
默认使用RapidOCRPDFLoader作为文档加载器。RapidOCR是目前已知运行速度最快、支持最广,完全开源免费并支持离线快速部署的多平台多语言OCR。由于PaddleOCR工程化不是太好,RapidOCR为了方便大家在各种端上进行OCR推理,将PaddleOCR中的模型转换为ONNX格式,使用Python/C++/Java/Swift/C# 将它移植到各个平台。
更多详情参考:https://rapidai.github.io/RapidOCRDocs/docs/overview/

资源及相关配置

本次主要对 V0.2.6 版本进行测试,资源及相关默认配置如下:

  • 显卡:Tesla P100,16G(显存)
  • 分词器:ChineseRecursiveTextSplitter
  • chunk_size:250
  • embedding模型:m3e-base
  • LLM模型:chatglm2-6b
  • 向量库:faiss

相关问题

检索问题

检索结果不准确

问题描述
会出现检索出的部分结果与问题相关性不大的情况,甚至还会出现对某些问题检索不到的情况。

比如问一个面试题:用通俗的语言介绍下强化学习
检索得到的内容如下:

出处 [1] 2022Q2大厂面试题共92题(含答案及解析).pdf

CART 树算法的核心是在生成过程中用基尼指数来选择特征。 4、用通俗的语言介绍下强化学习(Reinforcement Learning)监督学习的特点是有一个“老师”来“监督”我们,告诉我们正确的结果是什么。在我们在小的时候,会有老师来教我们,本质上监督学习是一种知识的传递,但不能发现新的知识。对于人类整体而言,真正(甚至唯一)的知识来源是实践——也就是强化学习。比如神农尝百草,最早人类并不知道哪些草能治病,但是通 过尝试,就能学到新的知识。学习与决策者被称为智能体,与智能体交互的部分则称为环境。智能体与环境不断进行交互,具体而言,这一交互的过程可以看做是多个时刻,每一时刻,智能体根据环境的状态,依据一定的策略选择一个动作(这

出处 [2] 2021Q3大厂面试题共107题(含答案及解析).pdf

20.2 集成学习的方式,随机森林讲一下,boost 讲一下, XGBOOST 是怎么回事讲一下。 集成学习的方式主要有 bagging,boosting,stacking 等,随机森林主要是采用了 bagging 的思想,通过自助法(bootstrap)重采样技术,从原始训练样本集 N 中有放回地重复随机抽取 n 个样本生成新的训练样本集合训练决策树,然后按以上步骤生成 m 棵决策树组成随机森林,新数据的分类结果按分类树 投票多少形成的分数而定。 boosting是分步学习每个弱分类器,最终的强分类器由分步产生的分类器组合而成,根据每步学习到的分类器去改变各个样本的权重(被错分的样本权重加大,反之减小) 它是一种基于 boosting增强策略的加法模型,训练的时候采用前向分布算法进行贪婪的学习,每次迭代

出处 [3] 2022Q2大厂面试题共92题(含答案及解析).pdf

特征工程可以并行开发,大大加快开发的速度。 训练速度较快。分类的时候,计算量仅仅只和特征的数目相关。 缺点:准确率欠佳。因为形式非常的简单,而现实中的数据非常复杂,因此,很难达到很高的准确性。很难处理 数据不平衡的问题。 3、介绍下决策树算法常见的决策树算法有三种:ID3、C4.5、CART 树 ID3 算法的核心是在决策树的每个节点上应用信息增益准则选择特征,递归地构架决策树。C4.5 算法的核心是在生成过程中用信息增益比来选择特征。 CART 树算法的核心是在生成过程中用基尼指数来选择特征。4、用通俗的语言介绍下强化学习(Reinforcement Learning)

可以看出,第一个检索结果和问题是相关的,第二个检索结果和问题是完全没关系的,而第三个检索结果的最后一句话是和问题相关的。

比如问一个面试题:Bert的预训练过程是什么
检索得到的内容如下:

出处 [1] 2021Q2大厂面试题共121题(含答案及解析).pdf

成. 15.6 bert 的改进版有哪些 参考答案: RoBERTa:更强大的 BERT 加大训练数据 16GB -> 160GB,更大的batch size,训练时间加长 不需要 NSP Loss: natural inference 使用更长的训练 SequenceStatic vs. Dynamic Masking 模型训练成本在 6 万美金以上(估算) ALBERT:参数更少的 BERT一个轻量级的 BERT 模型 共享层与层之间的参数 (减少模型参数)

出处 [2] 2022Q1大厂面试题共65题(含答案及解析).pdf

可以从预训练方法角度解答。
… 20
5、RoBERTa 相比 BERT 有哪些改进?

20 6、BERT 的输入有哪几种 Embedding?

出处 [3] 2022Q2大厂面试题共92题(含答案及解析).pdf

保证模型的训练,pre-norm 显然更好一些。 5、GPT 与 Bert 的区别 1) GPT
是单向模型,无法利用上下文信息,只能利用上文;而 BERT 是双向模型。 2) GPT 是基于自回归模型,可以应用在 NLU 和 NLG两大任务,而原生的 BERT 采用的基于自编码模 型,只能完成 NLU 任务,无法直接应用在文本生成上面。 6、如何加速 Bert模型的训练 BERT 基线模型的训练使用 Adam with weight decay(Adam 优化器的变体)作为优化器,LAMB 是一款通用优化器,它适用于小批量和大批量,且除了学习率以外其他超参数均无需调整。LAMB 优化器支持自

而在文档中的结果如下:
在这里插入图片描述
可以看出,是没有检索到的相关内容的。

原因分析
使用默认配置时,虽然上传文档可以实现基础的问答,但效果并不是最好的,通常需要考虑以下几点原因。

  • 文件解析及预处理:对于PDF文件,可能出现解析不准确的情况,导致检索召回率低;
  • 文件切分:不同的chunk_size切分出来的粒度不一样。如果设置的粒度太小,会出现信息丢失的情况;如果设置的粒度太大,又可能会造成噪声太多,导致模型输出的结果明显错误。且单纯根据chunk_size切分比较简单粗暴,需要根据数据进行针对性优化;
  • embedding 模型效果:模型效果不好也会影响检索结果。

优化方法

  • 文件解析及预处理:一方面可以尝试不同的PDF解析工具,解析更加准确;另一方面可以考虑将解析后的内容加上标题,并保存成Markdown格式,这样可以提高召回率;
  • 文件切分:基于策略:对于特定的文档,比如有标题的,可以优先根据标题和对应内容进行划分,再考虑chunk_size;基于语义分割模型:还可以考虑使用语义分割模型。
  • 模型效果:尝试使用更多embedding模型,获得更精确的检索结果。如:piccolo-large-zh 或 bge-large-zh-v1.5等等。可以参考榜单:https://huggingface.co/spaces/mteb/leaderboard
  • 向量库:如果知识库比较庞大(文档数量多或文件较大),推荐使用pg向量数据库;如果文件中存在较多相似的内容,可以考虑分门别类存放数据,减少文件中冲突的内容。
  • 多路召回:结合传统方法进行多路召回。
  • 精排:对多路召回得到的结果进行精排。

LLM问题

LLM回答错误、遗漏或多余

问题描述
LLM问题主要有以下几点:
1、LLM的回答会出现遗漏信息或补充多余信息的情况。
2、chatglm2-6b还会出现回答明显错误的情况。

比如我们还用上面的一个面试题:用通俗的语言介绍下强化学习
LLM基于知识库给的答案如下:

强化学习是一种人工智能技术,它通过不断地试错和学习,使机器逐步掌握如何在特定环境中实现某种目标。与监督学习不同,强化学习没有一个“老师”来指导机器,而是通过与环境的交互来不断学习。

在强化学习中,机器作为一个智能体,与环境的交互过程可以看作是多个时刻的循环。在每个时刻,机器根据当前的环境状态,依据一定的策略选择一个动作,然后接着得到一个反馈(如得分或奖励)。机器通过不断试错和学习,逐渐提高自己的策略,以最大化累积的奖励。

强化学习算法主要有三种:ID3、C4.5和CART树。其中,ID3算法通过信息增益准则来选择特征,C4.5算法则用信息增益比来选择特征,而CART树算法则是用基尼指数来选择特征。这些算法都在决策树的生成过程中应用某种准则来选择特征,以达到提高模型性能的目的。

而在文档中的结果如下:
在这里插入图片描述
可以看出,LLM并没有完全根据文档内容来回答,而是基于自己的知识进行了相应回答,而对于回答的第三段话,强化学习算法主要有三种:ID3、C4.5和CART树。可以看出,这段话的表达是完全错误的。

优化方法

  • 优化prompt,可能会有一定效果的。但由于随机性,结果并不能得到保证。
  • 优先使用最新的6B/7B模型:ChatGLM3-6B、Baichuan2-7B、Qwen-7B,如果资源可以支持48G以上的显卡,可以考虑使用Qwen-14B-Chat 或 Baichuan-13B-Chat,13B的模型通常好于6B/7B模型。

参考

基于LLM+向量库的文档对话痛点及解决方案:https://zhuanlan.zhihu.com/p/651179780
RAG检索增强的比赛参考方案:
https://github.com/MetaGLM/FinGLM
https://www.kaggle.com/competitions/kaggle-llm-science-exam/discussion
https://tianchi.aliyun.com/competition/entrance/532154?spm=a2c22.12281957.0.0.605a3b74yOyo0b
大模型外挂知识库优化:https://www.zhihu.com/people/zhan-shi-jin-27/posts
多向量检索器与查询转换:https://www.datalearner.com/blog/1051698375259477

LLM+Embedding构建问答系统的局限性及优化方案:https://zhuanlan.zhihu.com/p/641132245
与传统方法结合的多路召回:https://github.com/FlagOpen/FlagEmbedding/issues/17

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

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

相关文章

排查线程阻塞问题

案例代码 package first;import java.util.concurrent.TimeUnit;public class DeadLock {private static volatile Object lock new Object();public static void main(String[] args) {new Thread(() -> {test1();}).start();new Thread(() -> {test2();}).start();}p…

如何解决3d max渲染效果图全白这类异常问题?

通过3d max渲染效果图时,经常会出现3Dmax渲染效果图全黑或是3Dmax渲染效果图全白这类异常问题。可能遇到这类问题较多的都是新手朋友。不知如何解决。 3dmax渲染出现异常的问题,该如何高效解决呢?今天小编这里整理几项知识点,大家…

java时间类

一、java时间类为什么这么复杂? java的时间类非常复杂,这是由于jdk1.0到jdk1.1的时间类设计存在缺陷,导致使用不方便,线程不安全等问题,所以在jdk1.8,java又重新加入了一些时间类替换之前的时间类,但是jd…

Centos7 单用户模式修改密码 3步搞定 666 (百分比成功)

1.第一步重新服务器 2.进入这个页面按e进入单用户模式 3.找到linux16这行 在后面添加 init/bin/bash 按ctrlx进入 4.注意是事项直接修改是报错passud: Authentication token manipulation error 需要执行权限:mount -o remount,rw /

SpringBoot Web开发

SpringBoot3-Web开发 SpringBoot的Web开发能力,由SpringMVC提供。 Web开发的三种方式 方式处理过程注意事项实现效果全自动直接编写控制逻辑全部使用自动给配置默认效果手自一体Configuration、 配置WebMvcConfigurer、 配置WebMvcRegistrations不要标注 EnableWeb…

macos死机后IDEA打不开,Cannot connect to already running IDE instance.

Cannot connect to already running IDE instance. Exception: Process 573 is still running 解决办法 进入:/Users/lzq/Library/Application Support/JetBrains 找到IDEA的目录删除隐藏文件夹 .lock rm -rf .lock

邮件钓鱼-邮件来源伪造-SPF绕过-setoolkitgohishswaks钓鱼

0x00 SPF简介 SPF即发送方策略框架,某种邮件服务器会有自己的SPF策略设定,可以设定SPF为只允许某些主机发送邮件等,当设定后第三方就无法伪造成邮件服务器的管理员对用户下发邮件。 是否存在SPF的验证: linux下:dig…

tomcat8.5.95配置https报错 socket ,无法包装数据,状态无效[CLOSED] ,断开的管道

tomcat8.5.95配置https一直下面的错,经过一下午的排查解决了 2023-11-15 16:33:16.825 ERROR[https-jsse-nio2-8183-exec-5]org.springframework.boot.web.support.ErrorPageFilter.handleCommittedResponse:213 -Cannot forward to error page for request [/css/bootstrap.m…

windows 电脑删除不了.TTF的文件

出现这个问题,首先检查,你的.ttf文件是不是在哪个软件中打开了。 如果是,先关掉,然后在删一遍试试。 如果这个还是不行试着打开控制面板>外观和个性化> 字体 > 字体设置>还原默认字体设置勾选,然后重启一下…

从房地产先后跨界通信、文旅演艺领域,万通发展未来路在何方?

近年来,房地产市场可谓负重前行,各大房企纷纷谋求新出路。 作为中国最早的房企之一,万通发展再次处在转型变革的十字路口。自去年以来,万通发展在转型升级之路上动作频频,可谓忙得不亦乐乎。 大幕落下之时,…

《Linux从练气到飞升》No.27 Linux中的线程互斥

🕺作者: 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux菜鸟刷题集 😘欢迎关注:👍点赞🙌收藏✍️留言 🏇码字不易,你的👍点赞🙌收藏❤️关注对我真的…

Unity如何保存场景,如何导出工程文件/如何查看保存位置?【各版本通用】

如何保存场景? 在unity中CtrlS 或者File—>Save 输入你要保存的场景名【建议保存在Scenes文件夹下】 下图,保存场景不在Scenes文件夹下: 下图,保存在Scenes文件夹下: 下图,保存完成 如何导出工程文…