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", )
DataConfig
Kelas berisi parameter berikut:
-
dataset_name
— Nama dataset yang ingin Anda gunakan untuk mengevaluasi AndaLLM.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 AndaLLM. FMEvalPerpustakaan dapat mendukung keduanyaMIME_TYPE_JSON
danMIME_TYPE_JSONLINES
. -
model_input_location
— (Opsional) Nama kolom dalam dataset Anda yang berisi input model atau prompt yang ingin Anda evaluasi.Gunakan
model_input_location
yang 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 ringkasan 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_location
dansent_less_input_location
bukanmodel_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_location
dalamnya. 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_location
dalamnya. 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_location
— Nama 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 lebih banyak bias. 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.
ModelRunner
Antarmuka 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 bagaimana menerapkan
dataclass
dekorator keHFModelConfig
kelas kustom 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 = True
Dalam contoh kode sebelumnya, berikut ini berlaku:
-
Parameter
max_new_tokens
ini digunakan untuk membatasi panjang respons dengan membatasi jumlah token yang dikembalikan olehLLM. Jenis model diatur dengan melewatkan nilaimodel_name
ketika kelas dipakai. Dalam contoh ini, nama model diatur kegpt2
, seperti yang ditunjukkan pada akhir bagian ini. Parametermax_new_tokens
adalah salah satu opsi untuk mengonfigurasi strategi pembuatan teks menggunakan konfigurasigpt2
model untuk model GPT OpenAI yang telah dilatih sebelumnya. Lihat AutoConfiguntuk jenis model lainnya. -
Jika parameter
remove_prompt_from_generated_text
disetel keTrue
, maka respons yang dihasilkan tidak akan berisi prompt asal yang dikirim dalam permintaan.
Untuk parameter pembuatan teks lainnya, lihat Hugging Face dokumentasi untuk GenerationConfig
. -
-
Buat kustom
ModelRunner
dan terapkan metode prediksi. Contoh kode berikut menunjukkan cara membuat kustomModelRunner
untuk Hugging Face model menggunakanHFModelConfig
kelas 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, probability
Kode sebelumnya menggunakan
HuggingFaceCausalLLMModelRunner
kelas kustom yang mewarisi properti dari FMEvalModelRunner
kelas. Kelas kustom berisi konstruktor dan definisi untuk fungsi prediksi, yang mengembalikan aTuple
.Untuk
ModelRunner
contoh lainnya, lihat bagian model_runnerperpustakaan. fmeval
HuggingFaceCausalLLMModelRunner
Konstruktor 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 Hugging Face pustaka tokenizer
yang cocok dengan model pra-terlatih yang ditentukan oleh. model_name
predict
Metode diHuggingFaceCausalLLMModelRunner
kelas menggunakan definisi berikut:-
input_ids
— Variabel yang berisi masukan untuk model Anda. Model menghasilkan input sebagai berikut.-
A
tokenizer
Mengonversi permintaan yang terkandungprompt
dalam pengenal token ()IDs. Token iniIDs, 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 PyTorch objek tensor, seperti yang ditentukan olehreturn_tensors="pt"
. Untuk tipe tipe tensor balik 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 AndaLLM. Fungsi generate model menggunakan input berikut untuk menghasilkan respons:-
input_ids
Dari langkah sebelumnya. -
Parameter
max_new_tokens
yang ditentukan dalamHFModelConfig
. -
A
pad_token_id
menambahkan 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 kembaliTrue
ketika respons yang dihasilkan menyertakan prompt input dalam responsnya, danFalse
sebaliknya. 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]]
.
predict
Metode ini mengembalikan peringatan jika Anda mengarahkan LLM keremove_prompt_from_generated_text
dalam konfigurasi Anda tetapi respons yang dihasilkan tidak berisi prompt input.Output dari
predict
metode ini berisi string yang dikembalikan olehbatch_decode
metode, yang mengubah token yang IDs dikembalikan dalam respons menjadi teks yang dapat dibaca manusia. Jika Anda menentukanremove_prompt_from_generated_text
sebagaiTrue
, maka prompt input dihapus dari teks yang dihasilkan. Jika Anda menentukanremove_prompt_from_generated_text
sebagaiFalse
, 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
gpt2
pra-terlatih dari Hugging FaceAutoConfig
kelas:hf_config = HFModelConfig(model_name="gpt2", max_new_tokens=32) model = HuggingFaceCausalLLMModelRunner(model_config=hf_config)
Dalam contoh kode sebelumnya,
model_name
tentukan nama model pra-terlatih.HFModelConfig
Kelas ini dipakai sebagai hf_config dengan nilai untuk parametermax_new_tokens
, dan digunakan untuk menginisialisasi.ModelRunner
Jika Anda ingin menggunakan model pra-terlatih lain dari Hugging Face, pilih
pretrained_model_name_or_path
difrom_pretrained
bawah AutoClass. Terakhir, uji Anda
ModelRunner
. Kirim permintaan sampel ke model Anda seperti yang ditunjukkan pada contoh kode berikut:model_output = model.predict("London is the capital of?")[0] print(model_output) eval_algo.evaluate_sample()