iT邦幫忙

2025 iThome 鐵人賽

DAY 5
0
AI & Data

從RAG到EmoRAG:讓AI真正聽懂你的心聲系列 第 5

第5天:混合檢索與情緒加權

  • 分享至 

  • xImage
  •  

混合檢索結合了關鍵字檢索、向量檢索和Rerank的優勢,透過動態加權機制實現最佳檢索效果。情緒加權則進一步考慮了文本的情緒狀態,為檢索結果賦予情緒相關的權重 。
image alt

基礎混合檢索公式

final_score = α × bm25_score + (1-α) × vector_score

其中權重α根據查詢類型動態調整 :

精確匹配:α = 0.7(偏重BM25)

語義查詢:α = 0.3(偏重向量檢索)

平衡查詢:α = 0.5

情緒加權機制

根據最新的Retrieval-Augmented Emotion Reasoning(RAER,是一個革命性的AI框架,專門設計用於增強多模態大語言模型 (MLLMs) 處理複合情緒和情緒推理任務的能力。這個框架來自2025年ACL會議的最新研究成果 )框架,情緒加權通過以下步驟實現:

  1. 情緒知識庫建構:多模態情緒資料集編碼為高維向量,附加詳細情緒標註

  2. 情緒推理鏈:透過Chain-of-Thought機制引導情緒推理

  3. 檢索增強:根據情緒相似度檢索相關情緒知識

實作關鍵技術

BM25檢索實現

BM25演算法的核心公式為:

BM25(q,d) = Σ IDF(qi) × (f(qi,d) × (k1+1)) / (f(qi,d) + k1 × (1-b+b×|d|/avgdl))

參數說明:

  • f(qi,d):詞彙qi在文檔d中的頻率
  • |d|:文檔d的長度
  • avgdl:平均文檔長度
  • k1, b:調節參數

向量檢索優化

現代向量檢索系統採用
HNSW (Hierarchical Navigable Small World:一種高效的近似最近鄰 (Approximate Nearest Neighbor, ANN) 搜尋演算法。它特別擅長在大型資料集中快速找到與查詢點「最相似」的點,即使資料維度很高也表現良好)和

eKNN (exhaustive K Nearest Neighbors,窮舉KNN,aka.暴力KNN)演算法進行相似度計算 。

分數正規化策略
由於BM25分數無界而向量相似度通常在-1到1之間,需要進行正規化處理 :

  • Min-Max縮放
  • Reciprocal Rank Fusion (RRF):基於排名而非原始分數的融合方法

情緒權重整合
根據EmoRAG系統的實驗結果,情緒加權能顯著提升檢索精度 :

# 情緒加權計算
emotion_weight = emotion_boost if result.emotion == target_emotion else 1.0
final_score = α × normalized_bm25_score × emotion_weight + (1-α) × vector_similarity × emotion_weight

效能評估
實驗數據顯示,混合檢索比單一檢索方式表現更優 :

  • 召回率提升:避免單一策略漏掉答案

  • 精度改善:結合查詢改寫和同義詞擴展可額外提升5-10%

實際應用場景
企業級RAG系統
在企業級應用中,混合檢索特別適合處理 :

  • 數字、代號、專有名詞:BM25優勢

  • 語義理解任務:向量檢索優勢

  • 複合查詢:兩種方法協同作業

多語言情緒檢測

EmoRAG系統在SemEval-2025任務中的實驗顯示,該方法在多語言情緒檢測上達到了F1-micro 0.638和F1-macro 0.590的平均分數 。

主要挑戰

  1. 計算複雜度:RAER需要較長推理時間

  2. 多模態整合:目前缺乏同時支援視覺、音訊、文本的生成模型

  3. 類別不平衡:在高度不平衡的類別分佈中可能出現問題

解決策略

  • 動態知識庫更新:透過高信心樣本持續擴充檢索庫

  • 自適應權重調整:根據查詢類型和情緒強度動態調整權重

  • 多輪檢索優化:透過多次檢索迭代提升效果

這種混合檢索與情緒加權的結合,不僅提升了RAG系統的檢索精度,也為情緒感知的人機互動開闢了新的可能性。


實作

實作目標:結合BM25和向量檢索,加入情緒權重

系統架構

1. 三個核心檢索器:

EmotionVectorRetriever 類別:向量檢索

EmotionBM25Retriever 類別: 關鍵字檢索

EmotionHybridRetriever 類別:

  • 整合了 EmotionBM25Retriever 和 EmotionVectorRetriever 的結果。
  • 使用 'cross-encoder/ms-marco-MiniLM-L-6-v2'(一個針對搜尋相關性任務優化的 Cross-Encoder 模型)當 CrossEncoder(重排序器)來對初始混合檢索得到的靠前候選結果進行重新評分。
  • hybrid_retrieve:
    • 使用 BM25 和向量方法執行初步搜尋。
    • 結合兩種方法的分數,應用 alpha 權重和一個 emotion_boost 因子(如果目標情緒匹配)。
    • 如果 use_rerank 為 True,使用 Cross-Encoder 模型對靠前的候選結果進行重新評分,並將情緒加權應用於重排序分數。
    • 返回最終的前 k 個結果,按組合分數或重排序分數排序。

main() 函數:

  • 從 CSV 文件 (emotion_dataset_500_3.csv) 載入資料。
  • 在混合檢索器中設置文檔以便進行重排序。

實作放在colab


上一篇
第4天:向量檢索與情緒嵌入
系列文
從RAG到EmoRAG:讓AI真正聽懂你的心聲5
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言