Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Sesuaikan alur kerja Anda menggunakan pustaka fmeval
Anda dapat menyesuaikan evaluasi model Anda untuk memungkinkan model yang bukan model JumpStart atau Amazon Bedrock atau menggunakan alur kerja khusus untuk evaluasi. Jika Anda menggunakan model Anda sendiri, Anda harus membuat kustomModelRunner. Jika Anda menggunakan dataset Anda sendiri untuk evaluasi, Anda harus mengkonfigurasi DataConfig objek. Bagian berikut menunjukkan cara memformat dataset input Anda, menyesuaikan DataConfig objek untuk menggunakan dataset kustom Anda, dan membuat kustom. ModelRunner
Jika Anda ingin menggunakan kumpulan data Anda sendiri untuk mengevaluasi model Anda, Anda harus menggunakan DataConfig objek untuk menentukan dataset_name dan kumpulan data yang ingin Anda evaluasi. dataset_uri Jika Anda menggunakan dataset bawaan, DataConfig objek sudah dikonfigurasi sebagai default untuk algoritma evaluasi.
Anda dapat menggunakan satu kumpulan data khusus setiap kali Anda menggunakan evaluate fungsi tersebut. Anda dapat memanggil evaluate beberapa kali untuk menggunakan sejumlah kumpulan data yang Anda inginkan.
Konfigurasikan kumpulan data khusus dengan permintaan model Anda yang ditentukan di kolom pertanyaan, dan jawaban target yang ditentukan dalam jawaban kolom, sebagai berikut:
from fmeval.data_loaders.data_config import DataConfig from fmeval.constants import MIME_TYPE_JSONLINES config = DataConfig( dataset_name="tiny_dataset", dataset_uri="tiny_dataset.jsonl", dataset_mime_type=MIME_TYPE_JSONLINES, model_input_location="question", target_output_location="answer", )
Bagian DataConfig dapat berisi parameter berikut:
-
dataset_name— Nama kumpulan data yang ingin Anda gunakan untuk mengevaluasi LLM Anda.dataset_uri— Jalur lokal atau pengidentifikasi sumber daya seragam (URI) ke lokasi S3 dari kumpulan data Anda. -
dataset_mime_type— Format data input yang ingin Anda gunakan untuk mengevaluasi LLM Anda. FMEval Perpustakaan dapat mendukung keduanyaMIME_TYPE_JSONdanMIME_TYPE_JSONLINES. -
model_input_location— (Opsional) Nama kolom dalam dataset Anda yang berisi input model atau prompt yang ingin Anda evaluasi.Gunakan
model_input_locationyang menentukan nama kolom Anda. Kolom harus berisi nilai-nilai berikut yang sesuai dengan tugas-tugas terkait berikut:-
Untuk evaluasi generasi terbuka, toksisitas, dan akurasi, tentukan kolom yang berisi prompt yang harus ditanggapi oleh model Anda.
-
Untuk tugas menjawab pertanyaan, tentukan kolom yang berisi pertanyaan yang harus direspon oleh model Anda.
-
Untuk tugas meringkas teks, tentukan nama kolom yang berisi teks yang ingin diringkas oleh model Anda.
-
Untuk tugas klasifikasi, tentukan nama kolom yang berisi teks yang ingin diklasifikasikan oleh model Anda.
-
Untuk evaluasi pengetahuan faktual, tentukan nama kolom yang berisi pertanyaan yang Anda inginkan model untuk memprediksi jawabannya.
-
Untuk evaluasi ketahanan semantik, tentukan nama kolom yang berisi input yang Anda inginkan untuk diganggu oleh model Anda.
-
Untuk evaluasi stereotip yang cepat, gunakan
sent_more_input_locationdansent_less_input_locationbukanmodel_input_location, seperti yang ditunjukkan pada parameter berikut.
-
-
model_output_location— (Opsional) Nama kolom dalam dataset Anda yang berisi output prediksi yang ingin Anda bandingkan dengan output referensi yang terkandung ditarget_output_locationdalamnya. Jika Anda memberikanmodel_output_location, maka FMEval tidak akan mengirim permintaan ke model Anda untuk inferensi. Sebaliknya, ia menggunakan output yang terkandung dalam kolom yang ditentukan untuk mengevaluasi model Anda. -
target_output_location— Nama kolom dalam dataset referensi yang berisi nilai sebenarnya untuk dibandingkan dengan nilai prediksi yang terkandung dimodel_output_locationdalamnya. Diperlukan hanya untuk pengetahuan faktual, akurasi, dan ketahanan semantik. Untuk pengetahuan faktual, setiap baris di kolom ini harus berisi semua kemungkinan jawaban yang dipisahkan oleh pembatas. Misalnya, jika jawaban untuk pertanyaan adalah [“UK”, “Inggris”], maka kolom harus berisi “Inggris <OR>Inggris”. Prediksi model benar jika berisi salah satu jawaban yang dipisahkan oleh pembatas. -
category_locationNama kolom yang berisi nama kategori. Jika Anda memberikan nilai untukcategory_location, maka skor dikumpulkan dan dilaporkan untuk setiap kategori. -
sent_more_input_location— Nama kolom yang berisi prompt dengan bias lebih. Diperlukan hanya untuk stereotip cepat. Hindari bias bawah sadar. Untuk contoh bias, lihat kumpulan data Crows-pairs. -
sent_less_input_location— Nama kolom yang berisi prompt dengan bias yang lebih sedikit. Diperlukan hanya untuk stereotip cepat. Hindari bias bawah sadar. Untuk contoh bias, lihat kumpulan data Crows-pairs. -
sent_more_output_location— (Opsional) Nama kolom yang berisi probabilitas prediksi bahwa respons yang dihasilkan model Anda akan mengandung lebih banyak bias. Parameter ini hanya digunakan dalam tugas stereotip cepat. -
sent_less_output_location— (Opsional) Nama kolom yang berisi probabilitas prediksi bahwa respons yang dihasilkan model Anda akan mengandung lebih sedikit bias. Parameter ini hanya digunakan dalam tugas stereotip cepat.
Jika Anda ingin menambahkan atribut baru yang sesuai dengan kolom dataset ke DataConfig kelas, Anda harus menambahkan suffix
_location ke akhir nama atribut.
Untuk mengevaluasi model kustom, gunakan kelas data dasar untuk mengonfigurasi model Anda dan membuat kustomModelRunner. Kemudian, Anda dapat menggunakan ini ModelRunner untuk mengevaluasi model bahasa apa pun. Gunakan langkah-langkah berikut untuk menentukan konfigurasi model, membuat kustomModelRunner, dan mengujinya.
ModelRunnerAntarmuka memiliki satu metode abstrak sebagai berikut:
def predict(self, prompt: str) → Tuple[Optional[str], Optional[float]]
Metode ini mengambil prompt sebagai input string, dan mengembalikan Tuple yang berisi respons teks model dan probabilitas log masukan. Setiap orang ModelRunner harus menerapkan predict metode.
Buat kustom ModelRunner
-
Tentukan konfigurasi model.
Contoh kode berikut menunjukkan cara menerapkan
dataclassdekorator keHFModelConfigkelas khusus sehingga Anda dapat menentukan konfigurasi model untuk Hugging Facemodel:from dataclasses import dataclass @dataclass class HFModelConfig: model_name: str max_new_tokens: int seed: int = 0 remove_prompt_from_generated_text: bool = TruePada contoh kode sebelumnya, hal berikut berlaku:
-
Parameter
max_new_tokensini digunakan untuk membatasi panjang respons dengan membatasi jumlah token yang dikembalikan oleh LLM. Jenis model diatur dengan melewatkan nilaimodel_nameketika kelas dipakai. Dalam contoh ini, nama model diatur kegpt2, seperti yang ditunjukkan pada akhir bagian ini. Parametermax_new_tokensadalah salah satu opsi untuk mengonfigurasi strategi pembuatan teks menggunakan konfigurasigpt2model untuk model GPT OpenAI yang telah dilatih sebelumnya. Lihat AutoConfiguntuk jenis model lainnya. -
Jika parameter
remove_prompt_from_generated_textdisetel keTrue, maka respons yang dihasilkan tidak akan berisi prompt asal yang dikirim dalam permintaan.
Untuk parameter pembuatan teks lainnya, lihat Hugging Facedokumentasi untuk GenerationConfig
. -
-
Buat kustom
ModelRunnerdan terapkan metode prediksi. Contoh kode berikut menunjukkan cara membuat kustomModelRunneruntuk Hugging Face model menggunakanHFModelConfigkelas yang dibuat dalam contoh kode sebelumnya.from typing import Tuple, Optional import torch from transformers import AutoModelForCausalLM, AutoTokenizer from fmeval.model_runners.model_runner import ModelRunner class HuggingFaceCausalLLMModelRunner(ModelRunner): def __init__(self, model_config: HFModelConfig): self.config = model_config self.model = AutoModelForCausalLM.from_pretrained(self.config.model_name) self.tokenizer = AutoTokenizer.from_pretrained(self.config.model_name) def predict(self, prompt: str) -> Tuple[Optional[str], Optional[float]]: input_ids = self.tokenizer(prompt, return_tensors="pt").to(self.model.device) generations = self.model.generate( **input_ids, max_new_tokens=self.config.max_new_tokens, pad_token_id=self.tokenizer.eos_token_id, ) generation_contains_input = ( input_ids["input_ids"][0] == generations[0][: input_ids["input_ids"].shape[1]] ).all() if self.config.remove_prompt_from_generated_text and not generation_contains_input: warnings.warn( "Your model does not return the prompt as part of its generations. " "`remove_prompt_from_generated_text` does nothing." ) if self.config.remove_prompt_from_generated_text and generation_contains_input: output = self.tokenizer.batch_decode(generations[:, input_ids["input_ids"].shape[1] :])[0] else: output = self.tokenizer.batch_decode(generations, skip_special_tokens=True)[0] with torch.inference_mode(): input_ids = self.tokenizer(self.tokenizer.bos_token + prompt, return_tensors="pt")["input_ids"] model_output = self.model(input_ids, labels=input_ids) probability = -model_output[0].item() return output, probabilityKode sebelumnya menggunakan
HuggingFaceCausalLLMModelRunnerkelas kustom yang mewarisi properti dari FMEvalModelRunnerkelas. Kelas kustom berisi konstruktor dan definisi untuk fungsi prediksi, yang mengembalikan aTuple.Untuk
ModelRunnercontoh lainnya, lihat bagian model_runnerdari pustaka. fmevalHuggingFaceCausalLLMModelRunnerKonstruktor berisi definisi berikut:-
Konfigurasi diatur ke
HFModelConfig, didefinisikan di awal bagian ini. -
Model diatur ke model pra-terlatih dari Hugging Face Auto Class
yang ditentukan menggunakan parameter model_name pada instantiation. -
Tokenizer diatur ke kelas dari pustaka Hugging Face tokenizer
yang cocok dengan model pra-terlatih yang ditentukan oleh. model_name
Menggunakan metode
predictpada kelasHuggingFaceCausalLLMModelRunneryang ditentukan dalam contoh berikut.-
input_ids— Variabel yang berisi masukan untuk model Anda. Model menghasilkan input sebagai berikut.-
A
tokenizerMengonversi permintaan yang terkandungpromptdalam pengenal token ()IDs. Token ini IDs, yang merupakan nilai numerik yang mewakili token tertentu (kata, sub-kata atau karakter), dapat digunakan langsung oleh model Anda sebagai input. Token IDs dikembalikan sebagai objek PyTorch tensor, seperti yang ditentukan olehreturn_tensors="pt". Untuk tipe tipe tensor kembali lainnya, lihat Hugging Face dokumentasi untuk apply_chat_template. -
Token IDs dikirim ke perangkat tempat model berada sehingga dapat digunakan oleh model.
-
-
generations— Variabel yang berisi respons yang dihasilkan oleh LLM Anda. Fungsi generate model menggunakan input berikut untuk menghasilkan respons:-
input_idsDari langkah sebelumnya. -
Parameter
max_new_tokensyang ditentukan dalamHFModelConfig. -
A
pad_token_idmenambahkan token akhir kalimat (eos) ke respons. Untuk token lain yang dapat Anda gunakan, lihat Hugging Face dokumentasi untuk PreTrainedTokenizer.
-
-
generation_contains_input- Variabel boolean yang kembaliTrueketika respons yang dihasilkan menyertakan prompt input dalam responsnya, danFalsesebaliknya. Nilai pengembalian dihitung menggunakan perbandingan elemen antara yang berikut ini.-
Semua token IDs dalam prompt input yang terkandung di dalamnya
input_ids["input_ids"][0]. -
Awal dari konten yang dihasilkan yang terkandung di dalamnya
generations[0][: input_ids["input_ids"].shape[1]].
predictMetode ini mengembalikan peringatan jika Anda mengarahkan LLM keremove_prompt_from_generated_textdalam konfigurasi Anda tetapi respons yang dihasilkan tidak berisi prompt input.Output dari
predictmetode ini berisi string yang dikembalikan olehbatch_decodemetode, yang mengubah token yang IDs dikembalikan dalam respons menjadi teks yang dapat dibaca manusia. Jika Anda menentukanremove_prompt_from_generated_textsebagaiTrue, maka prompt input dihapus dari teks yang dihasilkan. Jika Anda menentukanremove_prompt_from_generated_textsebagaiFalse, teks yang dihasilkan akan dikembalikan tanpa token khusus yang Anda sertakan dalam kamusspecial_token_dict, seperti yang ditentukan olehskip_special_tokens=True. -
-
-
Uji Anda
ModelRunner. Kirim permintaan sampel ke model Anda.Contoh berikut menunjukkan cara menguji model menggunakan model
gpt2pra-terlatih dari Hugging FaceAutoConfigkelas:hf_config = HFModelConfig(model_name="gpt2", max_new_tokens=32) model = HuggingFaceCausalLLMModelRunner(model_config=hf_config)Dalam contoh kode sebelumnya,
model_nametentukan nama model pra-terlatih.HFModelConfigKelas ini dipakai sebagai hf_config dengan nilai untuk parametermax_new_tokens, dan digunakan untuk menginisialisasi.ModelRunnerJika Anda ingin menggunakan model pra-terlatih lainnyaHugging Face, pilih
pretrained_model_name_or_pathdifrom_pretrainedbawah AutoClass. Terakhir, uji Anda
ModelRunner. Kirim permintaan sampel ke model Anda seperti yang ditunjukkan dalam contoh kode berikut:model_output = model.predict("London is the capital of?")[0] print(model_output) eval_algo.evaluate_sample()