ການປະເມີນຜົນລະບົບ RAG: ລະບົບຄົ້ນຫາຂອງທ່ານດີສໍ່າໃດ?
ການປະເມີນຜົນລະບົບ RAG: ລະບົບຄົ້ນຫາຂອງທ່ານດີສໍ່າໃດ?
ສະບາຍດີນັກພັດທະນາ ແລະ ວິສະວະກອນ AI ທຸກທ່ານ. ໃນຍຸກທີ່ Generative AI ແລະ LLMs ກໍາລັງເຂົ້າມາປ່ຽນແປງວິທີການເຮັດວຽກ, ຫຼາຍອົງກອນໃນລາວເລີ່ມສ້າງລະບົບ RAG (Retrieval-Augmented Generation) ເປັນຂອງຕົນເອງ ເຊັ່ນ: Chatbot ສໍາລັບຕອບຄໍາຖາມລູກຄ້າຂອງທຸລະກິດ SME ໃນນະຄອນຫຼວງວຽງຈັນ, ລະບົບຊອກຫາຂໍ້ມູນກົດໝາຍ, ຫຼື ລະບົບຜູ້ຊ່ວຍວິເຄາະຂໍ້ມູນດິນຟ້າອາກາດເພື່ອການກະເສດຢູ່ປາກຊ່ອງ.
ແຕ່ບັນຫາໃຫຍ່ທີ່ສຸດຂອງລະບົບ RAG ແມ່ນ Hallucination ຫຼື ອາການທີ່ AI “ມະໂນ” ຂໍ້ມູນຂຶ້ນມາເອງ. ຖ້າ Chatbot ທາງການແພດ ຫຼື ການກະເສດໃຫ້ຄໍາແນະນໍາທີ່ຜິດພາດ ມັນຈະສົ່ງຜົນກະທົບຢ່າງໜັກຕໍ່ຜູ້ໃຊ້. ຄໍາຖາມຄື: ພວກເຮົາຈະຮູ້ໄດ້ແນວໃດວ່າລະບົບ RAG ຂອງພວກເຮົາດີສໍ່າໃດ? ການດຶງຂໍ້ມູນ (Retrieval) ແມ່ນຖືກຕ້ອງແລ້ວບໍ່? ແລະ ການສ້າງຄໍາຕອບ (Generation) ແມ່ນບໍ່ໄດ້ມະໂນຂຶ້ນມາເອງແມ່ນບໍ່?
ໃນບົດຄວາມນີ້, ພວກເຮົາຈະມາລົງເລິກວິທີການນໍາໃຊ້ RAGAS (Retrieval Augmented Generation Assessment) ເຊິ່ງເປັນວິທີມາດຕະຖານໃນການປະເມີນຜົນລະບົບ RAG ໃນລະດັບ Advanced.
ການເຂົ້າໃຈ Metrics ຂອງ RAGAS (The RAGAS Triad)
RAGAS ຈະໃຊ້ວິທີການທີ່ເອີ້ນວ່າ LLM-as-a-judge (ການໃຊ້ LLM ທີ່ມີປະສິດທິພາບສູງເຊັ່ນ GPT-4 ເປັນກໍາມະການຕັດສິນ) ໂດຍແບ່ງການວັດແທກອອກເປັນ 4 ຕົວຊີ້ວັດ (Metrics) ຫຼັກ ເຊິ່ງກວມເອົາທັງ 2 ພາກສ່ວນຂອງ RAG ຄື: Retriever ແລະ Generator.
1. ວັດແທກຝັ່ງ Generator (ການສ້າງຄໍາຕອບ)
- Faithfulness (ຄວາມຊື່ສັດຕໍ່ຂໍ້ມູນ): ວັດແທກວ່າຄໍາຕອບທີ່ LLM ສ້າງຂຶ້ນມາ (Answer) ສາມາດອ້າງອີງຈາກຂໍ້ມູນທີ່ເຮົາດຶງມາ (Retrieved Context) ໄດ້ 100% ຫຼື ບໍ່. ຖ້າມີຂໍ້ມູນໃດໜຶ່ງໃນຄໍາຕອບທີ່ບໍ່ປາກົດໃນ Context, ຄະແນນ Faithfulness ຈະຫຼຸດລົງ. ນີ້ຄືຕົວຊີ້ວັດຫຼັກໃນການຈັບຜິດ Hallucination.
- Answer Relevancy (ຄວາມກ່ຽວຂ້ອງຂອງຄໍາຕອບ): ຄໍາຕອບນັ້ນຕອບໄດ້ກົງກັບຄໍາຖາມ (Question) ທີ່ຜູ້ໃຊ້ຖາມ ຫຼື ບໍ່. (ວັດແທກໂດຍການຫາຄ່າ Cosine Similarity ຂອງ Embeddings ລະຫວ່າງຄໍາຖາມຕົ້ນສະບັບ ກັບ ຄໍາຖາມທີ່ Reverse-engineered ຈາກຄໍາຕອບ).
2. ວັດແທກຝັ່ງ Retriever (ການຄົ້ນຫາຂໍ້ມູນ)
- Context Precision (ຄວາມຊັດເຈນຂອງການຄົ້ນຫາ): ວັດແທກວ່າ Relevant items ຫຼື ຂໍ້ມູນທີ່ສໍາຄັນ ຖືກຈັດລໍາດັບ (Ranking) ມາຢູ່ເທິງສຸດຂອງ Context List ຫຼື ບໍ່ (Signal-to-noise ratio ຢູ່ອັນດັບທໍາອິດ). ເປັນການນໍາໃຊ້ສູດ Mean Average Precision ຄືກັນກັບລະບົບ Search Engine ທົ່ວໄປ.
- Context Recall (ຄວາມຄົບຖ້ວນຂອງຂໍ້ມູນ): ວັດແທກວ່າ Context ທີ່ລະບົບຄົ້ນຫາດຶງມາ ສາມາດກວມເອົາຂໍ້ມູນທັງໝົດທີ່ຈໍາເປັນໃນການຕອບ Ground Truth (ຄໍາຕອບມາດຕະຖານທີ່ຖືກຕ້ອງ) ໄດ້ຄົບຖ້ວນ ຫຼື ບໍ່.
ການຕິດຕັ້ງ ແລະ ຂຽນໂຄດປະເມີນຜົນ (Python Implementation)
ໃນນາມນັກພັດທະນາ, ໃຫ້ພວກເຮົາລອງມາຈໍາລອງສະຖານະການກວດສອບ Chatbot ໃຫ້ຂໍ້ມູນການທ່ອງທ່ຽວໃນລາວ (ຕົວຢ່າງ: ງານບຸນພຣະທາດຫຼວງ). ພວກເຮົາຈະຕ້ອງກຽມຂໍ້ມູນການປະເມີນທີ່ປະກອບມີ: question (ຄໍາຖາມ), contexts (ຂໍ້ມູນທີ່ Retrieve ມາ), answer (ຄໍາຕອບຈາກ RAG), ແລະ ground_truth (ຄໍາຕອບທີ່ຄວນຈະເປັນ).
ກ່ອນອື່ນໝົດ, ຕິດຕັ້ງ Library ທີ່ຈໍາເປັນ:
pip install ragas langchain langchain-openai datasets
ຫຼັງຈາກນັ້ນ, ສາມາດຂຽນໂຄດເພື່ອທົດສອບໄດ້ດັ່ງນີ້:
import os
from datasets import Dataset
from ragas import evaluate
from ragas.metrics import (
faithfulness,
answer_relevancy,
context_recall,
context_precision,
)
from langchain_openai import ChatOpenAI
# ຕັ້ງຄ່າ API Key ຂອງທ່ານ (ແນະນໍາເປັນ GPT-4 ສໍາລັບການ Evaluate ພາສາລາວໃຫ້ແມ່ນຢໍາ)
os.environ["OPENAI_API_KEY"] = "your-openai-api-key"
# 1. ສ້າງ Dataset ຈໍາລອງສໍາລັບ RAG ຂອງລາວ
data_samples = {
"question": [
"ບຸນນະມັດສະການພຣະທາດຫຼວງປີ 2024 ຈັດຂຶ້ນຢູ່ໃສ ແລະ ເດືອນໃດ?",
"ລາຄາເຂົ້າປຽກເສັ້ນຢູ່ຮ້ານໃນນະຄອນຫຼວງວຽງຈັນໂດຍສະເລ່ຍແມ່ນເທົ່າໃດ?"
],
"contexts": [
["ບຸນນະມັດສະການພຣະທາດຫຼວງແມ່ນເທດສະການໃຫຍ່ຂອງຊາວລາວ, ເຊິ່ງຈັດຂຶ້ນເປັນປະຈໍາທຸກປີຢູ່ນະຄອນຫຼວງວຽງຈັນ ໃນຊ່ວງເດືອນພະຈິກ."],
["ເຂົ້າປຽກເສັ້ນເປັນອາຫານຍອດຮິດໃນລາວ, ມີຂາຍທົ່ວໄປທຸກແຂວງ."] # Context ນີ້ບໍ່ມີຂໍ້ມູນລາຄາ - ຈໍາລອງການ Retrieve ທີ່ບໍ່ດີ
],
"answer": [
"ບຸນນະມັດສະການພຣະທາດຫຼວງ ຈັດຂຶ້ນຢູ່ນະຄອນຫຼວງວຽງຈັນ ໃນເດືອນພະຈິກ.",
"ລາຄາເຂົ້າປຽກເສັ້ນຢູ່ຮ້ານໃນນະຄອນຫຼວງວຽງຈັນ ໂດຍສະເລ່ຍແມ່ນປະມານ 25,000 ກີບ." # ມະໂນ (Hallucinate) ເພາະ Context ບໍ່ມີຂໍ້ມູນລາຄາ
],
"ground_truth": [
"ນະຄອນຫຼວງວຽງຈັນ, ເດືອນພະຈິກ",
"20,000 ຫາ 30,000 ກີບ"
]
}
# ແປງຂໍ້ມູນເປັນ Format ຂອງ HuggingFace Dataset
dataset = Dataset.from_dict(data_samples)
# 2. ເລີ່ມຕົ້ນການປະເມີນຜົນ
print("ກໍາລັງປະເມີນຜົນລະບົບ RAG...")
result = evaluate(
dataset,
metrics=[
context_precision,
faithfulness,
answer_relevancy,
context_recall,
],
)
# 3. ສະແດງຜົນການຕີລາຄາ
df_result = result.to_pandas()
print("\n--- ຜົນການປະເມີນ ---")
print(df_result[['question', 'faithfulness', 'answer_relevancy', 'context_precision', 'context_recall']])
ວິເຄາະຜົນທີ່ຈະໄດ້ຮັບ
ຈາກໂຄດຂ້າງເທິງ, ໃນຄໍາຖາມທີ 2 (ເລື່ອງລາຄາເຂົ້າປຽກເສັ້ນ):
- Faithfulness ຈະຕໍ່າຫຼາຍ (ໃກ້ 0): ເພາະເຖິງແນວໃດ LLM ຈະຕອບວ່າ 25,000 ກີບ, ແຕ່ໃນ
contexts(ແຫຼ່ງຂໍ້ມູນທີ່ລະບົບຄົ້ນຫາໄດ້) ບໍ່ມີຕົວເລກນີ້ເລີຍ. ລະບົບ RAGAS ຈັບໄດ້ທັນທີວ່າ LLM ເຮັດການ Hallucinate. - Context Recall ຈະຕໍ່າ: ເພາະຂໍ້ມູນທີ່ດຶງມາບໍ່ສາມາດ Cover ground truth ໄດ້.
ຂໍ້ຄວນລະວັງໃນການໃຊ້ RAGAS ກັບພາສາລາວ
ເນື່ອງຈາກໂຄງສ້າງຂອງພາສາລາວມີຄວາມຊັບຊ້ອນ ແລະ LLMs ຂະໜາດນ້ອຍ (Small Local Models) ຍັງເກັ່ງພາສາລາວບໍ່ພຽງພໍ, ການໃຊ້ LLM ໂຕນ້ອຍມາເຮັດໜ້າທີ່ເປັນ Judge (ຜູ້ປະເມີນຜົນ) ມັກຈະເຮັດໃຫ້ຄະແນນ Metrics ອອກມາຜິດພາດ. ສໍາລັບວຽກ Production ໃນລາວ, ຂໍແນະນໍາໃຫ້ໃຊ້ GPT-4o ຫຼື Claude 3.5 Sonnet ໃນການເປັນ Model ປະເມີນຜົນຂອງ RAGAS ເພື່ອໃຫ້ມັນເຂົ້າໃຈບໍລິບົດຂອງພາສາລາວ (Tokenization & Semantic matching) ໄດ້ຢ່າງຖືກຕ້ອງທີ່ສຸດ.
ນອກຈາກນີ້, ຖ້າລະບົບບໍລິສັດຂອງທ່ານໃຊ້ Vector Database ເພື່ອຄົ້ນຫາເອກະສານທີ່ເປັນພາສາລາວ ຢ່າລືມ ປັບປຸງ Embedding Models ໃຫ້ສະໜັບສະໜູນພາສາລາວໄດ້ດີຂຶ້ນ (ເຊັ່ນການໃຊ້ Multilingual-E5) ເພື່ອຍົກລະດັບ Context Precision ກ່ອນທີ່ຈະໄປໂທດ Generator.
ບົດສະຫຼຸບ
ການສ້າງລະບົບ RAG ໃຫ້ເຮັດວຽກໄດ້ນັ້ນແມ່ນງ່າຍຫຼາຍ (ໃຊ້ເວລາພຽງບໍ່ເທົ່າໃດຊົ່ວໂມງດ້ວຍ LangChain ຫຼຶ LlamaIndex), ແຕ່ການສ້າງ RAG ໃຫ້ “ຖືກຕ້ອງ, ຊັດເຈນ ແລະ ບໍ່ມະໂນ” ນັ້ນແມ່ນວຽກທີ່ທ້າທາຍ. ການນໍາໃຊ້ RAGAS Framework ຈະຊ່ວຍໃຫ້ທີມພັດທະນາໃນ Vientiane tech space ຂອງພວກເຮົາ ສາມາດປ່ຽນການລອງຜິດລອງຖືກແບບ Manual ມາເປັນການວັດແທກດ້ວຍຂໍ້ມູນທາງສະຖິຕິທີ່ຊັດເຈນ. ເພາະໃນໂລກຂອງ AI ລະດັບ Enterprise, ຖ້າທ່ານບໍ່ສາມາດວັດແທກມັນໄດ້, ທ່ານກໍບໍ່ສາມາດພັດທະນາມັນໃຫ້ດີຂຶ້ນໄດ້.