Kursus
Pendahuluan
Kontribusi besar para peneliti dalam NLP, singkatan dari Natural Language Processing, selama beberapa dekade terakhir telah menghasilkan temuan inovatif di berbagai domain. Berikut beberapa contoh penerapan Natural Language Processing dalam praktik:
- Asisten pribadi Apple Siri, yang dapat membantu pengguna dalam aktivitas sehari-hari seperti menyetel alarm, mengirim pesan, menjawab pertanyaan, dan sebagainya.
- Peneliti di bidang medis menggunakan NLP untuk membuka jalan bagi penemuan obat yang lebih cepat.
- Terjemahan bahasa adalah aplikasi hebat lainnya karena memungkinkan kita mengatasi hambatan komunikasi.
Blog konseptual ini bertujuan membahas Transformers, salah satu model paling kuat yang pernah dibuat dalam Natural Language Processing. Setelah menjelaskan keuntungannya dibandingkan jaringan saraf berulang, kami akan membangun pemahaman Anda tentang Transformers. Selanjutnya, kami akan memandu Anda melalui beberapa skenario kasus nyata menggunakan Hugging Face transformers.
Anda juga dapat mempelajari lebih lanjut tentang Membangun Aplikasi NLP dengan Hugging Face melalui sesi kode bersama kami.
Jaringan Berulang — era gemilang sebelum Transformers
Sebelum menyelami konsep inti transformers, mari kita pahami secara singkat apa itu model berulang dan keterbatasannya.
Jaringan berulang menggunakan arsitektur encoder-decoder, dan terutama kita gunakan saat menangani tugas di mana baik input maupun output berupa urutan dalam tatanan tertentu. Beberapa aplikasi terbaik jaringan berulang adalah terjemahan mesin dan pemodelan data deret waktu.
Tantangan pada jaringan berulang
Mari pertimbangkan penerjemahan kalimat bahasa Prancis berikut ke bahasa Inggris. Input yang dikirim ke encoder adalah kalimat asli berbahasa Prancis, dan keluaran terjemahan dihasilkan oleh decoder.

Ilustrasi sederhana jaringan berulang untuk penerjemahan bahasa
- Kalimat Prancis sebagai input dimasukkan ke encoder satu per satu kata, dan embedding kata dihasilkan melalui decoder dalam urutan yang sama, sehingga pelatihannya menjadi lambat.
- Keadaan tersembunyi kata saat ini bergantung pada keadaan tersembunyi kata-kata sebelumnya, sehingga mustahil melakukan komputasi paralel berapa pun daya komputasinya.
- Jaringan saraf urutan ke urutan rentan terhadap gradien meledak ketika jaringan terlalu panjang, yang membuat kinerjanya menurun.
- Jaringan Long Short-Term Memory (LSTM), jenis lain dari jaringan berulang, diperkenalkan untuk mengurangi gradien yang menghilang, tetapi bahkan lebih lambat daripada model urutan.
Bukankah akan sangat baik bila ada model yang menggabungkan manfaat jaringan berulang dan memungkinkan komputasi paralel?
Di sinilah transformers sangat berguna.
Apa itu transformers dalam NLP?
Transformers adalah arsitektur jaringan saraf yang baru, sederhana namun kuat, diperkenalkan oleh Google Brain pada 2017 melalui makalah riset terkenal “Attention is all you need.” Arsitektur ini berbasis mekanisme attention alih-alih komputasi berurutan seperti pada jaringan berulang.
Apa komponen utama transformers?
Serupa dengan jaringan berulang, transformers juga memiliki dua blok utama: encoder dan decoder, masing-masing dengan mekanisme self-attention. Versi pertama transformers memiliki arsitektur encoder-decoder RNN dan LSTM, yang kemudian diubah menjadi self-attention dan jaringan feed-forward.
Bagian berikut memberikan ikhtisar umum tentang komponen utama setiap blok dalam transformers.

