精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

大模型應用系列:從Ranking到Reranking

原創(chuàng) 精選
人工智能
Reranking是大模型應用中RAG 系統(tǒng)的一個非常關鍵的步驟,其核點是提高最初檢索到的文件的相關性和質量。在最初的檢索過程之后,對這些文檔進行重新排序和重新組織,目標是確定最相關信息的優(yōu)先次序,確保在作出回應或決策時使用盡可能好的數(shù)據。?

每個搜索引擎背后都隱藏著一個至關重要卻往往被忽視的組成部分——Reranking(重新排名)。那么,什么是Rerank呢?簡而言之,這一過程旨在優(yōu)化并調整搜索結果的順序,使之更加精準地匹配用戶的查詢需求。值得注意的是,不同情況下采用的Rerank策略差異極大,因為針對每一個具體問題都需要量身定制解決方案。以去年問世的一款名為RankGPT的先進模型為例,它利用大型語言模型對搜索結果進行重新排序,不僅效果顯著,而且無需事先針對新數(shù)據進行額外訓練即可實現(xiàn)。

“治學先治史”,這句話同樣適用于技術領域。深入了解Ranking技術的發(fā)展歷程對于掌握當前最先進的Rerank方法來說很有意義。通過回顧這些系統(tǒng)隨時間演變的過程,我們能夠更深刻地理解現(xiàn)今所采用的各種解決方案是如何設計出來的,以及它們是如何有效解決實際問題的。

1. 早期的Ranking

早期的搜索引擎,相對簡單且但功能有限。當時的技術,就像 BM25一樣,主要集中在精確的術語匹配上。這意味著,如果搜索查詢中的確切單詞沒有出現(xiàn)在文檔中,即使它正是你想要的,那么該文檔就不會被認為是相關的。

這些早期系統(tǒng)的核心是一個名為“TF-IDF”的公式,它基于三個關鍵因素來確定文檔的相關性,其中TF是搜索術語在文檔中出現(xiàn)的頻率,DF是有多少其他文檔包含相同的術語,以及文檔的長度。

圖片圖片

為了標準化文檔長度并比較文檔與搜索的相關性,在余弦距離中使用了一種稱為“向量空間模型”的技術。雖然這種方法為早期的搜索引擎奠定了基礎,但是它有一個很大的缺點,那就是它不能理解單詞背后的意思或檢測同義詞。所有東西都必須完全匹配。

例如,如果你搜索一個“悲慘的愛情故事”,一個帶有短語“命運多舛的戀人”的文檔(如羅密歐與朱麗葉)可能不會出現(xiàn),即使它正是你想要的。這個問題被稱為詞匯不匹配問題,是這些早期搜索系統(tǒng)面臨的最大挑戰(zhàn)之一。隨著語言和術語的發(fā)展,不同的術語可能指的是同一個概念,但精確匹配系統(tǒng)無法彌合這一差距。

為了克服這個詞匯不匹配的問題,出現(xiàn)了一些技巧:

  • 查詢擴展(Query Expansion)通過添加相關術語來擴展搜索范圍,或者通過用戶反饋,或者通過假設排名最高的文檔是相關的。它還使用 WordNet 等工具來查找同義詞。
  • 文檔增強(Document Enrichment)改進了文檔的表示方式,特別是在處理語音轉錄或短文本片段等噪音數(shù)據的時候。
  • 超越精確匹配: 早期的語義學方法,如LSA和統(tǒng)計翻譯,試圖捕捉精確詞匹配以外的意義。

然而,真正的突破來自神經網絡,它革命性地支持語義匹配,即理解單詞背后的意思的能力,即使它們不是完全匹配的搜索。

這種從精確詞匯匹配到語義匹配的轉變標志著搜索技術的一個轉折點。今天的搜索引擎結合了這兩種方法來給我們更準確的結果,即使在措辭不完全匹配的情況下,也可以提供相關的內容。

2. LTR的興起

在神經網絡時代之前,像 BM25這樣的搜索引擎和類似的方法使用無監(jiān)督的方法根據詞頻等因素對文檔進行排序。這些系統(tǒng)可以通過數(shù)據進行微調,但它們缺乏一種更精確的、基于學習的方法。LTR(Learning to Rank)依賴于從文本本身設計的特征,比如詞頻、文檔長度和 BM25得分。例如,Ranking系統(tǒng)現(xiàn)在可以考慮特定術語在文檔的某個距離內出現(xiàn)的頻率,或者它們出現(xiàn)在標題等關鍵領域的頻率。這些洞見使得搜索結果更加準確、相關。

圖片圖片

LTR 模型通常根據它們處理排序任務的方式進行分類:

  • Pointwise: 這種方法查看單個文檔,將排名作為分類或回歸任務處理。這就像是在問“這份文件到底有沒有關聯(lián)”
  • Pairwise: 這種方法側重于比較查詢/文檔對,旨在優(yōu)化首選項。例如,在文檔 A 和文檔 B 都相關時,確保文檔 A 的級別優(yōu)于文檔 B。
  • Listwise: 這種方法不關注單個文檔或對,而是評估整個搜索結果列表,并直接優(yōu)化排名指標,如標準化折扣累積增益(nDCG) ,它衡量排名結果對用戶的有用性。

在2010年前后,LTR達到了頂峰。基于樹的模型,特別是梯度增強的決策樹,成為優(yōu)化搜索Ranking的首選解決方案。

