书生浦语实战营第三节课作业 - robinlubin12/InternLM2-OpenCamp GitHub Wiki

Part One 基础知识

基础模型(预训练模型),基础模型出现无法应答,胡说八道,甚至各类幻觉。使用RAG来部分解决这个问题。

image

可以把外部知识库当作索引,叠加基模的文本生成能力(也可以结合多模态模型)。基本来说就是indexing、Retrieval、generating三个步骤。

image

向量、非常重要,可见向量数据库流行也是必然。 向量数据库如何工作? 以文本举例:向量数据库的核心思想是将文本转换成向量,然后将向量存储在数据库中,当用户输入问题时,将问题转换成向量,然后在数据库中搜索最相似的向量和上下文,最后将文本返回给用户。具体的操作流程。 存储向量数据 向量数据库首先需要存储向量数据。向量数据可以来自各种数据源,例如文本、图像、音频等,每个向量数据都可以表示为一个一维数组或多维数组。向量数据库通常使用高效的数据结构和算法来存储向量数据,以便快速地进行检索和分析。 建立向量索引 为了加速向量搜索,向量数据库通常会建立向量索引。向量索引是一种数据结构,可以将向量数据按照相似度划分为不同的区域,并进行快速的查找。常见的向量索引算法包括KD-Tree、LSH、HNSW等。 进行向量搜索 向量数据库的主要功能是进行向量搜索。在向量搜索中,用户输入一个查询向量,向量数据库会返回与查询向量最相似的向量。向量相似度通常使用余弦相似度、欧几里得距离等度量方式进行计算。 进行向量分析 向量数据库还可以进行向量分析。向量分析是指对向量数据进行统计、聚类、降维等处理,以便更好地理解和利用向量数据。在向量分析中,常用的算法包括PCA、LDA、TSNE等。 基于大语言模型构建行业智能应用为什么需要向量数据库? 向量(vector)是在大语言模型、知识库交互、计算过程中的重要指标。它可以将文本和知识表示为数学向量,实现文本相似度计算、知识库检索和推理等功能。向量(vector)为语义理解和应用提供了一种方便有效的表示方法。大模型能够回答较为普世的问题,但是若要服务于垂直专业领域,会存在知识深度、知识准确度和时效性不足的问题,比如:医疗或法律行业智能服务要求知识深度和准确度比较高,那么企业构建垂直领域智能服务?目前有两种模式:

基于大模型的Fine Tune方式构建垂直领域的智能服务,需要较大的综合投入成本和较低的更新频率,适用性不是很高,并非适用于所有行业或企业(主要是成本太高)。 通过构建企业自有的知识资产,结合大模型和向量数据库来搭建垂直领域的深度服务,本质是使用知识库进行提示工程(Prompt Engineering)。以法律行业为例,基于垂直类目的法律条文和判例,企业可以构建垂直领域的法律科技服务。 将企业知识库文档和数据通过向量特征提取(embedding)然后存储到向量数据库(vector database),应用LLM大语言模型与向量化的知识库检索和比对知识,构建智能服务。比如:应用大语言模型和向量数据库(知识库)可以让企业应用级Chatbot(聊天机器人)的回答更具专业性和时效性,构建企业专属Chatbot。 典型的RAG流程对比(无RAG和有RAG下的LLM问答数据流程) image

1、提高向量数据库质量 2、查询优化//上下文管理 3、Retrieval优化,包括迭代检索,递归检索,自适应检索 image

最后,再re-call下Fine-tuning(上节课直接简单使用了猪八戒风格问答) Fine-tuning,完成参数记忆,通过在特定任务数据上训练,模型可以更好地适应该任务。 通常需要大量标注数据来进行有效微调,微调后的模型可能过拟合,导致泛化能力下 适用场景 适用于数据可用且需要模型高度专业化的任务,如特定领域的文本分类、情感分析、文本生成等, 优势:模型性能针对特定任务优化。 局限:需要大量的标注数据,且对新任务的适应性较差。

关于RAG的评价基准: 你设计的RAG是否是一个好的解决方案,有一套评价方案、一套评测框架(对于学术论文撰写,这个就是必须掌握的能力)。 image

总结: 基模是非常非常重要的,选择一个适合的基模是使用LLM的第一步。

Part Two 实践、体验茴香豆应用

知识库来源即群聊中的有价值的聊天内容,实时内容向量化。本地知识库向量库,原端LLM预训练模型。 image

应用架构解析

image

本地支持书生浦语,也支持开源的通义千问模型。原端LLM的话,很多平台的API已经打通,需要进行配置。由此可见,这是一个相当工作量的开源项目,而不是简单的RAG示例。

image

重点环节的Response Pipeline,检索包括多来源,本地知识库,网络检索(使用的是serper),知识图谱。

