全部产品
Search
文档中心

Platform For AI:Kembangkan solusi pengenalan maksud berbasis LLM

更新时间:Sep 25, 2025

Solusi ini memanfaatkan teknologi pengenalan maksud dari model bahasa besar (LLM) untuk mempelajari pola bahasa kompleks dan perilaku pengguna dari volume data yang sangat besar. Hal ini memungkinkan pengenalan maksud pengguna yang lebih akurat serta memberikan pengalaman interaksi yang lebih lancar dan alami. Topik ini menjelaskan proses pengembangan lengkap solusi pengenalan maksud berbasis LLM menggunakan model Qwen1.5.

Informasi latar belakang

Apa itu pengenalan maksud?

Agen AI menafsirkan kebutuhan pengguna yang dijelaskan dalam bahasa alami untuk melakukan operasi yang sesuai atau memberikan informasi relevan. Agen ini telah menjadi komponen penting dalam sistem interaksi cerdas. Teknologi pengenalan maksud berbasis LLM telah mendapatkan perhatian signifikan di industri dan banyak diterapkan.

Skenario tipikal teknologi pengenalan maksud

  • Dalam skenario asisten suara cerdas, pengguna berinteraksi dengan asisten suara menggunakan perintah sederhana. Sebagai contoh, ketika seorang pengguna mengatakan "Saya ingin mendengarkan musik" kepada asisten suara, sistem harus secara akurat mengenali bahwa kebutuhan pengguna adalah memutar musik, lalu melakukan operasi terkait.

  • Dalam skenario layanan pelanggan cerdas, tantangannya terletak pada menangani berbagai permintaan layanan pelanggan dan dengan cepat mengklasifikasikannya ke dalam proses yang berbeda, seperti pengembalian, penukaran, dan keluhan. Misalnya, seorang pengguna mungkin mengatakan "Saya menerima barang yang rusak dan saya ingin mengembalikannya" kepada sistem layanan pelanggan platform e-commerce. Dalam hal ini, sistem pengenalan maksud berbasis LLM harus dengan cepat menangkap bahwa maksud pengguna adalah "mengembalikan barang" dan memicu proses pengembalian untuk membimbing pengguna melalui operasi selanjutnya.

Proses kerja

Gambar berikut menunjukkan proses kerja solusi pengenalan maksud berbasis LLM.

  1. Siapkan Data Pelatihan

    Anda perlu menyiapkan set data pelatihan untuk skenario bisnis tertentu berdasarkan persyaratan format data dan strategi persiapan data. Anda juga dapat menyiapkan data bisnis berdasarkan strategi persiapan data dan menggunakan iTAG untuk melabeli data mentah. Kemudian, Anda perlu mengekspor hasil pelabelan dan mengonversinya ke dalam format data yang didukung oleh QuickStart Platform for AI (PAI) untuk pelatihan model selanjutnya.

  2. Latih dan Lakukan Evaluasi Offline pada Model

    Dalam QuickStart, Anda dapat melatih model Qwen1.5-1.8B-Chat. Setelah melatih model, Anda perlu melakukan evaluasi offline.

  3. Sebarkan dan Panggil Layanan Model

    Jika hasil evaluasi model memenuhi harapan Anda, Anda dapat menggunakan QuickStart untuk menyebarkan model yang telah dilatih ke Elastic Algorithm Service (EAS) sebagai layanan online.

Prasyarat

Sebelum melakukan operasi yang dijelaskan dalam topik ini, pastikan Anda telah menyelesaikan persiapan berikut:

  • Deep Learning Containers (DLC) dan EAS dari PAI diaktifkan secara bayar sesuai penggunaan dan ruang kerja default telah dibuat. Untuk informasi lebih lanjut, lihat Aktifkan PAI dan Buat Ruang Kerja Default.

  • Bucket Object Storage Service (OSS) dibuat untuk menyimpan data pelatihan dan file model yang diperoleh dari pelatihan model. Untuk informasi tentang cara membuat bucket, lihat Panduan Cepat Mulai.

Siapkan data pelatihan

Anda dapat menyiapkan data pelatihan menggunakan salah satu metode berikut:

Strategi persiapan data