Arsitektur umum transformers (diadaptasi oleh Penulis)
Tahap prapemrosesan kalimat input
Bagian ini mencakup dua langkah utama: (1) pembuatan embedding dari kalimat input, dan (2) perhitungan vektor posisi setiap kata dalam kalimat input. Semua komputasi dilakukan dengan cara yang sama baik untuk kalimat sumber (sebelum blok encoder) maupun kalimat target (sebelum blok decoder).
Embedding data input
Sebelum menghasilkan embedding dari data input, kita mulai dengan melakukan tokenisasi, lalu membuat embedding setiap kata secara individual tanpa memperhatikan hubungan antar kata dalam kalimat.
Positional encoding
Tugas tokenisasi membuang segala konsep hubungan yang ada dalam kalimat input. Positional encoding berupaya membentuk kembali sifat siklik aslinya dengan menghasilkan vektor konteks untuk setiap kata.
Blok encoder
Di akhir langkah sebelumnya, kita memperoleh dua vektor untuk setiap kata: (1) embedding dan (2) vektor konteksnya. Kedua vektor ini dijumlahkan untuk membuat satu vektor bagi tiap kata, yang kemudian dikirim ke encoder.
Multi-head attention
Seperti disebutkan sebelumnya, kita telah kehilangan seluruh konsep hubungan. Tujuan lapisan attention adalah menangkap hubungan kontekstual yang ada antar kata dalam kalimat input. Langkah ini menghasilkan vektor attention untuk setiap kata.
Position-wise feed-forward net (FFN)
Pada tahap ini, jaringan saraf feed-forward diterapkan pada setiap vektor attention untuk mengubahnya ke format yang diharapkan oleh lapisan multi-head attention berikutnya di decoder.
Blok decoder
Blok decoder terdiri dari tiga lapisan utama: masked multi-head attention, multi-head attention, dan position-wise feed-forward network. Dua lapisan terakhir sudah kita pahami, yang sama seperti pada encoder.
Decoder berperan selama pelatihan jaringan, dan menerima dua input utama: (1) vektor attention dari kalimat input yang ingin kita terjemahkan dan (2) kalimat target terjemahan dalam bahasa Inggris.
Lalu, apa tugas lapisan masked multi-head attention?
Saat menghasilkan kata bahasa Inggris berikutnya, jaringan diizinkan menggunakan semua kata dari bahasa Prancis. Namun, ketika menangani sebuah kata pada urutan target (terjemahan bahasa Inggris), jaringan hanya boleh mengakses kata-kata sebelumnya karena membuat kata-kata selanjutnya tersedia akan membuat jaringan “curang” dan tidak berupaya belajar dengan benar. Di sinilah lapisan masked multi-head attention memberikan semua manfaatnya. Lapisan ini menutupi kata-kata selanjutnya dengan mengubahnya menjadi nol sehingga tidak dapat digunakan oleh jaringan attention.
Hasil dari lapisan masked multi-head attention diteruskan melalui sisa lapisan untuk memprediksi kata berikutnya dengan menghasilkan skor probabilitas.
Arsitektur ini berhasil karena alasan berikut:
- Kompleksitas komputasi total pada setiap lapisan lebih rendah dibandingkan RNN.
- Benar-benar meniadakan kebutuhan akan rekuren dan memungkinkan paralelisasi urutan, berbeda dengan RNN yang mengharuskan input berurutan.
- RNN tidak efisien dalam mempelajari urutan jarak jauh karena panjang lintasan sinyal maju dan mundur dalam jaringan. Lintasan ini diperpendek dengan self-attention, yang meningkatkan proses pembelajaran.
Transfer Learning dalam NLP
Melatih jaringan saraf dalam seperti transformers dari awal bukanlah tugas mudah, dan dapat menghadirkan tantangan berikut:
- Mencari jumlah data yang diperlukan untuk masalah target dapat memakan waktu
- Mendapatkan sumber daya komputasi yang diperlukan seperti GPU untuk melatih jaringan yang dalam bisa sangat mahal.
Menggunakan transfer learning dapat memberikan banyak manfaat, seperti mengurangi waktu pelatihan, mempercepat proses pelatihan model baru, dan memperpendek waktu penyelesaian proyek.
Bayangkan membangun model dari nol untuk menerjemahkan bahasa Mandingo ke Wolof, yang keduanya merupakan bahasa dengan sumber daya terbatas. Mengumpulkan data terkait bahasa-bahasa tersebut mahal. Alih-alih menghadapi semua tantangan ini, Anda dapat menggunakan kembali jaringan saraf dalam yang telah dilatih sebelumnya sebagai titik awal untuk melatih model baru.
Model semacam itu telah dilatih pada korpus data yang sangat besar, disediakan oleh pihak lain (perorangan, organisasi, dll.), dan dievaluasi bekerja sangat baik pada tugas terjemahan bahasa seperti Prancis ke Inggris.
Jika Anda baru dalam NLP, kursus Introduction to Natural Language Processing in Python ini dapat membekali Anda keterampilan dasar untuk melakukan dan menyelesaikan masalah dunia nyata.
Tapi apa yang dimaksud dengan menggunakan kembali jaringan saraf dalam?
Penggunaan kembali model mencakup memilih model pra-latih yang serupa dengan kasus penggunaan Anda, menyusun ulang pasangan data input-output untuk tugas target Anda, dan melatih ulang head dari model pra-latih menggunakan data Anda.
Pengenalan Transformers telah mendorong berkembangnya model transfer learning terdepan seperti:
- BERT, singkatan dari Bidirectional Encoder Representations from Transformers, dikembangkan oleh peneliti Google pada 2018. Model ini membantu menyelesaikan tugas bahasa paling umum seperti named entity recognition, analisis sentimen, tanya jawab, rangkuman teks, dan lain-lain. Baca lebih lanjut tentang BERT di tutorial NLP ini.
- GPT3 (Generative Pre-Training-3), diusulkan oleh peneliti OpenAI. Ini adalah transformer multi-layer, terutama digunakan untuk menghasilkan berbagai jenis teks. Model GPT mampu menghasilkan respons teks yang mirip manusia untuk pertanyaan tertentu. Artikel yang luar biasa ini dapat memberi Anda informasi lebih dalam tentang apa yang membuat GPT3 unik, teknologi yang mendasarinya, risikonya, dan keterbatasannya.
Pengenalan Hugging Face Transformers
Hugging Face adalah komunitas AI dan platform Machine Learning yang dibuat pada 2016 oleh Julien Chaumond, Clément Delangue, dan Thomas Wolf. Platform ini bertujuan mendemokratisasi NLP dengan memberikan akses langsung kepada Data Scientist, praktisi AI, dan Engineer ke lebih dari 20.000 model pra-latih berbasis arsitektur transformer terdepan. Model-model ini dapat diterapkan pada:
- Teks dalam lebih dari 100 bahasa untuk menjalankan tugas seperti klasifikasi, ekstraksi informasi, tanya jawab, generasi, dan terjemahan.
- Ujaran, untuk tugas seperti klasifikasi audio objek dan pengenalan ucapan.
- Visi untuk deteksi objek, klasifikasi gambar, segmentasi.
- Data tabular untuk masalah regresi dan klasifikasi.
- Reinforcement Learning transformers.
Hugging Face Transformers juga menyediakan hampir 2000 himpunan data dan API berlapis, memungkinkan programmer berinteraksi mudah dengan model-model tersebut menggunakan hampir 31 pustaka. Sebagian besar adalah deep learning, seperti Pytorch, Tensorflow, Jax, ONNX, Fastai, Stable-Baseline 3, dan lain-lain.
Kursus-kursus ini merupakan pengantar yang bagus untuk menggunakan Pytorch dan Tensorflow untuk masing-masing membangun jaringan saraf konvolusional dalam. Komponen lain dari Hugging Face Transformers adalah Pipelines.
Apa itu Pipelines dalam Transformers?
- Mereka menyediakan API yang mudah digunakan melalui metode pipeline() untuk melakukan inferensi pada berbagai tugas.
- Mereka digunakan untuk mengemas keseluruhan proses setiap tugas Natural Language Processing, seperti pembersihan teks, tokenisasi, embedding, dan sebagainya.
Metode pipeline() memiliki struktur sebagai berikut:
from transformers import pipeline
# To use a default model & tokenizer for a given task(e.g. question-answering)
pipeline("<task-name>")
# To use an existing model
pipeline("<task-name>", model="<model_name>")
# To use a custom model/tokenizer
pipeline('<task-name>', model='<model name>',tokenizer='<tokenizer_name>')
Tutorial Hugging Face: EDISI DALAM PROSES …
Sekarang Anda telah lebih memahami Transformers dan platform Hugging Face, kami akan memandu Anda melalui skenario dunia nyata berikut: terjemahan bahasa, klasifikasi urutan dengan zero-shot classification, analisis sentimen, dan tanya jawab.
Informasi tentang himpunan data
Dataset ini tersedia di Dataset Datacamp, diperkaya oleh Facebook dan dibuat untuk memprediksi popularitas artikel sebelum publikasi. Analisis akan didasarkan pada kolom deskripsi. Untuk mengilustrasikan contoh, kami hanya akan menggunakan tiga contoh dari data.
Di bawah ini deskripsi singkat datanya. Terdiri dari 14 kolom dan 1428 baris.
import pandas as pd
# Load the data from the path
data_path = "datacamp_workspace_export_2022-08-08 07_56_40.csv"
news_data = pd.read_csv(data_path, error_bad_lines=False)
# Show data information
news_data.info()

