ReRank is trained on lots of QA pairs | |
---|---|
correct |
Image Not Showing
Possible Reasons
|
wrong |
Image Not Showing
Possible Reasons
|
大語言模型(LLM)的表現可以通過以下幾種主要方式進行優化:
環境設定
import os
from dotenv import load_dotenv, find_dotenv
_ = load_dotenv(find_dotenv()) # read local .env file
import cohere
co = cohere.Client(os.environ['COHERE_API_KEY'])
import weaviate
auth_config = weaviate.auth.AuthApiKey(
api_key=os.environ['WEAVIATE_API_KEY'])
client = weaviate.Client(
url=os.environ['WEAVIATE_API_URL'],
auth_client_secret=auth_config,
additional_headers={
"X-Cohere-Api-Key": os.environ['COHERE_API_KEY'],
})
呼叫rerank model
co.rerank
,可以從裡面指定預訓練好的RERANKER模型
model = 'rerank-english-v2.0'
def rerank_responses(query, responses, num_responses=10):
reranked_responses = co.rerank(
model = 'rerank-english-v2.0',
query = query,
documents = responses,
top_n = num_responses,
)
return reranked_responses
檢視rerank後的結果
query_1 = "What is the capital of Canada?"
results = keyword_search(query_1,
client,
properties=["text", "title", "url", "views", "lang", "_additional {distance}"],
num_results=3)
texts = [result.get('text') for result in results]
reranked_text = rerank_responses(query_1, texts)
import pandas as pd
df_reranked = pd.DataFrame(reranked_text)
df_reranked['relevance_score'] = df_reranked.apply(lambda row: row.values[0].relevance_score, axis=1)
df_reranked['index'] = df_reranked.apply(lambda row: row.values[0].index, axis=1)
df_reranked['document'] = df_reranked.apply(lambda row: row.values[0].document['text'], axis=1)
df_reranked.iloc[:,1:]
from utils import dense_retrieval
query_2 = "Who is the tallest person in history?"
results = dense_retrieval(query_2,client)
texts = [result.get('text') for result in results]
reranked_text = rerank_responses(query_2, texts)
df_reranked = pd.DataFrame(reranked_text)
# (略)同樣使用pandas整理...
評估搜索/推薦系統效果的常見指標
指標 | 優點 | 缺點 | 適用情境 |
---|---|---|---|
Mean Average Precision (MAP) |
- 考慮整個召回率範圍的精度 - 計算所有查詢的平均表現 |
- 受個別查詢影響較大 - 對於部分相關的檢索不敏感 |
- 需要知道所有檢索結果的相關程度 - 整體系統性能評估 |
Mean Reciprocal Rank (MRR) |
- 簡單直接 - 評估速度 |
- 只考慮第一個相關結果 - 對後續結果不敏感 |
- 關注速度 - 只需要知道部分相關結果 |
Normalized Discounted Cumulative Gain (NDCG) |
- 考慮結果相關性與排名 - 不同位置應用折扣 |
- 需要設定折扣係數 - 較為抽象 |
- 需要結果的相關性評分 - 評估排序質量 |
RAG檢索評估指標筆記-RAG Triad of metrics)
Mean Average Precision (MAP) 平均平均精度(MAP)
在資訊檢索、機器學習和電腦視覺等領域,當我們要評估系統或模型的性能時,尤其是在排序問題或多標籤分類問題中,MAP是一個常用的指標。在機器學習的多標籤分類問題中,常用Precision-Recall Curve,來計算MAP。
在資訊檢索/推薦系統的MAP計算中,x軸則以"查詢結果/推薦結果"替代Recall
計算流程:
其中:
将所有查詢(在物件偵測案例,則可替換為所有類別)的 AP 求平均,即得到整個系统的 MAP:
其中
Mean Reciprocal Rank (MRR) 平均倒數排名(MRR)
若查詢的第一個相關結果出現在第k名,則該查詢的倒數排名為 1/k
如果沒有相關結果,則倒數排名為 0,即:
那麼平均倒數排名為所有查詢的倒數排名的平均值:
其中,
MRR的值在0到1之間,值越大表示系統能夠更快地返回相關文檔
計算範例
假設有三個查詢,它們的第一個正確答案分別出現在第一位、第三位和第二位:
因此,MRR 的計算為:
這個結果意味著系統在處理這三個查詢時,平均而言,第一個正確答案的排名倒數大約是 0.61。MRR 的值越接近 1,表明系統能夠更快地返回正確答案,性能越好。
Normalized Discounted Cumulative Gain (NDCG) 正規化折扣累積增益
NDCG考慮了結果的相關性評分以及對排序給與權重(扣分),如果高相關性的結果被排序到後面則會進行扣分(Discounted)。推薦搭配此篇閱讀(2021.012。衛星。知乎。NDCG排序評估指標)
對於一個查詢,NDCG的計算方法是:
Discounted Cumulative Gain:考慮排序順序的因素,使得排名靠前的item增益更高,對排名靠後的item進行折扣(Discounted)
rel(i
只有(0,1)兩種值時,NDCG(Normalized DCG):標準化累積增益,使最大值等於 1,得到 NDCG
即:
模擬排序0-100時,Discounted因子
# Generate discounted values for positions from 1 to 100
positions = np.arange(1, 101)
discounted_values = np.log2(positions + 1)
Two-stage retrieval pipeline: 1) Top-k embedding retrieval, then 2) LLM-based reranking
Prompt-based learning the idea is to design input to fit the model