AI模型 语言模型

基于开源大模型快速构建本地知识库应用

1. 知识库构建需求

1.1. 大模型应用及问题

自ChatGPT面世以来,大语言模型技术凭借其记忆、推理、逻辑理解、内容及代码生成等能力在人工智能应用场景中越来越重要。大模型的通用性和泛化能力也逐渐成为了赋能各行各业变革创新的关键,而大模型应用过程中也存在缺乏专业知识、出现幻觉信息、数据时效延迟等问题,如处理需要特定领域专业知识的任务时大语言模型可能表现不佳,在生成结果时出现偏离事实的内容信息或给出已经过时的答案等。

针对以上问题,目前可以通过预训练、模型微调和外挂知识库等方式进行优化和改善,其中使用预训练和模型微调,均会涉及较高的计算资源和时间消耗,产生训练成本的同时,知识信息无法在模型内进行及时更新。而外挂知识库是一种低成本的实现方式,能够通过利用本地专业知识,将高质量的数据信息加工为知识库,再由大模型完成检索召回与总结生成,辅助各行各业实现专业知识精准问答。大模型技术源于自然语言处理领域,最擅长自然语言处理,最成熟的应用场景是知识问答和写作生成,而通过与专业业务知识库的结合,是大模型应用落地实践的核心方案。

1.2. 数据挖掘和价值利用

知识库(Knowledge base)是通过相关领域知识的采集、整理及提取,用于知识管理的一种数据库。早期的知识库以纸质文档为主,对于检索和更新使用非常低效,且随着时间的推移,文件的数量逐渐庞大,纸质文档常年缺乏维护损坏后也无法产生有效的价值。进入信息时代,文档管理逐步电子化,存储到计算机系统中对文档进行管理,很大程度上便捷了使用,但都是孤立存储的,没有建立文档知识的关系,缺乏相关知识的联动。

云计算和大数据推动了一系列人工智能技术的落地和发展,使人们从信息时代迈入了智能时代。但由于大数据本身存在的非结构化、非标准化、缺少语义关联、缺乏领域知识、质量不高等问题。为充分挖掘和利用大数据的价值,除了依赖领域相关的标准、规范、指南以外,更重要的是专业领域知识的支撑,通过充分理解数据语义, 实现大数据的语义共享和语义集成,进一步实现对大数据的精准和精细分析,建立完善的数据知识利用。

1.3. 语义知识检索

知识搜索和推荐是知识库中很重要的一部分,也是用户使用知识库中最常规的入口。传统的搜索和推荐功能主要是基于关键词匹配和统计模型,因为缺乏对用户搜索语义的理解,有时无法准确识别用户的意图。而基于语义的知识搜索和推荐功能,可以更好地捕捉用户的真实意图,从而为用户提供更准确、更智能的知识搜索和推荐服务。使用词向量技术是这个场景中一个较为常见的方案。通过预训练的词向量模型,把用户的查询转化为词向量,然后利用向量之间的相似度来查询知识库中相似的内容,从而得到相近语义的搜索结果。

使用大语言模型则是这一场景下更为智能的解决方案。大语言模型拥有的语义理解能力,可以将用户的查询转化为更准确的语义表示,经过与知识库中的内容进行匹配后,获得最接近使用者意图的知识。当用户在系统中有其他学习和搜索行为时,大语言模型还可以通过这些信息学习用户的偏好,从而为其推荐相关的知识。

2. LLM大模型概述

2.1. 人工智能发展历程

