我們在 Day18: structured output challenge 跑了 5 個選手的 inference 結果,他們分別是:
測試的資料集是我們在 Day17: exam_and_structured_output_dataset 構造的 structured_output_dataset
我們今天直接使用字串處理來驗證看看,究竟效果孰優孰劣吧
evaluation_dataset.json
來方便我們今天做事
為了簡化問題,我們今天只會關注在 stem 的題取,因為其他各選項的結果也可以直接套用
我們用一個 for 遍歷我們整個 80 筆資料:
如此一來我們就可以針對每一個結果計算 stem extract 的 succ_rate
結果: succ_rate = 0.0
問題:
{'label': '常見針灸配穴法中,所指的「四關穴」,為下列何穴位之組合?',
'pred': '常見針灸配穴法中,所指的「四關穴」,為下列何穴位之組合?'}
pred
是 model 的 response (parser 過後),而 label
是從我們的 reference_answer 取出來的pred
被判錯
解: 我們測試一下,先把 pred 和 label 都經過一個 "normalize",來把這類全型半型的問題解決
我們的 normalize_text 函數如下:
def normalize_text(s: str) -> str:
"""簡單的 normalization: 小寫化、去標點、去多餘空白"""
# 全部轉小寫
s = s.lower()
# 移除所有標點符號(只保留中英文、數字、空白)
s = re.sub(r"[^0-9a-z\u4e00-\u9fff\s]", "", s)
# 去掉多餘空白
s = " ".join(s.split())
return s
就做三件事:
結果: succ_rate = 0.75
問題:以下是兩筆 fail_case:
{'qid': '2',
'label': '依靈樞經脈記載其直者從巔入絡腦還出別下項循肩膊內挾脊抵腰中指下列 何經的循行內容',
'pred': '依靈樞經脈記載其直者從巔入絡腦還出別下項循肩膊內挾脊抵腰中指下列何經的循行內容'},
{'qid': '9',
'label': '下列穴位屬三焦經與膽經的交會穴共有幾個1臑會 2顴髎 3秉風 4聽宮 5耳門',
'pred': '下列穴位屬三焦經與膽經的交會穴共有幾個臑會 顴髎 秉風 聽宮 耳門'},
import unicodedata
def unicode_normalize(txt):
s = unicodedata.normalize("NFKC", txt)
return s
example_text = '①臑會 ②顴髎 ③秉風 ④聽宮 ⑤耳門'
print(unicode_normalize(example_text))
# 1臑會 2顴髎 3秉風 4聽宮 5耳門
NFKC
實際上做了什麼?
"ABC123" → "ABC123"
"①②③" → "123"
"㎏" → "kg"
"e\u0301" (e + combining acute) → "é"
"﹣" (全形減號) → "-"
NFKC
後,我們把所有英文轉為小寫、移除所有的標點符號、移除所有的空白,再次測試[{'qid': '28',
'label': '48歲女性患者診斷為類風濕性關節炎已2年主訴四肢肩膀至手指遊走性疼痛夜間及氣候變化疼痛加重下列敘述何者錯誤',
'pred': '2848歲女性患者診斷為類風濕性關節炎已2年主訴四肢肩膀至手指遊走性疼痛夜間及氣候變化疼痛加重下列敘述何者錯誤'}]
題號
當成題幹
的一部分也進行了提取,而且原因可以理解:
28.48 歲
,還是 48歲
算法
的錯誤1_llama_en_evaluation_dataset.json
: succ_rate: 0.073_llama_chat_evaluation_dataset.json
: succ_rate: 0.122_llama_zh_evaluation_dataset.json
: succ_rate: 0.364_gemma_evaluation_dataset.json
: succ_rate: 0.995_json_gemma_evaluation_dataset.json
: succ_rate: 0.99llama_en 符合預期的正確率低下,這個我們在第一版測試就已經知道
llama_zh 的正確率從 0.07 -> 0.36
使用 chat-gpt 編寫的 prompt 的 llama 並沒有如預期的明顯好過預設 prompt 英翻中
gemma 開啟 json mode 與 沒有開啟 json mode 錯的題目是同一題
我們今天從 evaluation 的角度出發,實際體驗了一把'驗證的算法本身也是算法'。
模型比較也帶來幾個直覺
我們明天來測測看,用 llm 做 evaluation 和我們今天做的結果有沒有一致