LTR 技術為如今更先進的搜索系統(tǒng)鋪平了道路。然而,深度學習的到來把事情帶到了一個新的水平,提供了更復雜的方法來排序搜索結果,更準確和更深入地理解用戶意圖。搜索的發(fā)展還遠未結束,但 LTR 代表著這個過程中的一個重要里程碑。

XGBoost 實現(xiàn)了通過一組目標函數(shù)和性能指標執(zhí)行LTR。它的目標函數(shù)是rank:ndcg,基于 LambdaMART 算法,該算法是對 LambdaRank 框架的改造,以適應梯度提升樹。下面的代碼片段展示了如何實現(xiàn)LTR模型。

from sklearn.datasets import make_classification
import numpy as np

import xgboost as xgb

# Make a synthetic ranking dataset for demonstration
seed = 1994
X, y = make_classification(random_state=seed)
rng = np.random.default_rng(seed)
n_query_groups = 3
qid = rng.integers(0, n_query_groups, size=X.shape[0])

# Sort the inputs based on query index
sorted_idx = np.argsort(qid)
X = X[sorted_idx, :]
y = y[sorted_idx]
qid = qid[sorted_idx]

ranker = xgb.XGBRanker(tree_method="hist", lambdarank_num_pair_per_sample=8, objective="rank:ndcg", lambdarank_pair_method="topk")
ranker.fit(X, y, qid=qid)

3. 深度學習的到來: 搜索排名的新方式

隨著深度學習的興起,搜索排名向前邁進了一大步。有兩個關鍵的突破,首先,連續(xù)向量表示允許模型超越簡單地精確匹配,并理解詞之間更深層次的關系。其次,深度學習減少了對手工標注特征的需求,而特征標注在早期的LTR系統(tǒng)中是一個重大挑戰(zhàn)。

在回顧文本Ranking中的深度學習時,可以考慮兩個不同的階段:BERT 之前的模型和基于 Transformer 的模型。在2019年,BERT的引入改變了游戲規(guī)則,因為基于 BERT 模型提供了更好的性能。這種區(qū)別基本上代表著搜索排名深度學習的兩個時代。

3.1 BERT出現(xiàn)之前的神經網絡Ranking模型

在 BERT 之前,用于神經排序的模型主要有兩種: 基于表示的模型和基于交互的模型。

基于表示的模型分別學習了查詢和文檔的密集向量表示,并使用余弦距離等指標進行比較。一個早期的例子是深度結構化語義模型(DSSM),它使用字符 n-gram 來創(chuàng)建向量表示。后來,諸如基于 CNN 的 DSSM 和雙嵌入空間模型(DESM)通過增加上下文和預先訓練的詞語嵌入進行了改進。

基于交互的模型側重于通過使用相似矩陣來捕獲查詢和文檔中特定術語之間的關系。矩陣反映了嵌入查詢術語與文件中查詢術語的相似程度。這種方法通過使用連續(xù)向量來解決詞匯不匹配的問題,而不是依賴于精確的詞語匹配。

圖片圖片

這些模型通常遵循兩個步驟:

  1. 特征提取: 該模型利用不同的技術分析相似度矩陣,聚合詞語的相似度。例如,DRMM 和 KNRM 這樣的模型創(chuàng)建了這些相似性的直方圖,而更高級的模型,如 MatchPyramid,PACRR 和 convknRM,則包含了位置信息來捕捉單詞序列之間的模式。
  2. 相關性評分: 在提取特征之后,該模型將它們結合起來,使用諸如池化和前饋神經網絡等技術為查詢文檔對生成相關性評分。

3.2 Transformer時代的Reranking

隨著像 BERT 這樣的Transformer模型的興起,搜索系統(tǒng)中的Ranking已經變得更加復雜,以便提供更加準確和相關的結果。現(xiàn)代信息檢索系統(tǒng)通常遵循兩個步驟來平衡速度和準確性,其工作原理如下:

  1. 初始檢索是一種輕量級、高效的方法,比如 BM25或 DPR,可以快速檢索一小組候選文檔。這些方法不需要大量的計算,可以快速處理大量的數(shù)據。然而,它們的準確性是有限的,因為它們對文檔和查詢都沒有深入的理解。
  2. Reranking: 一旦初始文檔被選中,一個更強大的基于神經網絡的模型被用來重新排序這些候選項。這些重新排序模型通常基于諸如 BERT 之類的 Transformers,因為它們更深入地分析文檔和查詢之間的關系,所以更加精確。然而,由于它們的計算成本很高,因此從一開始就在大型數(shù)據集上使用它們將花費太長的時間。因此,它們只應用于在第一階段檢索到的較小文檔集。

圖片圖片

這種兩階段方法由于兼顧了效率和準確性而被廣泛使用。通過首先檢索較小的文檔集,系統(tǒng)避免了神經網絡的高計算成本,同時仍然受益于它們在Reranking中的高精度。

4. Reranking的實現(xiàn)方法

雖然有許多方法可以應用于Reranking,但基本上可以分為3類:相關性分類、 提煉查詢和文檔的表示和稠密式表達。

4.1 基于相關性分類的Reranking

一個最簡單的方法來處理文本排序是把它作為一個文本分類問題。這個想法是將每個文本分為“相關”和“不相關”兩類,然后根據每個文本屬于“相關”類別的可能性對結果進行排序。實際上,我們正在訓練一個模型來估計給定文本與用戶查詢相關的概率,然后根據這些概率對文本進行排序。

