手搓大模型Task04:如果評估你的大模型

南风丶丶發表於2024-10-02

前言

  隨著LLM的推廣普及,越來越多的朋友們熟悉了模型的SFT微調流程,但是對於微調的結果,尤其是如何判斷各大模型在當前資料集上的表現,仍然是一個待解決的問題。並且,對選擇式、判別式、生成式等不同的生成任務,如何才能夠客觀地評價模型的生成質量,仍是一個需要明確的問題。

1.Evaluation包含哪些流程

  首先要明確評測任務的基礎pipeline。下圖是評測任務的簡要流程:

手搓大模型Task04:如果評估你的大模型

2.支援的評測資料集與評測Metric

  所採用的資料集在這裡https://github.com/lixinjie97/tiny-universe/tree/main/04.TinyEval/Eval/dataset,目前有的資料集與型別包含(後續會持續更新!):

手搓大模型Task04:如果評估你的大模型

  大家可以按照需要的任務進行探索,接下來我也會手把手為大家講解評測步驟!

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.總結

  我們在進行了,模型微調後,想要知道微調的效果,那麼就要選擇相應的指標進行評估,設計一個完善且好用的評分指標是一件很重要的事情,需要設計者對模型的結構和資料足夠地瞭解。

相關文章