自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

人工智能小白到高手:RAG通過重排(Reranking)提升信息檢索的質(zhì)量

發(fā)布于 2025-4-1 00:54
瀏覽
0收藏

RAG(檢索增強生成)是一種很厲害的技術(shù),能幫助企業(yè)開發(fā)更智能的 AI 應(yīng)用。

這類 AI 不僅能結(jié)合實時數(shù)據(jù),還能利用企業(yè)自己的數(shù)據(jù),生成更自然、更有互動感的對話。

RAG 的核心思路是讓 AI 在回答問題時,不是光靠自己“想”,而是先去查找外部的、可靠的專業(yè)知識,把這些信息當(dāng)作參考,讓回答更準(zhǔn)確、更有依據(jù)。

但問題在于,AI 找到的資料是否靠譜,直接決定了它給出的答案是否可信。

所以,優(yōu)化 RAG 的搜索過程非常重要,能有效提升 AI 生成內(nèi)容的可靠性。

一個提升搜索質(zhì)量的方法是“重新排序”,可以幫助 AI 先篩選出最相關(guān)的內(nèi)容,再生成更靠譜的答案。

1. RAG 是怎么工作的?

RAG 的流程可以簡單分成兩個步驟:

  • 檢索(Retrieval)– AI 先根據(jù)問題去數(shù)據(jù)庫或外部數(shù)據(jù)源里查找相關(guān)的文檔或段落,就像人在搜索引擎里輸入問題找答案一樣。
  • 生成(Grounded Generation)– AI 拿到這些相關(guān)資料后,再基于它們生成答案,并在回答里附上參考來源,讓信息更可信。

RAG 如何找到最相關(guān)的文檔?

RAG 里常用的一種檢索方式叫向量檢索,它的思路是理解用戶問題的真正意思,而不是單純匹配關(guān)鍵詞。向量檢索會把問題和文檔轉(zhuǎn)換成“向量”(一種數(shù)學(xué)表示),然后在這個向量空間里計算相似度,比如用余弦相似度或者歐幾里得距離,找到最貼近問題的文檔。

不過,這種方式雖然高效,能應(yīng)對超大規(guī)模的數(shù)據(jù),但也有個缺點——因為信息被壓縮成固定長度的向量,有些重要細節(jié)可能會丟失。這就導(dǎo)致,檢索出來的文檔可能不總是最合適的,影響 AI 最終的回答質(zhì)量。

重排(Reranking) 通過對初步檢索的結(jié)果進行二次排序,確保最相關(guān)的內(nèi)容排名靠前,提升信息檢索的質(zhì)量。

人工智能小白到高手:RAG通過重排(Reranking)提升信息檢索的質(zhì)量-AI.x社區(qū)image-20250328194524197

2. 重排(Reranking)的作用是什么?

通過 RAG,我們對許多文本文件進行語義搜索——這些文件的數(shù)量可能從幾萬到幾百萬不等,甚至更多。

為了確保大規(guī)??焖偎阉?,我們通常使用向量搜索。我們將文本轉(zhuǎn)換為嵌入向量,放入向量空間中,并使用余弦相似度等相似性指標(biāo)來比較這些向量與查詢向量的接近程度。

簡單來說,最開始的檢索過程通常是為了,而不是追求完美的準(zhǔn)確性。所以,AI 一開始找到的那批文檔可能會比較寬泛,既有高度相關(guān)的內(nèi)容,也可能夾雜一些不太相關(guān)的信息。

那能不能不考慮準(zhǔn)確性,而通過增加文檔數(shù)量,送給LLM,從而提升回答的可靠性呢?

