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

最大邊際相關(guān)性MMR:提升RAG檢索結(jié)果的多樣性與實用性

發(fā)布于 2025-4-24 07:18
瀏覽
0收藏

在RAG系統(tǒng)中,僅靠向量相似度檢索容易造成信息重復(fù)或片面。為提升回答的多樣性與覆蓋度,引入MMR(Maximum Marginal Relevance)算法能有效在“相關(guān)性”與“多樣性”之間取得平衡,從而挑選出既相關(guān)又不重復(fù)的信息,提升系統(tǒng)輸出的質(zhì)量與實用性。

  • 1. MMR 是什么,它能解決什么問題?
  • 2. MMR 的基本思想
  • 3. MMR 的原理和公式解析

3.1 算法流程

3.2 舉個例子:摘要任務(wù)中的 MMR

  • 4. MMR 的應(yīng)用場景
  • 4.1. 信息檢索(比如搜索引擎的結(jié)果排序)

  • 4.2. 問答系統(tǒng)(從多個候選答案中挑出信息最豐富的)

  • 5. 代碼測試

  • 5.1  標準相似度檢索 (Top 5)

  • 5.2  MMR檢索 (lambda=0.3, k=5, fetch_k=10)

  • 5.3  MMR檢索 (lambda=0.7, k=5, fetch_k=10)

在 RAG(Retrieval-Augmented Generation)系統(tǒng)中,檢索階段決定了最終生成內(nèi)容的"信息來源"。

但僅靠向量相似度進行 top-k 檢索,可能會出現(xiàn)內(nèi)容重復(fù)、信息集中于單一角度的問題,導致模型生成的回答缺乏多樣性和覆蓋度。這時,僅僅"相關(guān)"還不夠,我們更希望檢索結(jié)果是"既相關(guān)又多樣"。

為了解決這個問題,引入 Maximum Marginal Relevance(MMR) 可以有效地在相關(guān)性與多樣性之間取得平衡,優(yōu)化檢索結(jié)果的質(zhì)量,提升最終回答的豐富性和實用性。

1. MMR 是什么,它能解決什么問題?

Maximum Marginal Relevance(MMR) 是一種排序算法,主要用于在信息檢索、推薦系統(tǒng)和摘要生成等任務(wù)中,選擇既相關(guān)又不重復(fù)的內(nèi)容。

放到RAG的場景中,傳統(tǒng)的排序方法往往只關(guān)注內(nèi)容的相關(guān)性(即與查詢的匹配度)。但如果我們只是單純地根據(jù)相關(guān)性來排序,可能會出現(xiàn)以下問題:

  • 重復(fù)內(nèi)容:比如在推薦系統(tǒng)中,推薦的內(nèi)容過于相似,用戶感受不到新鮮感。
  • 信息不全面:有些系統(tǒng)可能過于關(guān)注某一個領(lǐng)域或話題,導致用戶只能看到片面的信息。

MMR 的核心思想是:在確保相關(guān)性的同時,增加多樣性,從而提供更全面、更豐富的結(jié)果。

簡單來說就是:在一堆候選內(nèi)容里,優(yōu)先選那些既跟用戶查詢相關(guān)、又跟已經(jīng)選過的內(nèi)容不重復(fù)的條目。

我們可以這么理解它的"目的"—— MMR = "給你想要的 + 避免你已經(jīng)看過的"。

假設(shè)你正在使用一個新聞推薦系統(tǒng),輸入了"人工智能"的關(guān)鍵詞。傳統(tǒng)的推薦系統(tǒng)可能推薦多篇關(guān)于"人工智能在醫(yī)療行業(yè)應(yīng)用"的文章,而這些文章的內(nèi)容高度相似。

使用 MMR 后,系統(tǒng)可能會推薦:

  • 一篇講人工智能醫(yī)療應(yīng)用的文章,
  • 一篇講人工智能教育領(lǐng)域的文章,
  • 一篇關(guān)于人工智能倫理問題的文章。

這樣,用戶既能獲得與主題相關(guān)的信息,又能了解該領(lǐng)域的不同視角,避免了重復(fù)。

2. MMR 的基本思想

這里面涉及到兩個關(guān)鍵詞:相關(guān)性(Relevance) 和 多樣性(Diversity)。這兩個聽起來像是在"打架",但其實在信息排序里,它們是缺一不可的搭檔。

相關(guān)性是基礎(chǔ),但不夠

相關(guān)性很好理解,就是某個內(nèi)容跟用戶查詢、興趣、目標之間的匹配程度。比如你搜"機器學習",當然不希望系統(tǒng)推"烘焙教程"給你。這就是相關(guān)性在起作用。

