Memahami Tokenisasi di NLP: Panduan Pemula dalam Pemrosesan Teks

Diterbitkan: 2024-11-26

Tokenisasi adalah komponen pemrosesan bahasa alami (NLP) yang penting namun sering diabaikan. Dalam panduan ini, kami akan menjelaskan tokenisasi, kasus penggunaannya, pro dan kontra, dan mengapa tokenisasi terlibat dalam hampir semua model bahasa besar (LLM).

Daftar isi

  • Apa itu tokenisasi di NLP?
  • Jenis tokenisasi
  • Cara kerja tokenisasi
  • Aplikasi tokenisasi
  • Manfaat tokenisasi
  • Tantangan tokenisasi

Apa itu tokenisasi di NLP?

Tokenisasi adalah metode NLP yang mengubah teks menjadi format numerik yang dapat digunakan model pembelajaran mesin (ML). Saat Anda mengirimkan perintah ke LLM seperti Claude Anthropic, Gemini Google, atau anggota seri GPT OpenAI, model tidak langsung membaca teks Anda. Model ini hanya dapat mengambil angka sebagai masukan, sehingga teks harus diubah terlebih dahulu menjadi rangkaian angka menggunakan tokenizer.

Salah satu cara tokenizer dapat memberi token pada teks adalah dengan membaginya menjadi kata-kata terpisah dan memberikan nomor pada setiap kata unik:

“Tata bahasa menyukai tata bahasa, ML, dan penulisan” bisa menjadi:

Contoh tokenisasi di NLP

Setiap kata (dan nomor terkaitnya) adalah sebuah token. Model ML dapat menggunakan urutan token—[7,102], [37], [564], [2], [9,763], [2], [231]—untuk menjalankan operasinya dan menghasilkan keluarannya. Output ini biasanya berupa angka, yang diubah kembali menjadi teks menggunakan kebalikan dari proses tokenisasi yang sama. Dalam praktiknya, tokenisasi kata demi kata ini sangat bagus sebagai contoh, namun jarang digunakan dalam industri karena alasan yang akan kita lihat nanti.

Satu hal terakhir yang perlu diperhatikan adalah bahwa pembuat token memiliki kosakata—kumpulan token lengkap yang dapat mereka tangani. Tokenizer yang mengetahui kata-kata dasar bahasa Inggris tetapi tidak mengetahui nama perusahaan mungkin tidak memiliki “Grammarly” sebagai token dalam kosakatanya, sehingga menyebabkan kegagalan tokenisasi.

Bekerja lebih cerdas dengan Grammarly
Mitra penulisan AI bagi siapa saja yang memiliki pekerjaan yang harus diselesaikan

Jenis tokenisasi

Secara umum, tokenisasi adalah mengubah sepotong teks menjadi rangkaian angka. Meskipun wajar untuk memikirkan tokenisasi pada tingkat kata, ada banyak metode tokenisasi lainnya, salah satunya—tokenisasi subkata—adalah standar industri.

Tokenisasi kata

Tokenisasi kata adalah contoh yang kita lihat sebelumnya, di mana teks dipisahkan berdasarkan setiap kata dan tanda baca.

Contoh tokenisasi kata di NLP

Manfaat utama tokenisasi kata adalah mudah dipahami dan divisualisasikan. Namun, ia mempunyai beberapa kekurangan:

  • Tanda baca, jika ada, dilampirkan pada kata, seperti halnya “tulisan”.
  • Kata-kata baru atau tidak umum (seperti “Tata Bahasa”) memiliki arti yang utuh.

Hasilnya, tokenisasi kata dapat menghasilkan kosakata dengan ratusan ribu token. Masalah dengan kosakata yang banyak adalah hal tersebut membuat pelatihan dan inferensi menjadi kurang efisien—matriks yang diperlukan untuk mengkonversi antara teks dan angka harus berukuran besar.

Selain itu, akan ada banyak kata yang jarang digunakan, dan model NLP tidak akan memiliki cukup data pelatihan yang relevan untuk menghasilkan respons akurat untuk kata-kata yang jarang digunakan tersebut. Jika sebuah kata baru ditemukan besok, LLM yang menggunakan tokenisasi kata perlu dilatih ulang untuk memasukkan kata ini.

Tokenisasi subkata

Tokenisasi subkata membagi teks menjadi beberapa bagian yang lebih kecil atau sama dengan kata. Tidak ada ukuran tetap untuk setiap token; setiap token (dan panjangnya) ditentukan oleh proses pelatihan. Tokenisasi subkata adalah standar industri untuk LLM. Di bawah ini contohnya, dengan tokenisasi yang dilakukan oleh tokenizer GPT-4o:

Contoh tokenisasi subkata di NLP

