Evaluasi model Amazon Bedrock untuk akurasi ringkasan teks - Amazon SageMaker

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Evaluasi model Amazon Bedrock untuk akurasi ringkasan teks

Anda dapat menggunakan ModelRunner pembungkus tingkat tinggi untuk membuat evaluasi khusus berdasarkan model yang di-host di luar. JumpStart

Tutorial ini menunjukkan cara memuat model Anthropic Claude 2, yang tersedia di Amazon Bedrock, dan meminta model ini untuk meringkas petunjuk teks. Kemudian, tutorial ini menunjukkan bagaimana mengevaluasi respons model untuk akurasi menggunakan Rouge-L, Meteor, dan BERTScoreMetrik .

Tutorial menunjukkan cara melakukan hal berikut:

  • Siapkan lingkungan Anda.

  • Jalankan evaluasi model Anda.

  • Lihat hasil analisis Anda.

Siapkan lingkungan Anda

Prasyarat
  • Gunakan basis Python 3.10 lingkungan kernel dan instans ml.m5.2xlarge Amazon Elastic Compute Cloud EC2 (Amazon) sebelum memulai tutorial ini.

    Untuk informasi tambahan tentang jenis instans dan kasus penggunaan yang direkomendasikan, lihatJenis instans tersedia untuk digunakan dengan Studio Classic.

Siapkan Amazon Bedrock

Sebelum Anda dapat menggunakan model Amazon Bedrock, Anda harus meminta akses ke sana.

  1. Masuk ke Anda Akun AWS.

    1. Jika Anda tidak memiliki AWS akun, lihat Mendaftar untuk AWS akun di Mengatur Amazon Bedrock.

  2. Buka konsol Amazon Bedrock.

  3. Selamat Datang di Amazon Bedrock! bagian yang terbuka, pilih Kelola akses model.

  4. Di bagian Akses model yang muncul, pilih Kelola akses model.

  5. Di bagian Model dasar yang muncul, centang kotak di sebelah Claude yang tercantum di bawah subbagian Antropik Model.

  6. Pilih Minta akses model.

  7. Jika permintaan Anda berhasil, tanda centang dengan Akses yang diberikan akan muncul di bawah Status akses di sebelah model yang Anda pilih.

  8. Anda mungkin perlu masuk kembali Akun AWS ke Anda untuk dapat mengakses model.

Instal pustaka yang diperlukan
  1. Dalam kode Anda, instal fmeval dan boto3 pustaka sebagai berikut:

    !pip install fmeval !pip3 install boto3==1.28.65
  2. Impor pustaka, tetapkan faktor paralelisasi, dan panggil klien Amazon Bedrock sebagai berikut:

    import boto3 import json import os # Dependent on available hardware and memory os.environ["PARALLELIZATION_FACTOR"] = "1" # Bedrock clients for model inference bedrock = boto3.client(service_name='bedrock') bedrock_runtime = boto3.client(service_name='bedrock-runtime')

    Dalam contoh kode sebelumnya, berikut ini berlaku:

    • PARALLELIZATION_FACTOR— Pengganda untuk jumlah batch bersamaan yang dikirim ke instance komputasi Anda. Jika perangkat keras Anda memungkinkan paralelisasi, Anda dapat mengatur nomor ini untuk mengalikan jumlah pemanggilan untuk pekerjaan evaluasi Anda dengan. Misalnya, jika Anda memiliki 100 pemanggilan, dan PARALLELIZATION_FACTOR disetel ke2, maka pekerjaan Anda akan menjalankan 200 pemanggilan. Anda dapat meningkatkan PARALLELIZATION_FACTOR hingga10, atau menghapus variabel seluruhnya. Untuk membaca blog tentang cara penggunaan AWS Lambda, PARALLELIZATION_FACTOR lihat Kontrol penskalaan Lambda Baru untuk sumber peristiwa Kinesis dan DynamoDB.

  3. Unduh kumpulan data sampel, JSON Lines sample-dataset.jsonl, ke dalam direktori kerja Anda saat ini.

  4. Periksa apakah lingkungan Anda berisi file input sampel sebagai berikut:

    import glob # Check for the built-in dataset if not glob.glob("sample-dataset.jsonl"): print("ERROR - please make sure file exists: sample-dataset.jsonl")