對于給定的查詢 q 和候選文本 d,該模型計算一個代表相關性的得分 s_i,表示為:

圖片圖片

但是這些候選文本是從哪里來的呢?考慮到典型文本語料庫的大小,將這個過程應用到語料庫中的每個文檔,這在計算上是不可行的。對每個用戶查詢的數(shù)百萬個文檔運行神經網絡推理,這將非常緩慢而且成本高昂。

大多數(shù)搜索系統(tǒng),包括那些使用 BERT 的系統(tǒng),都遵循檢索和Reranking的方法。這意味著系統(tǒng)不會對語料庫中的所有文檔運行 BERT,而是首先使用更快、更傳統(tǒng)的方法(比如 BM25,它依賴于關鍵字匹配)檢索一組更小的候選文本。這個初始階段稱為候選生成或第一階段檢索。

一旦檢索到候選項,BERT 就會通過計算每個候選項的相關性得分對他們進行重新排序。這個重新排名的步驟為搜索增加了更深層次的內容和理解,與最初的基于關鍵字的ranking相比,提高了搜索結果的質量。

例如,使用monoBert模型對查詢和每個候選文本進行結構化分析來實現(xiàn)關聯(lián)分類。對于每個查詢 q 和一個候選文檔 d,輸入序列的結構如下:

圖片圖片

其中,CLS是BERT 用來表示整個輸入的特殊標記;q是用戶的查詢,已有分詞標記;SEP用于分隔段的特殊標記;d _ i: 候選文本的token。這種結構化的輸入被稱為輸入模板,是BERT處理文本的關鍵部分。BERT然后為該序列中的每個token生成上下文向量表示。

MonoBERT 聚焦于 CLS 令牌的表示,它捕獲查詢和候選文本之間的總體關系。該表示方法通過一個單層完全連通的神經網絡生成候選文檔的相關分數(shù) s _ i。有趣的是,monoBERT 只使用 CLS 令牌的表示來計算相關性得分,而忽略了其他令牌的表示。這使模型既簡單又有效。

圖片圖片

MonBERT 的ranking模型通過輸入查詢和待評分的候選文本(由適當?shù)奶厥鈽擞洶鼑? ,使 BERT 適用于相關性分類。MonoBERT 接受一個文本序列作為輸入。這個序列包括特殊的標記和需要比較的內容。具體來說,它看起來像這樣:

[CLS], query, [SEP], document, [SEP]

CLS 和 SEP 是 BERT 使用的特殊標記,用于識別輸入的不同部分在哪里開始和結束。查詢是用戶輸入的文本,而文檔是被評估相關性的候選文本。查詢標記完全按照用戶輸入的內容獲取。當我們探索表達搜索的不同方式時,這個細節(jié)變得非常重要,比如搜索是一個簡單的標題還是一個更長的描述。查詢被標記為段 A,文檔被標記為段 B,這有助于模型理解每個段的角色。

一旦這個輸入序列準備好了,它就被傳遞給 BERT,它處理整個序列并為序列中的每個標記或單詞生成一個“上下文表示”。BERT 的工作是根據單詞出現(xiàn)的上下文來捕捉它們的意思。在 monoBERT 中,[ CLS ]充當整個序列的模型摘要。最后一步是將這個[ CLS ]令牌輸入一個簡單的神經網絡,以預測文檔與查詢的相關程度。輸出是一個分數(shù),告訴我們該文檔匹配的可能性。

這個將查詢和文檔傳遞給 BERT 進行比較的過程,稱為交叉編碼方法。雖然 monoBERT 使用[ CLS ]令牌進行相關性評分,但它忽略了其他token的表示。

要實現(xiàn)交叉編碼器reranking,可以參照以下步驟:

  1. 安裝必需庫,提供使用交叉編碼器所必需的工具。pip install -U sentence-transformers
  2. 導入并加載交叉編碼器, 器并加載預先訓練好的模型
  3. 文檔對進行打分: 創(chuàng)建查詢和檢索到的文檔對,然后使用交叉編碼器為它們打分
  4. 文檔reranking: 根據文檔的分數(shù)重新排序文檔,優(yōu)先排序最相關的文檔