人工智能(Artificial Intelligence,AI)技术自20世纪50年代诞生以来,已经成为一门引领未来的综合性高技术学科。它在多个领域大放异彩,如大数据分析、自动驾驶、智慧金融和智能机器人等。其发展历程经历了初级期、发展期、低谷期、进步期和繁荣期。艾伦·图灵的图灵测试为人工智能的定义奠定了基础。在初级期和发展期,人工智能技术初步发展,移动机器人Shakey和聊天机器人Eliza相继诞生。在低谷期,人工智能遭遇发展瓶颈,受限于计算机的内存和处理速度,进展缓慢。进入进步期,IBM的“深蓝”超级计算机击败了国际象棋世界冠军,为人工智能的发展带来了重大突破。如今互联网技术的飞速进步,使人工智能以大数据和神经网络为标志进一步走向实用化,并在各个领域取得了显著进步,直到ChatGPT的发布更是将AI的应用推向了新的高度。

2.2. Transformer算法出现

随着人工智能技术的不断进步,自然语言处理(NLP)领域也迎来了巨大变革。Transformer模型算法由谷歌研究团队在2017年的论文《Attention Is All You Need》中提出,该算法完美的解决了RNN与CNN在处理长序列文本时的缺陷,补齐了传统RNN在NLP领域中的诸多短板,其多种衍生模型在NLP任务上表现出色。除强大的特征提取能力外,Transformer的自注意力结构在多类型数据模式对齐上也同样表现优秀,为处理文本、语音、图像、视频等多类型数据融合问题提供了新思路。Transformer模型采用了自注意力(Self-Attention)机制,实现了对序列中每个位置的元素进行关联和依赖建模,这种机制使得模型能够更好地捕捉句子中的上下文信息,从而提高了模型的性能。

基于开源大模型快速构建本地知识库应用插图

Transformer模型结构

模型主要由两部分组成:编码器(Encoder)和解码器(Decoder)。编码器负责将输入序列转换为固定长度的向量表示,而解码器则根据这些向量生成输出序列。在每个编码器和解码器中,都包含多个自注意力层和前馈神经网络层。自注意力层通过计算输入序列中每个位置的元素之间的相关性得分,得到一个注意力权重矩阵。然后,将这个矩阵与输入序列相乘,得到加权后的表示。这种机制使得模型能够关注到输入序列中重要的部分,从而提高了模型的性能。前馈神经网络层则是一个简单的全连接神经网络,用于对自注意力层的输出进行进一步的处理。

2.3. GPT的发展

GPT,全称Generative Pre-training Transformer,是OpenAI开发的基于Transformer的大规模语言生成模型,于2018年首次提出。GPT模型只使用了Transformer解码器的部分,没有使用编码器-解码器的结构,采用自监督学习的方式,通过大量的无标签数据上进行预训练,然后在特定任务的数据上进行微调。

在2019年,OpenAI推出了GPT-2,主要通过增加参数及数据集来提升模型能力。2020年,GPT-3通过投入更多计算资源,参数量达1750亿,延续了GPT系列单向语言模型的训练方式。到2022年11月底,OpenAI发布了基于GPT-3.5模型的ChatGPT,由于接近人类对话与思考的方式,吸引了广泛关注。最新的GPT-4于2023年3月发布,不再通过扩大参数规模,而是主要提升利用现有数据的能力,准确度大幅提升。

2.4. 大模型技术的应用

同以往的人工智能模型比较,大语言模型在参数量上呈现了质的飞跃,提升了其在复杂任务的建模的整体能力,包括:

(1) 学习能力增强,能够应对更复杂的任务;

(2) 泛化能力加强,以实现更广泛的适用性;

(3) 鲁棒性提高,提高实际应用的可靠性和适用性;

(4) 更高层次认知的能力,可模拟人类等。

基础大模型具有理解、生成、逻辑推理、自然语言处理、多模态等通用的底层能力,可以应用于不同的业务领域和场景需求,但缺少专业领域的知识和优化。行业大模型则是针对特定行业进行知识训练和优化的大模型,如金融、医疗行业模型等。应用大模型是根据具体场景进行专项训练和提升,如智能客服、推荐等。一般情况下,规模越大的模型,其能力也更强,但选择商业模型调用或开源模型部署的成本也会更高。行业或场景应用需要对基础大模型做相应的知识增强,既包括微调训练,即将相关知识直接压缩到大模型的参数中,也包括采用向量数据库方式,将专业知识转化为向量存储,并可以随时被大模型调用。然后,根据具体应用场景,对行业大模型进行任务增强,通过知识图谱增强、价值观增强、纠错等多种技术,从内容准确性、逻辑准确性、价值观准确性等维度提升模型可控性,使最终表现符合用户预期。

