0%

eval

eval

eval 是一個用於生成問題集並評估語言模型表現的class。它可以根據提供的資料來源自動生成問題集,並使用語言模型回答問題,最後根據答案的正確性或相似性進行評估。eval 支援多種問題類型與格式,並提供詳細的日誌記錄功能。

eval 功能

  1. 生成問題集:根據提供的資料來源,生成指定數量的問題與答案。
  2. 生成特定主題的問題集:根據主題篩選相關文件,生成與主題相關的問題集。
  3. 評估模型表現:使用生成的問題集評估語言模型的回答表現,並計算分數(如 Bert Score、Rouge-L 或正確率)。
  4. 日誌保存:支持保存執行過程與結果的日誌,便於後續分析。

使用question_type測試不同方面的能力

question_type 参数提供了四種問題類型:factsummaryirrelevantcompared,預設是 fact。

  1. fact測試回答一般事實的能力
  2. summary測試模型做摘要的能力
  3. irrelevant測試模型能否分辨文件中不存在答案的問題
  4. compared測試模型比較不同事物的能力

eval 範例

生成問題集

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import akasha

ev = akasha.eval(
model="openai:gpt-4o",
question_type="fact",
question_style="essay",
keep_logs=True,
verbose=True,
)

# 生成問題集
questions, answers = ev.create_questionset(
data_source=["docs/mic"], question_num=3, choice_num=4, output_file_path="cq3.json"
)

# 保存日誌
ev.save_logs("log_cq.json")

生成特定主題的問題集

1
2
3
4
5
6
7
8
# 生成與主題相關的問題集
questions, answers = ev.create_topic_questionset(
data_source=["docs/mic"],
topic="工業 4.0",
question_num=3,
choice_num=4,
output_file_path="4-0topic.json",
)

生成問題集格式

利用create_questionset生成的問題集為JSON格式,並包含 questionanswer list 代表問題與參考答案。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{
"question_style": "essay",
"question_type": "fact",
"question": [
"根據文件xxx,富士康深圳園區的龍華工廠在2019年首次被選為全球燈塔工廠,該工廠在智慧製造方面實現了哪些具體成效?\n\n",
"根據文件xxx,在工業 4.0的發展階段中,「視覺化」階段如何透過資料整合與應用來提升工廠運作效率?請說明其具體實現方式與可能的應用範例。\n\n",
"根據文件xxx,在工業4.0的推行過程中,企業應如何平衡智慧化方案的佈局與長期戰略規劃,以避免因資訊系統框架限制而導致資源重複投入?\n\n"
],
"answer": [
"富士康深圳園區的龍華工廠在2019年首次被選為全球燈塔工廠....",
"「視覺化」階段透過感測器和機械裝置的引數讀取,整合各產線作業資料,將工廠流程數...",
"企業在推行工業4.0時,需根據作業難度、流程需求及業務特性調..."

]
}

評估模型表現

question_style"single_choice"(選擇題),evalution結果為正確率, 若為 "essay"(問答題),結果為 bert score,
rouge score 和 ***llm score *** 的分數,皆介於0~1之間

bert-score

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

ROUGE-score

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

llm-score

利用另一種語言模型,將語言模型的回答與問答題文件中的參考答案進行比較,生成相似度分數,可以使用參數 eval_model 指定使用作為評判的語言模型

1
2
3
4
5
6
# 使用生成的問題集評估模型表現
result = ev.evaluation(
questionset_file="cq3.json",
data_source=["docs/mic"],
)
print(result)

eval 參數

初始化參數

model: Union[str, BaseLanguageModel]

使用的語言模型,例如 "openai:gpt-4o""openai:gpt-3.5-turbo"

question_type: str

問題類型,包括 "fact"(事實型)、"irrelevant"(無關型)、"summary"(摘要型)、"compared"(比較型)。

question_style: str

問題格式,包括 "essay"(問答題)或 "single_choice"(選擇題)。

keep_logs: bool

是否保存執行過程與結果的日誌。

verbose: bool

是否顯示詳細的執行過程。

max_input_tokens: int

單次輸入模型的最大 token 數。

max_output_tokens: int

模型輸出的最大 token 數。

temperature: float

語言模型的隨機性參數,範圍為 0.0 到 1.0。

system_prompt: str

指示語言模型的輸出格式需求。


create_questionset 參數

data_source: Union[List[Union[str, Path]], Path, str, dbs]

資料來源,可以是文件目錄、文件路徑或資料庫。

question_num: int

生成的問題數量。

choice_num: int

選擇題的選項數量(僅在 question_style="single_choice" 時有效)。

output_file_path: str

輸出問題集的文件路徑。


create_topic_questionset 參數

data_source: Union[List[str], str]

資料來源,可以是文件目錄或文件路徑。

topic: str

生成問題集的主題。

question_num: int

生成的問題數量。

choice_num: int

選擇題的選項數量(僅在 question_style="single_choice" 時有效)。

output_file_path: str

輸出問題集的文件路徑。


evaluation 參數

questionset_file: str

問題集文件的路徑,(.json) 格式。

data_source: Union[List[Union[str, Path]], Path, str, dbs]

一個或多個包含文件檔案的資料夾路徑名稱、網址,或單一個dbs物件

eval_model: Union[BaseLanguageModel, str]

用於評估的語言模型,默認為初始化時的模型。


日誌與結果

  • 問題集生成過程與結果會保存到指定的日誌文件中。
  • 評估結果包括 Bert Score、Rouge-L 分數或正確率,具體取決於問題的格式。

相關連結

self.db的詳細資訊可參考向量資料庫
self.docs的詳細資訊可參考文件搜尋
self.model_obj的詳細資訊可參考設定語言模型
self.embeddings_obj的詳細資訊可參考設定嵌入模型