Tugas dalam bahasa lisan dengan Gemma

Menggunakan teknologi kecerdasan buatan (AI) dalam bahasa lisan tertentu adalah kebutuhan penting bagi banyak bisnis agar dapat menggunakannya secara efektif. Model keluarga Gemma memiliki beberapa kemampuan multibahasa, tetapi menggunakannya dalam bahasa selain bahasa Inggris sering kali menghasilkan hasil yang kurang ideal.

Untungnya, Anda tidak perlu mengajari Gemma bahasa lisan seutuhnya agar dapat menyelesaikan tugas dalam bahasa itu. Selain itu, Anda dapat menyesuaikan model Gemma untuk menyelesaikan tugas tertentu dalam bahasa dengan data dan upaya yang jauh lebih sedikit daripada yang mungkin Anda bayangkan. Dengan menggunakan sekitar 20 contoh permintaan dan respons yang diharapkan dalam bahasa target, Anda dapat meminta Gemma untuk membantu Anda memecahkan berbagai masalah bisnis dalam bahasa yang paling sesuai bagi Anda dan pelanggan.

Untuk ringkasan video tentang project dan cara memperluasnya, termasuk insight dari orang yang membuatnya, lihat video Asisten AI Bahasa Lisan Build with Google AI. Anda juga dapat meninjau kode untuk project ini di repositori kode Gemma Cookbook. Jika tidak, Anda dapat mulai memperluas project menggunakan petunjuk berikut.

Ringkasan

Tutorial ini akan memandu Anda menyiapkan, menjalankan, dan memperluas aplikasi tugas bahasa lisan yang dibuat dengan Gemma dan Python. Aplikasi ini menyediakan antarmuka pengguna web dasar yang dapat dimodifikasi sesuai kebutuhan. Aplikasi ini dibuat untuk menghasilkan balasan email pelanggan untuk toko roti fiktif Korea, dan semua input dan output bahasa ditangani sepenuhnya dalam bahasa Korea. Anda dapat menggunakan pola aplikasi ini dengan bahasa apa pun dan tugas bisnis apa pun yang menggunakan input teks dan output teks.

Screenshot antarmuka pengguna aplikasi web K-Mail

Gambar 1. Antarmuka pengguna project, untuk pertanyaan email toko roti Korea

Persyaratan hardware

Jalankan proses penyesuaian ini di komputer dengan unit pemrosesan grafis (GPU) atau unit pemrosesan Tensor (TPU), dan memori yang memadai untuk menyimpan model yang ada, serta data penyesuaian. Untuk menjalankan konfigurasi penyesuaian dalam project ini, Anda memerlukan memori GPU sekitar 16 GB, jumlah RAM reguler yang sama, dan kapasitas disk minimum 50 GB.

Anda dapat menjalankan bagian penyesuaian model Gemma dalam tutorial ini menggunakan lingkungan Colab dengan runtime GPU T4. Jika Anda mem-build project ini di instance VM Google Cloud, konfigurasi instance dengan mengikuti persyaratan berikut:

  • Hardware GPU: NVIDIA T4 diperlukan untuk menjalankan project ini, dan NVIDIA L4 atau yang lebih tinggi direkomendasikan.
  • Operating System: Pilih opsi Deep Learning on Linux, khususnya Deep Learning VM with CUDA 12.3 M124 dengan driver software GPU yang telah diinstal sebelumnya.
  • Ukuran boot disk: Sediakan ruang disk minimal 50 GB untuk data, model, dan software pendukung Anda.

Penyiapan project

Petunjuk ini akan memandu Anda menyiapkan project ini untuk pengembangan dan pengujian. Langkah-langkah penyiapan umum mencakup menginstal software prasyarat, meng-clone project dari repositori kode, menetapkan beberapa variabel lingkungan, menginstal library Python, dan menguji aplikasi web.

Menginstal dan mengonfigurasi

Project ini menggunakan Python 3 dan Lingkungan Virtual (venv) untuk mengelola paket dan menjalankan aplikasi. Petunjuk penginstalan berikut ditujukan untuk mesin host Linux.

