RAG(Retrieval-Augmented Generation)是一种结合了检索和生成的方法,旨在提高自然语言处理任务的性能。相对于预训练和微调,RAG的优势在于能够利用外部知识源,如知识图谱或文档数据库,以增强模型的理解和生成能力。此外,RAG还可以通过检索相关信息来减少对大规模预训练数据的依赖,从而降低计算成本。
RAG内容
其全过程可以分为三个步骤:首先,模型会根据输入的查询或问题,从外部知识源(如知识图谱或文档数据库)中检索相关信息;然后,将这些检索到的信息与原始输入结合,形成一个更丰富的上下文;最后,模型基于这个增强的上下文生成回答或文本。通过这种方式,RAG能够利用外部知识源来增强模型的理解和生成能力,从而提高自然语言处理任务的性能。
代码实战
1、首先是要将外挂的知识存储起来,之后大模型会使用,而要存储的话首先需要将文本进行向量化,所以需要文本向量化模型来实现
2、将文本向量化后需要将向量化后的文本信息存储到数据库中,这里使用免费的数据库chroma或者其他的,Milvus在windows上使用起来较为困难,因此可以再试试别的
3、上述过程是也就是检索过程,而增强过程是预先设定一个prompt从检索出来的K个结果中得到最终最符合的结果
4、生成过程使用LLM来根据上面的结果生成
向量化
这里使用的是从huggingface上下载好的模型,也可以使用modelscope下载
from sentence_transformers import SentenceTransformer
### 向量化尝试
hug_path="jina-embeddings-v3"
hug_model=SentenceTransformer(hug_path,trust_remote_code=True)
# hug_model
几种不同的任务:
1、'retrieval.query':查询任务,通常用于检索系统中的查询语句。在此任务中,输入的文本被视为查询,模型将生成一个嵌入向量,用于在检索系统中与其他文档进行匹配。
2、'retrieval.passage':文段任务,通常用于检索系统中的文档片段(passage)。与查询任务类似,但此时输入文本通常是一个文段,模型会生成一个嵌入向量,用于与查询文本进行匹配。
3、'separation':分离任务,用于将不同的文本部分分开处理。通常用于多任务学习或多种类型文本混合的场景,将不同部分的输入文本分开编码,进行后续处理。
4、'classification':分类任务,用于文本分类。模型会将输入文本编码为嵌入向量,然后可以用于分类任务,例如情感分析、话题分类等。
5、'text-matching':文本匹配任务