Terjemahan Bahasa
MariamMT adalah kerangka Terjemahan Mesin yang efisien. Kerangka ini menggunakan mesin MarianNMT di balik layar, yang sepenuhnya dikembangkan dalam C++ oleh Microsoft dan banyak institusi akademik seperti University of Edinburgh dan Adam Mickiewicz University di Poznań. Mesin yang sama saat ini digunakan di layanan Microsoft Translator.
Kelompok NLP dari University of Helsinki membuka sumber banyak model terjemahan di Hugging Face Transformers dan semuanya menggunakan format Helsinki-NLP/opus-mt-{src}-{tgt} di mana {src} dan {tgt} masing-masing mengacu pada bahasa sumber dan target.
Jadi, dalam kasus kita, bahasa sumber adalah bahasa Inggris (en) dan bahasa target adalah bahasa Prancis (fr)
MarianMT adalah salah satu model yang sebelumnya dilatih menggunakan Marian pada data paralel yang dikumpulkan di Opus.
- MarianMT memerlukan sentencepiece selain Transformers:
pip install transformers sentencepiece
from transformers import MarianTokenizer, MarianMTModel
- Pilih model pra-latih, dapatkan tokenizer, dan muat model pra-latih
# Get the name of the model
model_name = 'Helsinki-NLP/opus-mt-en-fr'
# Get the tokenizer
tokenizer = MarianTokenizer.from_pretrained(model_name)
# Instantiate the model
model = MarianMTModel.from_pretrained(model_name)
- Tambahkan token khusus >>{tgt}<< di depan setiap teks sumber (Inggris) dengan bantuan fungsi berikut.
def format_batch_texts(language_code, batch_texts):
formated_bach = [">>{}<< {}".format(language_code, text) for text in
batch_texts]
return formated_bach
- Terapkan logika terjemahan batch dengan bantuan fungsi berikut, di mana batch adalah daftar teks yang akan diterjemahkan.
def perform_translation(batch_texts, model, tokenizer, language="fr"):
# Prepare the text data into appropriate format for the model
formated_batch_texts = format_batch_texts(language, batch_texts)
# Generate translation using model
translated = model.generate(**tokenizer(formated_batch_texts,
return_tensors="pt", padding=True))
# Convert the generated tokens indices back into text
translated_texts = [tokenizer.decode(t, skip_special_tokens=True) for t in translated]
return translated_texts
- Jalankan terjemahan pada sampel deskripsi sebelumnya
# Check the model translation from the original language (English) to French
translated_texts = perform_translation(english_texts, trans_model, trans_model_tkn)
# Create wrapper to properly format the text
from textwrap import TextWrapper
# Wrap text to 80 characters.
wrapper = TextWrapper(width=80)
for text in translated_texts:
print("Original text: \n", text)
print("Translation : \n", text)
print(print(wrapper.fill(text)))
print("")