Di sini, kata “Grammarly” yang tidak umum dipecah menjadi tiga kata: “Gr,” “amm,” dan “arly.” Sementara itu, kata-kata lain cukup umum dalam teks sehingga membentuk tokennya sendiri.

Tokenisasi subkata memungkinkan kosakata yang lebih kecil, yang berarti pelatihan dan inferensi lebih efisien dan lebih murah. Tokenizer subkata juga dapat memecah kata-kata langka atau baru menjadi kombinasi token yang lebih kecil dan sudah ada. Karena alasan ini, banyak model NLP menggunakan tokenisasi subkata.

Tokenisasi karakter

Tokenisasi karakter membagi teks menjadi karakter individual. Berikut tampilan contoh kita:

Contoh tokenisasi karakter di NLP

Setiap karakterunikmenjadi tanda tersendiri. Ini sebenarnya membutuhkan kosakata paling sedikit karena dalam alfabet hanya ada 52 huruf (huruf besar dan kecil dianggap berbeda) dan beberapa tanda baca. Karena setiap kata dalam bahasa Inggris harus dibentuk dari karakter-karakter ini, tokenisasi karakter dapat bekerja dengan kata baru atau kata langka apa pun.

Namun, berdasarkan tolok ukur LLM standar, dalam praktiknya tokenisasi karakter tidak berfungsi sebaik tokenisasi subkata. Token subkata “car” mengandung lebih banyak informasi daripada token karakter “c”, sehingga mekanisme perhatian pada transformator memiliki lebih banyak informasi untuk dijalankan.

Tokenisasi kalimat

Tokenisasi kalimat mengubah setiap kalimat dalam teks menjadi tokennya sendiri. Contoh kita akan terlihat seperti:

Contoh tokenisasi kalimat di NLP

Keuntungannya adalah setiap token berisi banyak informasi. Namun ada beberapa kelemahan. Ada banyak cara untuk menggabungkan kata-kata untuk menulis kalimat. Jadi, kosakatanya juga harus tidak terbatas.

Selain itu, setiap kalimat itu sendiri akan sangat jarang terjadi karena perbedaan kecil sekalipun (seperti “juga” dan bukan “dan”) akan memiliki arti yang berbeda meskipun memiliki arti yang sama. Pelatihan dan inferensi akan menjadi mimpi buruk. Tokenisasi kalimat digunakan dalam kasus penggunaan khusus seperti analisis sentimen kalimat, namun sebaliknya, ini jarang terjadi.

Pengorbanan tokenisasi: efisiensi vs. kinerja

Memilih granularitas tokenisasi yang tepat untuk suatu model sebenarnya merupakan hubungan yang kompleks antara efisiensi dan kinerja. Dengan token yang sangat besar (misalnya pada tingkat kalimat), kosa kata menjadi sangat banyak. Efisiensi pelatihan model turun karena matriks untuk menampung semua token ini sangat besar. Kinerja menurun karena tidak ada cukup data pelatihan untuk semua token unik untuk mempelajari hubungan secara bermakna.

Di sisi lain, dengan token kecil, kosa kata menjadi sedikit. Pelatihan menjadi efisien, namun performa mungkin menurun karena setiap token tidak berisi informasi yang cukup bagi model untuk mempelajari hubungan token-token.

Tokenisasi subkata berada tepat di tengah. Setiap token memiliki informasi yang cukup bagi model untuk mempelajari hubungan, namun kosakatanya tidak terlalu banyak sehingga pelatihan menjadi tidak efisien.

Cara kerja tokenisasi

Tokenisasi berkisar pada pelatihan dan penggunaan tokenizer. Tokenizer mengubah teks menjadi token dan token kembali menjadi teks. Kita akan membahas tokenizer subkata di sini karena ini adalah jenis yang paling populer.

Tokenizer subkata harus dilatih untuk membagi teks secara efektif.

Contoh tokenisasi subkata di NLP

Mengapa “Grammarly” dipecah menjadi “Gr”, “amm”, dan “arly”? Tidak bisakah “Gram”, “mar”, dan “ly” juga berfungsi? Di mata manusia, hal ini pasti bisa terjadi, tetapi pembuat token, yang mungkin telah mempelajari representasi paling efisien, berpikir secara berbeda. Algoritme pelatihan umum (meskipun tidak digunakan di GPT-4o) yang digunakan untuk mempelajari representasi ini adalah byte-pair coding (BPE). Kami akan menjelaskan BPE di bagian selanjutnya.

Pelatihan Tokenisasi