Untuk meningkatkan efektivitas dan stabilitas pelatihan, Anda dapat menyiapkan data berdasarkan strategi berikut:

  • Dalam skenario pengenalan maksud tunggal, pastikan setidaknya 50 hingga 100 catatan data dilabeli untuk setiap jenis maksud. Jika kinerja model setelah fine-tuning tidak memenuhi harapan Anda, Anda dapat meningkatkan jumlah catatan data yang dilabeli. Selain itu, Anda harus memastikan bahwa jumlah catatan data yang dilabeli untuk setiap jenis maksud seimbang.

  • Dalam skenario pengenalan maksud ganda atau skenario percakapan multi-putaran, kami merekomendasikan agar jumlah catatan data yang dilabeli lebih dari 20% dari jumlah dalam skenario pengenalan maksud tunggal, dan maksud yang terlibat dalam skenario pengenalan maksud ganda atau percakapan multi-putaran harus sudah terjadi dalam skenario pengenalan maksud tunggal.

  • Deskripsi maksud perlu mencakup sebanyak mungkin frasa dan skenario.

Persyaratan format data

Data pelatihan harus disimpan dalam file JSON, yang berisi bidang instruksi dan output. Bidang output sesuai dengan maksud yang diprediksi oleh model dan parameter terkait. Contoh kode berikut memberikan contoh data pelatihan dalam skenario pengenalan maksud yang berbeda.

  • Dalam skenario pengenalan maksud tunggal, Anda perlu menyiapkan data bisnis untuk skenario bisnis tertentu untuk fine-tune LLM. Contoh kode berikut memberikan contoh percakapan satu putaran untuk skenario rumah pintar.

    [
        {
            "instruction": "Saya ingin mendengarkan musik",
            "output": "play_music()"
        },
        {
            "instruction": "Terlalu keras, turunkan suaranya",
            "output": "volume_down()"
        },
        {
            "instruction": "Saya tidak ingin mendengarkan ini, matikan",
            "output": "music_exit()"
        },
        {
            "instruction": "Saya ingin mengunjungi Hangzhou. Periksa prakiraan cuaca untuk saya",
            "output": "weather_search(Hangzhou)"
        },
    ]
  • Dalam skenario pengenalan maksud ganda atau percakapan multi-putaran, maksud pengguna mungkin diekspresikan dalam beberapa putaran dalam percakapan. Dalam hal ini, Anda dapat menyiapkan data percakapan beberapa putaran dan melabeli input multi-putaran. Contoh kode berikut memberikan contoh percakapan multi-putaran untuk asisten suara:

    Pengguna: Saya ingin mendengarkan musik.
    Asisten: Musik apa?
    Pengguna: Putar *** musik.
    Asisten: play_music(***)
    

    Data pelatihan untuk percakapan multi-putaran berada dalam format berikut:

    [
        {
            "instruction": "Saya ingin mendengarkan musik. Putar musik ***.",
            "output": "play_music(***)"
        }
    ]

Panjang urutan untuk pelatihan model dalam percakapan multi-putaran jauh lebih panjang, dan jumlah skenario pengenalan maksud yang menggunakan percakapan multi-putaran terbatas. Kami merekomendasikan menggunakan mode percakapan multi-putaran untuk pelatihan model hanya jika mode percakapan satu putaran tidak dapat memenuhi persyaratan bisnis Anda. Bagian berikut memberikan contoh mode percakapan satu putaran untuk menggambarkan proses lengkap.

Gunakan iTAG untuk melabeli data