Zero-shot classification
Sering kali, melatih model Machine Learning mengharuskan semua label/target kandidat diketahui sebelumnya, yang berarti jika label pelatihan Anda adalah science, politics, atau education, Anda tidak akan bisa memprediksi label healthcare kecuali Anda melatih ulang model dengan mempertimbangkan label tersebut dan data input yang sesuai.
Pendekatan yang kuat ini memungkinkan kita memprediksi target sebuah teks dalam sekitar 15 bahasa tanpa pernah melihat label kandidat mana pun. Kita dapat menggunakan model ini dengan cukup memuatnya dari hub.
Tujuannya di sini adalah mencoba mengklasifikasikan kategori masing-masing deskripsi sebelumnya, apakah tech, politics, security, atau finance.
- Impor modul pipeline
from transformers import pipeline
- Tetapkan label kandidat. Ini sesuai dengan apa yang ingin kita prediksi: tech, politics, business, atau finance
candidate_labels = ["tech", "politics", "business", "finance"]
- Definisikan classifier dengan opsi multibahasa
my_classifier = pipeline("zero-shot-classification",
model='joeddav/xlm-roberta-large-xnli')
- Jalankan prediksi pada deskripsi pertama dan terakhir
#For the first description
prediction = my_classifier(english_texts[0], candidate_labels, multi_class = True)
pd.DataFrame(prediction).drop(["sequence"], axis=1)

Teks diprediksi terutama tentang finance
Hasil sebelumnya menunjukkan bahwa teks tersebut secara keseluruhan berkaitan dengan finance sebesar 81%.
Untuk deskripsi terakhir, kita memperoleh hasil berikut:
#For the last description
prediction = my_classifier(english_texts[-1], candidate_labels, multi_class = True)
pd.DataFrame(prediction).drop(["sequence"], axis=1)