Untuk menginstal software yang diperlukan:

  • Instal Python 3 dan paket lingkungan virtual venv untuk Python.

    sudo apt update
    sudo apt install git pip python3-venv
    

Meng-clone project

Download kode project ke komputer pengembangan Anda. Anda memerlukan software kontrol sumber git untuk mengambil kode sumber project.

Untuk mendownload kode project:

  1. Clone repositori git menggunakan perintah berikut.

    git clone https://github.com/google-gemini/gemma-cookbook.git
    
  2. Secara opsional, konfigurasikan repositori git lokal untuk menggunakan checkout sparse, sehingga Anda hanya memiliki file untuk project tersebut.

    cd gemma-cookbook/
    git sparse-checkout set Gemma/spoken-language-tasks/
    git sparse-checkout init --cone
    

Menginstal library Python

Instal library Python dengan lingkungan virtual Python venv yang diaktifkan untuk mengelola paket dan dependensi Python. Pastikan Anda mengaktifkan lingkungan virtual Python sebelum menginstal library Python dengan penginstal pip. Untuk informasi selengkapnya tentang penggunaan lingkungan virtual Python, lihat dokumentasi venv Python.

Untuk menginstal library Python:

  1. Di jendela terminal, buka direktori spoken-language-tasks:

    cd Gemma/spoken-language-tasks/
    
  2. Konfigurasikan dan aktifkan lingkungan virtual Python (venv) untuk project ini:

    python3 -m venv venv
    source venv/bin/activate
    
  3. Instal library Python yang diperlukan untuk project ini menggunakan skrip setup_python.

    ./setup_python.sh
    

Menetapkan variabel lingkungan

Tetapkan beberapa variabel lingkungan yang diperlukan agar project kode ini dapat berjalan, termasuk nama pengguna Kaggle dan kunci token Kaggle. Anda harus memiliki akun Kaggle dan meminta akses ke model Gemma agar dapat mendownloadnya. Untuk project ini, Anda menambahkan Nama Pengguna Kaggle dan Kunci Token Kaggle ke dua file .env, yang masing-masing dibaca oleh aplikasi web dan program penyesuaian.

Untuk menetapkan variabel lingkungan:

  1. Dapatkan nama pengguna Kaggle dan kunci token Anda dengan mengikuti petunjuk dalam dokumentasi Kaggle.
  2. Dapatkan akses ke model Gemma dengan mengikuti petunjuk Mendapatkan akses ke Gemma di halaman Penyiapan Gemma.
  3. Buat file variabel lingkungan untuk project, dengan membuat file teks .env di setiap lokasi berikut dalam clone project Anda:
    k-mail-replier/k_mail_replier/.env
    k-gemma-it/.env
    
  4. Setelah membuat file teks .env, tambahkan setelan berikut ke kedua file:

    KAGGLE_USERNAME=<YOUR_KAGGLE_USERNAME_HERE>
    KAGGLE_KEY=<YOUR_KAGGLE_KEY_HERE>
    

Menjalankan dan menguji aplikasi

Setelah menyelesaikan penginstalan dan konfigurasi project, jalankan aplikasi web untuk mengonfirmasi bahwa Anda telah mengonfigurasinya dengan benar. Anda harus melakukannya sebagai pemeriksaan dasar sebelum mengedit project untuk penggunaan Anda sendiri.

Untuk menjalankan dan menguji project:

  1. Di jendela terminal, buka direktori /k_mail_replier/:

    cd spoken-language-tasks/k-mail-replier/
    
  2. Jalankan aplikasi menggunakan skrip run_flask_app.sh:

    ./run_flask_app.sh
    
  3. Setelah memulai aplikasi web, kode program akan mencantumkan URL yang dapat Anda jelajahi dan uji. Biasanya, alamat ini adalah:

    http://127.0.0.1:5000/
    
  4. Di antarmuka web, tekan tombol 답변 작성 di bawah kolom input pertama untuk membuat respons dari model.