Anda dapat melabeli data di iTAG dari PAI untuk menghasilkan set data pelatihan yang memenuhi persyaratan tertentu dengan melakukan langkah-langkah berikut:

  1. Daftarkan data yang digunakan untuk pelabelan iTAG ke dataset PAI.

    1. Siapkan file data dalam format manifes. Untuk informasi lebih lanjut, lihat strategi persiapan data. Contoh:

      {"data":{"instruction": "Saya ingin mendengarkan musik"}}
      {"data":{"instruction": "Terlalu keras, turunkan suaranya"}}
      {"data":{"instruction": "Saya tidak ingin mendengarkan ini, matikan"}}
      {"data":{"instruction": "Saya ingin mengunjungi Hangzhou. Periksa prakiraan cuaca untuk saya"}}
    2. Pergi ke halaman Manajemen Aset AI > Dataset, pilih ruang kerja target, dan klik Enter Dataset.

    3. Klik Create Dataset dan konfigurasikan parameter utama yang dijelaskan dalam tabel berikut. Untuk informasi tentang parameter lainnya, lihat Buat dan Kelola Dataset.

      Parameter

      Deskripsi

      Storage Type

      Pilih OSS.

      Import Format

      Pilih File.

      OSS Path

      Pilih direktori OSS yang telah dibuat dan unggah file manifes yang telah Anda siapkan dengan melakukan langkah-langkah berikut:

      1. Klik tombol image, dan dalam kotak dialog Select OSS File, klik Upload File.

      2. Klik View Local Files atau Drag And Drop Files untuk mengunggah file manifes sesuai petunjuk.

  2. Pergi ke halaman Persiapan Data > iTAG, klik Go To Management Page, dan beralih ke tab Template Management.

  3. Klik Create Template, pilih Custom Template > Basic Template, dan klik Edit. Setelah Anda mengonfigurasi parameter, klik Save Template. Tabel berikut menjelaskan parameter utama. Untuk informasi tentang parameter lainnya, lihat Kelola Template.

    Konfigurasi

    Deskripsi

    Basic Template Canvas

    1. Pilih Text dan klik Generate Content Card.image

    2. Klik area teks. Dalam kotak dialog Import Data, pilih dataset yang ada. Dalam bagian Configuration For Basic Template, pilih Dataset Field > instruction.

    Basic Template Answers

    Pilih Input Field dan klik Generate Title Card. Lalu ubah Title menjadi output.image

  4. Di panel navigasi di sebelah kiri, pilih Management Hub > Task Management. Di tab Task Management, klik Create Task. Di halaman Buat Pekerjaan Pelabelan, konfigurasikan parameter dan klik Create. Tabel berikut menjelaskan parameter utama. Untuk informasi tentang parameter lainnya, lihat Buat Pekerjaan Pelabelan.

    Parameter

    Deskripsi

    Input Dataset

    Pilih dataset yang Anda buat di Langkah 1.

    Catatan

    Catatan bahwa data harus sesuai dengan template.

    Template Type

    Pilih Custom Template dan pilih template yang ada dari daftar drop-down.

  5. Setelah Anda membuat pekerjaan pelabelan, labeli data. Untuk informasi lebih lanjut, lihat Proses Pekerjaan Pelabelan.image

  6. Setelah Anda melabeli data, ekspor hasil pelabelan ke direktori OSS. Untuk informasi lebih lanjut, lihat Ekspor Hasil Pelabelan.

    Contoh kode berikut menunjukkan contoh file manifes yang diekspor. Untuk informasi tentang format data, lihat Ikhtisar.

    {"data":{"instruction":"Saya ingin mendengarkan musik","_itag_index":""},"label-1947839552568066048-system":{"fixedFlag":0,"results":[{"MarkResultId":"1947839554911772672","MarkTitle":"Template Dasar","MarkResult":"{\"tabId\":\"CommonExtensions\",\"annotations\":[{\"id\":null,\"labels\":{\"output\":\"play_music()\"},\"exif\":null}],\"type\":\"CommonExtensions\",\"version\":\"v2\"}","QuestionId":"CommonExtensions","ResultType":"OPEN_GROUP","Progress":null,"Version":"1753236185165","MarkTime":"Rab Jul 23 10:03:05 CST 2025","UserMarkResultId":null,"IsNeedVoteJudge":false}],"abandonFlag":0},"label-1947839552568066048":{"results":[{"MarkResultId":"1947839554911772672","MarkTitle":"Template Dasar","MarkResult":"{\"tabId\":\"CommonExtensions\",\"annotations\":[{\"id\":null,\"labels\":{\"output\":\"play_music()\"},\"exif\":null}],\"type\":\"CommonExtensions\",\"version\":\"v2\"}","QuestionId":"CommonExtensions","ResultType":"OPEN_GROUP","Progress":null,"Version":"1753236185165","MarkTime":"Rab Jul 23 10:03:05 CST 2025","UserMarkResultId":"1947839763671740416","IsNeedVoteJudge":false}]},"abandonFlag":0,"abandonRemark":null}
    {"data":{"instruction":"Terlalu keras, turunkan suaranya","_itag_index":""},"label-1947839552568066048-system":{"fixedFlag":0,"results":[{"MarkResultId":"1947839554891464704","MarkTitle":"Template Dasar","MarkResult":"{\"tabId\":\"CommonExtensions\",\"annotations\":[{\"id\":null,\"labels\":{\"output\":\"volume_down()\"},\"exif\":null}],\"type\":\"CommonExtensions\",\"version\":\"v2\"}","QuestionId":"CommonExtensions","ResultType":"OPEN_GROUP","Progress":null,"Version":"1753236198979","MarkTime":"Rab Jul 23 10:03:19 CST 2025","UserMarkResultId":null,"IsNeedVoteJudge":false}],"abandonFlag":0},"label-1947839552568066048":{"results":[{"MarkResultId":"1947839554891464704","MarkTitle":"Template Dasar","MarkResult":"{\"tabId\":\"CommonExtensions\",\"annotations\":[{\"id\":null,\"labels\":{\"output\":\"volume_down()\"},\"exif\":null}],\"type\":\"CommonExtensions\",\"version\":\"v2\"}","QuestionId":"CommonExtensions","ResultType":"OPEN_GROUP","Progress":null,"Version":"1753236198979","MarkTime":"Rab Jul 23 10:03:19 CST 2025","UserMarkResultId":"1947839868520656896","IsNeedVoteJudge":false}]},"abandonFlag":0,"abandonRemark":null}
    {"data":{"instruction":"Saya tidak ingin mendengarkan ini, matikan","_itag_index":""},"label-1947839552568066048-system":{"fixedFlag":0,"results":[{"MarkResultId":"1947839554992373760","MarkTitle":"Template Dasar","MarkResult":"{\"tabId\":\"CommonExtensions\",\"annotations\":[{\"id\":null,\"labels\":{\"output\":\"music_exit()\"},\"exif\":null}],\"type\":\"CommonExtensions\",\"version\":\"v2\"}","QuestionId":"CommonExtensions","ResultType":"OPEN_GROUP","Progress":null,"Version":"1753236212152","MarkTime":"Rab Jul 23 10:03:32 CST 2025","UserMarkResultId":null,"IsNeedVoteJudge":false}],"abandonFlag":0},"label-1947839552568066048":{"results":[{"MarkResultId":"1947839554992373760","MarkTitle":"Template Dasar","MarkResult":"{\"tabId\":\"CommonExtensions\",\"annotations\":[{\"id\":null,\"labels\":{\"output\":\"music_exit()\"},\"exif\":null}],\"type\":\"CommonExtensions\",\"version\":\"v2\"}","QuestionId":"CommonExtensions","ResultType":"OPEN_GROUP","Progress":null,"Version":"1753236212152","MarkTime":"Rab Jul 23 10:03:32 CST 2025","UserMarkResultId":"1947839936657285120","IsNeedVoteJudge":false}]},"abandonFlag":0,"abandonRemark":null}
    {"data":{"instruction":"Saya ingin mengunjungi Hangzhou. Periksa prakiraan cuaca untuk saya","_itag_index":""},"label-1947839552568066048-system":{"fixedFlag":0,"results":[{"MarkResultId":"1947839554971426816","MarkTitle":"Template Dasar","MarkResult":"{\"tabId\":\"CommonExtensions\",\"annotations\":[{\"id\":null,\"labels\":{\"output\":\"weather_search(Hangzhou)\"},\"exif\":null}],\"type\":\"CommonExtensions\",\"version\":\"v2\"}","QuestionId":"CommonExtensions","ResultType":"OPEN_GROUP","Progress":null,"Version":"1753236218730","MarkTime":"Rab Jul 23 10:03:39 CST 2025","UserMarkResultId":null,"IsNeedVoteJudge":false}],"abandonFlag":0},"label-1947839552568066048":{"results":[{"MarkResultId":"1947839554971426816","MarkTitle":"Template Dasar","MarkResult":"{\"tabId\":\"CommonExtensions\",\"annotations\":[{\"id\":null,\"labels\":{\"output\":\"weather_search(Hangzhou)\"},\"exif\":null}],\"type\":\"CommonExtensions\",\"version\":\"v2\"}","QuestionId":"CommonExtensions","ResultType":"OPEN_GROUP","Progress":null,"Version":"1753236218730","MarkTime":"Rab Jul 23 10:03:39 CST 2025","UserMarkResultId":"1947839975890939904","IsNeedVoteJudge":false}]},"abandonFlag":0,"abandonRemark":null}
  7. Di terminal, gunakan skrip Python berikut untuk mengonversi file hasil pelabelan berformat manifes menjadi format data pelatihan yang sesuai untuk QuickStart.

    import json
    
    # Jalur file input dan jalur file output
    input_file_path = 'test_json.manifest'
    output_file_path = 'train.json'
    
    converted_data = []
    
    with open(input_file_path, 'r', encoding='utf-8') as file:
        for line in file:
            try:
                # Parsing data JSON untuk setiap baris
                data = json.loads(line)
             
                # Ekstrak instruksi
                instruction = data['data']['instruction']
              
                # Iterasi melalui semua kunci yang dimulai dengan "label-"
                for key in data.keys():
                    if key.startswith('label-'):
                        # Ekstrak MarkResult dan parsing kontennya
                        mark_result_str = data[key]['results'][0]['MarkResult']
                        mark_result = json.loads(mark_result_str)  # Parsing string MarkResult sebagai JSON
                   
                        # Ekstrak labels["output"] dari annotations
                        output = mark_result['annotations'][0]['labels']['output']
                     
                        # Bangun struktur data baru
                        converted_data.append({
                            'instruction': instruction,
                            'output': output
                        })
                        break
              
            except Exception as e:
                print(f"Error memproses baris: {line.strip()}. Error: {e}")
    
    # Tulis data yang dikonversi ke file output
    with open(output_file_path, 'w', encoding='utf-8') as outfile:
        json.dump(converted_data, outfile, ensure_ascii=False, indent=4)
    
    print(f"Konversi selesai. Output disimpan di {output_file_path}")
    

    Outputnya adalah file JSON.

