在先前的論述中,我們已經對回應訊息評估的基礎概念進行了詳細的探討。今日,我們將進一步深入這一主題,專注於兩種進階的評估策略:首先是運用「Rubric 評量表」,其次是參照「專家理想回應」。這些策略不僅提供了更為精確的評估機制,也為評估者與被評估者帶來更多的操作性。
Rubric 評量表的核心理念在於提供一個明確、一致且公平的評估標準。這個框架為評估者提供了一個統一的參考,使得對被評估對象的評價更加系統化和一致。Rubric 評量表詳細列舉了每個評分等級所需達到的具體標準,從而讓評估者和被評估者都能明確地理解如何進行更為精確的評估和改進。
以學生英文作文的評估為例,一個典型的 Rubric 評量表會先列出評分項目,例如:結構與組織、語法與詞彙、以及內容與論點等。這些項目都設有不同等級的評分標準,以確保整個評估過程的公平性和一致性。
根據Rubric評量表的原則,我們精心設計了一套評估「詞彙教學」生成內容品質的全面評估機制。這個機制不僅包括了多個評量指標,例如方向一致性、內容呈現清晰度、內容深度、內容豐富性,還考慮了文化與語境的影響。
為了讓大家更清楚地了解這個評估機制是如何運作的,我們進行了一系列實際的評估測試。這些測試觸及了多個方面,包括如何設計評估提示(也就是問題),實際評估的結果,以及與專家回應的對比等。
在Python程式碼中,我們使用了一個名為 rubric_evalution
的函數來執行評估。這個函數會根據用戶的需求和設定,生成一個詳細的評估提示。這個提示包括了用戶的問題、用戶的母語、他們想學習的語言,以及生成的詞彙教學內容。
def rubric_evalution(user_message, response_text, settings):
"""
詞彙教學生成品質 Rubric 評估
"""
user_input = user_message['content']
user_lang = settings['user_lang']
learning_lang = settings['learning_lang']
prompt_system = f"""
您正在評估一個生成的詞彙教學內容,請基於下方背景資料來回答問題。
以下是背景資料:
[BEGIN DATA]
************
[使用者的訊息]: {user_input}
************
[使用者的母語]: {user_lang}
************
[學習的語言]: {learning_lang}
************
[詞彙教學內容]: {response_text}
************
評估項目和評分標準
評估項目 1分 3分 5分
方向一致性 | 教學內容與用戶需求不一致或不相關 | 教學內容與用戶需求大致相關,但可能偏離主題 | 教學內容完全符合用戶的需求和要求
內容呈現清晰度 | 沒有使用條列式或其他結構方式,難以理解 | 部分使用條列式或其他結構方式,但還需改進 | 完全使用條列式或其他結構方式,使內容易於理解
內容深度 | 僅提供非常基礎或表面的資訊 | 提供基礎資訊和部分深入資訊,但可能不完全 | 從基礎到深入都有涵蓋,全面解釋詞彙的使用
內容豐富性 | 僅有詞彙的基本定義或解釋 | 除了基本定義,也有例句或用法,但缺乏補充資訊 | 有詞彙介紹、例句、用法,以及其他補充資訊
文化與語境考慮 沒有考慮到詞彙在不同文化或語境中的用法 | 簡單提到了文化或語境的因素 | 充分考慮了詞彙在不同文化和語境中的用法
評分說明:
1分:不滿足評估項目的基本要求。
3分:部分滿足評估項目的要求。
5分:完全滿足或超出評估項目的要求。
************
[END DATA]
請評估以下項目並給分:
- 方向一致性
- 內容呈現清晰度
- 內容深度
- 內容豐富性
- 文化與語境考慮
最後,再將各項分數加總
輸出各項分數以及總評分。
"""
system_message = {
"role": "system",
"content": prompt_system
}
messages = [
system_message
]
ai_response = get_completion_from_messages(messages, model='gpt-4')
return ai_response
我們進行了兩個測試案例來展示這個評估機制的實用性。
在這個案例中,用戶想學習餐桌上用得到的詞彙。生成的教學內容提供了相關的詞彙列表,但在內容深度和豐富性方面有待提升。
# 測試案例 1
settings = {
'user_lang': '中文',
'learning_lang': '英文',
'learning_content': topic_contents['生活用語'],
}
test_case_user = {
"role": "user",
"content": "我想學習幾個餐桌上用得到的詞彙"
}
response = get_lex_suggestion_ta_prompt(test_case_user, settings)
rubric_response = rubric_evalution(test_case_user, response, settings)
print(f"""
生成詞彙教學內容:
{response}
Rubric 評量結果:
{rubric_response}
""")
===== 以下是輸出內容 =====
----- 生成詞彙教學內容 -----
當然!以下是幾個餐桌上常用的詞彙:
1. Plate - 盤子
2. Bowl - 碗
3. Fork - 叉子
希望這些詞彙對你有所幫助!如果你還有其他問題或需要更多詞彙,請隨時告訴我。
----- Rubric 評量結果 -----
- 方向一致性:5分。教學內容完全符合用戶的需求和要求,用戶要求學習餐桌上用得到的詞彙,教學內容提供了相關的詞彙列表。
- 內容呈現清晰度:5分。教學內容使用了條列式的方式呈現,每個詞彙都清楚地列出了英文和對應的中文,使內容易於理解。
- 內容深度:3分。教學內容提供了基礎資訊,但並未提供深入的資訊,例如詞彙的使用情境或例句。
- 內容豐富性:3分。教學內容提供了詞彙的基本定義,但並未提供例句或用法,也缺乏補充資訊。
- 文化與語境考慮:1分。教學內容並未考慮到詞彙在不同文化或語境中的用法。
總評分:17分。教學內容在方向一致性和內容呈現清晰度上表現良好,但在內容深度、內容豐富性和文化與語境考慮上有待提升。
在這個案例中,用戶想學習飲食相關的英文詞彙。生成的教學內容不僅提供了詞彙的基本定義,還有詳細的解釋和實際的應用方式。
settings = {
'user_lang': '中文',
'learning_lang': '英文',
'learning_content': topic_contents['生活用語'],
}
test_case_user = {
"role": "user",
"content": "我想學習一些飲食常用的用語"
}
response = get_lex_suggestion_ta_prompt(test_case_user, settings)
rubric_response = rubric_evalution(test_case_user, response, settings)
print(f"""
生成詞彙教學內容:
{response}
Rubric 評量結果:
{rubric_response}
""")
===== 以下是輸出內容 =====
----- 生成詞彙教學內容 -----
好的!我們來學習一個飲食常用的英文單字:balanced diet(均衡飲食)。
balanced diet 是指一種均衡攝取各種營養素的飲食方式。在均衡飲食中,我們需要攝取足夠的蛋白質、碳水化合物、脂肪、維生素和礦物質,以維持身體的正常運作和健康。
在日常生活中,我們可以通過攝取各種食物來實現均衡飲食。例如,攝取豐富的蔬菜和水果可以提供豐富的維生素和礦物質;攝取適量的蛋白質來源,如肉類、魚類、豆類和堅果,可以提供身體所需的氨基酸;攝取適量的碳水化合物來源,如全穀類食物、米飯和麵包,可以提供能量等等。
保持均衡飲食對於身體健康非常重要。它可以幫助我們維持正常的體重、增強免疫力、預防疾病等等。所以,讓我們一起努力保持均衡飲食,為我們的健康加油吧!
----- Rubric 評量結果 -----
- 方向一致性:5分。教學內容完全符合用戶的需求和要求,用戶想學習飲食相關的英文詞彙,教學內容提供了"balanced diet"這個詞彙並詳細解釋了其意義和用法。
- 內容呈現清晰度:5分。教學內容使用了結構清晰的方式來解釋詞彙,包括詞彙的定義、如何在日常生活中實現均衡飲食,以及均衡飲食的好處等,使內容易於理解。
- 內容深度:5分。教學內容從基礎到深入都有涵蓋,全面解釋了"balanced diet"這個詞彙的使用,包括其定義、如何實現以及其對身體健康的影響等。
- 內容豐富性:5分。教學內容不僅有詞彙的基本定義,還提供了詳細的解釋和實際的應用方式,並且還強調了保持均衡飲食的重要性。
- 文化與語境考慮:3分。教學內容簡單提到了均衡飲食在日常生活中的應用,但並未充分考慮到詞彙在不同文化或語境中的用法。
總評分:23分。
總結
這個評估機制不僅提供了一個全面而詳細的評估框架,還通過實際的測試案例展示了其實用性和準確性。這樣的機制不僅對我們在調整提示設計時有用,也能幫助一般人更有效地評估和改善他們的詞彙教學內容。
所以,無論你正在設計生成的提示訊息,否則你是一個實際生成內容的使用者,這個評估機制都能為你提供寶貴的指導和反饋。
除了Rubric評量外,我們還引入了專家回應作為評價標準。這樣做的好處是可以為生成內容設定更明確的目標。然而,這種方法也有其局限性,例如可能會減少內容的多樣性,並增加專家回應的準備成本。因此,在實際操作過程中,這些都是需要仔細考量的因素。
在這個評估方法中,助理會比較生成內容和專家內容的實質內容,並根據比較結果選擇一個適當的評價選項。
def evalution_with_export(user_input, response_text, ideal_response):
prompt_system = f"""
您是一個助理,專門評估詞彙教學內容生成的品質,您將通過比較生成內容和專家內容來完成這個任務。
請僅輸出一個字母,不需要其他內容。
"""
prompt_user = f"""
您正在比較一個生成內容和專家內容對於特定問題的解答。以下是相關資料:
[資料開始]
************
[使用者訊息]: {user_input}
************
[專家內容]: {ideal_response}
************
[生成內容]: {response_text}
************
[資料結束]
請比較生成內容和專家內容的實質內容。忽略風格、語法或標點的差異。
生成內容可能與專家內容在涵蓋性、深度或其他方面有所不同。請確定哪種情況適用,然後選擇以下選項之一來回答問題:
(A) 生成內容與專家內容在涵蓋性上類似,並且內容一致。
(B) 生成內容在涵蓋性或深度上超過了專家內容,並且內容一致。
(C) 生成內容和專家內容在某些方面有相同的細節或焦點。
(D) 生成內容和專家內容在實質內容上有出入或矛盾。
(E) 生成內容和專家內容有所不同,但從實質性的角度來看,這些差異不影響主要信息的傳達。
"""
messages = [
{
"role": "system",
"content": prompt_system
},
{
"role": "user",
"content": prompt_user
},
]
ai_response = get_completion_from_messages(messages, model='gpt-4')
return ai_response
我們也進行了多個實際測試案例,包括用戶想學習餐桌上用得到的詞彙等。每個測試案例都會經過專家回應參考評估,並根據比較結果給出評價。
在這個案例中,生成內容和專家內容在某些方面有相同的細節或焦點。
# 測試案例 1
user_input = "幫我介紹一個餐桌上常使用到的詞彙,內容要包含 原文跟解釋還有字義的說明,使用範例以及範例的翻譯。"
# 生成內容
response = """
單字:fork
原文:Do you eat a well-balanced diet?
解釋:你有在吃均衡的飲食嗎?
字義:叉子,用於進食時插取食物的工具。
範例:She used a fork to eat her salad.
範例翻譯:她用叉子吃沙拉。
"""
# 專家樣本
export_response = """
當然,餐桌上常使用到的詞彙之一就是「fork」,中文是「叉子」。
詞彙介紹
fork (叉子):
用於進食時插取食物的工具。它通常由一個手柄和幾個彎曲或直線的「齒」組成,用於刺進或挑起食物。
使用範例:She used a fork to eat her salad.
例句翻譯:她用叉子來吃她的沙拉。
補充:
叉子不僅用於吃沙拉,也常用於吃肉、魚、蔬菜等。另外,還有專門用於特定食物或烹飪方法的叉子,比如:餐叉、魚叉、意大利麵叉等。在西方文化中,叉子通常與刀和匙一同使用,形成一套餐具。叉子在不同文化和地理區域也有不同的形狀和用途。
"""
eval_with_export_response = evalution_with_export(user_input, response, export_response)
print(f"""
生成詞彙教學內容:
{response}
Rubric 評量結果:
{eval_with_export_response}
""")
===== 評量結果 =====
>> C
在這個案例中,生成內容和專家內容在實質內容上有出入或矛盾。
# 測試案例 2
user_input = "幫我介紹一個餐桌上常使用到的詞彙,內容要包含 原文跟解釋還有字義的說明,使用範例以及範例的翻譯。"
# 生成內容
response = """
詞彙介紹
fork (分支):
在計算機科學和軟體工程中,"fork" 是一種建立軟件或程式碼的新版本的行為。
使用範例
He decided to fork the open-source project to add new features.
例句翻譯:他決定分支這個開源專案以添加新功能。
"""
# 專家樣本
export_response = """
當然,餐桌上常使用到的詞彙之一就是「fork」,中文是「叉子」。
詞彙介紹
fork (叉子):
用於進食時插取食物的工具。它通常由一個手柄和幾個彎曲或直線的「齒」組成,用於刺進或挑起食物。
使用範例:She used a fork to eat her salad.
例句翻譯:她用叉子來吃她的沙拉。
補充:
叉子不僅用於吃沙拉,也常用於吃肉、魚、蔬菜等。另外,還有專門用於特定食物或烹飪方法的叉子,比如:餐叉、魚叉、意大利麵叉等。在西方文化中,叉子通常與刀和匙一同使用,形成一套餐具。叉子在不同文化和地理區域也有不同的形狀和用途。
"""
eval_with_export_response = evalution_with_export(user_input, response, export_response)
print(f"""
評量結果:
{eval_with_export_response}
""")
===== 評量結果 =====
>> D
總結而言,這兩種評估方法讓我們能夠更全方位地掌握生成內容的品質水平,並依據評估結果進行精確的調整和改善。
這篇文章是我們「第一個聊天機器人」系列的壓軸之作,目的在於提供一個全面且深入的分析框架,用以評價生成內容的質量和效能。在這一系列中,我們已經從基礎到進階,探索了多種評估策略,並且附帶了實用的測試案例作為參考。
隨著這一系列的完結,我們即將轉向一個新的、令人矚目的領域:對LangChain開發框架的深度探討。我們衷心邀請您持續關注我們的分享,並期盼在不久的將來,能夠為您提供更多富有價值的內容。
本文的程式碼部分,您可以參考這裏: D14. 我的第一個聊天機器人 - 回應訊息的評估.ipynb