Kirim permintaan inferensi sampel ke model Anda
  1. Tentukan model dan MIME jenis prompt Anda. Untuk model Anthropic Claude 2 yang dihosting di Amazon Bedrock, prompt Anda harus disusun sebagai berikut:

    import json model_id = 'anthropic.claude-v2' accept = "application/json" contentType = "application/json" # Ensure that your prompt has the correct format prompt_data = """Human: Who is Barack Obama? Assistant: """

    Untuk informasi selengkapnya tentang cara menyusun isi permintaan Anda, lihat Bidang badan permintaan pemanggilan model. Model lain mungkin memiliki format yang berbeda.

  2. Kirim permintaan sampel ke model Anda. Isi permintaan Anda berisi prompt dan parameter tambahan apa pun yang ingin Anda atur. Permintaan sampel dengan max_tokens_to_sample set untuk 500 berikut:

    body = json.dumps({"prompt": prompt_data, "max_tokens_to_sample": 500}) response = bedrock_runtime.invoke_model( body=body, modelId=model_id, accept=accept, contentType=contentType ) response_body = json.loads(response.get("body").read()) print(response_body.get("completion"))

    Dalam contoh kode sebelumnya, Anda dapat mengatur parameter berikut:

    • temperature— Mengontrol keacakan teks yang dihasilkan, dan menerima nilai positif. Nilai yang lebih tinggi dari temperature menginstruksikan model untuk menghasilkan respons yang lebih acak dan beragam. Nilai yang lebih rendah menghasilkan respons yang lebih dapat diprediksi. Rentang untuk temperature kebohongan antara 0 dan1, dengan nilai default 0,5.

    • topP— Mengontrol keacakan dengan membatasi set token untuk dipertimbangkan saat membuat token berikutnya. Nilai yang lebih tinggi dari topP memungkinkan untuk satu set yang berisi kosakata yang lebih luas dan nilai yang lebih rendah membatasi kumpulan token ke kata-kata yang lebih mungkin. Rentang 0 untuk topP are to1, dengan nilai default1.

    • topK— Membatasi prediksi model ke token k paling mungkin teratas. Nilai yang lebih tinggi topK memungkinkan respons yang lebih inventif. Nilai yang lebih rendah menghasilkan respons yang lebih koheren. Rentang 0 untuk topK are to500, dengan nilai default250.

    • max_tokens_to_sample— Membatasi panjang respons dengan membatasi jumlah token yang dikembalikan oleh model Anda. Rentang 0 untuk max_tokens_to_sample are to4096, dengan nilai default200.

    • stop_sequences— Menentukan daftar urutan karakter yang memberi tahu model Anda untuk berhenti menghasilkan respons. Output model dihentikan saat pertama kali salah satu string yang terdaftar ditemui dalam output. Respons tidak mengandung urutan berhenti. Misalnya, Anda dapat menggunakan urutan pengembalian carriage untuk membatasi respons model ke satu baris. Anda dapat mengonfigurasi hingga 4 menghentikan urutan.

    Untuk informasi selengkapnya tentang parameter yang dapat Anda tentukan dalam permintaan, lihat Model Anthropic Claude.