Respons pertama dari model setelah Anda menjalankan aplikasi memerlukan waktu lebih lama karena harus menyelesaikan langkah-langkah inisialisasi pada generasi pertama yang dijalankan. Permintaan dan pembuatan perintah berikutnya pada aplikasi web yang sudah berjalan selesai dalam waktu lebih singkat.

Memperluas aplikasi

Setelah aplikasi berjalan, Anda dapat memperluasnya dengan mengubah antarmuka pengguna dan logika bisnis agar berfungsi untuk tugas yang relevan bagi Anda atau bisnis Anda. Anda juga dapat mengubah perilaku model Gemma menggunakan kode aplikasi dengan mengubah komponen perintah yang dikirim aplikasi ke model AI generatif.

Aplikasi memberikan petunjuk ke model beserta data input dari pengguna, yaitu perintah lengkap model. Anda dapat mengubah petunjuk ini untuk mengubah perilaku model, seperti menentukan bahwa model harus mengekstrak informasi dari permintaan dan memasukkannya ke dalam format data terstruktur, seperti JSON. Cara yang lebih sederhana untuk mengubah perilaku model adalah dengan memberikan petunjuk atau panduan tambahan untuk respons model, seperti menentukan bahwa balasan yang dihasilkan harus ditulis dengan nada sopan.

Untuk mengubah petunjuk dialog:

  1. Dalam project tugas bahasa lisan, buka file kode k-mail-replier/k_mail_replier/app.py.
  2. Dalam kode app.py, tambahkan petunjuk penambahan ke fungsi get_prompt()::

    def get_prompt():
        return "발신자에게 요청에 대한 감사를 전하고, 곧 자세한 내용을
            알려드리겠다고 정중하게 답장해 주세요. 정중하게 답변해 주세요!:\n"
    

Contoh ini menambahkan frasa "Tulis respons yang sopan" ke petunjuk dalam bahasa Korea.

Memberikan petunjuk perintah tambahan dapat sangat memengaruhi output yang dihasilkan, dan memerlukan lebih sedikit upaya untuk diterapkan. Anda harus mencoba metode ini terlebih dahulu untuk mengetahui apakah Anda bisa mendapatkan perilaku yang diinginkan dari model. Namun, penggunaan petunjuk perintah untuk mengubah perilaku model Gemma memiliki batasnya. Secara khusus, batas token input keseluruhan model, yaitu 8.192 token untuk Gemma 2, mengharuskan Anda menyeimbangkan petunjuk perintah mendetail dengan ukuran data baru yang Anda berikan sehingga Anda tetap berada di bawah batas tersebut.

Selain itu, jika Anda ingin Gemma melakukan tugas dalam bahasa selain bahasa Inggris, hanya meminta model dasar kemungkinan tidak akan menghasilkan hasil yang berguna secara andal. Sebagai gantinya, Anda harus menyesuaikan model dengan contoh dalam bahasa target, lalu kemudian pertimbangkan untuk mengubah petunjuk perintah guna membuat penyesuaian yang lebih kecil pada output model yang disesuaikan.

Menyesuaikan model

Melakukan penyesuaian model Gemma adalah cara yang direkomendasikan untuk membuatnya merespons secara efektif dalam bahasa lisan selain bahasa Inggris. Namun, Anda tidak perlu berfokus pada kelancaran penuh dalam bahasa target agar model dapat menyelesaikan tugas dalam bahasa tersebut. Anda dapat mencapai fungsi dasar dalam bahasa target untuk tugas dengan sekitar 20 contoh. Bagian tutorial ini menjelaskan cara menyiapkan dan menjalankan penyesuaian pada model Gemma untuk tugas tertentu, dalam bahasa tertentu.

Petunjuk berikut menjelaskan cara melakukan operasi penyesuaian di lingkungan VM. Namun, Anda juga dapat melakukan operasi penyesuaian ini menggunakan notebook Colab terkait untuk project ini.

Persyaratan hardware

Persyaratan komputasi untuk penyesuaian sama dengan persyaratan hardware untuk project lainnya. Anda dapat menjalankan operasi penyesuaian di lingkungan Colab dengan runtime GPU T4 jika Anda membatasi token input menjadi 256 dan ukuran batch menjadi 1.