3. 知识库问答实现思路

3.1. 实现思路

本地知识库问答应用不仅需要对本地知识库智能搜索的能力,还需要语义理解和文字总结的能力。而大模型正是这一场景的技术工具,将大模型语义理解和文字总结能力与本地知识库的内容相结合,可以构建出一个强大的问答系统。

基于大模型搭建知识库问答的解决思路有以下几种:

(1)模型微调Fine-Tuning

基于专有知识建立训练数据集,用大模型在数据集上进行微调,改变神经网络中参数的权重,相当于让模型去学习这些知识。微调方式适合特定的任务,但也存在一些问题,如没有解决事实性问答可靠的问题、计算资源和时间成本较高、需要构建特定领域的微调训练语料、微调的结果存在不确定性等。

(2)使用提示工程Prompt Engineering

使用领域的专业知识作为输入信息提供给模型,类似于短期记忆,容量有限但是清晰,其优势是模型解析回答的正确性和精度高,不足在于所有的大模型均对输入信息的最大长度有限制,一次能够处理的文本数量有限,对于知识库来说,从可行性和效率角度都是不合适的。

(3)结合知识检索增强大模型

在进行模型问答时,使用信息检索构建知识库查询,将检索结果提供给大模型进行理解和生成。该方法使大模型作为用户和搜索系统中介,发挥其自然语言处理能力:对用户请求进行纠错、提取关键点等预处理实现“理解”;对输出结果在保证正确性的基础上进行概括、分析、推理。这样无论是数据规模、查询效率、更新方式都可以满足常见知识库应用场景的需要。

检索增强生成相关技术栈较为成熟,降低了探索风险,主要涉及到对文档的加载、切分、向量化、相似度比对等,通过将挑选出的内容与问题,一起输入给大模型,再通过prompt模板进行问答效果优化。

3.2. 技术路线

利用大语言模型构建本地知识库的应用场景,结合了自然语言处理技术和知识管理功能,能够帮助用户更有效地组织、搜索和利用本地的知识资源,其主要功能应用包括:
(1)文本检索:可以通过关键词、短语或问题搜索知识库中的文本内容,支持全文搜索、模糊搜索和语义搜索,以便用户找到所需信息。

(2)智能问答:通过自然语言问答形式,利用大语言模型理解用户提出的问题,帮助用户获取所需信息,提高问答效率。

(3)知识管理:用户可以将自己的知识资源整理、存储和管理到知识库中,包括创建、编辑和删除文本、笔记或标签等。

(4)智能推荐:基于用户的历史操作偏好和专业领域知识信息,应用可以提供个性化的内容推荐,帮助用户发现新的知识。

(5)自然语言处理:通过自然语言处理,完成用户输入的语义理解,并基于知识库匹配相关的信息,形成自然语言解答。

(6)文本写作:利用大模型知识库,根据用户的需求帮助用户快速生成高质量的专业领域文章。

当前,使用检索增强生成(RAG)已经成为业内公认的大模型最佳落地范式之一即大模型知识库的关键技术路线。这个范式简单来说就是大模型+知识库。是一种结合检索和生成模型的方法,旨在提高生成式模型的性能,尤其是在开放领域的问答任务中。RAG结合了检索模型和生成模型,利用检索模型从大型语料库中检索相关文本片段,然后将这些文本片段作为上下文输入到生成模型中,生成更加相关和准确的回答。