Latih dan lakukan evaluasi offline pada model

Latih model

QuickStart mengintegrasikan model pra-latih berkualitas tinggi dari komunitas Artificial Intelligence (AI) sumber terbuka. Ini memungkinkan Anda mengimplementasikan proses lengkap dari pelatihan model, penyebaran hingga inferensi tanpa menulis kode. Hal ini sangat menyederhanakan proses pengembangan model.

Dalam contoh ini, model Qwen1.5-1.8B-Chat digunakan untuk menggambarkan cara menggunakan data pelatihan yang telah disiapkan untuk melatih model di QuickStart. Untuk melatih model, lakukan langkah-langkah berikut:

  1. Pergi ke halaman Model Gallery.

    1. Masuk ke Konsol PAI.

    2. Di pojok kiri atas, pilih wilayah.

    3. Di panel navigasi di sebelah kiri, pilih Workspace Management dan klik nama ruang kerja yang diinginkan.

    4. Di panel navigasi di sebelah kiri, pilih Getting Started > Model Gallery.

  2. Dalam daftar model halaman Model Gallery, cari dan klik model Qwen1.5-1.8B-Chat.

  3. Di pojok kanan atas halaman detail model, klik Train. Di panel Train, konfigurasikan parameter utama yang dijelaskan dalam tabel berikut. Gunakan pengaturan default parameter lainnya.

    Parameter

    Deskripsi

    Training Mode

    • Full-Parameter Fine-Tuning: Mode ini memerlukan lebih banyak sumber daya dan memiliki waktu pelatihan yang lama, tetapi memberikan hasil pelatihan yang baik.

      Catatan

      Model dengan jumlah parameter kecil mendukung fine-tuning parameter penuh. Pilih Fine-Tuning Parameter Penuh sesuai kebutuhan.

    • QLoRA: Ini adalah mode fine-tuning ringan. Dibandingkan dengan fine-tuning parameter penuh, Quantized Low-Rank Adaptation (QLoRA) memerlukan lebih sedikit sumber daya dan memiliki waktu pelatihan yang lebih singkat, tetapi hasil pelatihannya tidak sebaik itu.

    • LoRA: Mode ini mirip dengan QLoRA.

    Dataset Configuration

    Training Dataset

    Untuk memilih dataset pelatihan yang telah disiapkan, lakukan langkah-langkah berikut:

    1. Pilih OSS File Or Directory dalam daftar drop-down.

    2. Klik tombol image untuk memilih direktori OSS.

    3. Dalam kotak dialog Select OSS File, klik Upload File, seret file dataset pelatihan yang telah disiapkan ke area kosong, lalu klik OK.

    Output Configuration

    ModelOutput Path

    Pilih direktori OSS untuk menyimpan file konfigurasi output dan file model.

    TensorboardOutput Path

    Hyper-parameters

    Untuk informasi lebih lanjut tentang hiperparameter, lihat Tabel 1. Hiperparameter lengkap.

    Kami merekomendasikan agar Anda mengonfigurasi hiperparameter berdasarkan strategi konfigurasi berikut. Untuk informasi tentang konfigurasi hiperparameter yang direkomendasikan, lihat Tabel 2. Konfigurasi hiperparameter yang direkomendasikan.

    • Konfigurasikan hiperparameter berdasarkan metode pelatihan yang berbeda.

    • Global batch size = Jumlah GPU × per_device_train_batch_size × gradient_accumulation_steps

      • Untuk memaksimalkan kinerja pelatihan, tingkatkan jumlah GPU dan atur per_device_train_batch_size ke nilai yang lebih tinggi terlebih dahulu.

      • Dalam kebanyakan kasus, ukuran global batch berkisar antara 64 hingga 256. Jika melibatkan sejumlah kecil data pelatihan, Anda dapat secara tepat mengurangi ukuran global batch.

    • Anda perlu mengonfigurasi parameter seq_length sesuai kebutuhan. Sebagai contoh, jika panjang maksimum urutan teks dalam dataset adalah 50, Anda dapat mengatur parameter ini menjadi 64 (pangkat dua).

    • Jika loss pelatihan menurun terlalu lambat atau tidak konvergen, kami merekomendasikan agar Anda meningkatkan laju pembelajaran yang ditentukan oleh parameter learning_rate. Anda juga perlu memastikan bahwa kualitas data pelatihan terjamin.

    Tabel 1. Hiperparameter Lengkap

    Hiperparameter

    Tipe

    Deskripsi

    Nilai default

    learning_rate

    FLOAT

    Laju pembelajaran pelatihan model.

    5e-5

    num_train_epochs

    INT

    Jumlah epoch.

    1

    per_device_train_batch_size

    INT

    Jumlah data yang diproses oleh setiap GPU dalam satu iterasi pelatihan.

    1

    seq_length

    INT

    Panjang urutan teks.

    128

    lora_dim

    INT

    Dimensi dalam matriks peringkat rendah yang digunakan dalam pelatihan Low-Rank Adaptation (LoRA) atau QLoRA. Atur parameter ini ke nilai lebih besar dari 0.

    32

    lora_alpha

    INT

    Bobot LoRA atau QLoRA. Parameter ini hanya berlaku jika Anda mengatur parameter lora_dim ke nilai lebih besar dari 0.

    32

    load_in_4bit

    BOOL

    Menentukan apakah akan memuat model dalam kuantisasi 4-bit. Parameter ini hanya berlaku jika Anda mengatur parameter lora_dim ke nilai lebih besar dari 0, parameter load_in_4bit ke true, dan parameter load_in_8bit ke false.

    false

    load_in_8bit

    BOOL

    Menentukan apakah akan memuat model dalam kuantisasi 8-bit. Parameter ini hanya berlaku jika Anda mengatur parameter lora_dim ke nilai lebih besar dari 0, parameter load_in_4bit ke false, dan parameter load_in_8bit ke true.

    false

    gradient_accumulation_steps

    INT

    Jumlah langkah akumulasi gradien.

    8

    apply_chat_template

    BOOL

    Menentukan apakah algoritma menggabungkan data pelatihan dengan template obrolan default. Model Qwen1.5 menggunakan format berikut:

    • Pertanyaan: <|im_start|>user\n + instruction + <|im_end|>\n

    • Jawaban: <|im_start|>assistant\n + output + <|im_end|>\n

    true

    system_prompt

    STRING

    Prompt sistem default untuk pelatihan model. Parameter ini hanya berlaku jika Anda mengatur parameter apply_chat_template ke true. Anda dapat mengonfigurasi prompt sistem kustom selama pelatihan model Qwen1.5 untuk memungkinkan LLM mengasumsikan peran tertentu. Algoritma secara otomatis memperluas data pelatihan. Anda tidak perlu memperhatikan detail eksekusi. Sebagai contoh, Anda mengatur system_prompt ke "Anda adalah ahli pengenalan maksud. Anda dapat mengenali maksud berdasarkan pertanyaan pengguna dan mengembalikan maksud dan parameter yang sesuai." Dalam hal ini, sampel pelatihan berikut diberikan:

    [
        {
            "instruction": "Saya ingin mendengarkan musik",
            "output": "play_music()"
        }
    ]

    Data pelatihan berada dalam format berikut:

    <|im_start|>system\nAnda adalah ahli pengenalan maksud. Anda dapat mengenali maksud berdasarkan pertanyaan pengguna dan mengembalikan maksud dan parameter yang sesuai<|im_end|>\n<|im_start|>user\nSaya ingin mendengarkan musik<|im_end|>\n<|im_start|>assistant\nplay_music()<|im_end|>\n

    Anda adalah asisten yang membantu

    Tabel 2. Konfigurasi Hiperparameter yang Direkomendasikan

    Parameter

    Fine-tuning parameter penuh

    LoRA/QLoRA

    learning_rate

    5e-6 dan 5e-5

    3e-4

    Global batch size

    256

    256

    seq_length

    256

    256

    num_train_epochs

    3

    5

    lora_dim

    0

    64

    lora_alpha

    0

    16

    load_in_4bit

    False

    True/False

    load_in_8bit

    False

    True/False

  4. Klik Train. Dalam pesan Billing Notification, klik OK.

    Sistem secara otomatis menavigasi ke halaman detail tugas pelatihan. Setelah tugas pelatihan berjalan, Anda dapat melihat status dan log pelatihan dari tugas pelatihan.image