但如果系統(tǒng)一味追求相關(guān)性,就會出現(xiàn)一個問題:內(nèi)容集中在一個點上,很快就"重復(fù)"了。你看著看著就會覺得:"這些不是都差不多嗎?"

多樣性讓信息更豐富

多樣性指的是結(jié)果之間的差異程度。如果推薦的每條內(nèi)容都從不同角度切入,比如一個講原理、一個講應(yīng)用、一個講未來趨勢,那你看完之后會感覺信息更全面、更有收獲。

相關(guān)性保證你"看對東西",多樣性保證你"看到不同的東西"。

全是相關(guān)但重復(fù)的內(nèi)容,沒用;全是多樣但不相關(guān)的內(nèi)容,也沒用。

所以,MMR 的目標就很明確了:

從一堆候選內(nèi)容里,挑出那些既"與查詢高度相關(guān)",又"跟已經(jīng)選過的內(nèi)容不重復(fù)"的條目。

它在每一步選下一個內(nèi)容時,都會去權(quán)衡:

  • 這個內(nèi)容本身和用戶需求有多匹配?
  • 它是不是和我們已經(jīng)選過的那些內(nèi)容太像了?

MMR 做的就是在這兩者之間找一個平衡點。換句話說,它每次都想選一個"有新意"的好內(nèi)容,而不是簡單地把"最相關(guān)的那幾個"一股腦推出來。

你可以把 MMR 想成一個"懂信息又懂用戶心理"的策展人:

它會說,"這個你可能還沒看過,但跟你想要的很有關(guān),而且比之前那些不一樣,值的一看。"

因此,MMR 的核心目標是:選出既相關(guān)又不重復(fù)的內(nèi)容。

3. MMR 的原理和公式解析

最大邊際相關(guān)性MMR:提升RAG檢索結(jié)果的多樣性與實用性-AI.x社區(qū)

3.1 算法流程

最大邊際相關(guān)性MMR:提升RAG檢索結(jié)果的多樣性與實用性-AI.x社區(qū)

3.2 舉個例子:摘要任務(wù)中的 MMR

假設(shè)我們有一篇長文章,要從中選出三句話組成一個簡短摘要。我們手頭有五個候選句子,編號:S1、S2、S3、S4、S5。

最大邊際相關(guān)性MMR:提升RAG檢索結(jié)果的多樣性與實用性-AI.x社區(qū)

第一次迭代候選集合:

最大邊際相關(guān)性MMR:提升RAG檢索結(jié)果的多樣性與實用性-AI.x社區(qū)


選擇MMR得分最高的句子S4加入已選集合

雖然S2和S3都很"相關(guān)",但S4的MMR得分最高,因此選擇S4。

集合狀態(tài)更新:

已選集合: {S1, S4}

候選集合: {S2, S3, S5}

第二次迭代候選集合:

最大邊際相關(guān)性MMR:提升RAG檢索結(jié)果的多樣性與實用性-AI.x社區(qū)

選擇MMR得分最高的句子S3加入已選集合

在剩余的句子中,S3的MMR得分最高(0.405),因此選擇S3。

集合狀態(tài)更新:

已選集合: {S1, S4, S3}

候選集合: {S2, S5}

最終選出的3句話為:S1, S4, S3

4. MMR 的應(yīng)用場景

4.1. 信息檢索(比如搜索引擎的結(jié)果排序)

你在搜索引擎上輸入一個關(guān)鍵詞,比如"ChatGPT 應(yīng)用案例",后臺系統(tǒng)一下子找到了幾百上千條相關(guān)網(wǎng)頁。

如果我們只看"相關(guān)性",那前幾條可能都是講"教育場景下怎么用 ChatGPT"的,雖然都對,但你可能會覺得太集中、太重復(fù)了。

用上 MMR 之后,系統(tǒng)就會在相關(guān)的基礎(chǔ)上,讓展示結(jié)果更有"層次":

  • 第一條是講教育的,
  • 第二條可能是講法律行業(yè),
  • 第三條是開發(fā)者怎么集成 ChatGPT,
  • 第四條可能是講它帶來的倫理問題。

4.2. 問答系統(tǒng)(從多個候選答案中挑出信息最豐富的)

比如你問一個比較開放的問題,比如"人工智能未來會帶來哪些改變?"

系統(tǒng)可能從數(shù)據(jù)庫或模型里找出了 10 個可能的回答。

MMR 在這時候就能幫上忙:不是簡單地把"重復(fù)最多"的答案往上排,而是挑出互補的信息,比如:

  • 一個說對就業(yè)的影響,
  • 一個說對教育的影響,
  • 一個說技術(shù)發(fā)展的潛力……