RAG为生成式大模型与外部信息交互提供了良好的解决方案,其主要作用类似搜索引擎,找到用户提问最相关的知识或者是相关的对话历史,并结合原始提问,创造信息丰富的prompt,指导模型生成准确输出。本质上应用了情境学习(In-Context Learning)的原理。

RAG可分为5个基本流程:知识文本准备、嵌入模型(embedding model)、向量数据库、问题理解和查询检索、根据问题生产解答。

基于开源大模型快速构建本地知识库应用插图1

检索增强生成(RAG)基本流程

3.3. 处理过程

(1)知识文本准备

  • 文档的预处理 ->
  • 文档切割 ->

(2)嵌入模型(embedding model)

  • 词嵌入 ->

(3)向量数据库

  • Embedding存储到向量数据库 ->

(4)问题理解和查询检索

  • 用户提问->
  • 将问题用嵌入模型做Embedding ->
  • 问题向量化 ->
  • 到知识库所在向量数据库中进行相似的匹配 ->
  • 召回得分最高的k个Chunks ->

(5)根据问题生成解答

  • 原始提问文本+用户prompt+k个Chunks三者输入大模型 LLM ->
  • 返回用户问题的解答 ->

4. 开源大模型选择

预训练大模型已成为推动“人工智能+”进步的核心动力。Qwen、Baichuan和ChatGLM等作为行业内领先的大模型,在自然语言处理、知识理解和人机交互等 方面都展现出了卓越的性能。随着技术的不断进步,业务领域和应用场景的细分,使得大模型的选择变得尤为重要,以下通过语言、知识、推理、数学、代码和智能体能力方面对35种大模型的横向比较可以作为实现本地知识库应用的选择参考。

35种大模型的横向比较

(点击图片可放大)

基于开源大模型快速构建本地知识库应用插图2

根据具体的大模型应用,通用的选择维度可以从业务需求、模型效果和模型性能方面进行考虑:

(1) 业务需求:首先,明确自己的业务需求和场景,了解大模型能够在哪些方面提供帮助。不同的业务场景可能需要不同类型的大模型,例如自然语言处理、计算机视觉、推荐系统等。

(2) 模型效果:选择大模型的基础,需要评估大模型在使用场景中能够发挥的价值。需要考虑大模型在实际应用中的效果,以确定是否选择该模型。评估大模型在特定场景中的性能和准确性,以确保其能够满足需求。

(3) 模型性能:在选择大模型时,需要关注模型的性能指标,如准确率、召回率等。

5. 工程实现搭建

5.1. LangChain+FastChat+PGvector

LangChain-Chatchat是利用langchain思想实现的基于本地知识库的问答应用,目标期望建立一套对中文场景与开源模型支持友好、可离线运行的知识库问答解决方案。该项目已开源采用Apache License,可以免费商用。项目技术栈包括:Python + LangChain基础框架 + FastAPI接口服务&文档 + Streamlit前端可视化,集成了LangChain + FastChat + PGvector,通过使用FastChat接入大模型,做到了开箱即用。LangChain-Chatchat工程目录结构如下:

基于开源大模型快速构建本地知识库应用插图3

5.2. 配置conda环境

(1)安装anaconda

(2)创建工程运行虚拟环境

$ conda create –name LangChain-Chatchat python=3.10

$ conda activate LangChain-Chatchat

(3)安装工程依赖环境

$ pip install -r requirements.txt – i

https://pypi.tuna.tsinghua.edu.cn/simple

(4)安装 libreoffice

$ yum install -y libreoffice

5.3. 下载嵌入模型和大模型

要先安装Git Large File Storage(LFS),LFS是一个开源的Git扩展工具,将大文件存储在专门的服务器上,而不是直接存储在Git仓库中,能够有效地减小Git仓库的大小,同时也可以更好地管理和处理大型文件。

使用git clone下载LLM大模型

$ git clone https://huggingface.co/THUDM/chatglm3-6b-32k

下载知识库的Embedding模型

$ git clone https://huggingface.co/BAAI/bge-large-zh-v1.5

