現代信息檢索系統和搜索引擎普遍采用兩階段檢索架構,在人工智能應用中也被稱為檢索增強生成(Retrieval-Augmented Generation, RAG)。在初始檢索階段,系統采用高效的檢索方法,包括詞匯檢索算法(如BM25)或密集嵌入檢索器(基于近似最近鄰算法),為給定查詢獲取初始候選文檔或段落集合。這一階段優先考慮檢索速度而非完整性,因此常常返回包含噪聲或不相關的結果,可能導致下游任務產生錯誤答案或幻覺問題。第二階段即重排序過程,通過重新計算候選文檔的相關性分數并生成更精確的排序列表來優化檢索結果。傳統重排序方法通常使用強大的語言模型(交叉編碼器或大型Transformer模型)獨立評估每個查詢-文檔對,雖然計算成本更高,但顯著提升了檢索精度。
但是當面對復雜信息需求或需要上下文知識時,傳統方法面臨重大挑戰。基于大型語言模型的重排序器難以直接整合結構化知識(如知識圖譜中的關系信息)或多個檢索文檔間的交互關系。這一局限性催生了基于圖的重排序這一新興研究方向。該方法利用圖表示和圖神經網絡來挖掘檢索項目間或查詢與內容間的關聯性。其核心思想是將檢索得到的文檔以及相關上下文信息(實體、術語等)建模為圖結構中的節點,邊則表示有意義的關系,包括內容相似性、語義相關性或知識連接。隨后,圖神經網絡或圖算法在此結構上傳播信息,計算出考慮結果全局結構的改進相關性分數,而非僅僅孤立地評估每個文檔。通過整合結構化上下文,基于圖的重排序旨在克服密集檢索器和交叉編碼器的局限性,例如發現初始檢索中遺漏的相關文檔,或通過整合有助于闡明查詢意圖的背景知識來提升檢索效果。
本文將深入探討Zaoad等人于2025年發表的論文《Graph-Based Re-ranking: Emerging Techniques, Limitations, and Opportunities》中提出的基于圖的重排序方法,并詳細介紹其實現過程。我們將闡述使用圖進行重排序的動機、基于圖的重排序器的通用架構以及論文中強調的創新方法。此外,我們將討論這些基于圖的方法如何改進傳統密集檢索,并展示相關性能基準測試結果。最后,我們將分析這個快速發展的信息檢索領域的當前局限性和未來發展方向。
基于圖的重排序工作流程
從系統架構角度看,基于圖的重排序通過在檢索和最終排序之間引入圖構建和圖神經網絡推理步驟,擴展了標準的兩階段信息檢索流程。該論文概述了典型的基于圖的重排序工作流程,包含以下關鍵步驟:
初始檢索階段,輸入查詢通過檢索器(如BM25或密集向量檢索器)處理,返回前n個候選文檔或段落,產生基于粗略相關性的初始排序列表。編碼階段,查詢和檢索文檔由編碼器(通常基于Transformer架構或嵌入模型)處理,獲得捕獲查詢和內容語義特征的向量表示。相關性匹配階段,相關性匹配器計算查詢嵌入與各文檔嵌入間的相似性分數,這些分數用于構建連接查詢與文檔或文檔間的圖結構邊。換言之,我們構建一個以查詢和文檔為節點的圖,邊表示某種形式的相關性或交互關系,例如邊權重可以是兩個文檔向量間的余弦相似度,或當相似度高于閾值時的二元連接。
生成的圖及其編碼的節點和加權邊關系被輸入到基于圖的重排序器模型中。這通常是一個能夠在邊上傳播信息的圖神經網絡。例如圖神經網絡可以通過聚合圖中鄰居節點(可能包括查詢節點或其他文檔)的特征來迭代更新每個文檔的節點表示。在某些情況下,基于圖的模型可能包含多個組件,例如圖神經網絡與神經評分層的結合。最終重評分階段,圖模型為每個候選文檔生成相關性分數,此時不僅考慮孤立的查詢-文檔相似性,還考慮相關文檔或知識連接的上下文信息。基于這些分數,系統輸出重排序后的文檔列表作為最終結果。
該工作流程在論文圖1中得到詳細說明,其中查詢被編碼,初始檢索結果用于構建查詢和文檔節點的圖(邊基于相似性),然后圖神經重排序器計算新的相關性分數,從而生成重新排序的列表。其直觀理念是,通過將檢索候選表示為圖結構,重排序器能夠利用相似文檔簇、不同子主題或跨文檔的邏輯推理鏈等模式,這些是標準逐點重排序器可能忽略的重要信息。
圖構建策略:文檔級與實體級圖表示
在基于圖的重排序中,如何從查詢和檢索文檔構建圖結構是一個關鍵的設計決策。該綜述論文指出,當前方法已探索了多種圖表示方式,大致可分為兩個主要類別:
文檔級圖表示中,節點代表完整的文檔或段落,邊表示文檔間的關系。這些關系通常基于內容相似性或其他信號,如引文鏈接或聚類關系。相似性圖是一個簡單的文檔圖示例,其中每個檢索文檔作為一個節點,邊連接具有高文本相似性的文檔(通常通過嵌入余弦相似度衡量)。另一個例子是連接共享特定關鍵詞或主題的文檔。通過使用文檔級圖,圖神經網絡重排序器可以強化相關文檔簇獲得更高的相關性,基于這樣的假設:如果多個文檔彼此相似且其中一個相關,那么其他文檔也可能相關。文檔圖也可以從外部結構構建,例如為集合中的所有文檔預先計算語料庫范圍的相似性圖,將每個文檔連接到其最近鄰居,然后針對特定查詢的頂部結果對此圖進行修剪或子集化。
實體級圖表示中,節點代表更細粒度的單元,如從文檔和查詢中提取的特定實體、概念甚至術語,邊表示這些實體間的語義或基于知識的關系。知識圖譜的使用是一個突出例子:節點是查詢或文檔中提到的實體(人物、地點、概念),邊是來自外部知識庫的關系(例如醫學概念間的"symptom_of"關系)。通過共享實體和已知關系連接檢索文本,重排序器可以注入背景知識并在該上下文中評估相關性。另一種術語級方法是在文檔與其包含的關鍵術語或實體間創建二分圖,從而建模哪些文檔共享重要術語。
一些重排序方法甚至結合這兩個層面,創建多層圖或使用一個層面為另一個層面提供信息。該綜述強調,構建正確的圖表示至關重要,因為選擇包含哪些節點和邊會極大影響模型性能,它決定了圖神經網絡可以獲得哪些關系信息。由于這是一個新興領域,研究人員一直在針對每個任務發明自己的圖構建技術,例如選擇連接多少個鄰居,如何通過相似性分數為邊加權,是否將查詢作為節點包含在內等等。這種缺乏標準化的現狀使得直接比較方法變得困難,該論文建議社區應朝著通用基準和圖構建最佳實踐方向發展。
構建圖后,我們需要初始化節點特征。通常,每個文檔節點可能以來自文本編碼器的特征開始,如文檔嵌入或查詢與文檔嵌入的組合。一些方法用權重(如相似性分數)初始化邊,或將這些權重作為特征合并。有了圖和初始特征后,我們便應用圖神經網絡或相關算法進行處理。
圖神經網絡重排序器:架構設計與方法分析
圖神經網絡是許多基于圖的重排序模型的核心組件。圖神經網絡通過消息傳遞機制,聚合來自鄰居節點的信息來迭代更新每個節點的表示,從而將關系上下文注入到表示中。經過多層圖神經網絡處理后,每個文檔節點的嵌入不僅編碼文檔內容,還編碼其與圖中其他文檔或實體的關系信息。隨后,這種豐富的嵌入可用于計算最終的相關性分數,例如通過評分函數,甚至是將節點嵌入映射到相關性標量的簡單線性層。
不同的重排序模型在架構設計方面存在差異。該綜述論文根據傳統信息檢索排序策略(逐點、逐對或逐列表重排序)以及圖中建模的信息類型對方法進行分類。下面我們將討論每個類別中基于圖的重排序器的關鍵示例,重點介紹其獨特的架構和創新特點。
逐點基于圖的重排序方法
逐點重排序意味著每個文檔的相關性獨立評估,盡管可能融入來自圖的上下文信息。圖結構用于增強每個文檔的特征或分數,但最終的相關性分數仍是單個文檔與查詢的函數。許多圖重排序器遵循此策略,最終為每個文檔生成獨立的分數。
PassageRank是2020年提出的一種早期針對段落的圖重排序方法。PassageRank構建有向圖,其中每個段落作為節點,邊連接段落,權重等于其內容相似性。該方法在此圖上應用PageRank算法的變體來計算每個段落的重要性分數,其假設是連接到許多其他相關段落的段落本身也可能相關。這些基于圖的分數與基于BERT的排序器結合使用以產生最終排序。本質上,PassageRank引入了使用圖中心性作為重排序特征的思想。
**圖自適應重排序(GAR)**于2022年提出,解決了兩階段檢索的重要局限性。重排序器只能對第一階段檢索到的文檔進行重新評分,如果明顯相關的文檔在初始檢索中被遺漏,它就永遠沒有機會被發現。GAR通過使用預先計算的文檔相似性圖迭代擴展候選集來解決這個召回率限制。GAR假設存在語料庫圖,其中每個文檔是節點,邊連接相似的文檔(例如基于嵌入余弦相似度)。該方法從初始的前k個結果開始,然后在多個輪次中重新排序當前池(使用神經重排序器),在語料庫圖中找到頂部結果的鄰居新文檔,并將這些鄰居添加到池中。通過這樣做直到達到預算(要考慮的固定數量的文檔),GAR可以引入第一次檢索可能遺漏的相關文檔,從而提高召回率。這個想法植根于信息檢索中的聚類假設:相關文檔往往彼此相似,因此如果檢索到一個相關項,其在相似性圖中的近鄰也可能相關。GAR的創新之處在于將此作為重排序中的反饋循環。
文檔內聚圖由Sarwar和O’Riordan于2021年提出,是另一種逐點方法,側重于對文檔內段落間的內聚性進行建模。該方法指出,如果文檔的內部段落都圍繞同一主題(高內聚性),則該文檔可能與集中的查詢更相關,而如果文檔的段落跨越多個主題,則其相關性可能較低。他們構建圖,其中節點是文檔的段落,邊捕獲段落間的語義相似性。平均邊權重定義文檔的內聚性分數,該分數可用于重排序。這種方法實質上將圖建模引入單個文檔內部以評估主題一致性,通過偏好內聚性文檔來改進排序。
**圖神經重排序(GNRR)**是Di Francesco等人于2024年提出的最新方法,是在初始檢索派生的文檔級圖上使用圖神經網絡的有力示例。在GNRR中,標準檢索器(使用BM25和TCT-ColBERT編碼器)為查詢獲取前1000個文檔。然后,通過獲取這些頂部候選文檔并根據語料庫級相似性圖(每個文檔連接到1000個文檔中的最近鄰居)將它們連接起來,從而構建查詢誘導子圖。每個文檔節點的初始特征通過文檔嵌入和查詢嵌入的逐元素乘積設置,以便特征反映查詢詞在文檔中的重要性。隨后GNRR在此子圖上應用圖神經網絡:隨著圖神經網絡傳播消息,文檔與其相似鄰居共享信息,有效地在評分中對文檔間關系進行建模。同時,GNRR使用前饋網絡獨立計算每個查詢-文檔對的相關性分數(類似不考慮鄰居的逐點分數)。最后,圖神經網絡和獨立多層感知器的輸出被組合(連接和評分)以產生每個文檔的最終相關性分數。這種組合確保模型同時考慮文檔的獨立相關性及其在其他候選文檔中的上下文。GNRR表明,以這種方式整合語料庫圖可以提高排序質量,尤其是在考慮相似文檔有助于解決的查詢(如多方面查詢)上。該方法實質上訓練圖神經網絡,如果文檔的鄰居看起來也與查詢相關,則向上調整該文檔的分數,這是一個強大的重排序信號。
其他逐點圖神經網絡模型引入了獨特的圖構建或圖神經網絡架構。例如,G-RAG集成了抽象意義表示圖:它將文本解析為語義圖,并通過抽象意義表示圖中的實體連接查詢和文檔,然后沿著查詢和文檔節點間的最短路徑聚合特征以優化文檔的表示。因此,該模型在最終評分之前使用語義知識圖來豐富文檔嵌入。另一種方法MiM-LiM構建混合文檔圖,其中包括文檔間鏈接和文檔內(段落級)鏈接,然后使用圖注意力網絡傳播信息并改進段落排序。IDR(迭代文檔重排序)構建以實體為中心的圖,如果文檔共享實體(人、地點等),則將它們連接起來。該方法在此圖上應用圖注意力網絡來更新實體節點表示,然后通過Transformer將信息融合回文檔表示中,有效地在對文檔評分之前執行多文檔推理。這些變體展示了基于圖的重排序的多功能性:通過選擇不同的圖節點(文檔、段落、實體)和邊(相似性、共現、語義關系),研究人員可以捕獲相關性的不同方面。共同的主題是,所有這些逐點方法最終都為每個文檔輸出相關性分數,但該分數是由豐富的關系網絡提供的。
代碼實現:基于圖的重排序實踐
為了更好地理解基于圖的重排序的內部工作原理,我們使用Python和PyTorch Geometric演練一個簡化示例。該示例使用BM25和Sentence-BERT進行初始檢索和嵌入,模擬基本的檢索場景,根據檢索文檔間的余弦相似性構建圖,并應用基于圖卷積網絡的重排序器。
此示例專為教學目的而設計,突出了核心階段:初始檢索、圖構建、圖神經網絡評分和重排序。在實際系統中,數據集和模型會更復雜,但結構保持相似。
importnumpyasnp
fromrank_bm25importBM25Okapi
fromsentence_transformersimportSentenceTransformer
importtorch
importtorch.nnasnn
importtorch.nn.functionalasF
fromtorch_geometric.nnimportGCNConv
fromtorch_geometric.dataimportData
fromsklearn.metrics.pairwiseimportcosine_similarity
importwarnings
warnings.filterwarnings("ignore") # 抑制警告以獲得更清晰的輸出# 步驟 1:合成語料庫和查詢
corpus= [ "The theory of relativity was developed by Albert Einstein in 1915.", "Einstein's work on general relativity revolutionized physics.", "Quantum mechanics emerged in the early 20th century with contributions from Planck and Heisenberg.", "Special relativity describes the behavior of objects moving at high speeds.", "The history of physics includes major discoveries by Newton and Einstein."
]
query="What is the theory of relativity?" # 合成相關性標簽 (1 = 相關, 0 = 不太相關)
relevance_labels= {0: 1, 3: 1, 1: 1, 4: 0, 2: 0} # 文檔 0, 3, 1 相關;文檔 4, 2 不太相關# 步驟 2:使用 BM25 進行初始檢索
tokenized_corpus= [doc.lower().split() fordocincorpus]
tokenized_query=query.lower().split()
bm25=BM25Okapi(tokenized_corpus)
bm25_scores=bm25.get_scores(tokenized_query)
k=4
top_k_indices=np.argsort(bm25_scores)[::-1][:k]
initial_ranking= [(idx, corpus[idx], bm25_scores[idx]) foridxintop_k_indices]
print("Initial BM25 Ranking:")
foridx, doc, scoreininitial_ranking: print(f"Doc {idx}: {doc} (Score: {score:.4f})") # 步驟 3:編碼文檔和查詢
model=SentenceTransformer('all-MiniLM-L6-v2')
document_embeddings=model.encode(corpus, convert_to_tensor=True, show_progress_bar=False)
query_embedding=model.encode([query], convert_to_tensor=True, show_progress_bar=False)[0]
initial_scores=cosine_similarity(query_embedding.unsqueeze(0).cpu().numpy(), document_embeddings.cpu().numpy())[0]
print("\nInitial Cosine Similarity Scores:")
foridx, scoreinenumerate(initial_scores): print(f"Doc {idx}: {score:.4f}") # 步驟 4:圖構建
document_embeddings_np=document_embeddings.cpu().numpy()
selected_embeddings_np=document_embeddings_np[top_k_indices].copy()
print("\nSelected embeddings strides:", selected_embeddings_np.strides)
similarity_matrix=cosine_similarity(selected_embeddings_np)
print("\nSimilarity Matrix:")
foriinrange(k): print([f"{similarity_matrix[i, j]:.4f}"forjinrange(k)]) # 使用 k-NN (2 個鄰居) 構建邊
edge_index= []
edge_weight= []
added_pairs=set()
foriinrange(k): sim_scores=similarity_matrix[i].copy() sim_scores[i] =-1 # 排除自身top_neighbors=np.argsort(sim_scores)[::-1][:2] # 前 2 個鄰居forneighborintop_neighbors: pair=tuple(sorted([i, neighbor])) ifpairnotinadded_pairs: edge_index.append([i, neighbor]) edge_index.append([neighbor, i]) edge_weight.append(similarity_matrix[i, neighbor]) edge_weight.append(similarity_matrix[i, neighbor]) added_pairs.add(pair) ifnotedge_index: print("Warning: No edges formed. Using dummy edge.") # 警告:未形成邊。使用虛擬邊。edge_index=torch.tensor([[0, 0]], dtype=torch.long).t().contiguous() edge_weight=torch.tensor([1.0], dtype=torch.float)
else: edge_index=torch.tensor(edge_index, dtype=torch.long).t().contiguous() edge_weight=torch.tensor(edge_weight, dtype=torch.float)
print("\nEdges formed:", edge_index.t().tolist()) # 節點特征:將文檔嵌入與查詢相關性結合起來
node_features= []
foridxintop_k_indices: doc_query_feature=document_embeddings[idx] *query_embedding node_features.append(doc_query_feature.cpu().numpy())
node_features=torch.tensor(node_features, dtype=torch.float) graph_data=Data(x=node_features, edge_index=edge_index, edge_attr=edge_weight) # 步驟 5:用于重排序的圖神經網絡
classGNNReRanker(nn.Module): def__init__(self, input_dim, hidden_dim): super(GNNReRanker, self).__init__() self.conv1=GCNConv(input_dim, hidden_dim) self.conv2=GCNConv(hidden_dim, hidden_dim) self.scorer=nn.Linear(hidden_dim+input_dim, 1) self.dropout=nn.Dropout(0.5) # 增加 dropoutdefforward(self, data): x, edge_index, edge_weight=data.x, data.edge_index, data.edge_attr x=self.conv1(x, edge_index, edge_weight) x=F.relu(x) x=self.dropout(x) x=self.conv2(x, edge_index, edge_weight) x=F.relu(x) x=self.dropout(x) x=torch.cat([x, data.x], dim=-1) scores=self.scorer(x).squeeze(-1) returnscores # 初始化 GNN 和優化器
input_dim=node_features.shape[1]
hidden_dim=128
gnn_model=GNNReRanker(input_dim, hidden_dim)
optimizer=torch.optim.Adam(gnn_model.parameters(), lr=0.01, weight_decay=1e-4) # L2 正則化# 步驟 6:使用早停法訓練 GNN
gnn_model.train()
best_loss=float('inf')
patience=10
patience_counter=0
forepochinrange(200): optimizer.zero_grad() scores=gnn_model(graph_data) loss=0 num_pairs=0foriinrange(k): forjinrange(i+1, k): idx_i, idx_j=top_k_indices[i], top_k_indices[j] # 如果文檔 i 比文檔 j 更相關,則 score_i 應該 > score_jifrelevance_labels.get(idx_i, 0) >relevance_labels.get(idx_j, 0): loss+=torch.relu(1- (scores[i] -scores[j])) num_pairs+=1elifrelevance_labels.get(idx_i, 0) <relevance_labels.get(idx_j, 0): loss+=torch.relu(1- (scores[j] -scores[i])) num_pairs+=1ifnum_pairs>0: loss=loss/num_pairs else: # 處理沒有有效對或所有相關性相同的情況# 后備方案:嘗試將分數直接與相關性匹配(不理想,但避免 NaN)target_scores=torch.tensor([relevance_labels.get(top_k_indices[i], 0.0) foriinrange(k)], dtype=torch.float)loss=F.mse_loss(scores, target_scores)loss.backward() optimizer.step() ifepoch%20==0: print(f"Epoch {epoch}, Loss: {loss.item():.4f}") ifloss.item() <best_loss: best_loss=loss.item() patience_counter=0 else: patience_counter+=1 ifpatience_counter>=patience: print(f"Early stopping at epoch {epoch}") break # 步驟 7:使用訓練好的 GNN 進行推理
gnn_model.eval()
withtorch.no_grad(): gnn_scores=gnn_model(graph_data) # 步驟 8:將 GNN 分數與初始分數結合
bm25_top_k=torch.tensor([bm25_scores[idx] foridxintop_k_indices], dtype=torch.float)
bm25_top_k=torch.sigmoid(bm25_top_k) # 更平滑的歸一化
gnn_scores=torch.sigmoid(gnn_scores) # 更平滑的歸一化
final_scores=0.5*bm25_top_k+0.5*gnn_scores # 平衡加權# 步驟 9:最終重排序
reranked_indices=torch.argsort(final_scores, descending=True)
print("\nFinal Re-ranked List:")
forrank, rerank_idxinenumerate(reranked_indices): orig_idx=top_k_indices[rerank_idx] print(f"Rank {rank+1}: Doc {orig_idx}: {corpus[orig_idx]} (Final Score: {final_scores[rerank_idx]:.4f})")
實驗結果分析
實驗結果表明,BM25檢索到了相關和不太相關的文檔混合體,純粹基于詞匯重疊進行排名。語義相似性分數顯示文檔1是相關的,但它在BM25的前4個結果中被遺漏了,這顯示了第一階段檢索的局限性。
基于圖神經網絡的重排序器通過以下方式改進了排名:正確地提升了文檔3的排名,這是一個被BM25低估的相關文檔;利用構建圖中的文檔間相似性來傳播相關性信號;最終的重排序列表將相關的文檔0和3置于頂部,顯示了基于圖的推理相對于孤立評分的有效性。然而,文檔1完全被遺漏了,因為它不在初始BM25的前k個結果中,這強調了需要像GAR中那樣的召回感知擴展的重要性。
圖神經網絡重排序器有效地利用圖上下文調整了排名,驗證了文檔關系有助于改進檢索,其效果超出了單獨的詞匯或嵌入分數所能達到的水平這一觀點。本次演練說明了簡單的圖神經網絡如何通過圖結構整合文檔間的相似性來改進文檔排名。雖然我們的語料庫很小且是合成的,但其核心原理反映了像GNRR和KGPR這樣的基于圖的重排序器如何大規模工作。
逐對和逐列表的基于圖的重排序
雖然逐點方法獨立地對每個文檔進行評分(使用圖增強特征),但逐對重排序方法在計算排名時明確考慮文檔對。通常,逐對重排序器試圖預測對于任意兩個文檔A和B,哪一個應該排名更高,然后將這些逐對偏好聚合成整體排名。圖在這種情況下也很自然地出現:我們可以創建錦標賽圖或偏好圖,其中節點是文檔,從A到B的有向邊表示"A應該排在B之上"(可能帶有一定的權重或置信度)。
DuoRank與PageRank由Gienapp等人于2022年提出,通過對一部分文檔對進行抽樣比較,解決了逐對重排序的高計算成本問題。該方法首先運行逐點排序器(例如monoT5)將列表修剪為頂部子集,然后對這些子集中的部分對運行逐對模型(duoT5)來估計逐對偏好。為了從這些逐對判斷中獲得最終排名,他們構建文檔的有向圖,其中從文檔i到文檔j的邊的權重是i優于j的概率。然后他們在這個圖上應用類似PageRank的算法,將其解釋為投票圖,來計算每個文檔的全局分數。本質上,如果文檔贏得許多逐對比較(尤其是對強勁的對手),它將有許多出邊和很少的入邊,從而在圖中獲得較高的排名分數。這種基于圖的逐對結果聚合被發現比簡單地計算獲勝次數更穩健,尤其是在并非所有對都進行顯式比較的情況下。PageRank的使用確保了從部分逐對數據中產生傳遞的、自洽的排名。
基于大型語言模型的PRP-Graph于2024年提出,是通過提示進行逐對排序的零樣本方法的擴展。通過提示進行逐對排序是一種最近的零樣本方法,其中提示大型語言模型比較兩個文檔并決定哪個更相關。Luo等人通過構建PRP-Graph來處理不確定性和傳遞性,從而擴展了這種方法。在他們的方法中,大型語言模型用于生成初始的偏好有向圖,然后圖算法迭代地對其進行優化,再次類似于加權PageRank,更新文檔分數直到收斂。通過這樣做,他們減少了可能來自大型語言模型輸出的不一致性,并實現了更穩定的重排序。
SlideGAR列表式圖重排序是2025年提出的最新進展,代表了使用圖進行列表式重排序的方法。列表式重排序意味著模型同時評估一組文檔以產生新的排序,而不是一次一個文檔或一對一地進行。SlideGAR建立在早期的GAR方法之上,但將其與列表式排序模型集成。其過程是:首先檢索初始文檔列表(例如通過BM25),然后使用滑動窗口來獲取一批文檔(例如一次取前10個)并使用基于大型語言模型的列表式排序器(例如RankT5或RankZephyr)對每個批次進行重排序。在對一個窗口進行重排序后,它將窗口向下移動列表(因此稱為"滑動"),并且在每個步驟中還從相似性圖中引入相鄰文檔(就像GAR那樣)以考慮新加入者。通過這種方式,SlideGAR確保模型可以考慮文檔組之間的聯合交互(而不僅僅是成對的),并且還可以從GAR的自適應圖擴展中受益。其結果是更具上下文感知能力的重排序,它考慮了文檔在列表中的相互關系,從而可能發現多樣性或冗余問題。SlideGAR是最早將大型語言模型重排序器和基于圖的擴展結合在列表式設置中的嘗試之一,顯示了該領域的持續創新。
外部知識圖譜的整合應用
基于圖的重排序最具前景的發展方向之一是將外部知識(例如語義網絡或知識圖譜)整合到檢索過程中。許多信息需求,特別是在生物醫學、金融或技術問答等專業領域,如果系統能夠感知所涉及的現實世界實體和關系,則可以得到更好的滿足。基于圖的重排序提供了一種自然的方式來包含這些結構化知識:使用知識圖譜中的節點和邊作為重排序輸入的組成部分。
知識感知交叉編碼器由Vollmers等人于2023年提出,是一種通過圖結構增強標準交叉編碼器的重排序方法。在該方法中,對于每個查詢-文檔對,研究者從查詢和文檔中提取實體(使用FLAIR和實體鏈接器等自然語言處理工具)。隨后,他們從大型知識圖譜(如Wikidata或領域特定的知識圖譜)中檢索包含這些實體及其關系的小型子圖(例如,連接查詢和文檔實體的所有三元組,直到某個半徑范圍內)。這樣便產生了一個查詢-文檔知識子圖,其中節點是實體,邊是知識圖譜關系。該子圖被輸入到圖注意力網絡編碼器中,該編碼器有效地充當文本的"協同編碼器":圖注意力網絡處理鏈接的實體及其連接,生成捕獲查詢實體和文檔實體如何通過知識圖譜在語義上相關聯的嵌入。然后,交叉編碼器合并這個基于圖的嵌入(例如,通過將其與文本特征連接)以輸出最終的相關性分數。其結果是一個能夠感知背景知識的重排序器,例如能夠理解文檔X提到了"阿爾伯特·愛因斯坦",他與查詢"誰發展了相對論"相關,即使文本沒有明確提及這種聯系。這種方法在背景知識消除查詢歧義或將查詢詞與文檔內容聯系起來的場景中顯著有助于提升效果。
**知識圖譜增強段落排序(KGPR)**是2023年提出的另一個證明了將知識圖譜注入重排序效益的模型。該模型的核心是使用基于LUKE的交叉編碼器(LUKE是一種預訓練為實體感知的Transformer)對查詢-段落對進行評分。KGPR的創新之處在于并不孤立地處理段落,而是在查詢和段落中查找實體,將它們鏈接到知識圖譜(Freebase),并提取連接這些實體的子圖。通常,研究者獲取段落中的所有實體,并檢索查詢實體1跳范圍內的任何知識圖譜節點和關系。這個子圖代表了可能將查詢與段落聯系起來的上下文知識。該方法不僅對文本進行編碼,還引入了知識圖譜關系和實體的嵌入,并將它們混合到交叉編碼器的輸入或嵌入空間中。從本質上講,KGPR將知識圖譜的相關部分"饋送"給重排序器,以便例如,如果查詢是關于某種醫療狀況而段落使用了相關術語,知識圖譜可以彌合這個差距(例如知道"心肌梗塞"與"心臟病發作"指代同一概念)。令人印象深刻的是,KGPR在段落排序基準測試中顯示出顯著的改進:它在MS MARCO(一個標準數據集)上比強大的monoT5交叉編碼器高出3.3%,在TREC深度學習的困難查詢上高出10.8%。這些收益突顯了添加知識圖譜可以顯著提高對查詢相關性的理解,特別是對于需要背景信息或查詢和文檔之間措辭不同的困難情況。
知識增強重排序方法示例(KGPR)中,查詢和段落首先鏈接到實體(例如"盆腔痛"、“子宮內膜異位癥”),并從知識圖譜(Freebase)中提取相關的子圖。然后,基于LUKE的交叉編碼器將文本信息與圖上下文(實體嵌入和關系三元組)集成起來,以產生最終的相關性分數。通過注入結構化知識,即使術語不同,重排序器也能更好地識別段落與查詢的相關性。
其他方法采用不同的方式處理知識圖譜信息。**知識增強重排序模型(KERM)**于2022年提出,旨在處理原始知識圖譜可能嘈雜或過于籠統的問題。KERM執行一種知識蒸餾和過濾過程:它使用知識圖譜嵌入模型(TransE)來修剪并僅保留每個實體最相關的鄰居,有效地將全局知識圖譜修剪為針對查詢的更集中的"知識元圖"。然后,該方法構建連接文本證據(如文檔中的句子)和知識圖譜實體的二分圖,并通過圖元網絡(一種專門的圖神經網絡)傳遞該圖,以共同優化文本和知識圖譜節點的表示。輸出是融合了隱式(文本)和顯式(知識圖譜)知識的混合表示,然后由重排序器使用。KERM的貢獻在于學習忽略大型知識圖譜的不相關部分,僅關注對排序重要的內容,從而提高了在完整知識圖譜會增加過多噪音的任務上的有效性。
GraphMonoT5于2024年提出,代表了將基于圖的推理與強大的序列到序列排序器(如T5)相結合的努力。GraphMonoT5應用于生物醫學文檔排序,其中領域知識至關重要。在GraphMonoT5中,每個查詢-文檔對都通過將其中的生物醫學實體鏈接到領域知識圖譜來增強,然后將這些實體2跳鄰域內的所有實體收集到一個子圖中。圖神經網絡對該子圖進行編碼,而T5編碼器對文本進行編碼,隨后交互模塊將圖嵌入與文本嵌入融合(在文本序列中引入特殊的"交互標記"來表示圖節點)。這個融合的表示被傳遞到T5解碼器,該解碼器產生相關性分數。從本質上講,GraphMonoT5在Transformer中學習文本和知識圖譜的聯合表示。其結果是一個知識感知的序列模型,在生物醫學排序任務中顯著優于普通的T5排序器,例如,它能理解"EGFR"和"表皮生長因子受體"指的是同一個實體,或者一種藥物和一種疾病通過已知的治療關系相關聯。
性能優勢和基準測試分析
在各種應用場景中,基于圖的重排序方法已經報告了相對于傳統密集檢索器和重排序器的顯著改進。通過整合文檔間鏈接或外部知識,這些模型解決了傳統方法的一些關鍵盲點。例如前述的KGPR知識增強重排序在大規模基準測試(MS MARCO)上產生了超過3%的提升,在具有挑戰性的查詢集上產生了超過10%的提升,而基線模型沒有使用圖上下文。在信息檢索領域,這樣的改進是相當顯著的,因為性能收益往往來之不易。類似地,基于圖神經網絡的重排序器在諸如網絡問答和文檔排序等任務上表現出強大的性能。例如,GNRR模型證明了使用語料庫圖可以將NDCG(歸一化折扣累積增益)等指標比僅使用初始BM25排序的基線提高一個有意義的幅度。在這種情況下,圖有助于發現BM25遺漏但被其他相關文檔包圍的文檔。
一些方法在特定領域上下文中尤其出色。GraphMonoT5對生物醫學知識的融合使其在醫學文檔排序挑戰中取得了最先進的結果,優于缺乏該領域意識的普通Transformer。Graph-RAG方法在檢索增強生成中使用圖重排序,通過確保檢索到的上下文更相關且相互關聯,從而減少了生成答案中的幻覺并提高了事實性。
值得注意的是,由于基于圖的重排序相對較新,目前還沒有一個單一的排行榜可以直接比較所有這些方法。研究人員通常在標準信息檢索數據集(如MS MARCO、TREC深度學習、自然問題等)上進行評估,但每個基于圖的模型可能使用略有不同的評估設置或用于構建圖的額外數據。該綜述指出,目前"尚未開發出用于評估基于圖的段落和文檔排序任務的標準基準來衡量性能"。這部分是因為每種方法都帶來了自己的圖構建技術,有時還會使用額外的資源(如知識圖譜或預計算的語料庫圖),這使得同類比較變得復雜。盡管如此,趨勢表明當論文中引入一種圖方法時,它通常優于等效的非圖基線,證明了附加關系信息的價值。例如,如果一個密集檢索器后跟交叉編碼器重排序器產生的MRR(平均倒數排名)為X,那么添加基于圖的重排序器(或用圖增強交叉編碼器)通常會將MRR推高到X加上某個百分比。我們在KGPR與monoT5的比較中看到了這一點,其他文獻中報道的模型也有類似情況。
總而言之,基于圖的重排序帶來的性能提升包括改進的召回率(找到更多最初被遺漏的相關文檔)、更高的頂部排名精度(通過利用上下文過濾掉誤報)以及在復雜查詢上更好的魯棒性。這些好處在關系重要的任務中尤其明顯,例如多跳問題(答案分布在多個來源中),或使用同義詞并需要背景知識才能與文檔匹配的查詢。基于圖的方法有效地在密集檢索之上增加了一層上下文推理:它們不是將每個文檔視為一個孤島,而是將整個檢索集視為信息空間的相互關聯的組成部分,從而做出更明智的排序決策。
技術局限性與發展前景
盡管基于圖的重排序展現出良好前景,但該綜述論文強調了該領域的幾個技術局限性和開放性挑戰。缺乏標準數據集和基準是當前面臨的主要問題。目前還沒有專門為基于圖的重排序設計的基準測試。研究人員一直在重新利用現有的信息檢索數據集(如MS MARCO、TREC等),然后為這些數據集創建自己的圖輸入。這導致了不一致性:一篇論文可能使用某種方式構建圖并在MS MARCO上進行評估,而另一篇論文在相同數據上使用不同的圖,這使得很難判斷哪個圖或模型真正效果更好。該論文建議社區應開發專門針對基于圖的檢索的標準化數據集或評估任務,其中圖結構是基準的一部分,例如提供知識圖譜和一組查詢的數據集,系統必須使用該圖進行處理。這將允許公平比較并更有系統地推動進展。
圖構建開銷是另一個重要的技術挑戰。構建和使用圖的計算成本可能很高。一些方法需要為每個查詢構建大型子圖(例如,在排名前1000的文檔中找到所有成對相似性,或者為每個實體查詢龐大的知識庫)。這在實踐中可能成為瓶頸。預計算語料庫圖(如GAR和GNRR中所做的那樣)等技術有助于分攤成本,但對于非常大的集合,這些圖的存儲可能會占用大量內存。未來的研究可能會探索更有效的圖構建方法,也許是動態學習圖的邊,或者壓縮圖表示。
圖神經網絡的可擴展性也是一個考慮因素。在幾十或幾百個節點(對于給定查詢的結果)上運行圖神經網絡通常可以接受,但如果試圖合并太多節點(例如數千個段落),圖神經網絡的消息傳遞可能會變慢。一些逐對方法通過對偶進行采樣來緩解這個問題,但總的來說,圖重排序器必須仔細限制圖的大小(通常僅考慮檢索到的前N個項目或限制包含的鄰居數量)。在包含更多上下文和保持計算可行性之間存在權衡。未來的創新可能涉及分層圖或使用可以通過采樣或聚類技術處理更大圖的圖神經網絡。
建模和訓練復雜性是基于圖的模型面臨的另一個挑戰。這些模型引入了許多新的設計選擇,包括如何編碼節點和邊,如何將圖輸出與現有排序器結合,使用什么損失函數(逐點與逐對損失等),以及如何平衡相關性與其他因素(如多樣性或公平性)。這種復雜性意味著該領域仍在探索最佳實踐。該綜述的作者指出,不同的工作已經"派生出自己的方法"來構建鄰接矩陣、擴充訓練數據等等。一個未來的發展方向是確定哪些圖構建和訓練策略效果最好,并可能開發統一的框架。例如,可以想象一個庫,給定一組檢索到的文檔,它會自動構建有用的圖(使用某種學習或統計方法)并應用標準化的圖神經網絡重排序器。
與語言模型的集成是另一個重要的發展機遇。更無縫地將基于圖的方法與大型語言模型的強大功能相結合具有巨大潛力。一些初步的嘗試(如SlideGAR或知識感知的交叉編碼器)正在通過將圖輸出饋送到Transformer來實現這一點。但是,更有可能出現神經符號混合模型,這些模型使用大型語言模型來指導圖構建,或使用圖來幫助解釋大型語言模型輸出。隨著大型語言模型的不斷改進,弄清楚圖如何補充它們(提供事實基礎,通過圖約束強制執行邏輯一致性等)將非常重要。
可解釋性評估是一個值得深入探索的領域。圖還可以提供可解釋性優勢,例如強調"文檔A的排名更高,因為它與我們知道相關的文檔B共享內容"。然而,當前的評估純粹關注排名指標。探索基于圖的重排序器如何使檢索過程更具可解釋性以及如何衡量這一點還有很大空間。
總結
基于圖的重排序是信息檢索和圖機器學習交叉領域一個令人興奮的發展。通過明確表示檢索到的文檔以及外部知識之間的關系,這些方法解決了傳統檢索器孤立地考慮每個文檔的局限性。從利用聚類效應和文檔相似性網絡到將豐富的知識圖譜注入重排序過程,基于圖的模型已經證明了改進的檢索性能以及發現否則可能被遺漏的相關信息的能力。
論文《Graph-Based Re-ranking: Emerging Techniques, Limitations, and Opportunities》全面概述了這些創新,展示了圖神經網絡架構和巧妙的圖構建如何應用于排序問題。我們看到了使用圖來增強單個文檔分數的逐點重排序器示例,將排序本身轉變為圖問題的逐對和逐列表方法,以及將文本神經網絡與知識圖譜相結合以獲得強大結果的混合模型。根據經驗證據,這些技術已在多個基準測試中取得了最先進的結果,驗證了核心思想——“不要忘記連接!”——即通過圖連接信息片段可以帶來更好的檢索效果。
隨著該領域的進展,我們預計在如何評估基于圖的重排序器方面將有更多的統一,并進一步與高級語言模型集成。基于圖的重排序代表了一個有前途的研究方向,它通過利用結構化關系來增強傳統信息檢索系統的能力,為構建更智能、更上下文感知的搜索和問答系統開辟了新的可能性。
論文:
https://avoid.overfit.cn/post/ee7dcac0cc934a1eb12518391a2eb482
作者:BavalpreetSinghh