Menyiapkan data

Sebelum mulai men-tuning model Gemma, Anda harus menyiapkan data untuk tuning. Saat menyesuaikan model untuk tugas dan bahasa tertentu, Anda memerlukan kumpulan contoh permintaan dan respons dalam bahasa target tersebut. Contoh ini akan menampilkan teks permintaan, tanpa petunjuk apa pun, dan teks respons yang diharapkan. Untuk memulai, Anda harus menyiapkan set data dengan sekitar 20 contoh. Contoh ini harus mewakili berbagai macam permintaan dan respons yang ideal. Pastikan permintaan dan respons tidak berulang, karena hal itu dapat menyebabkan respons model berulang dan tidak menyesuaikan dengan tepat terhadap variasi permintaan. Tabel berikut menunjukkan beberapa contoh data dari set data contoh kode ini:

Permintaan Respons
안녕하세요, 2주 뒤에 있을 아이 생일을 위해 3호 케이크 3개를 주문하고 싶은데 가능할까요? 고객님, 안녕하세요. 2Master 뒤 아이 생터을 위한 3호 케이 skenario 2 engagement 문 문의 감사사니니. 네, 3호 케이크 2개 주문 가능합니다. 아이 생Theme 케이크인 만큼 더욱 신경 써이 자성껏 준비 engagement이겠습니이. 혹시 원하시는 디자인이나 특별한 요청 사항이 있으시면 편하게 말씀해주세요. 픽자 날짜와 이사을 니려니Tertutup면 더욱 자자한 안내를 도와사리겠습니ani. 다시 한번 문의 감사드리며, 아이 생일 진심으로 축하합니다! [가게 이름] 드림
안녕하세요, 9월 15일에 있을 아들의 돌잔치를 위해 케이크를 주문하고 싶습니다. - 케이크 종류: 생크림 케이크 - 크 interval: 2호 - 자인: 아gram인인 동물 인자인 - 문구: "첫 생設 kombinasi 땴 aspek - 픽업 날짜 및 시간: 9월 14일 오후 3시 가격 및 주문 가능 여부를 알려주시면 감사하겠습니다. 감사합니다. 김민지 드림 안녕사미요, 김김미스 님, 9設 15 lisensi 아아님 kegunaan 돌잔치를 위한 케이한 니문 문의 감사사니 kecanggihan. - 생크림 케이한 2호, 아이자인muncul 동물 여자인, "첫 생 Perbarui 축사해, 사랑사터 아들!" 문구, 9월 14일 오후 3시 픽업 모두 가능합니다. - 가격은 5만원입니다. 주문을 원하시면 연락 주세요 감사합니다. [가게 이름] 드림

Tabel 1. Listingan sebagian set data penyesuaian untuk responden email toko roti Korea.

Format dan pemuatan data

Anda dapat menyimpan data penyesuaian dalam format apa pun yang praktis, termasuk data database, file JSON, CSV, atau file teks biasa, selama Anda memiliki cara untuk mengambil data dengan kode Python. Untuk memudahkan, contoh program penyesuaian mendapatkan data dari repositori online. Dalam contoh program belokan ini, set data penyesuaian dimuat di modul k-gemma-it/main.py menggunakan fungsi prepare_tuning_dataset():

def prepare_tuning_dataset():
    tokenizer = keras_nlp.models.GemmaTokenizer.from_preset(model_id)

    # load data from repository (or local directory)
    from datasets import load_dataset
    ds = load_dataset(
        # Dataset : https://huggingface.co/datasets/bebechien/korean_cake_boss
        "bebechien/korean_cake_boss",
        split="train",
    )
    ...

Seperti yang disebutkan sebelumnya, Anda dapat menyimpan set data dalam format yang nyaman, selama Anda dapat mengambil permintaan dengan respons terkait dan menyusunnya menjadi string teks yang digunakan sebagai data penyesuaian.

Merakit data penyesuaian

