|原文章发布于2024年07月29日
今天,为大家带来的是「MiniCPM RAG教程」 ➤ 模型介绍
🔗 MiniCPM:揭示端侧大语言模型的无限潜力 ➤ GitHub地址
🔗 https://github.com/OpenBMB/MiniCPM
➤ B站配套视频 ,搭配食用更佳
🔗 https://space.bilibili.com/493282299/channel/collectiondetail?sid=3433564
「面壁小钢炮MiniCPM通关宝典」会在接下来一段时间内持续上新,从技术拆解到部署推理到量化微调,手把手教你速通MiniCPM模型!公众号后台回复“小钢炮”,可解锁知识库全文。
RAG指的是Retrieval-Augmented Generation,通过首先检索与query相关的文本,生成式语言模型llm再基于相关文本对query进行回复。
大语言模型确实已经可以对很多问题进行回复,但是由于大语言模型llm仍然是基于历史数据进行训练的概率模型,因此对于训练过的问题可能有较为准确的答案,但仍存在幻觉问题。对于历史训练数据未提及或者实时性较强的问题,仅靠靠语言模型的概率生成容易出现胡说八道的问题。
因此,在给予大语言模型llm query的同时给予和query相关的背景知识,可以通过llm在历史数据中获取的context learning能力进行分析,这样可以获得更加可靠的回复。
说人话版:一个学霸(大语言模型)在原来思想政治、古代史、地理等等学科(历史数据)中拿到了优秀的分数,但是现在问他从没学过的近代史学科(query),学霸也难以获得高分。但是如果现在给他一本近代史的教材,并且告诉他答案在哪几页(Retrieval-data),学霸可以根据古代史等学科(历史数据)学习到的综合分析能力(context learning)获得一个好得多的分数。
训练(或下载)一个用来Retrieval的模型,比如bge-base-zh,大部分Retrieval模型使用encoder模型进行对比学习进行训练获得,Retrieval模型的作用是将query和知识data编码成向量logits。
使用Retrieval模型对query和待召回文本data进行编码获得向量query_logit,向量data_logits.
使用query_logit和所有的data_logit计算相似度(大部分采用余弦相似度),取出前k个相似度高的data_logit对应的文本data_related。
对找到的和query高度相关的文本在进行rerank(optional)
将query和高相关文本data_related根据构建的prompt_template模版组合喂入大模型,获得最终答案。如下:
Github地址:https://github.com/OpenBMB/MiniCPM/blob/main/demo/langchain_demo.py
1. 参数设置
2. 继承langchain.llm
继承后此处可适配langchain,传入langchain的各种llm接口,也可以使用vllm的后端推理:
3. 加载embeding模型(retrieval模型)
4. 对文本进行embedding
5. 找到与query相似度最高的k个文本
6. 定义prompt_tamplate
7. 定义langchain流程
首先将输入的query和高相关数据docs放入prompt这个模版中形成组合数据然后就会调用llm对组合数据进行推理,llm是继承langchain.llm的minicpm
8. 调用以上qa链
9. Gradio前端
10. 最低使用显存
已经是本次调用过程中最大使用显存
1. 根据「MiniCPM量化教程」对「openbmb/MiniCPM-1B-sft-bf16」进行int4量化,推荐awq
2. 修改MiniCPM/demo/langchain_demo.py的以下参数:
3. 执行MiniCPM/demo/langchain_demo.py
1. 使用非量化模型
2. 使用vllm作为后端
3. 将embeding模型放入gpu
4. 执行MiniCPM/demo/langchain_demo.py
➤ 欢迎加入 OpenBMB 社区一起讨论
后台回复“小钢炮”,解锁「面壁小钢炮MiniCPM通关宝典」全文。
官方网站
https://www.openbmb.org
GitHub
https://github.com/OpenBMBhttps://github.com/thunlp
长期开放招聘|含实习
开发岗 | 算法岗 | 产品岗
交流QQ群
735930538
MUC刹车卡钳 2024-09-28
文言科技丶 2024-09-28