Evaluasi model secara offline

Setelah Anda melatih model, Anda dapat menggunakan skrip Python untuk mengevaluasi model di terminal.

  1. Siapkan file data evaluasi testdata.json. Contoh isi:

    [
        {
            "instruction": "Siapa yang menyanyikan lagu Sepuluh Tahun?",
            "output": "music_query_player(Sepuluh Tahun)"
        },
        {
            "instruction": "Bagaimana cuaca di Hangzhou hari ini?",
            "output": "weather_search(Hangzhou)"
        }
    ]
  2. Di terminal, gunakan skrip Python berikut untuk mengevaluasi model secara offline.

    #encoding=utf-8
    from transformers import AutoModelForCausalLM, AutoTokenizer
    import json
    from tqdm import tqdm
    
    device = "cuda" # perangkat untuk memuat model
    
    # Ubah jalur model.
    model_name = '/mnt/workspace/model/qwen14b-lora-3e4-256-train/'
    print(model_name)
    model = AutoModelForCausalLM.from_pretrained(
        model_name,
        torch_dtype="auto",
        device_map="auto"
    )
    tokenizer = AutoTokenizer.from_pretrained(model_name)
    
    count = 0
    ecount = 0
    
    
    # Ubah jalur tempat data pelatihan disimpan.
    test_data = json.load(open('/mnt/workspace/data/testdata.json'))
    system_prompt = 'Anda adalah ahli pengenalan maksud. Anda dapat mengenali maksud berdasarkan pertanyaan pengguna dan mengembalikan pemanggilan fungsi dan parameter yang sesuai.'
    
    for i in tqdm(test_data[:]):
        prompt = '<|im_start|>system\n' + system_prompt + '<|im_end|>\n<|im_start|>user\n' + i['instruction'] + '<|im_end|>\n<|im_start|>assistant\n'
        gold = i['output']
        gold = gold.split(';')[0] if ';' in gold else gold
    
        model_inputs = tokenizer([prompt], return_tensors="pt").to(device)
        generated_ids = model.generate(
            model_inputs.input_ids,
            max_new_tokens=64,
            pad_token_id=tokenizer.eos_token_id,
            eos_token_id=tokenizer.eos_token_id,
            do_sample=False
        )
        generated_ids = [
            output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
        ]
        pred = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
        if gold.split('(')[0] == pred.split('(')[0]:
            count += 1
            gold_list = set(gold.strip()[:-1].split('(')[1].split(','))
            pred_list = set(pred.strip()[:-1].split('(')[1].split(','))
            if gold_list == pred_list:
                ecount += 1
        else:
            pass
    
    print("Akurasi pengenalan maksud:", count/len(test_data))
    print("Akurasi pengenalan parameter:", ecount/len(test_data))
    Catatan

    Jika eksekusi kode mengembalikan pesan Using low_cpu_mem_usage=True or a device_map requires Accelerate: pip install accelerate, ikuti petunjuk untuk menjalankan pip install accelerate untuk menginstal pustaka dependensi.