Untuk proses penyesuaian yang sebenarnya, setiap permintaan dan respons digabungkan menjadi satu string dengan petunjuk dan tag perintah untuk menunjukkan konten permintaan dan konten respons. Program penyesuaian ini kemudian membuat token string untuk digunakan oleh model. Anda dapat melihat kode untuk menyusun data penyesuaian dalam fungsi prepare_tuning_dataset() modul k-gemma-it/main.py, sebagai berikut:

def prepare_tuning_dataset():
    ...
    prompt_instruction = "다음에 대한 이메일 답장을 작성해줘."

    for x in data:
        item = f"<start_of_turn>user\n{prompt_instruction}\n\"{x['input']}\"<end_of_turn>\n<start_of_turn>model\n{x['output']}<end_of_turn>"
        length = len(tokenizer(item))
        # skip data if the token length is longer than our limit
        if length < token_limit:
            tuning_dataset.append(item)
            if(len(tuning_dataset)>=num_data_limit):
                break
    ...

Fungsi ini membaca data dan memformatnya dengan menambahkan tag start_of_turn dan end_of_turn yang merupakan format yang diperlukan saat memberikan data untuk menyesuaikan model Gemma. Kode ini juga menyisipkan prompt_instruction untuk setiap permintaan, yang harus diedit sebagaimana mestinya untuk aplikasi Anda.

Membuat bobot model

Setelah data penyesuaian diterapkan dan dimuat, Anda dapat menjalankan program penyesuaian. Proses penyesuaian untuk contoh aplikasi ini menggunakan library Keras NLP untuk menyesuaikan model dengan Low Rank Adaptation, atau teknik LoRA, untuk menghasilkan bobot model baru. Dibandingkan dengan penyesuaian presisi penuh, penggunaan LoRA secara signifikan lebih hemat memori karena mendekati perubahan pada bobot model. Kemudian, Anda dapat menempatkan bobot perkiraan ini ke bobot model yang ada untuk mengubah perilaku model.

Untuk menjalankan penyesuaian dan menghitung bobot baru:

  1. Di jendela terminal, buka direktori k-gemma-it/.

    cd spoken-language-tasks/k-gemma-it/
    
  2. Jalankan proses penyesuaian menggunakan skrip tune_model:

    ./tune_model.sh
    

Proses penyesuaian memerlukan waktu beberapa menit, bergantung pada resource komputasi yang tersedia. Jika berhasil diselesaikan, program penyesuaian akan menulis file bobot *.h5 baru di direktori k-gemma-it/weights dengan format berikut:

gemma2-2b_k-tuned_4_epoch##.lora.h5

Pemecahan masalah

Jika penyesuaian tidak berhasil diselesaikan, ada dua kemungkinan alasan:

  1. Kehabisan memori/resource habis: Error ini terjadi saat proses penyesuaian meminta memori yang melebihi memori GPU atau memori CPU yang tersedia. Pastikan Anda tidak menjalankan aplikasi web saat proses penyesuaian berjalan. Jika Anda melakukan penyesuaian di perangkat dengan memori GPU 16 GB, pastikan token_limit Anda disetel ke 256 dan batch_size ditetapkan ke 1.
  2. Driver GPU tidak diinstal atau tidak kompatibel dengan JAX: Proses pengaktifan memerlukan penginstalan driver hardware di perangkat komputasi yang kompatibel dengan versi library JAX. Untuk mengetahui detail selengkapnya, lihat dokumentasi penginstalan JAX.

Men-deploy model yang disesuaikan

Proses penyesuaian menghasilkan beberapa bobot berdasarkan data penyesuaian dan jumlah total epoch yang ditetapkan dalam aplikasi penyesuaian. Secara default, program tuning menghasilkan 20 file bobot model, satu untuk setiap epoch penyesuaian. Setiap epoch penyesuaian urutan menghasilkan bobot yang mereproduksi hasil data penyesuaian secara lebih akurat. Anda dapat melihat rasio akurasi untuk setiap epoch dalam output terminal proses penyesuaian, sebagai berikut:

