08. Mengevaluasi heuristik berdasarkan Rouge, BLEU, METEOR, dan SemScore
Evaluasi heuristik
Evaluasi heuristik adalah metode penalaran yang cepat dan mudah yang dapat digunakan ketika waktu atau informasi yang tidak mencukupi menghalangi Anda untuk membuat penilaian yang rasional secara sempurna.
(Metode ini juga memiliki keuntungan untuk menghemat waktu dan uang ketika menggunakan LLM sebagai Juri).
(Catatan: Hapus kode di bawah ini untuk memperbarui pustaka sebelum melanjutkan.
Mari kita buat sistem RAG yang akan digunakan untuk pengujian.
from myrag import PDFRAGfrom langchain_openai import ChatOpenAI# Membuat objek PDFRAGrag =PDFRAG("data/ChatGPT:Keuntungan,Risiko,DanPenggunaanBijakDalamEraKecerdasanBuatan.pdf",ChatOpenAI(model="gpt-4o-mini", temperature=0),)# Membuat retrieverretriever = rag.create_retriever()# Membuat chainchain = rag.create_chain(retriever)# Menghasilkan jawaban untuk pertanyaanchain.invoke("Apa risiko utama dalam penggunaan ChatGPT?")
Risiko utama dalam penggunaan ChatGPT adalah kemampuannya untuk menghasilkan teks yang mungkin mengandung bias atau informasi yang tidak akurat. Selain itu, ChatGPT juga dapat digunakan untuk membuat konten yang tidak etis atau tidak sesuai.
Buat sebuah fungsi bernama ask_question. Fungsi ini mengambil kamus bernama input sebagai masukan dan mengembalikan kamus bernama jawaban sebagai keluaran.
# Membuat fungsi untuk menjawab pertanyaandefask_question(inputs:dict):return{"answer": chain.invoke(inputs["question"])}
Menggunakan Alat Analisis Morfologi Korea
Penganalisis Morfologi adalah alat yang memecah kalimat menjadi morfem, unit makna terkecil, dan menentukan bagian kata untuk setiap morfem.
Fitur utama penganalisis morfem adalah
Memisahkan kalimat menjadi morfem
Menandai bagian ucapan untuk setiap morfem
Untuk mengekstrak bentuk default morfem Anda dapat menggunakan penganalisis morfem bahasa Indonesia dengan memanfaatkan package nlp_id.
from nlp_id.tokenizer import Tokenizer# Deklarasi tokenizerid_tokenizer =Tokenizer()sent1 ="Halo. Senang bertemu. Nama saya Teddy."sent2 ="Halo, senang bertemu~^^ Nama saya Teddy!!"# Tokenisasiprint(sent1.split())print(sent2.split())print("==="*20)# Tokenisasiprint(id_tokenizer.tokenize(sent1))print(id_tokenizer.tokenize(sent2))
Ini terutama digunakan untuk evaluasi terjemahan mesin.
Metrik ini mengukur seberapa mirip teks yang dihasilkan dengan teks referensi.
Dihitung berdasarkan presisi n-gram.
Cara Perhitungan:
Perhitungan Presisi N-gram: Menghitung seberapa banyak n-gram dari 1-gram hingga 4-gram dalam hasil terjemahan mesin yang terdapat dalam terjemahan referensi.
Penerapan Penalti Singkat (Brevity Penalty): Penalti dikenakan jika terjemahan mesin lebih pendek dibandingkan dengan terjemahan referensi.
Perhitungan Skor Akhir: Skor BLEU akhir dihitung dengan mengalikan rata-rata geometrik presisi n-gram dengan penalti singkat.
Keterbatasan:
Tidak mempertimbangkan makna dan hanya memeriksa kesesuaian string sederhana.
Tidak membedakan pentingnya kata.
from nltk.translate.bleu_score import sentence_bleusent1 ="Halo. Senang bertemu. Nama saya Teddy."sent2 ="Halo, senang bertemu~^^ Nama saya Teddy!!"sent3 ="Nama saya Teddy. Halo. Senang bertemu."# tokenizeprint(id_tokenizer.tokenize(sent1))print(id_tokenizer.tokenize(sent2))print(id_tokenizer.tokenize(sent3))
Dalam catatan ini, kami mengusulkan metrik evaluasi yang sederhana namun efektif yang disebut SEMSCORE yang secara langsung membandingkan keluaran model dengan tanggapan standar emas menggunakan kesamaan teks semantik (STS). Output dari 12 LLM terarah terkemuka yang disetel dibandingkan dan dievaluasi dengan delapan metrik evaluasi pembuatan teks yang populer, dan hasilnya menunjukkan bahwa metrik SEMSCORE yang diusulkan mengungguli semua metrik evaluasi lainnya dalam hal korelasi dengan evaluasi manusia.
Menghasilkan penyematan kalimat menggunakan model SentenceTransformer, dan menghitung kemiripan kosinus antara dua kalimat. Kami menggunakan model all-mpnet-base-v2.
from sentence_transformers import SentenceTransformer, utilimport warningswarnings.filterwarnings("ignore", category=FutureWarning)sent1 ="Halo. Senang bertemu. Nama saya Teddy."sent2 ="Halo, senang bertemu~^^ Nama saya Teddy!!"sent3 ="Nama saya Teddy. Halo. Senang bertemu."# memuat model SentenceTransformermodel =SentenceTransformer("all-mpnet-base-v2")# encode kalimat-kalimatsent1_encoded = model.encode(sent1, convert_to_tensor=True)sent2_encoded = model.encode(sent2, convert_to_tensor=True)sent3_encoded = model.encode(sent3, convert_to_tensor=True)# Hitung kemiripan kosinus antara sent1 dan sent2cosine_similarity = util.pytorch_cos_sim(sent1_encoded, sent2_encoded).item()print(f"[1] {sent1}\n[2] {sent2}\n[score] {cosine_similarity:.5f}")print("==="*20)# menghitung kemiripan kosinus antara sent1 dan sent3cosine_similarity = util.pytorch_cos_sim(sent1_encoded, sent3_encoded).item()print(f"[1] {sent1}\n[2] {sent3}\n[score] {cosine_similarity:.5f}")
[1] Halo. Senang bertemu. Nama saya Teddy.
[2] Halo, senang bertemu~^^ Nama saya Teddy!!
[score] 0.92099
============================================================
[1] Halo. Senang bertemu. Nama saya Teddy.
[2] Nama saya Teddy. Halo. Senang bertemu.
[score] 0.96367
Membuat evaluator
Dengan menggabungkan semua hal di atas, Evaluator akan terlihat seperti ini