auto_evaluation

Auto Evaluation

若要測試各種參數對語言模型回答的好壞,可以使用auto_evalution函數。首先,您需要基於您要使用的文檔構建一個問題集(.txt)。
您可以生成單選題文件或問答題文件。

  1. 對於單選題文件,每個選項和正確答案之間用制表符(\t)分隔,每行是一個問題,如範例:
    1
    2
    3
    應回收廢塑膠容器材質種類不包含哪種?	1.聚丙烯(PP)	2.聚苯乙烯(PS)	3.聚氯乙烯(PVC)	4.低密度聚乙烯(LDPE)	4
    庫存盤點包括庫存全盤作業及不定期抽盤作業,盤點計畫應包括下列項目不包含哪項? 1.盤點差異之處理 2.盤點清冊 3.各項物品存放區域配置圖 4.庫存全盤日期及參加盤點人員名單 1
    以下何者不是環保署指定之公民營地磅機構? 1.中森加油站企業有限公司 2.台益地磅站 3.大眾地磅站 4.新福行 4
    函式將返回問題集的正確率和使用的token量,每個問題的詳細內容儲存在logs中。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    import akasha.eval as eval
    import os
    import akasha
    dir_path = "doc/pvc/"
    exp_name = "exp_akasha_auto_evaluation"

    eva = eval.Model_Eval(question_style="single_choice", search_type='merge',\
    model="openai:gpt-3.5-turbo", embeddings="openai:text-embedding-ada-002",record_exp=exp_name)
    print(eva.auto_evaluation("question_pvc.txt", dir_path ))
    ## correct rate: 0.9, tokens: 3228 ##
  2. 對於問答題文件,每個問題之前有 “問題:”,每個參考答案之前有 “答案:”。每個問題之間用兩個換行符 (\n\n) 分隔。
    問答題類的問題文件,會回傳bert的平均分數, rouge的平均分數, llm_score的平均分數, 文件使用的總token數量
    1
    2
    3
    4
    5
    6
    問題:根據文件中的訊息,智慧製造的複雜性已超越系統整合商的負荷程度,未來產業鏈中的角色將傾向朝共和共榮共創智慧製造商機,而非過往的單打獨鬥模式發展。請問為什麼  供  應商、電信商、軟體開發商、平台商、雲端服務供應商、系統整合商等角色會傾向朝共和共榮共創智慧製造商機的方向發展?
    答案:因為智慧製造的複雜性已超越系統整合商的負荷程度,單一角色難以完成整個智慧製造的需求,而共和共榮共創的模式可以整合各方的優勢,共同創造智慧製造的商機。

    問題:根據文件中提到的資訊技術商(IT)和營運技術商(OT),請列舉至少兩個邊緣運算產品或解決方案。
    答案:根據文件中的資訊,NVIDIA的邊緣運算產品包括Jetson系列和EGX系列,而IBM的邊緣運算產品包括IBM Edge Application Manager和IBM Watson Anywhere。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    import akasha.eval as eval
    import os
    import akasha
    dir_path = "doc/pvc/"
    exp_name = "exp_akasha_auto_evaluation"

    eva = eval.Model_Eval(question_style="essay", search_type='merge',\
    model="openai:gpt-3.5-turbo")
    print(eva.auto_evaluation("question_pvc_essay.txt", dir_path ))
    ## correct rate: 0.9, tokens: 3228 ##

Scores

對於問答題文件,因為無法準確判別語言模型的回答是否正確,我們使用bert_score, rouge_score, llm_score,藉由比較語言模型的回答與問答題文件中的參考答案,來得出0~1之間的分數

bert-score

使用bert-score套件計算回答與參考答案的每個token之間的contextual embeddings similarity.

1
2
3
4
5
6
7
8
9
10
import akasha
from akasha.eval.scores import get_bert_score


llm_output = "「五軸」指的是在機械加工或製造過程中使用的五軸數控(CNC)機床。這些機床可以在五個不同的軸上同時移動和旋轉工件或刀具,讓加工變得更靈活與精確。五軸機床一般包含三個直線軸(X、Y、Z)和兩個旋轉軸(A、B),這樣設計的目的是讓機床能從多個角度對工件進行加工,而不必在不同的角度之間反覆夾持和移動工件。"

ref_ans = "根據文件中提到的內容,5軸工具機相較於3軸工具機能夠進行複雜形狀加工,並在加工精密度、自動化方面佔據優勢。"


score = get_bert_score(llm_output, ref_ans)

ROUGE-score

將語言模型的回答與問答題文件中的參考答案進行分詞後,藉由ROUGE 評估生成相似度分數

1
2
3
4
5
6
7
8
9
10
import akasha
from akasha.eval.scores import get_rouge_score


llm_output = "「五軸」指的是在機械加工或製造過程中使用的五軸數控(CNC)機床。這些機床可以在五個不同的軸上同時移動和旋轉工件或刀具,讓加工變得更靈活與精確。五軸機床一般包含三個直線軸(X、Y、Z)和兩個旋轉軸(A、B),這樣設計的目的是讓機床能從多個角度對工件進行加工,而不必在不同的角度之間反覆夾持和移動工件。"

ref_ans = "根據文件中提到的內容,5軸工具機相較於3軸工具機能夠進行複雜形狀加工,並在加工精密度、自動化方面佔據優勢。"


score = get_rouge_score(llm_output, ref_ans)

llm-score

利用另一種語言模型,將語言模型的回答與問答題文件中的參考答案進行比較,生成相似度分數

1
2
3
4
5
6
7
8
9
10
11
import akasha
from akasha.eval.scores import get_llm_score


llm_output = "「五軸」指的是在機械加工或製造過程中使用的五軸數控(CNC)機床。這些機床可以在五個不同的軸上同時移動和旋轉工件或刀具,讓加工變得更靈活與精確。五軸機床一般包含三個直線軸(X、Y、Z)和兩個旋轉軸(A、B),這樣設計的目的是讓機床能從多個角度對工件進行加工,而不必在不同的角度之間反覆夾持和移動工件。"

ref_ans = "根據文件中提到的內容,5軸工具機相較於3軸工具機能夠進行複雜形狀加工,並在加工精密度、自動化方面佔據優勢。"

model = "openai:gpt-4o"
score = get_llm_score(llm_output, ref_ans, model=model)