其他還可以用到:推薦系統(tǒng)(避免推相似內(nèi)容)、文本摘要(避免重復(fù)句子)

5. 代碼測試

# 導入操作系統(tǒng)模塊
import os

# 設(shè)置OpenAI API密鑰
# 注意:在實際應(yīng)用中,請勿硬編碼API密鑰。建議使用環(huán)境變量或其他安全方式管理密鑰。
OPENAI_API_KEY = 'hk-iwtbie4a91e427'# 示例密鑰,請?zhí)鎿Q為您自己的有效密鑰

# 將API密鑰設(shè)置為環(huán)境變量
os.environ['OpenAI_API_KEY'] = OPENAI_API_KEY

from langchain_chroma import Chroma
from langchain_openai import OpenAIEmbeddings

# 定義一個包含示例文本的列表,這些文本將被嵌入并存儲到向量數(shù)據(jù)庫中
texts = [
    "大語言模型(LLM)是基于Transformer架構(gòu)的深度學習模型。", # 關(guān)于LLM的定義
    "LLM的核心是Transformer架構(gòu),這是一種強大的深度學習技術(shù)。", # 與上一句相似
    "基于Transformer的LLM在自然語言處理任務(wù)中表現(xiàn)出色。", # 與第一句相似
    "LLM通過在海量文本數(shù)據(jù)上進行預(yù)訓練來學習語言模式。", # LLM的訓練方式
    "預(yù)訓練使得LLM能夠掌握豐富的語言知識和世界常識。", # 與上一句相似
    "LLM展現(xiàn)出強大的自然語言理解和生成能力。", # LLM的能力
    "理解和生成自然語言是LLM的核心功能之一。", # 與上一句相似
    "像GPT-4這樣的LLM可以執(zhí)行翻譯、摘要和問答等多種任務(wù)。", # LLM的應(yīng)用
    "LLM在文本翻譯、內(nèi)容摘要和智能問答方面有廣泛應(yīng)用。", # 與上一句相似
    "人工智能(AI)是一個更廣泛的領(lǐng)域,LLM是其中的一個子集。", # LLM與AI的關(guān)系
    "AI的目標是創(chuàng)造能夠像人類一樣思考和行動的機器。"# AI的目標
]

# 初始化OpenAI嵌入模型,指定模型名稱和API基礎(chǔ)URL
embeddings = OpenAIEmbeddings(model="text-embedding-3-large", base_url="https://api.openai-hk.com/v1")
# 使用Chroma類的from_texts方法創(chuàng)建向量存儲
vectorstore = Chroma.from_texts(
    texts=texts, # 需要嵌入和存儲的文本列表
    embedding=embeddings, # 用于生成嵌入的嵌入模型實例
    persist_directory="./chroma_db"# 指定持久化存儲向量數(shù)據(jù)的目錄
)

# 定義一個查詢字符串,用于在向量數(shù)據(jù)庫中進行搜索
query = '什么是大語言模型以及它們能做什么?'

print("========================= 相似度檢索 ============================")
# 使用向量存儲的similarity_search方法執(zhí)行相似度檢索
t1 = vectorstore.similarity_search(query, k=5) # k=5表示返回最相似的5個結(jié)果
# 打印相似度檢索的結(jié)果
print(t1)

# 標識MMR檢索(lambda=0.3)部分的開始
print("========================= MMR lambda=0.3 ============================")
# 使用向量存儲的max_marginal_relevance_search方法執(zhí)行MMR檢索
t2 = vectorstore.max_marginal_relevance_search(query, k=5, fetch_k=10, lambda_mult=0.3)
# k=5表示最終返回5個結(jié)果,fetch_k=10表示初始獲取10個相似結(jié)果進行MMR計算,lambda_mult=0.3控制多樣性與相似度的權(quán)衡
# 打印MMR檢索(lambda=0.3)的結(jié)果
print(t2)

# 標識MMR檢索(lambda=0.7)部分的開始
print("========================= MMR lambda=0.7 ============================")
# 使用向量存儲的max_marginal_relevance_search方法執(zhí)行MMR檢索
t3 = vectorstore.max_marginal_relevance_search(query, k=5, fetch_k=10, lambda_mult=0.7)
# k=5表示最終返回5個結(jié)果,fetch_k=10表示初始獲取10個相似結(jié)果進行MMR計算,lambda_mult=0.7控制多樣性與相似度的權(quán)衡
# 打印MMR檢索(lambda=0.7)的結(jié)果
print(t3)

運行結(jié)果:

