一,概念(RAG即给大模型外挂知识数据库)
1,RAG 通过在语言模型生成答案之前,先从广泛的文档数据库中检索相关信息,然后利用这些信息来引导生成过程,极大地提升了内容的准确性和相关性。RAG 有效地缓解了幻觉问题,提高了知识更新的速度,并增强了内容生成的可追溯性,使得大型语言模型在实际应用中变得更加实用和可信。
2,三个基本步骤
- 索引 — 将文档库分割成较短的 Chunk,并通过编码器构建向量索引。
- 检索 — 根据问题和 chunks 的相似度检索相关文档片段。
- 生成 — 以检索到的上下文为条件,生成问题的回答。
3,LLamaIndex
LlamaIndex 是一个支持 LLM 应用开发的数据框架,受益于上下文增强。它提供了必要的抽象,可以更轻松地摄取、构建和访问私有或特定领域的数据,以便将这些数据安全可靠地注入 LLM 中,以实现更准确的文本生成。
4,GTE中文通用文本表示模型(GTE-zh)
文本表示是自然语言处理(NLP)领域的核心问题, 其在很多NLP、信息检索的下游任务中发挥着非常重要的作用。
近几年, 随着深度学习的发展,尤其是预训练语言模型的出现极大的推动了文本表示技术的发展, 基于预训练语言模型的文本表示模型在学术研究数据、工业实际应用中都明显优于传统的基于统计模型或者浅层神经网络的文本表示模型。这里, 我们主要关注基于预训练语言模型的文本表示。
文本表示示例, 输入一个句子, 输出一个固定维度的连续向量:
- 输入: 吃完海鲜可以喝牛奶吗?
- 输出: [0.27162,-0.66159,0.33031,0.24121,0.46122,...]
基于监督数据训练的文本表示模型通常采用 Dual Encoder 框架, 如下图所示。在 Dual Encoder 框架中, Query 和 Document 文本通过预训练语言模型编码后, 通常采用预训练语言模型 [CLS] 位置的向量作为最终的文本向量表示。基于标注数据的标签, 通过计算 query-document 之间的 cosine 距离度量两者之间的相关性。
- GTE-zh 模型使用 retromae 初始化训练模型,之后利用两阶段训练方法训练模型:
- 第一阶段利用大规模弱弱监督文本对数据训练模型,
- 第二阶段利用高质量精标文本对数据以及挖掘的难负样本数据训练模型。
具体训练方法请参考论文 Towards General Text Embeddings with Multi-stage Contrastive Learning。
-
使用方式:直接推理,对给定文本计算其对应的文本向量表示,向量维度 768
-
使用范围:本模型可以使用在通用领域的文本向量表示及其下游应用场景, 包括双句文本相似度计算、query & 多 doc 候选的相似度排序
在 ModelScope 框架上,提供输入文本 (默认最长文本长度为 128),即可以通过简单的 Pipeline 调用来使用 GTE 文本向量表示模型。ModelScope 封装了统一的接口对外提供单句向量表示、双句文本相似度、多候选相似度计算功能
二、魔搭社区实践
1,安装依赖库
2,加载大语言模型
3,导入数据
4,构建Embedding类(使用GTE模型)
5,设置索引,方便检索
6,查询和问答
注:1,!pip---'!'是特殊语法,用于在shell中执行系统命令。
2,参考链接-检索增强生成(RAG)实践:基于LlamaIndex和Qwen1.5搭建智能问答系统 - 汀、人工智能 - 博客园