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