========================= 相似度檢索 =============================
[Document(id='76a37d7d-4f9e-43ca-8ca1-396fd5a956bc', metadata={}, page_content='大語言模型(LLM)是基于Transformer架構(gòu)的深度學習模型。'), 
Document(id='9f76337c-3f6c-4c14-81e5-399338e30938', metadata={}, page_content='LLM通過在海量文本數(shù)據(jù)上進行預(yù)訓練來學習語言模式。'), 
Document(id='23717671-2353-4daa-a30f-80ce191cfb90', metadata={}, page_content='理解和生成自然語言是LLM的核心功能之一。'), 
Document(id='f5a64fe0-b616-4a02-b932-ea1d6f7a1217', metadata={}, page_content='LLM展現(xiàn)出強大的自然語言理解和生成能力。'), 
Document(id='c6237dc4-4087-4eee-b838-a2392a3ef993', metadata={}, page_content='基于Transformer的LLM在自然語言處理任務(wù)中表現(xiàn)出色。')]
========================= MMR lambda=0.3 =============================
[Document(id='76a37d7d-4f9e-43ca-8ca1-396fd5a956bc', metadata={}, page_content='大語言模型(LLM)是基于Transformer架構(gòu)的深度學習模型。'), 
Document(id='f5a64fe0-b616-4a02-b932-ea1d6f7a1217', metadata={}, page_content='LLM展現(xiàn)出強大的自然語言理解和生成能力。'), 
Document(id='4a3a8219-8065-4d74-b7ce-187f16e87ecf', metadata={}, page_content='像GPT-4這樣的LLM可以執(zhí)行翻譯、摘要和問答等多種任務(wù)。'), 
Document(id='fc2b9c7a-c63c-4c7b-a153-eece2d6bb02e', metadata={}, page_content='預(yù)訓練使得LLM能夠掌握豐富的語言知識和世界常識。'), 
Document(id='d0cbe326-c4c0-4252-9636-eef7bed06379', metadata={}, page_content='人工智能(AI)是一個更廣泛的領(lǐng)域,LLM是其中的一個子集。')]
========================= MMR lambda=0.7 =============================
[Document(id='76a37d7d-4f9e-43ca-8ca1-396fd5a956bc', metadata={}, page_content='大語言模型(LLM)是基于Transformer架構(gòu)的深度學習模型。'), 
Document(id='9f76337c-3f6c-4c14-81e5-399338e30938', metadata={}, page_content='LLM通過在海量文本數(shù)據(jù)上進行預(yù)訓練來學習語言模式。'), 
Document(id='23717671-2353-4daa-a30f-80ce191cfb90', metadata={}, page_content='理解和生成自然語言是LLM的核心功能之一。'), 
Document(id='f5a64fe0-b616-4a02-b932-ea1d6f7a1217', metadata={}, page_content='LLM展現(xiàn)出強大的自然語言理解和生成能力。'), 
Document(id='4a3a8219-8065-4d74-b7ce-187f16e87ecf', metadata={}, page_content='像GPT-4這樣的LLM可以執(zhí)行翻譯、摘要和問答等多種任務(wù)。')]

5.1  標準相似度檢索 (Top 5)

這種策略旨在找出與查詢最相似的文檔。

結(jié)果特點:

  • 高度相關(guān):檢索到的文檔都與"大語言模型"的定義、架構(gòu)和能力直接相關(guān)。
  • 潛在冗余:部分文檔內(nèi)容相似度較高,例如都提到了 Transformer 架構(gòu)或自然語言處理能力。

5.2  MMR檢索 (lambda=0.3, k=5, fetch_k=10)

較低的 ??lambda?? 值 (0.3) 更側(cè)重于 多樣性。

結(jié)果特點:

  • 平衡性:保留了最相關(guān)的文檔,同時引入了更多不同方面的信息,如具體應(yīng)用、訓練方法和與 AI 的關(guān)系。
  • 較低冗余:相比純相似度檢索,結(jié)果的重復(fù)性較低。

5.3  MMR檢索 (lambda=0.7, k=5, fetch_k=10)

較高的 ??lambda?? 值 (0.7) 更側(cè)重于 相關(guān)性。

結(jié)果特點:

  • 高相關(guān)性:結(jié)果與標準相似度檢索非常接近,保留了大部分最相似的文檔。
  • 有限多樣性:相比??lambda=0.3??,多樣性較低,但仍比純相似度檢索略高,引入了關(guān)于 LLM 具體任務(wù)的文檔。

MMR 的核心價值在于 提升結(jié)果的多樣性,確保返回的內(nèi)容既相關(guān)又有足夠的多樣性。在推薦系統(tǒng)、摘要生成、問答系統(tǒng)等多個場景中,MMR 都能有效避免重復(fù),提升用戶體驗。

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

收藏
回復(fù)
舉報
回復(fù)
相關(guān)推薦