很遺憾不行,LLMs 對我們可以傳遞給他們的文本量有一定限制——我們稱這個限制為上下文窗口。而且填滿上下文的效果,在目前(202503)性能也不是最佳,研究表明,隨著大量的 tokens 被放入上下文窗口,LLM的召回能力(LLM's recall performance )會下降,而且在太長的上下文中,LLMs也不容易遵循指令。

太長的上下文可能會導(dǎo)致模型難以聚焦關(guān)鍵信息,特別是在文檔位于中間時,準(zhǔn)確率下降最明顯。這可能是因為模型在處理長上下文時,信息容易被稀釋或受到干擾。

人工智能小白到高手:RAG通過重排(Reranking)提升信息檢索的質(zhì)量-AI.x社區(qū)image-20250328211333286

解決此問題的方法是通過檢索大量文檔來盡可能多的找到相關(guān)文檔,最大化檢索的召回率,然后通過減少進入LLM的文檔數(shù)量來提升LLM的響應(yīng)準(zhǔn)確度。

為此,我們會對檢索到的文檔進行重新排序,僅保留與我們的LLM最相關(guān)的文檔——這就是我們使用重排序的原因。

人工智能小白到高手:RAG通過重排(Reranking)提升信息檢索的質(zhì)量-AI.x社區(qū)image-20250328212513439

通過重新排序(reranking) 后,把這些文檔按相關(guān)性重新篩選和排列,減少無關(guān)內(nèi)容的干擾。

如果沒有重新排序,AI 可能得自己在一堆信息里“扒拉”出有用的內(nèi)容,這不僅降低了回答的準(zhǔn)確性和連貫性,還可能讓 AI 產(chǎn)生“幻覺”(也就是編造出和真實情況不符的信息)。

通過重新排序,AI 能更專注于最有用的資料,最終生成的回答也會更加精準(zhǔn)和可靠。

還有一種情況是。

在RAG里可能會使用混合檢索來實現(xiàn)了多個檢索技術(shù)之間的互補。

混合檢索能夠結(jié)合不同檢索技術(shù)的優(yōu)勢獲得更好的召回結(jié)果,但在不同檢索模式下的查詢結(jié)果需要進行合并和歸一化(將數(shù)據(jù)轉(zhuǎn)換為統(tǒng)一的標(biāo)準(zhǔn)范圍或分布,以便更好地進行比較、分析和處理),然后再一起提供給大模型。

這時候也需要對已召回的文檔結(jié)果再一次進行語義重排序,優(yōu)化排序結(jié)果。

人工智能小白到高手:RAG通過重排(Reranking)提升信息檢索的質(zhì)量-AI.x社區(qū)image-20250328200611481

重排序模型會計算候選文檔列表與用戶問題的語義匹配度,根據(jù)語義匹配度重新進行排序,從而改進語義排序的結(jié)果。其原理是計算用戶問題與給定的每個候選文檔之間的相關(guān)性分數(shù),并返回按相關(guān)性從高到低排序的文檔列表。

重排序在混合檢索、單一檢索模式下,都可以有效幫助改進文檔的召回效果。

3. 重排(Reranking) 的基本流程

  • 初步檢索:使用向量搜索或其他搜索獲取相關(guān)文檔。
  • 重排序:按照新計算的相關(guān)性分數(shù)調(diào)整排名,確保最相關(guān)的文檔靠前。

相比向量搜索,重排(Reranking) 具有更高的計算成本,但能極大提升檢索質(zhì)量,尤其適用于高精準(zhǔn)度要求的場景,如法律、金融、醫(yī)療等專業(yè)領(lǐng)域。

4. 用代碼實現(xiàn)一個簡單的基本流程

我們要使用 openai 的嵌入模型生成文檔的嵌入向量,使用cohere的重排模型做兩階段重排。

在documents變量中保存測試使用的文檔列表

import chromadb
from openai import OpenAI
import cohere

# 設(shè)置 API Key(替換成你的)
OPENAI_API_KEY = "hk-iwtbie118cf1b4a91e427"
COHERE_API_KEY = "myRKkiGg24uQqXZfe"

co = cohere.ClientV2(COHERE_API_KEY)

# 初始化 ChromaDB(本地存儲)
chroma_client = chromadb.PersistentClient(path="./chroma_db")
collection = chroma_client.get_or_create_collection("my_documents",
    metadata={"hnsw:space": "cosine"})

# 文檔數(shù)據(jù)
documents = [
    # 與大語言模型高度相關(guān)的文檔
    "大語言模型(LLM)是基于Transformer架構(gòu)的深度學(xué)習(xí)模型,能夠理解和生成人類語言",
    "ChatGPT是OpenAI開發(fā)的大語言模型,通過強化學(xué)習(xí)和人類反饋訓(xùn)練,具有優(yōu)秀的對話能力",
    "大語言模型通過自監(jiān)督學(xué)習(xí)從海量文本中學(xué)習(xí)語言規(guī)律和知識,形成強大的語義理解能力",
    "大語言模型的涌現(xiàn)能力使其在沒有專門訓(xùn)練的情況下也能完成復(fù)雜任務(wù),如推理和編程",
    "大語言模型的參數(shù)規(guī)模從數(shù)十億到數(shù)萬億不等,參數(shù)量越大通常性能越強",

    # 與AI技術(shù)相關(guān)但與大語言模型關(guān)聯(lián)度較低的文檔
    "人工智能技術(shù)正在各行各業(yè)引發(fā)革命性變革,提高生產(chǎn)效率和創(chuàng)新能力",
    "機器學(xué)習(xí)是人工智能的核心技術(shù),通過數(shù)據(jù)訓(xùn)練算法模型來完成特定任務(wù)",
    "深度學(xué)習(xí)是機器學(xué)習(xí)的一個分支,使用多層神經(jīng)網(wǎng)絡(luò)處理復(fù)雜數(shù)據(jù)和任務(wù)",
    "人工智能倫理問題日益受到關(guān)注,包括隱私保護、算法偏見和責(zé)任歸屬等方面",
    "人工智能的發(fā)展經(jīng)歷了從規(guī)則系統(tǒng)到統(tǒng)計學(xué)習(xí)再到深度學(xué)習(xí)的多次范式轉(zhuǎn)變",

]
doc_ids = [f"doc{i}"for i in range(1, len(documents) + 1)]

生成嵌入向量保存到向量數(shù)據(jù)庫:

# 獲取 OpenAI 嵌入向量
def get_embedding(text):
    print(f"Getting embedding for : {text}")
    client = OpenAI(
        api_key=OPENAI_API_KEY,  # 如果您沒有配置環(huán)境變量,請在此處用您的API Key進行替換
        base_url="https://api.openai-hk.com/v1",  # 百煉服務(wù)的base_url
    )
    response = client.embeddings.create(model="text-embedding-3-small", input=text)
    # response = client.embeddings.create(model="text-embedding-ada-002", input=text)
    # print(response)
    return response.data[0].embedding
    
# 計算所有文檔的嵌入,并存入 ChromaDB
for doc, doc_id in zip(documents, doc_ids):
    embedding = get_embedding(doc)
    collection.add(
        ids=[doc_id],
        documents=[doc],
        embeddings=[embedding]
    )

print("? 嵌入數(shù)據(jù)已存入 ChromaDB")

在向量數(shù)據(jù)庫中通過余弦相似度做一階段檢索:

# 用戶查詢
query_text = "大語言模型的工作原理和技術(shù)特點"

query_embedding = get_embedding(query_text)
print(f"用戶問題:{query_text}")

# 從 ChromaDB 搜索最相似的 5 條結(jié)果
results = collection.query(
    query_embeddings=[query_embedding],
    n_results=5,
    include=["documents", "distances"]
)

retrieved_docs = results["documents"][0]  # 獲取返回的文檔列表
distances = results["distances"][0]  # 獲取相似度距離
print("\n?? ChromaDB 搜索結(jié)果(未重排):")
for i, (doc, distance) in enumerate(zip(retrieved_docs, distances), 1):
    similarity = 1 - distance  # 將距離轉(zhuǎn)換為相似度
    print(f"{i}. 相似度: {similarity:.4f} - {doc}")

?

?? ChromaDB 搜索結(jié)果(未重排):

  1. 相似度: 0.7058 - 大語言模型的涌現(xiàn)能力使其在沒有專門訓(xùn)練的情況下也能完成復(fù)雜任務(wù),如推理和編程
  2. 相似度: 0.7017 - 大語言模型的參數(shù)規(guī)模從數(shù)十億到數(shù)萬億不等,參數(shù)量越大通常性能越強
  3. 相似度: 0.6908 - 大語言模型通過自監(jiān)督學(xué)習(xí)從海量文本中學(xué)習(xí)語言規(guī)律和知識,形成強大的語義理解能力
  4. 相似度: 0.6731 - 大語言模型(LLM)是基于Transformer架構(gòu)的深度學(xué)習(xí)模型,能夠理解和生成人類語言
  5. 相似度: 0.5491 - ChatGPT是OpenAI開發(fā)的大語言模型,通過強化學(xué)習(xí)和人類反饋訓(xùn)練,具有優(yōu)秀的對話能力

通過重排模型對一階段檢索結(jié)果,做二階段重排,可以看到文檔:“大語言模型(LLM)是基于Transformer架構(gòu)的深度學(xué)習(xí)模型,能夠理解和生成人類語言”

在通過排序后,與查詢的相似度是最高的,排到了第一位,其他的文檔也有了相似度的變化。

經(jīng)過重新排序,LLM獲得了更加相關(guān)的信息。這自然會顯著提升 RAG 的性能。這意味著RAG在最大化相關(guān)信息的同時,盡量減少輸入到我們的LLM中的噪聲。

# 使用 Cohere Reranker 進行重排序
response = co.rerank(query=query_text, documents=retrieved_docs, model="rerank-v3.5")
reranked_results = []
reranked_scores = []
for item in response.results:
    original_doc = retrieved_docs[item.index]  # 使用索引獲取原始文檔
    reranked_results.append(original_doc)
    reranked_scores.append(item.relevance_score)

print("\n?? 經(jīng)過 Reranker 重新排序的最終結(jié)果:")
for i, (doc, score) in enumerate(zip(reranked_results, reranked_scores), 1):
    print(f"{i}. 相似度: {score:.4f} - {doc}")


經(jīng)過 Reranker 重新排序的最終結(jié)果:

  1. 相似度: 0.7699 - 大語言模型(LLM)是基于Transformer架構(gòu)的深度學(xué)習(xí)模型,能夠理解和生成人類語言
  2. 相似度: 0.6999 - 大語言模型通過自監(jiān)督學(xué)習(xí)從海量文本中學(xué)習(xí)語言規(guī)律和知識,形成強大的語義理解能力
  3. 相似度: 0.5974 - 大語言模型的涌現(xiàn)能力使其在沒有專門訓(xùn)練的情況下也能完成復(fù)雜任務(wù),如推理和編程
  4. 相似度: 0.4884 - 大語言模型的參數(shù)規(guī)模從數(shù)十億到數(shù)萬億不等,參數(shù)量越大通常性能越強
  5. 相似度: 0.4183 - ChatGPT是OpenAI開發(fā)的大語言模型,通過強化學(xué)習(xí)和人類反饋訓(xùn)練,具有優(yōu)秀的對話能力

總結(jié)

重新排序(reranking) 通過對第一次檢索結(jié)果進行二次排序,顯著提升檢索質(zhì)量,使最相關(guān)的內(nèi)容排在前面。

相比傳統(tǒng)向量檢索,它能更準(zhǔn)確理解查詢意圖,減少無關(guān)文檔,提高搜索、推薦系統(tǒng)和 RAG 任務(wù)的精準(zhǔn)度。

雖然計算成本較高,但在高精度任務(wù)中優(yōu)勢明顯。

本文轉(zhuǎn)載自??AI取經(jīng)路??,作者:AI取經(jīng)路

標(biāo)簽
已于2025-4-1 10:06:56修改
收藏
回復(fù)
舉報
回復(fù)
相關(guān)推薦