5.4. 配置运行参数

(1)config配置基本和readme的步骤一致,选取需要加载的模型,在对应位置 配置工程本地的模型路径。

(2)复制模型相关参数配置模板文件 configs/model_config.py.example 存储至项目路径下./configs路径下,并重命名为model_config.py。

LLM_MODELS = [“chatglm3-6b”] # “zhipu-api”, “openai-api” “Qwen-1_8B-Chat”,

“bge-large-zh”: “BAAI/bge-large-zh”,

“bge-large-zh”: “/ai /model /chatglm3/bge-large-zh”,

(3)复制服务相关参数配置模板文件configs/server_config.py.example存储至项目路径下./configs路径下,并重命名为server_config.py。

“chatglm3-6b”: “THUDM/chatglm3-6b -32k “,

“chatglm3-6b”: “/ai /model /chatglm3/chatglm3-6b -32k “,

5.5. 初始化向量数据库

第一次运行项目的时候,

$ python init_database.py –recreate-vs

不是第一次运行项目,

$ python init_database.py

samples为默认知识库

5.6. 调试运行

(1)启动项目

$ python startup.py -a

运行出现以下信息,皆可通过访问WEBUI地址进行验证。

基于开源大模型快速构建本地知识库应用插图4

5.7. 加载知识文本

(1)通过界面菜单选择知识库管理,进入知识库维护界面。

基于开源大模型快速构建本地知识库应用插图5

(2)选择上传知识文件,将预处理好的文本信息上传。

(3)点击添加文件到知识库,等待列表中的文件状态更新完毕。

5.8. 使用Prompt及问答交互

Prompt是给AI的指令,引导模型生成符合业务场景的响应输出。使用Prompt与大模型进行对话需要清晰的指令,提供参考文本,尽量复杂的任务拆分为更简单的子任务,要给模型时间去思考,借助外部工具等,例如可以参考以下模板进行对话:

(1) context(可选):上下文

  • 角色:告诉大模型,大模型现在是什么角色,什么身份。
  • 任务:告诉大模型任务的目标是什么,希望完成什么目标。
  • 知识:知识库,比如企业内部的知识数据等。

(2) Instruction(必选):必须清晰的给大模型

  • 步骤
  • 思维链
  • 示例

(3) input data(必选):输入的数据,让大模型处理句子、文章或者回答问题

  • 句子
  • 文章
  • 问题

(4) output indicator(可选):给大模型的输出的指引。

5.9. 效果验证及优化

通过以上工程实现,我们搜集了200余份公开发布的法律法规文件进行文本语料的知识库效果验证,其中包含doc、docx、pdf、txt等文件格式。基于业务目标和法规知识问答,对生成内容进行验证。建立统一的测试数据集,并确定回答测试标准,并通过效果验证,主要存在以下几方面问题:

(1)存在匹配错误原文文档或原文片段的情况;

(2)即使匹配了正确的原文片段,回答也可能存在不准确、不全面,甚至生成原文里不存在内容的情况;

(3)存在中文及其他语言同时出现的情况;

基于LangChain的实现步骤,从文档预处理,文本数据入库、Embedding、召回Top k、模型生成答案等阶段进行调优。

(1)文档预处理优化

知识库本身的文本质量对最终效果的影响至关重要,这是大模型最终生成回答的原始语料。优化内容包括:文档命名统一,控制在名称长度,涵义简洁,避免无意义的数字、符号或缩写。文档语言,统一中文描述,因为量化模型对于中英文、繁简体的支持不一样,向量化导致乱码或没有用的数据。文档内容,设置清晰的层级标题,对图片、表格、公式、超链接、附件等进行特殊处理。建立问答对,基于用户可能的提问方式,构建问答对,作为知识库原始数据。

(2)文本数据入库