Untuk melatih tokenizer yang baik, Anda memerlukan kumpulan teks yang sangat besar untuk dilatih. Menjalankan BPE pada korpus ini berfungsi sebagai berikut:

  1. Pisahkan semua teks dalam korpus menjadi karakter individual. Tetapkan ini sebagai tanda awal dalam kosakata.
  2. Gabungkan dua token yang paling sering berdekatan dari teks menjadi satu token baru dan tambahkan ke kosakata (tanpa menghapus token lama—ini penting).
  3. Ulangi proses ini hingga tidak ada lagi pasangan token berdekatan yang sering muncul, atau ukuran kosakata maksimum telah tercapai.

Sebagai contoh, asumsikan seluruh korpus pelatihan kita terdiri dari teks “abc abcd”:

  1. Teks akan dipecah menjadi [“a”, “b”, “c”, “ ”, “a”, “b”, “c”, “d”]. Perhatikan bahwa entri keempat dalam daftar itu adalah karakter spasi. Kosakata kita kemudian akan menjadi [“a”, “b”, “c”, “ ”, “d”].
  2. “a” dan “b” paling sering muncul bersebelahan dalam teks (diikat dengan “b” dan “c” tetapi “a” dan “b” menang berdasarkan abjad). Jadi, kami menggabungkannya menjadi satu token, “ab”. Kosakata sekarang terlihat seperti ["a", "b", "c", " ", "d", "ab"], dan teks yang diperbarui (dengan penggabungan token "ab" diterapkan) terlihat seperti ["ab" , “c”, “ ”, “ab”, “c”, “d”].
  3. Sekarang, “ab” dan “c” paling sering muncul bersamaan dalam teks. Kami menggabungkannya ke dalam token “abc”. Kosakatanya kemudian terlihat seperti [“a”, “b”, “c”, “ ”, “d”, “ab”, “abc”], dan teks yang diperbarui terlihat seperti [“abc”, “ ”, “abc ", "D"].
  4. Kami mengakhiri proses di sini karena setiap pasangan token yang berdekatan sekarang hanya muncul satu kali. Menggabungkan token lebih lanjut akan membuat model yang dihasilkan berperforma lebih buruk pada teks lain. Dalam praktiknya, batas ukuran kosa kata merupakan faktor pembatas.

Dengan kumpulan kosakata baru kami, kami dapat memetakan antara teks dan token. Bahkan teks yang belum pernah kita lihat sebelumnya, seperti “cab,” dapat diberi token karena kita tidak membuang token satu karakter. Kita juga dapat mengembalikan nomor token hanya dengan melihat posisi token dalam kosakata.

Pelatihan tokenizer yang baik memerlukan volume data yang sangat tinggi dan banyak komputasi—lebih dari kemampuan kebanyakan perusahaan. Perusahaan menyiasatinya dengan melewatkan pelatihan tokenizer mereka sendiri. Sebaliknya, mereka hanya menggunakan tokenizer terlatih (seperti tokenizer GPT-4o yang ditautkan di atas) untuk menghemat waktu dan uang dengan kerugian minimal, jika ada, pada performa model.

Menggunakan tokenizer

Jadi, kami memiliki tokenizer subkata yang dilatih pada korpus besar menggunakan BPE. Sekarang, bagaimana kita menggunakannya pada teks baru?

Kami menerapkan aturan penggabungan yang kami tentukan dalam proses pelatihan tokenizer. Kami pertama-tama membagi teks masukan menjadi karakter. Kemudian, kami melakukan penggabungan token dengan urutan yang sama seperti dalam pelatihan.

Sebagai ilustrasi, kita akan menggunakan teks masukan “dc abc” yang sedikit berbeda:

  1. Kami membaginya menjadi karakter [“d”, “c”, “ ”, “a”, “b”, “c”].
  2. Penggabungan pertama yang kami lakukan dalam pelatihan adalah “ab” jadi kami melakukannya di sini: [“d”, “c”, “ ”, “ab”, “c”].
  3. Penggabungan kedua yang kami lakukan adalah “abc” jadi kami melakukannya: [“d”, “c”, “ ”, “abc”].
  4. Itu adalah satu-satunya aturan penggabungan yang kami miliki, jadi kami selesai melakukan tokenisasi, dan kami dapat mengembalikan ID token.

Jika kita memiliki sekumpulan ID token dan ingin mengubahnya menjadi teks, kita cukup mencari setiap ID token dalam daftar dan mengembalikan teks terkaitnya. LLM melakukan ini untuk mengubah penyematan (vektor angka yang menangkapmaknatoken dengan melihat token di sekitarnya) yang mereka gunakan kembali menjadi teks yang dapat dibaca manusia.

Aplikasi tokenisasi

Tokenisasi selalu menjadi langkah pertama dalam semua NLP. Mengubah teks menjadi bentuk yang dapat digunakan oleh model ML (dan komputer) memerlukan tokenisasi.

Tokenisasi di LLM

Tokenisasi biasanya merupakan bagian pertama dan terakhir dari setiap panggilan LLM. Teks diubah menjadi token terlebih dahulu, kemudian token diubah menjadi embeddings untuk menangkap makna setiap token dan diteruskan ke bagian utama model (blok transformator). Setelah blok transformator dijalankan, embeddings diubah kembali menjadi token. Terakhir, token yang baru saja dikembalikan ditambahkan ke masukan dan diteruskan kembali ke model, mengulangi prosesnya lagi. LLM menggunakan tokenisasi subkata untuk menyeimbangkan kinerja dan efisiensi.

Tokenisasi di mesin pencari

Mesin pencari memberi token pada kueri pengguna untuk menstandarkannya dan untuk lebih memahami maksud pengguna. Tokenisasi mesin pencari mungkin melibatkan pemisahan teks menjadi kata-kata, menghilangkan kata-kata pengisi (seperti “the” atau “and”), mengubah huruf besar menjadi huruf kecil, dan menangani karakter seperti tanda hubung. Tokenisasi subkata biasanya tidak diperlukan di sini karena kinerja dan efisiensi tidak terlalu bergantung pada ukuran kosakata.

Tokenisasi dalam terjemahan mesin

Tokenisasi terjemahan mesin menarik karena bahasa masukan dan keluarannya berbeda. Hasilnya, akan ada dua tokenizer, satu untuk setiap bahasa. Tokenisasi subkata biasanya berfungsi paling baik karena menyeimbangkan trade-off antara efisiensi model dan kinerja model. Namun beberapa bahasa, seperti bahasa Mandarin, tidak memiliki komponen linguistik yang lebih kecil dari sebuah kata. Di sana, tokenisasi kata diperlukan.

Manfaat tokenisasi

Tokenisasi adalah hal yang harus dimiliki untuk model NLP apa pun. Tokenisasi yang baik memungkinkan model ML bekerja secara efisien dengan teks dan menangani kata-kata baru dengan baik.

Tokenisasi memungkinkan model bekerja dengan teks

Secara internal, model ML hanya berfungsi dengan angka. Algoritme di balik model ML bergantung sepenuhnya pada komputasi, yang memerlukan angka untuk menghitungnya. Jadi, teks harus diubah menjadi angka sebelum model ML dapat bekerja dengannya. Setelah tokenisasi, teknik seperti perhatian atau penyematan dapat dijalankan pada angka-angka tersebut.

Tokenisasi menggeneralisasi teks baru dan langka

Atau lebih tepatnya, tokenisasiyang baikmenggeneralisasi teks baru dan langka. Dengan tokenisasi subkata dan karakter, teks baru dapat didekomposisi menjadi urutan token yang sudah ada. Jadi, menempelkan artikel dengan kata-kata yang tidak masuk akal ke ChatGPT tidak akan menyebabkan artikel tersebut rusak (walaupun mungkin juga tidak memberikan respons yang koheren). Generalisasi yang baik juga memungkinkan model mempelajari hubungan di antara kata-kata langka, berdasarkan hubungan dalam subtokens.

Tantangan tokenisasi

Tokenisasi bergantung pada korpus pelatihan dan algoritme, sehingga hasilnya dapat bervariasi. Hal ini dapat mempengaruhi kemampuan penalaran LLM serta panjang masukan dan keluarannya.

Tokenisasi mempengaruhi kemampuan penalaran LLM

Masalah mudah yang sering membuat bingung LLM adalah menghitung kemunculan huruf “r” pada kata “strawberry”. Model tersebut salah mengatakan ada dua, padahal jawabannya sebenarnya tiga. Kesalahan ini mungkin sebagian disebabkan oleh tokenisasi. Tokenizer subkata membagi “strawberry” menjadi “st”, “raw”, dan “berry”. Jadi, model tersebut mungkin tidak dapat menghubungkan satu “r” di token tengah dengan dua “r” di token terakhir. Algoritme tokenisasi yang dipilih secara langsung memengaruhi cara kata-kata diberi token dan bagaimana setiap token berhubungan satu sama lain.

Tokenisasi mempengaruhi panjang input dan output LLM

LLM sebagian besar dibangun pada arsitektur transformator, yang mengandalkan mekanisme perhatian untuk mengontekstualisasikan setiap token. Namun, seiring bertambahnya jumlah token, waktu yang dibutuhkan untuk memusatkan perhatian meningkat secara kuadrat. Jadi, sebuah teks dengan empat token akan memakan waktu 16 satuan waktu tetapi teks dengan delapan token akan memakan waktu 64 satuan waktu. Hal ini membatasi LLM pada batas input dan output beberapa ratus ribu token. Dengan token yang lebih kecil, hal ini benar-benar dapat membatasi jumlah teks yang dapat Anda masukkan ke dalam model, sehingga mengurangi jumlah tugas yang dapat Anda gunakan untuk menggunakannya.