前言
隨著LLM的推廣普及,越來越多的朋友們熟悉了模型的SFT微調流程,但是對於微調的結果,尤其是如何判斷各大模型在當前資料集上的表現,仍然是一個待解決的問題。並且,對選擇式、判別式、生成式等不同的生成任務,如何才能夠客觀地評價模型的生成質量,仍是一個需要明確的問題。
1.Evaluation包含哪些流程
首先要明確評測任務的基礎pipeline。下圖是評測任務的簡要流程:
2.支援的評測資料集與評測Metric
所採用的資料集在這裡https://github.com/lixinjie97/tiny-universe/tree/main/04.TinyEval/Eval/dataset,目前有的資料集與型別包含(後續會持續更新!):
大家可以按照需要的任務進行探索,接下來我也會手把手為大家講解評測步驟!
3.生成式的F1
直接show例子:
"pred": "57081.86元", "answers": "人民幣57081.86元。"
首先,經過資料清洗與jieba分詞,將短句分為片語,以示例文字為例,經過分詞與去掉標點符號等操作,得到下列輸出:
"pred": ['5708186', '元'], "answers": ['人民幣', '5708186', '元']"
將上述的兩個"乾淨"的輸出送入f1評分函式如下:
def f1_score(prediction, ground_truth, **kwargs):
# Counter以dict的形式儲存各個句子對應的詞與其對應個數,&運算子返回兩個Counter中共同的元素的鍵值對
common = Counter(prediction) & Counter(ground_truth)
# 顯示prediction與gt的共同元素的個數
num_same = sum(common.values())
if num_same == 0:
return 0
# 即模型預測正確的樣本數量與總預測樣本數量的比值
precision = 1.0 * num_same / len(prediction)
# 模型正確預測的樣本數量與總實際樣本數量的比值
recall = 1.0 * num_same / len(ground_truth)
f1 = (2 * precision * recall) / (precision + recall)
return f1
首先記錄兩個list中相同的元素,再統計相同的元素的總數,最終再按照precision與recall的定義分別計算相應的分數。
然後就得到該結果的對應分數啦,最後再將所有的結果取平均值,即得到該task的F1_score
4.總結
我們在進行了,模型微調後,想要知道微調的效果,那麼就要選擇相應的指標進行評估,設計一個完善且好用的評分指標是一件很重要的事情,需要設計者對模型的結構和資料足夠地瞭解。