2.1线上应用体验:

image

image

“很抱歉,由于我是基于文本的AI模型,无法直接打开或查看.docx文件的内容。不过,我可以根据一般暑期学校报名表的信息要求,为您提供一个报名表内容的概述。 经过明确的提示,终于从TXT文本内检索信息回答” image

Part Three 平台搭建运行茴香豆

3.1实验环境

启动30% A100的机器,初始化环境 studio-conda -o internlm-base -t InternLM2_Huixiangdou conda activate InternLM2_Huixiangdou conda env list ls /root/models ls /share ln -s /share/new_models/maidalun1020/bce-embedding-base_v1 /root/models/bce-embedding-base_v1 ln -s /share/new_models/maidalun1020/bce-reranker-base_v1 /root/models/bce-reranker-base_v1 ls /root/models/internlm2-chat-7b 在茴香豆项目目录下 vim config.ini BCE模型配置(嵌入和重排序模型调用的网易BCE 双语模型)

image

修改:向量数据库和词嵌入的模型、检索的重排序模型、基模(本次选用的大模型Internlm2-7b)

# 安装 python 依赖 # pip install -r requirements.txt

pip install protobuf==4.25.3 accelerate==0.28.0 aiohttp==3.9.3 auto-gptq==0.7.1 bcembedding==0.1.3 beautifulsoup4==4.8.2 einops==0.7.0 faiss-gpu==1.7.2 langchain==0.1.14 loguru==0.7.2 lxml_html_clean==0.1.0 openai==1.16.1 openpyxl==3.1.2 pandas==2.2.1 pydantic==2.6.4 pymupdf==1.24.1 python-docx==1.1.0 pytoml==0.1.21 readability-lxml==0.8.1 redis==5.0.3 requests==2.31.0 scikit-learn==1.4.1.post1 sentence_transformers==2.2.2 textract==1.6.5 tiktoken==0.6.0 transformers==4.39.3 transformers_stream_generator==0.0.5 unstructured==0.11.2 ## 因为 Intern Studio 不支持对系统文件的永久修改,在 Intern Studio 安装部署的同学不建议安装 Word 依赖,后续的操作和作业不会涉及 Word 解析。 ## 想要自己尝试解析 Word 文件的同学,uncomment 掉下面这行,安装解析 .doc .docx 必需的依赖 # apt update && apt -y install python-dev python libxml2-dev libxslt1-dev antiword unrtf poppler-utils pstotext tesseract-ocr flac ffmpeg lame libmad0 libsox-fmt-mp3 sox libjpeg-dev swig libpulse-dev 创建知识库外挂目录: 语料知识的向量数据库,茴香豆建立接受和拒答两个向量数据库,用来在检索的过程中更加精确的判断提问的相关性,这两个数据库的来源分别是:

接受问题列表,希望茴香豆助手回答的示例问题 存储在 huixiangdou/resource/good_questions.json 中 image

实验中,需要改写文件内容。把茴香豆相关的问题到接受问题示例中。 拒绝问题列表,希望茴香豆助手拒答的示例问题 存储在 huixiangdou/resource/bad_questions.json 中 其中多为技术无关的主题或闲聊 如:"nihui 是谁", "具体在哪些位置进行修改?", "你是谁?", "1+1" -- --- ---三个信息向量化工作 在确定好语料来源后,运行下面的命令,创建 RAG 检索过程中使用的向量数据库: 分别向量化知识语料、接受问题和拒绝问题中后保存到 workdir python3 -m huixiangdou.service.feature_store --sample ./test_queries.json 向量数据库的创建需要等待一小段时间,报错了,过程约占用 1.6G 显存。 “ Could not load library with AVX2 support due to: ModuleNotFoundError("No module named 'faiss.swigfaiss_avx2'") ” Pip install -r requirements.txt 完成后,Huixiangdou相关的新增知识就以向量数据库的形式存储在workdir文件夹下,index.faiss\index.pkl。 image

检索过程中,茴香豆会将输入问题与两个列表中的问题在向量空间进行相似性比较,判断该问题是否应该回答,避免群聊过程中的问答泛滥。确定的回答的问题会利用基础模型提取关键词,在知识库中检索top K相似的chunk,综合问题和检索到的chunk生成答案。

运行(单次Hard-code),比较简单。 填入问题 sed -i '74s/.*/ queries = ["huixiangdou 是什么?", "茴香豆怎么部署到微信群", "今天天气怎么样?"]/' /root/huixiangdou/huixiangdou/main.py 运行茴香豆 cd /root/huixiangdou/ python3 -m huixiangdou.main --standalone

3.2实验效果的输出

输出的细节可以看到数据分析的过程,包括语义解析,向量判断... image

image