湘潭网站建设网站推广,摄影工作室网站设计,成都公司建站模板,网站建设 域名业务 邮箱基于 InternLM 和 LangChain 搭建你的知识库
大模型开发范式 Finetune
在大型语言模型中#xff0c;Finetune#xff08;微调#xff09;是一种技术#xff0c;用于调整预训练的模型以提高其在特定任务或数据集上的表现。这种方法通常涉及以下步骤#xff1a;
预训练模…基于 InternLM 和 LangChain 搭建你的知识库
大模型开发范式 Finetune
在大型语言模型中Finetune微调是一种技术用于调整预训练的模型以提高其在特定任务或数据集上的表现。这种方法通常涉及以下步骤
预训练模型首先需要一个预训练的大型语言模型如GPT、BERT或其他变体。这些模型通常在大型文本语料库上训练以学习语言的广泛特征和结构。
特定任务的数据接着收集和准备针对特定任务的数据集。这个数据集应该包括输入和期望的输出例如用于情感分析的句子和它们的情感标签或者用于翻译任务的句子对。
微调然后使用特定任务的数据集对预训练模型进行微调。这通常涉及在该数据集上继续训练模型一段时间调整模型的权重以优化任务特定的性能。微调时学习率通常设置得比预训练阶段低以避免过快破坏预训练时学到的有用特征。
评估和调整最后评估微调后模型的性能并根据需要调整微调过程如调整学习率、训练更多的轮次或修改数据处理方式以进一步提高性能。
微调的优势在于能够利用预训练模型在广泛数据上学习到的丰富知识从而需要较少的标注数据就可以达到较高的性能。这对于数据稀缺的任务尤其有价值。然而微调也有其挑战例如过拟合特别是在小数据集上、调整过程中的超参数选择等。 Retrieval Augmented Generation (RAG) RAG是一种自然语言处理技术结合了信息检索和文本生成的能力以提高模型在处理复杂查询时的性能和准确性。在RAG系统中首先利用一个检索组件查询一个大型文档数据库以找到与给定查询最相关的信息。然后这些检索到的文档被送入一个生成模型如序列到序列的转换模型这个模型利用检索到的信息来生成回答或完成给定的文本任务。
RAG模型的关键在于它结合了检索的精确性和生成模型的灵活性。通过这种方式RAG能够在需要具体信息或知识支持时提供更准确、更丰富的回答。例如在回答特定的事实问题、撰写有关特定主题的文章或生成信息丰富的对话回复时RAG模型可以展现出比传统的生成模型更优越的性能。
RAG技术的一个主要优势是它能够有效地处理那些对传统生成模型来说过于复杂或需要外部知识的查询。它通过检索相关文档来直接利用现有的知识库然后将这些信息融入生成过程中从而提高了生成文本的相关性和准确性。这使得RAG尤其适合于需要广泛背景知识的应用场景如问答系统、内容创作和对话系统等。
RAG模型的实现通常涉及到两个主要组件的训练和优化检索组件和生成组件。检索组件负责从大型文档集中快速有效地检索出与查询最相关的文档而生成组件则负责处理这些文档并基于它们生成连贯和相关的文本输出。这两个组件的协同工作使得RAG能够在许多自然语言处理任务中实现高性能。 LangChain是一个开源框架旨在利用最新的自然语言处理NLP技术尤其是大型语言模型LLM来构建和部署语言应用。它提供了一套工具和API使开发者能够轻松集成复杂的语言理解和生成能力到他们的应用中。LangChain通过提供与检索增强生成RAG、链式推理、对话系统等高级功能的集成促进了创新应用的开发。以下是几种结合LangChain可能的应用场景
增强的问答系统利用LangChain可以构建更智能、更准确的问答系统这些系统能够通过检索和引用大量的外部知识源来回答复杂的问题。结合RAG等技术这些系统不仅能够生成准确的答案还能提供答案的来源增加透明度和可信度。知识管理和信息检索LangChain可以帮助企业和组织构建先进的知识管理系统这些系统能够理解自然语言查询并从大型文档库中检索和总结相关信息。这对于提高研究效率和支持决策过程特别有价值。自动内容创作利用LangChain可以开发出能够自动生成文章、报告、摘要等内容的应用。结合RAG等技术这些应用能够引用和整合来自多个来源的信息创造出既丰富又准确的内容。交互式对话系统和聊天机器人LangChain提供的工具和API使得开发者能够构建高度互动的对话系统和聊天机器人这些系统能够进行复杂的对话、解答问题、提供推荐甚至执行特定的任务或服务。教育和学习通过LangChain可以开发辅助学习和教学的应用例如自动生成练习题、提供个性化的学习资料和反馈以及构建能够解答学生问题的智能助手。创意写作和娱乐LangChain也可以用于支持创意写作包括自动生成故事、诗歌、剧本等。此外它还可以用于开发互动游戏和娱乐应用其中包括复杂的故事情节和角色对话。
基于langChain搭建RAG
构建向量数据库
加载源文件 -》文档分块 -》文档向量
搭建知识库助手 构建一个检索问答链Retrieval Question-Answering Chain, RQAC涉及到创建一个系统它可以通过检索相关信息并基于这些信息生成回答来处理复杂的查询。这个过程通常涉及到以下几个关键步骤
需求分析
确定系统的目标用户和用例。 确定需要检索的信息类型和来源。 选择或构建检索系统
确定适合的检索技术例如Elasticsearch, Solr, 或自定义检索算法。 构建或配置检索数据库确保它包含足够的信息来回答用户的问题。 实现一个检索模块它可以根据用户的查询从数据库中检索相关文档或信息。 选择或开发问答生成模型
选择一个现有的语言模型如GPT-4, BERT, T5等这些模型可以用来理解查询和生成回答。 根据需要训练或微调模型以提高对特定域或任务的回答质量。 集成检索和问答系统
实现一个流程其中用户的查询首先触发检索模块来查找相关信息。 将检索到的信息作为上下文输入到问答模型中生成针对用户查询的回答。 用户界面设计
设计一个用户界面用户可以通过它提交查询并接收回答。 确保界面简洁易用能够清楚地展示检索到的信息和生成的回答。 测试和优化
对系统进行彻底测试包括单元测试、集成测试和用户接受测试。 根据反馈优化检索准确性和回答质量。 部署和维护
部署系统到生产环境。 定期更新数据库和模型确保系统能够处理新出现的查询和信息。
web demo
有很多支持简易Web部署的框架如Gradiostreamlit
环境搭配
conda activate InternLM安装一些重要的包
# 升级pip
python -m pip install --upgrade pippip install modelscope1.9.5
pip install transformers4.35.2
pip install streamlit1.24.0
pip install sentencepiece0.1.99
pip install accelerate0.24.1模型下载
在目录下新建 download.py 文件并在其中输入以下内容粘贴代码后记得保存文件如下图所示。并运行 python download.py 执行下载模型大小为 14 GB下载模型大概需要 10~20 分钟
import torch
from modelscope import snapshot_download, AutoModel, AutoTokenizer
import os
model_dir snapshot_download(Shanghai_AI_Laboratory/internlm-chat-7b, cache_dir../model, revisionv1.0.3)
LangChain 相关环境配置
在已完成 InternLM 的部署基础上还需要安装以下依赖包
pip install langchain0.0.292
pip install gradio4.4.0
pip install chromadb0.4.15
pip install sentence-transformers2.2.2
pip install unstructured0.10.30
pip install markdown3.3.7同时需要使用到开源词向量模型 Sentence Transformer 首先需要使用 huggingface 官方提供的 huggingface-cli 命令行工具。安装依赖:
pip install -U huggingface_hub目录下新建python文件 download_hf.py填入以下代码
resume-download断点续下local-dir本地存储路径。linux环境下需要填写绝对路径
import os# 下载模型os.system(huggingface-cli download --resume-download sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2 --local-dir ../model/sentence-transformer)下载 NLTK 相关资源
cd /root
git clone https://gitee.com/yzy0612/nltk_data.git --branch gh-pages
cd nltk_data
mv packages/* ./
cd tokenizers
unzip punkt.zip
cd ../taggers
unzip averaged_perceptron_tagger.zip下载项目代码
cd /root/data
git clone https://github.com/InternLM/tutorial数据收集
我们选择由上海人工智能实验室开源的一系列大模型工具开源仓库作为语料库来源包括
OpenCompass面向大模型评测的一站式平台 IMDeploy涵盖了 LLM 任务的全套轻量化、部署和服务解决方案的高效推理工具箱 XTuner轻量级微调大语言模型的工具库 InternLM-XComposer浦语·灵笔基于书生·浦语大语言模型研发的视觉-语言大模型 Lagent一个轻量级、开源的基于大语言模型的智能体agent框架 InternLM一个开源的轻量级训练框架旨在支持大模型训练而无需大量的依赖
进入到数据库盘 cd /root/data # clone 上述开源仓库
git clone https://gitee.com/open-compass/opencompass.git
git clone https://gitee.com/InternLM/lmdeploy.git
git clone https://gitee.com/InternLM/xtuner.git
git clone https://gitee.com/InternLM/InternLM-XComposer.git
git clone https://gitee.com/InternLM/lagent.git
git clone https://gitee.com/InternLM/InternLM.git将数据整理出来的脚本
# 首先导入所需第三方库
from langchain.document_loaders import UnstructuredFileLoader
from langchain.document_loaders import UnstructuredMarkdownLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.vectorstores import Chroma
from langchain.embeddings.huggingface import HuggingFaceEmbeddings
from tqdm import tqdm
import os# 获取文件路径函数
def get_files(dir_path):# argsdir_path目标文件夹路径file_list []for filepath, dirnames, filenames in os.walk(dir_path):# os.walk 函数将递归遍历指定文件夹for filename in filenames:# 通过后缀名判断文件类型是否满足要求if filename.endswith(.md):# 如果满足要求将其绝对路径加入到结果列表file_list.append(os.path.join(filepath, filename))elif filename.endswith(.txt):file_list.append(os.path.join(filepath, filename))return file_list# 加载文件函数
def get_text(dir_path):# argsdir_path目标文件夹路径# 首先调用上文定义的函数得到目标文件路径列表file_lst get_files(dir_path)# docs 存放加载之后的纯文本对象docs []# 遍历所有目标文件for one_file in tqdm(file_lst):file_type one_file.split(.)[-1]if file_type md:loader UnstructuredMarkdownLoader(one_file)elif file_type txt:loader UnstructuredFileLoader(one_file)else:# 如果是不符合条件的文件直接跳过continuedocs.extend(loader.load())return docs# 目标文件夹
tar_dir [/root/data/InternLM,/root/data/InternLM-XComposer,/root/data/lagent,/root/data/lmdeploy,/root/data/opencompass,/root/data/xtuner
]# 加载目标文件
docs []
for dir_path in tar_dir:docs.extend(get_text(dir_path))# 对文本进行分块
text_splitter RecursiveCharacterTextSplitter(chunk_size500, chunk_overlap150)
split_docs text_splitter.split_documents(docs)# 加载开源词向量模型
embeddings HuggingFaceEmbeddings(model_name/root/data/model/sentence-transformer)# 构建向量数据库
# 定义持久化路径
persist_directory data_base/vector_db/chroma
# 加载数据库
vectordb Chroma.from_documents(documentssplit_docs,embeddingembeddings,persist_directorypersist_directory # 允许我们将persist_directory目录保存到磁盘上
)
# 将加载的向量数据库持久化到磁盘上
vectordb.persist()实行 DEMO