from sentence_transformers import CrossEncoder 
cross_encoder = CrossEncoder('cross-encoder/ms-marco-MiniLM-L-6-v2'
pairs = [[query, doc] 
for doc in retrieved_documents] 
  scores = cross_encoder.predict(pairs) 
  print("Scores:") 
for score in scores:     
  print(score)
print("New Ordering:") 
for o in np.argsort(scores)[::-1]:     
  print(o+1)

MonoBERT 的一個局限是它難以處理較長的輸入文本。monoBERT有一個固定的輸入長度,這意味著它最適合于較短的文本。因此,雖然 monoBERT 可以有效地對段落長度的文本進行排序,但它還是難以處理完整的新聞文章等較長的文檔。它只能處理多達512個token的序列。由于它依賴于位置嵌入來理解令牌的順序,任何長于512個令牌的輸入都會丟失信息,并被視為一個隨機的單詞集合,從而導致模型失去對文本流動的感知。

BERT 的長度限制給長文本排序帶來了兩大挑戰(zhàn)——

(1)訓練

在訓練過程中最大的問題是,我們應該將文檔的哪一部分輸入到模型中?設想一個文檔,其中有幾個相關的句子分散在整個文檔中,或者整個文檔感覺像一個完整的包一樣相關。我們如何訓練 monoBERT 來處理這些不同的情況?如果想建立不同層次的相關性模型,就更為棘手。

由于查詢通常很短,而文檔很長,我們必須截斷文檔以適應模型。但如果我們切掉最重要的部分呢?雖然我們可以使用一些技巧,比如只向 BERT 提供文檔中包含查詢術語的部分,但這仍然讓我們猜測我們向模型提供的訓練數(shù)據是否實際上是文檔中最相關的部分。

(2)推理

在推理過程中,當根據搜索查詢對文檔進行排序時,我們面臨相同的長度限制。如果一個文檔太長,我們不能簡單地將它全部輸入 BERT。我們必須將文檔分割成塊并決定如何處理它們。例如,我們應該把它分成固定大小的部分,還是像句子一樣使用自然分割?這些塊應該重疊多少?

一旦我們有了塊,我們仍然需要一種方法來組合來自文檔不同部分的相關性得分。有兩種常見的方法: 

  • 分數(shù)聚合: 我們得到每個組塊的相關性分數(shù)并將它們組合(例如,通過獲得最高分)。
  • 表征聚合: 我們首先結合每個段落的表征,然后預測一個單一的相關分數(shù)。

為了處理 BERT 的長度限制,Dai 和 Callan 在2019年提出了一個解決方案,基本想法是這樣的:

  • 訓練: 將文件分成重疊的段落,并將相關文件中的每一段落視為相關文件,將不相關文件中的每一段落視為不相關文件。
  • 推理: 使用與上面相同的方法,將文檔分割成小塊,評估每個小塊的相關性,然后組合得分。

具體而言,文檔被劃分為150個單詞的片段,每個片段之間有75個單詞的重疊。對于每個段 ,模型像 monoBERT 一樣處理它: 查詢和段被合并并輸入 BERT,使用最終的[ CLS ]標記對段進行評分。在給每篇文章打分之后,我們可以用三種方法把分數(shù)組合起來:

  1. BERT–MaxP: 從任何一篇文檔中取得最高分。
  2. BERT–FirstP: 使用第一段的分數(shù)。
  3. BERT–SumP: 把所有段落的分數(shù)加起來。

通過將文檔分割成可管理的塊,然后聚合結果,我們可以對整個文檔進行排序,同時保持在 BERT 的輸入長度限制內。

在 monoBERT和 BERT-MaxP 等早期模型中,只使用[ CLS ]標記作為 BERT 用于匯總輸入的特殊標記。它用于計算文檔與查詢的匹配程度。但是,BERT 為查詢和文檔中的所有單詞生成了上下文嵌入。忽略這些嵌入看起來像是錯失良機,這正是 MacAvaney 在2019在開發(fā) CEDR (Leveraging Contextual Embedding Ranking)所解決的問題。

圖片圖片

CEDR 通過保留和使用 BERT 生成的上下文嵌入,這些嵌入可以提供關于文檔不同部分與查詢相關性的更細微信號。

為了處理超過 BERT 512 token限制的文檔,CEDR 將文檔分成更小的、可管理的塊。這些塊(包括查詢和特殊的分隔符標記)由 BERT 逐個處理。處理完所有數(shù)據塊后,CEDR 從每個數(shù)據塊獲取[ CLS ]表示,并對它們進行平均,以創(chuàng)建文檔級[ CLS ]表示(一種稱為平均池的技術)。CEDR 不僅僅使用[ CLS ]令牌,還保留每個塊的上下文嵌入,將這些內容連接起來,形成整個文檔的上下文嵌入完整序列。

一旦創(chuàng)建了文檔級嵌入,CEDR 通過比較每個文檔項的嵌入和每個查詢項的嵌入來構造相似矩陣。這些矩陣捕獲文檔不同部分與查詢不同部分的匹配程度,比單獨使用[ CLS ]令牌提供了更深入的相關性理解。

通過將 BERT 強大的嵌入到現(xiàn)有的神經排序模型中,CEDR 可以一塊一塊地處理較長的文檔,同時仍然保持模型端到端的可訓練性。這不僅解決了 BERT 的長度限制,而且允許 CEDR 充分利用 BERT 提供的豐富上下文信息,使其在文檔排序任務中具有優(yōu)勢。

4.2. 提煉查詢和文檔的表示

信息檢索中最大的挑戰(zhàn)之一是詞匯不匹配問題,即搜索內容和文檔使用不同的詞來描述同一個概念。

依賴于精確匹配的傳統(tǒng)ranking模型,如 BM25,如果相關文檔不包含查詢中的確切單詞,則無論相關性如何,都不會檢索到該文檔。基于神經網絡的ranking模型,特別是那些使用連續(xù)向量表示的模型,通過學習“軟”匹配提供了一個潛在的解決方案。他們不依賴于精確的詞語匹配,而是能夠識別詞語之間的語義關系。

然而,在這些模型中仍然存在一個主要的瓶頸即初始候選項的生成階段。大多數(shù)Ranking系統(tǒng)使用多階段過程,第一階段檢索候選文檔(通常使用像 BM25這樣的精確匹配系統(tǒng)) ,第二階段使用更強大的模型(如 BERT)對候選文檔進行Reranking。但是,如果第一階段由于缺乏匹配的術語而無法檢索到相關文檔,那么無論Reranking多么優(yōu)秀,都無法檢索到一開始沒有出現(xiàn)的內容。

雖然相關文檔與查詢沒有重疊的情況并不常見,但遺漏關鍵術語的情況很常見。這個問題的強力解決方案是簡單地增加在第一階段檢索到的候選文檔的數(shù)量,希望相關文檔最終會出現(xiàn)在更深入的結果中。但這種解決方案有其自身的缺點,即延遲的增加。隨著需要處理的候選文檔越來越多,Reranking變得越來越慢。

真正的解決方案是改進或增強查詢和文檔的表示方式,這樣它們就能更緊密地與用戶的搜索意圖保持一致。這可以通過諸如查詢擴展和文檔擴展等技術來實現(xiàn)。文檔擴展通過向文檔添加額外的術語來更充分地表示其內容或將其與潛在查詢聯(lián)系起來。它將同義詞或相關術語添加到查詢本身,可以增加查找可能使用不同單詞的相關文檔的機會。查詢擴展則相反,它將同義詞或相關術語添加到查詢本身,同樣可以增加找到可能使用不同單詞的相關文檔的機會。

這兩種方法都有助于解決詞匯表不匹配的問題,因為它們都增加了查詢和相關文檔之間匹配的可能性。

在大模型應用中,可以通過提示詞完成Query 變換(詳見大模型應用系列:Query 變換的示例淺析)。其中,一個Query改寫的示例如下:

rewrite_prompt= ChatPromptTemplate.from_template("""Provide a better search query for web search engine to answer the given question, end the queries with ’**’. Question: {x} Answer:""")

def parse_rewriter_output(message):
return message.content.strip('"').strip("**")
rewriter = rewrite_prompt| llm| parse_rewriter_output

@chain
def qa_rrr(input):
    # rewrite the query
    new_query = rewriter.invoke(input)
    # fetch relevant documents
docs = retriever.get_relevant_documents(new_query)
# format prompt
formatted = prompt.invoke({"context": docs, "question": input})
# generate answer
answer = llm.invoke(formatted)
return answer
# run
qa_rrr.invoke("what is langchain?")

請注意,示例中用一個LLM將用戶初始查詢重寫為更清晰的查詢,然后被傳遞給檢索器以獲取最相關的文檔。這種方法的缺點是,它在鏈中引入了額外的延遲,需要按順序執(zhí)行兩個LLM調用。

與query變換相比,使用查詢預測進行文檔擴展提供了一種不同的方法。文檔擴展并不新鮮,它已經存在了幾十年,但是2019年 Nogueira 等人引入 doc2query 后,使用神經網絡進行了演進。

Doc2query 使用序列到序列模型(一種為語言翻譯等任務設計的神經網絡) ,獲取一段文本并生成與文檔相關的查詢。這些查詢基于真實世界的數(shù)據,這些數(shù)據中成對的查詢和相關文檔被用來訓練模型。一旦模型得到訓練,它就可以預測語料庫中每個文檔的有哪些查詢。然后,這些預測的查詢將被添加到原始的文檔文本中。這些“擴展文檔”現(xiàn)在不僅包含原始內容,還包含潛在的搜索查詢,這提高了它們在初始搜索階段被檢索到的機會。在對這些擴展文檔進行索引和檢索時,系統(tǒng)能夠更好地檢索相關信息。這種技術可以無縫地集成到任何多階段排序流水線的第一階段檢索中,并且可以與我們前面討論的Reranking模型完美地一起工作。

Doc2query的實現(xiàn)示例代碼如下所示:

sample_doc = "xxx"

import pyterrier_doc2query
doc2query = pyterrier_doc2query.Doc2Query()
doc2query([{"docno" : "d1", "text" : sample_doc}])

Doc2Query 對象有一個 change ()函數(shù),它接受每個文檔的文本,并為該文本提出問題。生成的數(shù)據框架將有一個額外的“ querygen”列,其中包含生成的查詢。有很多方法可以將 Doc2query 引入 PyTerrier 檢索過程。我們可以通過傳遞另一個huggingface 模型名稱(或文件系統(tǒng)上模型的路徑)作為第一個參數(shù)來加載另一個T5模型。

doc2query = pyterrier_doc2query.Doc2Query('some/other/model')
import pyterrier as pt 
pt.init() 
dataset = pt.get_dataset("irds:abc") 
import pyterrier_doc2query 
doc2query = pyterrier_doc2query.Doc2Query(append=True) # append generated queries to the orignal document text 
indexer = doc2query >> pt.IterDictIndexer(index_loc) 
indexer.index(dataset.get_corpus_iter())

4.3 Reranking的稠密表達

深度學習給文本排名帶來的最大突破之一,是從依賴稀疏信號(主要依賴精確的關鍵詞匹配)轉向能夠捕捉單詞背后含義的連續(xù)密集表示。這一飛躍使我們能夠更自然、更靈活地建立相關性模型,解決諸如詞匯不匹配這樣的挑戰(zhàn)。

在基于稠密表達的檢索技術中,Ranking直接在矢量表示(通常由Transformer生成)上執(zhí)行。基于稠密表達檢索通過比較語義內容,本質上就是比較嵌入在這些向量中的“意義”,而不是僅僅匹配出現(xiàn)在查詢和文本中的詞,這代表了面向基于關鍵字檢索的一個重大轉變。

自從詞嵌入出現(xiàn)以來,稠密表達已經顯示出它們的潛力,這引發(fā)了我們現(xiàn)在所說的自然語言處理(NLP)中的“神經網絡革命”。單詞嵌入表明機器能夠理解單詞之間的關系,證明語言可以用一種捕捉意義的方式來表示,而不僅僅是表面量上的匹配。

然而,當我們把這個概念從單個單詞擴展到更大的文本塊(如短語、句子或整個文檔)時,事情就變得復雜起來,同樣的挑戰(zhàn)也出現(xiàn)在文本ranking/reranking中。

5. 基于大模型的Reranking實現(xiàn)示例

隨著大模型應用的普及,我們可以利用 GPT-4或國內的其他大語言模型以更細致的方式評估文檔的相關性,實現(xiàn)Reranking。基于 LLM 的Reranking工作流程如下:

  1. 初始檢索: 系統(tǒng)根據查詢檢索一組初始文檔。
  2. 查詢/文檔對的創(chuàng)建: 每個檢索到的文檔都與查詢配對。
  3. 得分: LLM 評估每一對并分配一個相關得分。
  4. reranking: 根據分數(shù)對文檔進行排序。
  5. 選擇: 選擇得分最高的文檔作為最終答復。

基于 LLM 的Reranking實現(xiàn)示例如下:

from langchain.docstore.document import Document
from langchain_openai import ChatOpenAI
from typing import List
from pydantic import BaseModel, Field
from langchain import PromptTemplate

class RatingScore(BaseModel):
    relevance_score: float = Field(..., descriptinotallow="The relevance score of a document to a query.")

def rerank_documents(query: str, docs: List[Document], top_n: int = 3) -> List[Document]:
    prompt_template = PromptTemplate(
        input_variables=["query", "doc"],
        template="""On a scale of 1-10, rate the relevance of the following document to the query. Consider the specific context and intent of the query, not just keyword matches.
        Query: {query}
        Document: {doc}
        Relevance Score:"""
    )
    
    llm = ChatOpenAI(temperature=0, model_name="gpt-4", max_tokens=4000)
    llm_chain = prompt_template | llm.with_structured_output(RatingScore)
    
    scored_docs = []
    for doc in docs:
        input_data = {"query": query, "doc": doc.page_content}
        score = llm_chain.invoke(input_data).relevance_score
        try:
            score = float(score)
        except ValueError:
            score = 0  # Default score if parsing fails
        scored_docs.append((doc, score))
    
    reranked_docs = sorted(scored_docs, key=lambda x: x[1], reverse=True)
    return [doc for doc, _ in reranked_docs[:top_n]]

在本示例中,LLM 評估每個文檔與查詢的相關性,對它們進行評分,并根據這些評分選擇最高的文檔。

6. 小結

通過回顧信息檢索的歷史,我們可以了解到從Ranking到Reranking的演進過程。如今,Reranking是大模型應用中RAG 系統(tǒng)的一個非常關鍵的步驟,其核點是提高最初檢索到的文件的相關性和質量。在最初的檢索過程之后,對這些文檔進行重新排序和重新組織,目標是確定最相關信息的優(yōu)先次序,確保在作出回應或決策時使用盡可能好的數(shù)據。

責任編輯:武曉燕 來源: 喔家ArchiSelf
相關推薦

2024-12-23 00:27:40

2024-06-18 08:21:31

2025-03-06 07:28:31

DeepSeek大模型人工智能

2025-02-20 09:27:46

2025-11-04 07:15:00

LangChain大模型AI

2024-08-26 11:31:15

2025-04-27 02:22:00

MCP大模型Agent

2025-03-03 08:53:23

2025-01-26 15:35:01

AIOps人工運維ChatOps

2025-10-16 07:45:31

2024-05-28 09:24:32

2025-11-11 02:11:00

大模型自動化標注AI

2023-12-29 13:45:57

2024-02-05 14:12:37

大模型RAG架構

2025-01-16 10:11:58

2024-06-17 07:46:01

2024-05-06 07:58:23

MoE模型系統(tǒng)

2015-04-20 14:27:40

大數(shù)據奇特應用

2024-08-05 09:18:21

點贊
收藏

51CTO技術棧公眾號

欧美一区三区二区在线观看| 97色在线观看| 91插插插影院| 91av久久| 国产精品三级av| 97人摸人人澡人人人超一碰| 国产精品一区二区三区四| 日韩一区二区中文| 亚洲国产成人精品电影| 天天爽夜夜爽一区二区三区| 黄色影院在线看| 中文字幕第一区综合| 国产高清不卡av| 中文字幕视频免费观看| 亚洲激情网址| 久久综合色88| 中文字幕第20页| 在线精品视频一区| 欧美三区在线视频| 国产精品专区在线| av在线播放观看| 国产喷白浆一区二区三区| 成人综合国产精品| 一区二区三区在线观看av| 欧美久久久久| 久久国产一区二区三区| 国产精品815.cc红桃| 天堂va欧美ⅴa亚洲va一国产| 在线精品视频免费播放| 欧美黑人经典片免费观看| caopo在线| 国产精品久久久久影院| 欧美日韩国产综合在线| 日本高清视频免费观看| 国产传媒日韩欧美成人| 国产中文日韩欧美| 久久精品国产亚洲av麻豆蜜芽| 亚洲二区在线| 欧美劲爆第一页| 强乱中文字幕av一区乱码| 日韩成人激情| 一区二区三区视频观看| aa一级黄色片| 欧美网色网址| 日韩av中文字幕在线| 韩国三级在线看| 青草伊人久久| 欧美一卡2卡三卡4卡5免费| 欧美日韩精品区别| 亚洲伦理久久| 91精品国产色综合久久| 成人黄色一级大片| 国产美女亚洲精品7777| 69成人精品免费视频| 久久成年人网站| 亚洲欧洲一二区| 91精品国产综合久久久久| 69久久久久久| 99久久久国产| 欧美成人女星排名| 亚洲欧美日韩色| 欧美激情99| 亚洲免费福利视频| 免费视频91蜜桃| 日韩欧美国产精品综合嫩v| 日韩中文综合网| 粉嫩av性色av蜜臀av网站| 欧美片第1页综合| 国内偷自视频区视频综合| 你懂的国产视频| 日韩在线一区二区三区| 国产精品亚发布| 国产sm主人调教女m视频| 国产白丝精品91爽爽久久| 国产女主播一区二区| 四虎精品在线| 日本一区二区三区免费乱视频| 亚洲午夜精品福利| 18加网站在线| 精品人伦一区二区三区蜜桃免费| 亚洲人成色77777| 祥仔av免费一区二区三区四区| 欧美精品丝袜中出| 色悠悠在线视频| 免费av一区| 菠萝蜜影院一区二区免费| 精品视频久久久久| 天堂精品中文字幕在线| 国产自产女人91一区在线观看| 精品国自产拍在线观看| 91美女蜜桃在线| 亚洲一区二区三区色| 欧美wwww| 欧美日韩综合在线免费观看| 成人做爰69片免费| 精品美女视频| 欧美极品美女电影一区| 在线视频精品免费| 成人av第一页| 一区二区三区四区视频在线观看| 日本动漫同人动漫在线观看| 欧洲色大大久久| 91九色蝌蚪porny| 成人精品中文字幕| 午夜精品理论片| 国产精品一级二级| 久久色视频免费观看| 7777在线视频| 成人自拍视频网| 亚洲第一黄色网| 在线看的片片片免费| av成人激情| 亚洲中国色老太| h视频网站在线观看| 五月婷婷综合激情| 污免费在线观看| 成人精品影院| 日韩美女写真福利在线观看| 丰满岳乱妇国产精品一区| 亚洲国产精品v| 国产男女无遮挡| 久久资源综合| 久久99精品久久久久久噜噜 | 欧美日韩一视频区二区| 国产精品入口尤物| 久久手机免费观看| 狠狠躁夜夜躁人人躁婷婷91 | 国内精品一区二区三区四区| 国产亲伦免费视频播放| 国产精品青草久久| 在线免费视频a| 久久99青青| 欧美一乱一性一交一视频| 黄色一级a毛片| 一二三四区精品视频| 一级片黄色免费| 水蜜桃久久夜色精品一区| 国产精品wwwwww| 日本人妖在线| 一本久久综合亚洲鲁鲁五月天| 影音先锋资源av| 韩国av一区| 国产精品视频500部| 欧洲一区二区三区| 精品国产一区久久| 国产一级片免费观看| 懂色av噜噜一区二区三区av| 丁香六月激情婷婷| www.久久东京| 国模叶桐国产精品一区| 天堂v在线观看| 精品国产乱码久久久久酒店| 美女又爽又黄免费| 欧美亚洲网站| 秋霞毛片久久久久久久久| 色天使综合视频| 视频在线观看99| 91在线视频国产| 曰韩精品一区二区| 天天躁日日躁狠狠躁免费麻豆| 国产精品激情| 国内精品久久国产| 波多野结衣久久精品| 正在播放亚洲1区| 亚洲综合精品视频| 一区二区三区四区中文字幕| 亚洲熟女一区二区| 老司机精品福利视频| 亚洲精品不卡| 日韩精品久久久久久久软件91 | 亚州一区二区三区| 中文字幕日韩欧美在线视频| 国产精品视频无码| 亚洲不卡一区二区三区| 51妺嘿嘿午夜福利| 国产综合色产在线精品| 狠狠精品干练久久久无码中文字幕 | 在线欧美不卡| 日韩精品一区二区三区四区五区 | 精品亚洲乱码一区二区 | 欧美美女黄视频| 欧美日韩在线观看免费| 91性感美女视频| 91亚洲免费视频| 在线日本成人| 亚洲日本精品一区| 2021年精品国产福利在线| 欧美亚洲在线观看| 激情成人四房播| 日韩高清av一区二区三区| 一级黄色片免费| 午夜在线成人av| 精品女人久久久| 99re在线精品| 日日干日日操日日射| 国产日韩一区二区三区在线| 亚洲综合五月天| 琪琪久久久久日韩精品| 成人午夜两性视频| 亚洲一区站长工具| 欧美成人免费在线观看| 精品亚洲成a人片在线观看| 日韩美一区二区三区| 成人黄色片在线观看| 亚洲福利视频三区| 日韩三级在线观看视频| 国产亚洲成年网址在线观看| 日本精品一二三区| 久久精品国产999大香线蕉| 国产黄色一级网站| 禁久久精品乱码| 艳母动漫在线免费观看| 国产探花在线精品| 精品卡一卡二| 99久久免费精品国产72精品九九| 国产精品亚洲激情| av一区在线| 欧美中文字幕精品| 2018av在线| 欧美片一区二区三区| 在线观看av黄网站永久| 亚洲欧美一区二区三区在线| 人妻视频一区二区三区| 日韩亚洲欧美成人一区| 国产精品女人久久久| 欧美性色综合网| 中文字幕在线看人| 精品久久久久久中文字幕大豆网| 久久av高潮av无码av喷吹| 欧美国产成人精品| 四季av中文字幕| 国产午夜精品一区二区| 最新中文字幕视频| 91香蕉视频污| 波多野结衣一本| 久久综合九色综合欧美98| 成人性生活免费看| www.日韩av| 在线观看国产网站| 99精品欧美一区| 99久久人妻无码中文字幕系列| 成人午夜免费av| 日本一区二区免费视频| 成人黄色网址在线观看| 亚洲熟女一区二区| 91蜜桃传媒精品久久久一区二区| 添女人荫蒂视频| 久久亚洲欧美国产精品乐播| 三上悠亚ssⅰn939无码播放| 91视频精品在这里| 亚洲熟妇一区二区三区| 国产欧美日韩在线看| 蜜臀久久99精品久久久久久| 亚洲国产高清在线观看视频| 国产乱子轮xxx农村| 国产精品福利影院| 国产极品国产极品| 亚洲成av人片在线观看| 特级做a爱片免费69| 在线观看日韩av先锋影音电影院| 进去里视频在线观看| 欧美日韩久久久| av中文字幕免费在线观看| 精品国产乱码91久久久久久网站| 天堂成人在线视频| 亚洲美女av电影| 欧美性videos| 久久99久久99精品免观看粉嫩| 波多野结衣中文在线| 青青a在线精品免费观看| 成人精品国产| 亚洲综合中文字幕在线| 久久精品亚洲成在人线av网址| 欧美久久久久久| 99久久亚洲精品蜜臀| 少妇大叫太大太粗太爽了a片小说| 日韩午夜黄色| 9久久婷婷国产综合精品性色| 国产尤物一区二区在线| 天堂www中文在线资源| 欧美经典一区二区三区| 欧美精品色哟哟| 欧美日韩午夜激情| 国产一区二区在线不卡| 亚洲级视频在线观看免费1级| 国产精品久久久久久久龚玥菲 | 国产精品99久久久久久久女警| 成年女人免费视频| 国产性色一区二区| 免费看一级一片| 色婷婷久久综合| www.日本在线观看| 亚洲网在线观看| 99热99re6国产在线播放| 国产精品久久久久免费a∨大胸 | 97免费在线观看视频| 欧美区一区二区三区| 图片区 小说区 区 亚洲五月| 日韩一区二区福利| 一个人www视频在线免费观看| 国产日韩视频在线观看| 亚洲美女15p| 成年人深夜视频| 久久精品国产网站| 中文字幕一区二区人妻在线不卡| 综合分类小说区另类春色亚洲小说欧美| 日产精品久久久久| 日韩一级黄色大片| 午夜看片在线免费| 日本午夜人人精品| 超碰在线亚洲| 视色,视色影院,视色影库,视色网 日韩精品福利片午夜免费观看 | 69sex久久精品国产麻豆| 精品在线你懂的| 五月天综合视频| 欧美日韩免费看| 亚洲奶汁xxxx哺乳期| 久久精品99无色码中文字幕| 久久久人成影片一区二区三区在哪下载 | 波多野吉衣在线视频| 亚洲欧美综合另类在线卡通| 日韩精品在线一区二区三区| 亚洲精选中文字幕| 美女在线视频免费| 国产精品久久精品视| 欧美日韩少妇| 制服.丝袜.亚洲.中文.综合懂| 中文字幕在线不卡| 在线视频播放大全| 中文精品99久久国产香蕉| 手机看片久久| 欧美精品亚洲精品| 亚洲综合国产| 毛片网站免费观看| 日韩欧美国产中文字幕| 欧美色图另类| 日韩美女免费线视频| 精品国产一区二区三区四区| 久久美女福利视频| 久久久蜜桃精品| 天干夜夜爽爽日日日日| 亚洲深夜福利视频| 国产综合色区在线观看| 日韩电影免费观看在| 日韩国产欧美在线观看| 久久久久久久久福利| 欧美日韩午夜精品| 国产激情在线| 99re视频在线观看| 亚洲三级观看| 国产全是老熟女太爽了| 欧美专区日韩专区| 黄色网址在线免费播放| 亚洲tv在线观看| 欧美三级网页| 男男做爰猛烈叫床爽爽小说| 欧美性xxxx极品高清hd直播| 暖暖视频在线免费观看| 国产精品成人品| 久久精品一区二区不卡| 特黄特色免费视频| 狠狠躁夜夜躁人人躁婷婷91| wwwxxx在线观看| 91亚洲精品视频| 亚洲国内自拍| a级片在线观看| 69堂成人精品免费视频| 黄污视频在线观看| 日韩高清av| 国产精品一区二区久久不卡| 日韩成年人视频| 一色桃子一区二区| 免费一区二区三区在线视频| 亚洲国产成人精品无码区99| 久久久久久99久久久精品网站| 中文字幕 自拍偷拍| 欧美大成色www永久网站婷| 久9re热视频这里只有精品| 国产99久久九九精品无码| 国产精品久线在线观看| 人妻无码中文字幕免费视频蜜桃| 日本成熟性欧美| 一区二区三区网站| 国产偷人妻精品一区| 91精品国产综合久久久蜜臀图片| a√中文在线观看| 亚洲看片网站| 成a人片亚洲日本久久| 在线观看免费视频一区| 国模精品系列视频| 99久久久久国产精品| 极品白嫩丰满美女无套| 宅男噜噜噜66一区二区66| 久热在线观看视频| 国产精品99久久久久久大便| av资源网一区| 国产成人麻豆精品午夜在线| 国产成人欧美在线观看| 狠狠88综合久久久久综合网| 狂野欧美性猛交|