Mengatur FMEval
  1. Muat pustaka yang diperlukan untuk dijalankan FMEval sebagai berikut:

    from fmeval.data_loaders.data_config import DataConfig from fmeval.model_runners.bedrock_model_runner import BedrockModelRunner from fmeval.constants import MIME_TYPE_JSONLINES from fmeval.eval_algorithms.summarization_accuracy import SummarizationAccuracy, SummarizationAccuracyConfig
  2. Siapkan konfigurasi data untuk dataset input Anda.

    Masukan sampel berikut adalah satu baris darisample-dataset.jsonl:

    { "document": "23 October 2015 Last updated at 17:44 BST\nIt's the highest rating a tropical storm can get and is the first one of this magnitude to hit mainland Mexico since 1959.\nBut how are the categories decided and what do they mean? Newsround reporter Jenny Lawrence explains.", "summary": "Hurricane Patricia has been rated as a category 5 storm.", "id": "34615665", }

    Masukan sampel sebelumnya berisi teks untuk diringkas di dalam document kunci. Referensi yang digunakan untuk mengevaluasi respons model Anda ada di summary kuncinya. Anda harus menggunakan kunci ini di dalam konfigurasi data Anda untuk menentukan kolom mana yang berisi informasi yang FMEval perlu mengevaluasi respons model.

    Konfigurasi data Anda harus mengidentifikasi teks yang harus diringkas oleh model Anda. model_input_location Anda harus mengidentifikasi nilai referensi dengantarget_output_location.

    Contoh konfigurasi data berikut mengacu pada contoh input sebelumnya untuk menentukan kolom yang diperlukan untuk tugas ringkasan teks, nama, pengidentifikasi sumber daya seragam (URI), dan MIME jenis:

    config = DataConfig( dataset_name="sample-dataset", dataset_uri="sample-dataset.jsonl", dataset_mime_type=MIME_TYPE_JSONLINES, model_input_location="document", target_output_location="summary" )

    Untuk informasi selengkapnya tentang informasi kolom yang diperlukan untuk tugas lain, lihat bagian Menggunakan kumpulan data input kustom diEvaluasi model otomatis.

  3. Siapkan kustom ModelRunner seperti yang ditunjukkan pada contoh kode berikut:

    bedrock_model_runner = BedrockModelRunner( model_id=model_id, output='completion', content_template='{"prompt": $prompt, "max_tokens_to_sample": 500}' )

    Contoh kode sebelumnya menentukan yang berikut:

    • model_id— Id yang digunakan untuk menentukan model Anda.

    • output— Menangkap output dari model Anthropic Claude 2, yang mengembalikan responsnya dalam kunci. completion

    • content_template— Menentukan bagaimana model Anda berinteraksi dengan permintaan. Contoh template konfigurasi dirinci sebagai berikut semata-mata untuk menjelaskan contoh sebelumnya, dan itu tidak diperlukan.

      • Pada content_template contoh sebelumnya, berikut ini berlaku:

        • Variabel prompt menentukan prompt input, yang menangkap permintaan yang dibuat oleh pengguna.

        • Variabel max_tokens_to_sample menentukan jumlah maksimum token untuk500, untuk membatasi panjang respon.

          Untuk informasi selengkapnya tentang parameter yang dapat Anda tentukan dalam permintaan, lihat Model Anthropic Claude.

        Format content_template parameter tergantung pada input dan parameter yang didukung oleh AndaLLM. Dalam tutorial ini, model Claude 2 Anthropic menggunakan yang berikut: content_template

        "content_template": "{\"prompt\": $prompt, \"max_tokens_to_sample\": 500}"

        Sebagai contoh lain, model Falcon 7b dapat mendukung yang berikut: content_template

        "content_template": "{\"inputs\": $prompt, \"parameters\":{\"max_new_tokens\": \ 10, \"top_p\": 0.9, \"temperature\": 0.8}}"

Jalankan evaluasi model Anda

