检索增强生成-Naive RAG

RAG研究范式演进

文档加载与分块

分块策略

按照字符数来切分
按固定字符数 结合overlapping window
按照句子来切分
递归方法 RecursiveCharacterTextSplitter
…………..

Embeddings向量化

  • 在数学中,向量(也称为欧几里得向量、几何向量),指具有大小和方向的量。它可以形象化地表示为带箭头的线段。箭头所指:代表向量的方向;线段长度:代表向量的大小。
比如 将“长沙”这个词用一个向量表示
“长沙”=[0.8, -0.3, 0.5 , 0.34 , 0.12 , 1.78 , 9.12 , 2.34 , -0.23 , 0.5]
“长沙”=[4,2]
“长沙”=[5,9,………………..] (由1000个数字组成)
都可以

  • 向量化
1. 将文本转成一组浮点数:每个数字,对应一个维度
2. 整个数组对应一个 n 维空间的一个点,即文本向量又叫 Embeddings
3. 向量之间可以计算距离,距离远近对应语义相似度大小

  • 文本可以转换向量(词向量),其他数据比如图片、声音等等可以吗?答案是可以。
    – 向量化就是用一个数值向量“表示”一个对象(Object)的方法。 “数值化表示”就是一个编码向量。例如对“颜色“这种实体对象用(R,G,B)/ (红,绿,蓝)这样一个三元素向量编码。


在线向量模型

  • 我们怎么拿到文本的「词向量」?难道要我们自己计算?
专用于输出文本的「词向量」的神经网络模型就是我们所说的嵌入模型/向量模型。不同的嵌入模型即使是相同的文本,词向量也有可能不一样,比如不同的厂商,语料不一样或者向量的维度不一样。

向量模型本地部署

很多大模型都可以本地部署,部署的方式有很多种,最方便的,就是借助Ollama ,Ollama 是一个开源框架,专为在本地机器上便捷部署和运行大模型而设计。https://ollama.com/

向量间的相似度计算

常用的向量相似度计算方法包括:
余弦相似度Cosine:基于两个向量夹角的余弦值来衡量相似度。
欧式距离L2:通过计算向量之间的欧几里得距离来衡量相似度。
点积:计算两个向量的点积,适合归一化后的向量。

向量数据库

在大模型实际的业务处理过程中,我们有很多的文档需要处理:
索引过程中将文本转为向量化表示,会产生很多的词向量,需要保存,谁来保存?
根据用户的查询,检索过程中要进行向量相似度计算,谁来计算?

在人工智能时代,向量数据库已成为数据管理和AI模型不可或缺的一部分。向量数据库是一种专门设计用来存储和查询向量嵌入数据的数据库。

主流数据库对比

pinecone

- 重复检测:帮助用户识别和删除重复的数据
- 排名跟踪:跟踪数据在搜索结果中的排名,有助于优化和调整搜索策略
- 数据搜索:快速搜索数据库中的数据,支持复杂的搜索条件
- 分类:对数据进行分类,便于管理和检索
去重:自动识别和删除重复数据,保持数据集的纯净和一致性
闭源

Milvus

- 毫秒级搜索万亿级向量数据集
- 简单管理非结构化数据
- 可靠的向量数据库,始终可用
- 高度可扩展和适应性强,支持分布式部署
- 混合搜索
受到社区支持,得到行业认可,企业应用较多
开源
中国创业公司ZILLIZ研发

Chroma

- 功能丰富:支持查询、过滤、密度估计等多种功能
- 很多开发框架如LangChain都支持
相同的API可以在Python笔记本中运行,也可以扩展到集群,用于开发、测试和生产闭源
轻量级 、易用性,易于集成和使用,特别适合小型或中型项目‌
开源

Faiss

- 出身名门Meta,起源于Meta的AI研究需求
- 可以同时搜索多个向量,而不仅仅是单个向量(批量处理)
-用于高效处理大规模密集向量相似度搜索
-支持多种距离度量、丰富的索引结构、向量量化技术
-高效的并行处理能力
-腾讯率先在国内大规模应用。Faiss尤其适合用于图像检索和推荐系统