支持外部可动态更新知识库的智能聊天助手上线,可自定义任务场景和扩展知识,支持多轮对话,支持GPT4、GLM3等多种模型。
在线体验
后期出完整的检索增强模块开发系统教程
当前章节: IDKB检索增强大模型系列教程导航
原文链接:Linux文本编辑
下一章节:gcc编译器
目录:Linux程序设计
截至目前为止(24.6.14),国内外大模型已经非常多了,AI热过去后很多人其实已经意识到了,attention机制的大模型本质就是一个检索器,模型越大内部的参数化知识越多,召回率也就越高。
但是这些模型不可能获取全世界的知识,模型没有办法得到和处理没有训练过的领域尤其是垂直领域和新领域的知识,因此大模型目前也就只能当当聊天工具或者增强的搜索引擎。
由此来看,大模型的发展方向应该转变为怎么能够为大模型提供准确专业的知识,并且这些知识能够实时更新替换,大模型的训练方向也应该向怎么从一系列知识(可能正确也可能错误)中,检索到需要的知识,分辨知识的正确性,并生成回答。
向着这个方向,我们可以参考几个开源项目如langchain的chatchat,这个项目实现了文件形式的非参数存储和检索方法。这个方法最早应该是RAG算法这篇论文里面引入了非参数知识存储检索模块。
当前章节:pybind-创建自己的python c++扩展库
原文链接:pybind-创建自己的python c++扩展库
目录:
当前章节:获取嵌入向量
目录导航
获取嵌入向量是使用模型的第一个部分,主要包括文本块和用户提问内容两个部分。我们将文本分割后会得到文本块,利用专门的embed模型或者直接通过llm嵌入,最终将所有文本块转为向量,向量、文本、数据库ID作为一个信息结点。使用向量数据库存储向量。
用户提问后,先将问题转为嵌入,从数据库查找最近的结点,返回ID对应的文本块即可。一同交付给模板打包即可。
常用方法是将文本的word的词向量求mean
当前章节:提问模板
目录导航
prompt template是问答系统的最后一个部分,其中关键点在于如何将查询的文本块和历史对话以及当前提问整合。
对于chatglm或者gpt模型,这类模型支持连续对话,可以将之前的回答作为历史记录,并按照模板设置对话指令作为新的提问。如果是知识库文本则通过给定信息回答,如果是网络搜索则根据搜索内容总结,如果无匹配结果,则直接回答问题。
这是chatglm的知识库提问模板,其它模板也是类似结构。
1 | "knowledge_base_chat": { |
当前章节:文本分割
目录导航
文本分割是项目数据处理的第一步,也是最重要的一步。因为文本分割的效果直接影响到信息查找和最后提问的内容,如果语义分割的效果差,最终实现的效果也是差强人意的。
文本分割原理简单,就是段落分割,由于大模型本身就具有总结能力,只需要分割出段落,或一小段即可,而不需要精确到每一个句子。这能减少段落向量的查询次数,但是会增加提问的信息内容,甚至会导致长度超出模型处理能力。
大部分的系统都是使用的普通的方法切割,通过设置正则表达式按照句段切割,如langchain的textspliter。
modelscope专门未段落切割训练了切割模型,该模型接收一般数据,最后完成内容格式整理和切割,返回分段的文本。
我们通过一个样本文本测试这几种分割实际效果(测试的时候是无任何段落换行文本):
1 | 为了帮助用户提升信息获取及信息加工的效率,阿里巴巴达摩院语音实验室的口语语言处理团队实践了一系列针对音视频转写结果的长文本语义理解能力。本文主要围绕其中的信息结构化段落分割相关能力进行介绍。 |
CharacterTextSplitter和RecursiveCharacterTextSplitter
这个是langchain的两个文本分割类,按照设定的分割符切割,等效于设置简单的re表达式,通用性非常差,一般不直接使用,作为接口来使用。
chatglm的分割类
这个是chatglm使用的中文文本分割类,实现的效果就是从最基本的一句话实现语义分割,效果较好,能让模型准确定位到问题的答案并且提取的信息简短。
1 | from langchain.text_splitter import CharacterTextSplitter |
分割结果:
1 | x:为了帮助用户提升信息获取及信息加工的效率,阿里巴巴达摩院语音实验室的口语语言处理团队实践了一系列针对音视频转写结果的长文本语义理解能力。 |
1 | x:为了帮助用户提升信息获取及信息加工的效率,阿里巴巴达摩院语音实验室的口语语言处理团队实践了一系列针对音视频转写结果的长文本语义理解能力。本文主要围绕其中的信息结构化段落分割相关能力进行介绍。 |
通过以上示例,我们可以按照实际需求结合算法和神经网络分割,算法分割作为主要分割方式,神经网络作为备用分割方式,作为可选方法。
并且我们需要考虑到不同文本格式的支持,如markdown,pdf,html,img
常用库有rapidocr_onnxruntime-RapidOCR,langchain.document_loaders下有无结构化文本转换器