

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
<a name="clarify-foundation-model-evaluate-auto-tutorial-two"></a>

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](https://www.anthropic.com/index/claude-2), yang tersedia di Amazon Bedrock, dan meminta model ini untuk meringkas petunjuk teks. Kemudian, tutorial ini menunjukkan cara mengevaluasi respons model untuk akurasi menggunakan [https://huggingface.co/spaces/evaluate-metric/rouge](https://huggingface.co/spaces/evaluate-metric/rouge), [https://huggingface.co/spaces/evaluate-metric/meteor](https://huggingface.co/spaces/evaluate-metric/meteor), dan [https://huggingface.co/spaces/evaluate-metric/bertscore](https://huggingface.co/spaces/evaluate-metric/bertscore)metrik. 

Tutorial menunjukkan cara melakukan hal berikut:
+ Siapkan lingkungan Anda.
+ Jalankan evaluasi model Anda.
+ Lihat hasil analisis Anda.

## Siapkan lingkungan Anda
<a name="clarify-foundation-model-evaluate-auto-tutorial-two-setup"></a>

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

  Untuk informasi tambahan tentang jenis instans dan kasus penggunaan yang direkomendasikan, lihat[Jenis Instance Tersedia untuk Digunakan Dengan Notebook Amazon SageMaker Studio Classic](notebooks-available-instance-types.md).

**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](https://docs.aws.amazon.com/bedrock/latest/userguide/setting-up.html#sign-up-for-aws) di **Mengatur Amazon Bedrock**.

1. Buka [konsol Amazon Bedrock](https://console.aws.amazon.com/bedrock).

1. **Selamat Datang di Amazon Bedrock\!** bagian yang terbuka, pilih **Kelola akses model**.

1. Di bagian **Akses model** yang muncul, pilih **Kelola akses model**.

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

1. Pilih **Minta akses model**.

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

1. 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
   ```

1. 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 ke`2`, maka pekerjaan Anda akan menjalankan `200` pemanggilan. Anda dapat meningkatkan `PARALLELIZATION_FACTOR` hingga`10`, atau menghapus variabel seluruhnya. Untuk membaca blog tentang cara penggunaan AWS Lambda, `PARALLELIZATION_FACTOR` lihat [Kontrol penskalaan Lambda Baru untuk sumber peristiwa Kinesis](https://aws.amazon.com/blogs/compute/new-aws-lambda-scaling-controls-for-kinesis-and-dynamodb-event-sources/) dan DynamoDB.

1. Unduh kumpulan data sampel, `JSON Lines` [sample-dataset.jsonl, ke](https://github.com/aws/fmeval/blob/8da27af2f20369fd419c03d5bb0707ab24010b14/examples/xsum_sample.jsonl) dalam direktori kerja Anda saat ini.

1. 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](https://www.anthropic.com/index/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](https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters-claude.html#model-parameters-claude-request-body). Model lain mungkin memiliki format yang berbeda.

1. 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` dan`1`, 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 to`1`, dengan nilai default`1`.
   + `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 to`500`, dengan nilai default`250`.
   + `max_tokens_to_sample`— Membatasi panjang respons dengan membatasi jumlah token yang dikembalikan oleh model Anda. Rentang `0` untuk `max_tokens_to_sample` are to`4096`, dengan nilai default`200`.
   + `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](https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters-claude.html).

**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
   ```

1. Siapkan konfigurasi data untuk dataset input Anda.

   Masukan sampel berikut adalah satu baris dari`sample-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 dengan`target_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** di[Evaluasi model otomatis](clarify-foundation-model-evaluate-auto.md).

1. 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](https://www.anthropic.com/index/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 untuk`500`, untuk membatasi panjang respon. 

         Untuk informasi selengkapnya tentang parameter yang dapat Anda tentukan dalam permintaan, lihat Model [Anthropic Claude](https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters-claude.html).

       Format `content_template` parameter tergantung pada input dan parameter yang didukung oleh LLM Anda. Dalam tutorial ini, [model Claude 2 Anthropic](https://www.anthropic.com/index/claude-2) menggunakan yang berikut: `content_template`

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

       Sebagai contoh lain, [model Falcon 7b](https://huggingface.co/tiiuae/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
<a name="clarify-foundation-model-evaluate-auto-tutorial-two-run"></a>

**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](clarify-foundation-model-evaluate-auto-lib.md)

1. 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
<a name="clarify-foundation-model-evaluate-auto-tutorial-two-view"></a>

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
   }
   ]
   ```

   Output contoh sebelumnya menampilkan tiga skor akurasi: [https://huggingface.co/spaces/evaluate-metric/meteor](https://huggingface.co/spaces/evaluate-metric/meteor), [https://huggingface.co/spaces/evaluate-metric/rouge](https://huggingface.co/spaces/evaluate-metric/rouge), dan [https://huggingface.co/spaces/evaluate-metric/bertscore](https://huggingface.co/spaces/evaluate-metric/bertscore), input`prompt_template`, a `category_score` jika Anda meminta satu, kesalahan apa pun, dan`output_path`. Anda akan menggunakan `output_path` untuk membuat `Pandas DataFrame` di langkah berikut.

1. Impor hasil Anda dan baca ke dalam`DataFrame`, 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.](https://github.com/aws/fmeval/blob/main/examples/bedrock-claude-summarization-accuracy.ipynb) 