上传文本语料,开始构建本地的知识库时,为了便于分析和处理,需要将长文本进行切割分块。通过设置合理的文档切割chunk_size,验证所选取的Embedding模型在多大的chunk_size上表现最佳。文档段落处理,基于文档切割时所设置的 chunk_size,对知识库文档的段落进行拆分或者合并,尽量保证连贯语义数据不会被切割。知识库文档标注,为了提升召回准确性,一方面在导入前,先对知识库文档内容进行标注处理。

(3)Embedding

将知识库文档切割成chunk之后,需要通过embedding技术,转换为算法可以处理的向量,存入向量数据库。选择不同的Embedding模型进行验证,实践中也发现bge-large-zh优于m3e-base。一般采用Top5的召回准确率和Top10的召回准确率来评估Embedding模型的好坏,TopN召回准确率=TopN条chunk包含答案问题数 /总问题数。

(4)召回Top k

用户提问后,同样将用户的问句向量化。将用户的问句与向量数据库中的chunk匹配,匹配出与问句向量最相似的Top k个。k的取值,根据实际的场景不断测试,选择最佳的k值。一般来说,调大k值,会增加召回片段中含有正确答案的概率,但召回的无关信息更多,模型生成的答案质量反而会更差。Temperature参数设置,1 代表十分精确,而0代表发散,生成的内容会更有创造性,需要根据自己的场景,设置合适的Temperature值。Top k的排序方式,检索返回的Top K,会按照数据库中的顺序进行排序,目的是保留原始数据库的上下文结构,可以增加Top k的大小,比如从10个增加到30个,然后再使用更加精确的算法进行Rerank。

(5)模型替换验证

Prompt提交给LLM后,LLM将生成回答,返回给用户。此时最大的影响因素就是大语言模型本身的性能。通过使用不同的大模型,匹配问答效果进行验证。

基于以上的分析,我们先选取了成本最小的方式进行调优,包括:从ChatGLM3-6B-32k替换成Qwen1.5-72b-Chat,问答精准匹配能够显著提升的同时,响应速度有所下降。更换Embedding模型,将默认的m3e-base替换为bge-large-zh-v1.5,发现后者优于前者。通过测试不同Top k的值:比较Top 5、Top 10、Top 15的结果,发现Top 10时效果最优。目前来看,整体效果有所提升,但仍有优化空间,后续我们也将尝试其他的调优策略。

6. 总结及展望

在本文中,结合人工智能大模型技术的发展,深入探索了RAG技术栈在知识库问答 系统的实际应用,从初步的文档准备到复杂的检索策略,展现了RAG系统在处理大规模信息检索和理解任务时的巨大潜力。通过开源工程及大模型的使用快速构建了工程实现,随着技术的不断进步,相信大模型及RAG技术将在各行各业中发挥越来越重要的作用。


原文链接:https://blog.csdn.net/2301_76161259/article/details/141931222
作者:中年猿人

Related Posts

2024年度AI十大趋势缩略图

2024年度AI十大趋势

随着2024年的结束,人工智能(AI)领域呈现出明显的发…

AI Agent下一站——智能体向经济体的过渡缩略图

AI Agent下一站——智能体向经济体的过渡

人工智能(AI)和区块链(Web3)的结合正在成为一股重…

大模型的重要性:未来技术趋势与职业竞争力缩略图

大模型的重要性:未来技术趋势与职业竞争力

一、大模型初探 1、什么是大模型?大模型,通常指的是在人…

震撼发现:AirLLM 赋能 70B 大模型缩略图

震撼发现:AirLLM 赋能 70B 大模型

前言 在人工智能蓬勃发展的浪潮中,大型语言模型(LLM)…

大语言模型在多领域的影响力缩略图

大语言模型在多领域的影响力

深度学习技术的新突破:大语言模型的应用与前景 在人工智能…

从概念到现实:大模型的发展历程缩略图

从概念到现实:大模型的发展历程

大模型:智能的新纪元 在机器学习的浩瀚宇宙中,大模型犹如…