...
Epoch 14/20
10/10 ━━━━━━━━━━━━━━━━━━━━ 6s 567ms/step - loss: 0.4026 - sparse_categorical_accuracy: 0.8235
Epoch 15/20
10/10 ━━━━━━━━━━━━━━━━━━━━ 6s 569ms/step - loss: 0.3659 - sparse_categorical_accuracy: 0.8382
Epoch 16/20
10/10 ━━━━━━━━━━━━━━━━━━━━ 6s 571ms/step - loss: 0.3314 - sparse_categorical_accuracy: 0.8538
Epoch 17/20
10/10 ━━━━━━━━━━━━━━━━━━━━ 6s 572ms/step - loss: 0.2996 - sparse_categorical_accuracy: 0.8686
Epoch 18/20
10/10 ━━━━━━━━━━━━━━━━━━━━ 6s 574ms/step - loss: 0.2710 - sparse_categorical_accuracy: 0.8801
Epoch 19/20
10/10 ━━━━━━━━━━━━━━━━━━━━ 6s 575ms/step - loss: 0.2451 - sparse_categorical_accuracy: 0.8903
Epoch 20/20
10/10 ━━━━━━━━━━━━━━━━━━━━ 6s 575ms/step - loss: 0.2212 - sparse_categorical_accuracy: 0.9021

Meskipun Anda ingin tingkat akurasi relatif tinggi, yaitu sekitar 0,80 hingga 0,90, Anda tidak ingin agar rasionya terlalu tinggi, atau sangat mendekati 1,00, karena bobotnya hampir mencapai overfitting data tuning. Jika hal itu terjadi, model tidak berperforma baik pada permintaan yang sangat berbeda dengan contoh penyesuaian. Secara default, skrip deployment memilih bobot epoch 17, yang biasanya memiliki tingkat akurasi sekitar 0,90.

Untuk men-deploy bobot yang dihasilkan ke aplikasi web:

  1. Di jendela terminal, buka direktori k-gemma-it/.

    cd spoken-language-tasks/k-gemma-it/
    
  2. Jalankan proses tuning menggunakan skrip deploy_weights:

    ./deploy_weights.sh
    

Setelah menjalankan skrip ini, Anda akan melihat file *.h5 baru di direktori k-mail-replier/k_mail_replier/weights/.

Menguji model baru

Setelah Anda men-deploy bobot baru ke aplikasi, saatnya untuk mencoba model yang baru disetel. Anda dapat melakukannya dengan menjalankan ulang aplikasi web dan membuat respons.

Untuk menjalankan dan menguji project:

  1. Di jendela terminal, buka direktori /k_mail_replier/.

    cd spoken-language-tasks/k-mail-replier/
    
  2. Jalankan aplikasi menggunakan skrip run_flask_app.sh:

    ./run_flask_app.sh
    
  3. Setelah memulai aplikasi web, kode program akan mencantumkan URL tempat Anda dapat menjelajahi dan menguji, biasanya alamat ini adalah:

    http://127.0.0.1:5000/
    
  4. Di antarmuka web, tekan tombol 답변 작성 di bawah kolom input pertama untuk membuat respons dari model.

Sekarang Anda telah menyesuaikan dan men-deploy model Gemma dalam aplikasi. Bereksperimenlah dengan aplikasi dan coba tentukan batas kemampuan pembuatan model yang disesuaikan untuk tugas Anda. Jika Anda menemukan skenario di mana model tidak berperforma baik, pertimbangkan untuk menambahkan sebagian permintaan tersebut ke daftar data contoh penyesuaian dengan menambahkan permintaan dan memberikan respons yang ideal. Kemudian, jalankan ulang proses penyesuaian, deploy ulang bobot baru, dan uji output.

Referensi lainnya

Untuk mengetahui informasi selengkapnya tentang project ini, lihat repositori kode Gemma Cookbook. Jika Anda memerlukan bantuan untuk membuat aplikasi atau ingin berkolaborasi dengan developer lain, lihat server Discord Komunitas Google Developers. Untuk project Build with Google AI lainnya, lihat playlist video.