Sebarkan dan panggil layanan model

Sebarkan layanan model

Setelah Anda melatih model, Anda dapat menyebarkan model sebagai layanan online di EAS dengan melakukan langkah-langkah berikut:

  1. Di pojok kanan atas halaman Task Details, klik Deploy. Sistem secara otomatis mengonfigurasi informasi dasar dan informasi sumber daya. Untuk Deployment Method, pilih VLLM Accelerated Deployment. Anda dapat memodifikasi parameter sesuai kebutuhan. Setelah mengonfigurasi parameter, klik Deploy.

  2. Dalam pesan Billing Notification, klik OK.

    Sistem secara otomatis menavigasi ke halaman tugas penyebaran. Ketika Status adalah Running, layanan berhasil disebarkan.

Panggil layanan model

Contoh berikut menunjukkan cara memanggil API menggunakan klien:

  1. Peroleh endpoint dan token layanan model.

    1. Di bagian Basic Information halaman Service Details, klik View Call Information.image

    2. Dalam kotak dialog Call Information, lihat dan simpan endpoint dan token layanan model ke mesin lokal Anda.

  2. Contoh berikut menunjukkan cara memanggil layanan menggunakan metode penyebaran dipercepat vLLM. Anda dapat menjalankan kode ini di terminal untuk memanggil layanan.

    from openai import OpenAI
    
    ##### Konfigurasi API #####
    openai_api_key = "<EAS_SERVICE_TOKEN>"
    openai_api_base = "<EAS_SERVICE_URL>/v1/"
    
    client = OpenAI(
        api_key=openai_api_key,
        base_url=openai_api_base,
    )
    
    models = client.models.list()
    model = models.data[0].id
    print(model)
    
    
    def main():
        stream = True
        chat_completion = client.chat.completions.create(
            messages=[
                 {
                    "peran": "sistem",
                    "konten": [
                        {
                            "tipe": "teks",
                            "teks": "Anda adalah ahli pengenalan maksud. Anda dapat mengenali maksud berdasarkan pertanyaan pengguna dan mengembalikan maksud dan parameter yang sesuai.",
                        }
                    ],
                },
                {
                    "peran": "pengguna",
                    "konten": [
                        {
                            "tipe": "teks",
                            "teks": "Saya ingin mendengarkan musik",
                        }
                    ],
                }
            ],
            model=model,
            max_completion_tokens=2048,
            stream=stream,
        )
    
        if stream:
            for chunk in chat_completion:
                print(chunk.choices[0].delta.content, end="")
        else:
            result = chat_completion.choices[0].message.content
            print(result)
    
    
    if __name__ == "__main__":
        main()
    

    Dimana:

    • <EAS_SERVICE_URL>: endpoint layanan model Anda.

    • <EAS_SERVICE_TOKEN>: token layanan model Anda.

Referensi

  • Untuk informasi lebih lanjut tentang cara menggunakan iTAG dan persyaratan format untuk pelabelan data, lihat iTAG.

  • Untuk informasi lebih lanjut tentang EAS, lihat Elastic Algorithm Service.

  • Anda dapat menggunakan QuickStart dari PAI untuk melatih dan menyebarkan model dalam skenario berbeda, termasuk model Llama-3, Qwen1.5, dan Stable Diffusion V1.5. Untuk informasi lebih lanjut, lihat Praktik Spesifik Skenario.