Teks diprediksi terutama tentang tech
Hasil sebelumnya menunjukkan bahwa teks tersebut secara keseluruhan berkaitan dengan tech sebesar 95%.
Analisis sentimen
Kebanyakan model yang melakukan klasifikasi sentimen memerlukan pelatihan yang tepat. Modul pipeline Hugging Face memudahkan menjalankan prediksi analisis sentimen dengan menggunakan model tertentu yang tersedia di hub dengan menyebutkan namanya.
- Pilih tugas yang akan dilakukan dan muat model yang sesuai. Di sini, kita ingin melakukan klasifikasi sentimen menggunakan model distilled BERT base.
model_checkpoint = "distilbert-base-uncased-finetuned-sst-2-english"
distil_bert_model = pipeline(task="sentiment-analysis", model=model_checkpoint)
- Model siap! Mari analisis sentimen yang terkandung di dua kalimat terakhir.
# Run the predictions
distil_bert_model(english_texts[1:])

Model memprediksi teks pertama bernada negatif dengan keyakinan 96%, dan teks kedua bernada positif dengan keyakinan 52%.
Jika Anda ingin mengeksplorasi lebih jauh tugas analisis sentimen, kursus Python Sentiment Analysis ini akan membantu Anda memperoleh keterampilan untuk membangun classifier analisis sentimen sendiri menggunakan Python dan memahami dasar-dasar NLP.
Tanya Jawab
Bayangkan Anda berurusan dengan sebuah laporan yang jauh lebih panjang daripada yang tentang Apple. Dan, yang Anda minati hanyalah tanggal acara yang disebutkan. Alih-alih membaca seluruh laporan untuk menemukan informasi kunci, kita dapat menggunakan model tanya jawab dari Hugging Face yang akan memberikan jawaban yang kita butuhkan.
Ini dapat dilakukan dengan memberikan konteks yang tepat (laporan Apple) dan pertanyaan yang ingin kita cari jawabannya kepada model.
- Impor kelas question-answering dan tokenizer dari transformers
from transformers import AutoModelForQuestionAnswering, AutoTokenizer
- Instansiasi model menggunakan namanya dan tokenizernya.
model_checkpoint = "deepset/roberta-base-squad2"
task = 'question-answering'
QA_model = pipeline(task, model=model_checkpoint, tokenizer=model_checkpoint)
- Minta model dengan mengajukan pertanyaan dan menentukan konteksnya.
QA_input = {
'question': 'when is Apple hosting an event?',
'context': english_texts[-1]
}
- Dapatkan hasil dari model
model_response = QA_model(QA_input)
pd.DataFrame([model_response])

Model menjawab bahwa acara Apple pada 10 September dengan tingkat keyakinan tinggi sebesar 97%.
Kesimpulan
Dalam artikel ini, kami telah membahas evolusi teknologi bahasa alami dari jaringan berulang ke transformers dan bagaimana Hugging Face mendemokratisasi penggunaan NLP melalui platformnya.
Jika Anda masih ragu menggunakan transformers, kami percaya inilah saatnya untuk mencobanya dan menambah nilai pada kasus bisnis Anda.
FAQ Transformers dan Hugging Face
Apa itu Hugging Face transformer?
Hugging Face transformers adalah platform yang menyediakan API bagi komunitas untuk mengakses dan menggunakan model pra-latih terdepan yang tersedia di Hugging Face hub.
Apa itu transformer pra-latih?
Transformer pra-latih adalah model transformer yang telah dilatih dan divalidasi oleh seseorang (perorangan atau industri) dan yang dapat kita gunakan sebagai titik awal untuk tugas serupa.
Apakah Hugging Face gratis untuk digunakan?
Hugging Face menyediakan versi komunitas dan organisasi. Versi komunitas mencakup gratis, yang memiliki keterbatasan, dan versi pro, yang biayanya $9 per bulan. Untuk organisasi, tersedia solusi Lab dan enterprise, yang tidak gratis.
Kerangka kerja mana yang digunakan di Hugging Face?
Hugging Face menyediakan API untuk hampir 31 pustaka. Sebagian besar adalah deep learning, seperti Pytorch, Tensorflow, Jax, ONNX, fastai, Stable-Baseline 3, dan lain-lain.
Bahasa pemrograman apa yang digunakan di Hugging Face?
Beberapa model pra-latih telah dilatih menggunakan tugas denoising multibahasa dalam Javascript, Python, Rust, dan Bash/Shell. Kursus Python Natural Language Processing ini dapat membantu Anda memperoleh keterampilan yang relevan untuk berhasil melakukan tugas pembersihan teks umum
