← 返回首页
RAG的向量化
发表时间:2025-05-16 16:53:02
RAG的向量化

1.什么是向量化

向量化是将非结构化数据(如文本、图像等)转化为数字表示的一种过程。在RAG中,通常会使用预训练的Transformer模型(如BERT、RoBERTa等)将文本表示为高维的向量。这些向量能够捕捉到数据的语义信息,从而在向量空间中表示相似性。两段相似的文本在向量空间中将非常接近。

2.为什么需要向量化?

3. 向量化的步骤

  1. 预处理数据:对数据进行清洗和标准化处理,如去除停用词、标点符号,或者进行分词等预处理操作。
  2. 使用预训练模型生成向量:通过预训练的深度学习模型,如BERT,获取文本的向量表示。
  3. 存储与索引:将生成的向量存储到向量数据库中,如FAISS(Facebook AISimilarity Search)或其他专门用于高效向量检索的数据库。
  4. 相似度计算:在检索阶段,通过计算查询向量与数据库中向量的相似度(通常使用余弦相似度或欧几里得距离)来找到最相关的向量。

4.在langchian中使用向量数据库(以FAISS为例)

# from sentence_transformers import SentenceTransformer
# model = SentenceTransformer("models/AI-ModelScope/bge-large-zh-v1___5")

# texts = ["院子里有一只可爱的小猫", "厨房里有一只黑色的猫",  "大模型真简单"]

# embs = model.encode(texts)

#使用sklearn计算余弦相似度
# from sklearn.metrics.pairwise import cosine_similarity
# print(cosine_similarity([embs[0]], [embs[1]]))
# print(cosine_similarity([embs[0]], [embs[2]]))


from langchain_huggingface import HuggingFaceEmbeddings
model = HuggingFaceEmbeddings(model_name="models/AI-ModelScope/bge-large-zh-v1___5")

texts = ["院子里有一只可爱的小猫", "厨房里有一只黑色的猫",  "大模型真简单"]

from langchain_community.vectorstores import FAISS
# 构建FAISS 向量存储和retriever
vs = FAISS.from_texts(texts=texts, embedding=model)
print(vs.similarity_search("黑色的猫在哪里?"))

运行效果:

[Document(metadata={}, page_content='厨房里有一只黑色的猫'), Document(metadata={}, page_content='院子里有一只可爱的小猫'), Document(metadata={}, page_content='大模型真简单')]