Tentukan dan jalankan algoritma evaluasi Anda
  1. Tentukan algoritma evaluasi Anda. Contoh berikut menunjukkan bagaimana mendefinisikan SummarizationAccuracy algoritma, yang digunakan untuk menentukan akurasi untuk tugas ringkasan teks:

    eval_algo = SummarizationAccuracy(SummarizationAccuracyConfig())

    Untuk contoh algoritme yang menghitung metrik untuk tugas evaluasi lainnya, lihat Mengevaluasi model Anda. Gunakan fmeval pustaka untuk menjalankan evaluasi otomatis

  2. Jalankan algoritma evaluasi Anda. Contoh kode berikut menggunakan konfigurasi data yang sebelumnya didefinisikan, dan prompt_template yang menggunakan Human dan Assistant kunci:

    eval_output = eval_algo.evaluate(model=bedrock_model_runner, dataset_config=config, prompt_template="Human: $feature\n\nAssistant:\n", save=True)

    Dalam contoh kode sebelumnya, feature berisi prompt dalam format yang diharapkan oleh model Amazon Bedrock.

Lihat hasil analisis Anda

  1. Parse laporan evaluasi dari eval_output objek yang dikembalikan oleh algoritma evaluasi sebagai berikut:

    # parse report print(json.dumps(eval_output, default=vars, indent=4))

    Perintah sebelumnya mengembalikan output sebagai berikut:

    [ { "eval_name": "summarization_accuracy", "dataset_name": "sample-dataset", "dataset_scores": [ { "name": "meteor", "value": 0.2048823008681274 }, { "name": "rouge", "value": 0.03557697913367101 }, { "name": "bertscore", "value": 0.5406564395678671 } ], "prompt_template": "Human: $feature\n\nAssistant:\n", "category_scores": null, "output_path": "/tmp/eval_results/summarization_accuracy_sample_dataset.jsonl", "error": null } ]

    Contoh output sebelumnya menampilkan tiga skor akurasi: Meteor, Rouge, dan BERTScore, masukanprompt_template, a category_score jika Anda memintanya, kesalahan apa pun, danoutput_path. Anda akan menggunakan output_path untuk membuat Pandas DataFrame di langkah berikut.

  2. Impor hasil Anda dan baca ke dalamDataFrame, dan lampirkan skor akurasi ke input model, output model, dan output target sebagai berikut:

    import pandas as pd data = [] with open("/tmp/eval_results/summarization_accuracy_sample_dataset.jsonl", "r") as file: for line in file: data.append(json.loads(line)) df = pd.DataFrame(data) df['meteor_score'] = df['scores'].apply(lambda x: x[0]['value']) df['rouge_score'] = df['scores'].apply(lambda x: x[1]['value']) df['bert_score'] = df['scores'].apply(lambda x: x[2]['value']) df

    Dalam pemanggilan ini, contoh kode sebelumnya mengembalikan output berikut (dikontrak untuk singkatnya):

    model_input model_output target_output prompt scores meteor_score rouge_score bert_score 0 John Edward Bates, formerly of Spalding, Linco... I cannot make any definitive judgments, as th... A former Lincolnshire Police officer carried o... Human: John Edward Bates, formerly of Spalding... [{'name': 'meteor', 'value': 0.112359550561797... 0.112360 0.000000 0.543234 ... 1 23 October 2015 Last updated at 17:44 BST\nIt'... Here are some key points about hurricane/trop... Hurricane Patricia has been rated as a categor... Human: 23 October 2015 Last updated at 17:44 B... [{'name': 'meteor', 'value': 0.139822692925566... 0.139823 0.017621 0.426529 ... 2 Ferrari appeared in a position to challenge un... Here are the key points from the article:\n\n... Lewis Hamilton stormed to pole position at the... Human: Ferrari appeared in a position to chall... [{'name': 'meteor', 'value': 0.283411142234671... 0.283411 0.064516 0.597001 ... 3 The Bath-born player, 28, has made 36 appearan... Okay, let me summarize the key points from th... Newport Gwent Dragons number eight Ed Jackson ... Human: The Bath-born player, 28, has made 36 a... [{'name': 'meteor', 'value': 0.089020771513353... 0.089021 0.000000 0.533514 ... ...

    Output model Anda mungkin berbeda dari output sampel sebelumnya.

    Untuk buku catatan yang berisi contoh kode yang diberikan di bagian ini, lihat bedrock-claude-summarization-accuracy.ipnyb.