1. 1
NLP (Natural Language Processing)
Diskusi Pertemuan 4
Nama : Hendro Gunawan
NIM : 200401072103
Kelas : IT701
Penjelasan Dasar Pipeline
https://www.youtube.com/embed/1pJZufDvBng?rel=0&controls=0&showinfo=0
4.1. Perkenalan
Selami dunia Pipelines, sahabat baru Anda untuk inferensi model. Mereka berfungsi sebagai jalan tol,
menyederhanakan kode yang berbelit-belit dan mengubah fitur kompleks menjadi alat yang ramah
pengguna. Setiap alur dirancang untuk menawarkan API yang disederhanakan yang melayani berbagai
tugas.
Mereka serbaguna dan melayani berbagai tipe data, termasuk:
- Teks: Tangani tugas Pemrosesan Bahasa Alami seperti terjemahan, peringkasan, dan lainnya dengan
mudah. Tugas berbasis teks tidak pernah semulus ini!
- Audio: Pelajari ranah suara dengan saluran pipeline yang dirancang untuk data audio. Sempurna untuk
tugas-tugas seperti pengenalan suara atau klasifikasi musik.
- Visual: Melepaskan kekuatan model visi komputer. Ideal untuk tugas-tugas seperti klasifikasi gambar
atau deteksi objek.
- Inferensi Multimodal: Mengapa membatasi satu ketika Anda dapat menangani beberapa tipe data?
Dengan inferensi multimodal, Anda dapat menggabungkan input teks, audio, dan visual untuk wawasan
yang diperkaya.
Manfaatkan kekuatan pipeline dan tingkatkan proyekAIAnda dengan penanganan dan efisiensinya yang
mudah.
4.2. Keuntungan
Pipeline adalah senjata rahasia Anda untuk pengembangan AI yang efisien. Inilah alasannya:
1. Penggunaan yang Disederhanakan: Tidak ada lagi sakit kepala karena kode yang rumit. Saluran
pipeline membuat aplikasi menjadi mudah.
2. Abstraksi Detail Tingkat Rendah: Pertahankan fokus Anda pada gambaran besar. Saluran pipeline
menangani detail berpasir.
3. API Terpadu di Berbagai Tugas: Nikmati konsistensi di seluruh tugas. Satu API, beberapa aplikasi.
4. Dapat Beradaptasi dengan Model Kustom: Fleksibilitas yang terbaik! Saluran pipeline dapat
dengan mudah beradaptasi dengan model unik Anda.
2. 2
Apakah ada veteran di rumah yang pernah mengalami kekuatan saluran pipeline di perpustakaan
pemrosesan bahasa? Kami ingin mendengar cerita Anda dari parit!
4.3. Memulai
Untuk menggunakanHugging Face pipelines, Mengimpor kelas alur dan menentukan tugas yang ingin
Anda lakukan.
Memanfaatkan pipeline() untuk Inferensi Teks
Memulai perjalanan analisis teks dengan fungsi pipeline(). Ini diarahkan untuk memenuhi berbagai tugas
yang berhubungan dengan teks:
1. Klasifikasi Teks: Analisis dan kategorikan data teks Anda dengan mudah.
2. Klasifikasi Zero-Shot: Mengklasifikasikan konten ke dalam kelas yang tidak pernah terlihat selama
pelatihan. Ini belajar, ditinggikan.
3. Pembuatan Teks: Buat teks baru yang bermakna dalam sekejap.
4. Penyelesaian Teks (Pengisian Mask): Biarkan alur mengisi kekosongan untuk Anda dalam teks
mask.
5. Klasifikasi Token: Mengklasifikasikan token individual dalam kalimat untuk tugas-tugas seperti
pengenalan entitas bernama.
6. Jawaban Pertanyaan: Ekstrak jawaban yang tepat untuk pertanyaan spesifik dari data teks Anda.
7. Ringkasan: Ubah teks panjang menjadi ringkasan yang ringkas dan bermakna.
8. Terjemahan: Lelehkan hambatan bahasa - terjemahkan teks ke dalam bahasa yang berbeda.
Siap menjelajah? Ayo selami!
!pip install -q transformers dataset evaluate
Jalankan fungsi ini:
from transformers import pipeline
def sentiment_analysis(text, device):
device = 0 if device else "cpu"
run = pipeline("sentiment-analysis", model="distilbert-base-uncased-
finetuned-sst-2-english", device=0)
result = run(text)
return result
def zero_shot_classification(text, kelas_zero_shot, device):
device = 0 if device else "cpu"
run = pipeline("zero-shot-classification", model="facebook/bart-large-
mnli", device=0)
3. 3
result = run(text, candidate_labels=kelas_zero_shot.split(","))
return result
def text_generation(text, device):
device = 0 if device else "cpu"
run = pipeline("text-generation", model="gpt2", max_new_tokens=100,
device=0)
result = run(text)
return result
def fill_mask(text, device):
device = 0 if device else "cpu"
run = pipeline("fill-mask", model="distilroberta-base", device=0)
result = run(text)
return result
def ner(text, device):
device = 0 if device else "cpu"
run = pipeline("ner", model="dbmdz/bert-large-cased-finetuned-conll03-
english", device=0)
result = run(text)
return result
def translation_en_to_fr(text, device):
device = 0 if device else "cpu"
run = pipeline("translation_en_to_fr", model="t5-base", device=0)
result = run(text)
return result
def func_pipeline(numb_task: int):
if numb_task == "1":
print("Example input: I've been waiting for a HuggingFace course my
whole life.")
input_text = input("Input: ")
device = input("Use GPU? (True or False)")
return sentiment_analysis(input_text, device)
elif numb_task == "2":
print("Example input: This is a course about the Transformers
library")
4. 4
input_text = input("Input: ")
kelas_zero_shot = input("Input Zero Shot Class: ")
device = input("Use GPU? (True or False)")
return zero_shot_classification(input_text, kelas_zero_shot,
device)
elif numb_task == "3":
print("Example input: In this course, we will teach you how to")
input_text = input("Input: ")
device = input("Use GPU? (True or False)")
return text_generation(input_text, device)
elif numb_task == "4":
print("Example input: This course will teach you all about <mask>
models")
input_text = input("Input: ")
device = input("Use GPU? (True or False)")
return fill_mask(input_text, device)
elif numb_task == "5":
print("Example input: My name is Sylvain and I work at Hugging Face
in Brooklyn")
input_text = input("Input: ")
device = input("Use GPU? (True or False)")
return ner(input_text, device)
elif numb_task == "6":
print("Example input: How are you?")
input_text = input("Input: ")
device = input("Use GPU? (True or False)")
return translation_en_to_fr(input_text, device)
else:
return "Task not found!"
Dan coba fungsi ini:
input_task = input("Select number task: ")
# Task list:
# - 1. sentiment-analysis
# - 2. zero-shot-classification
# - 3. text-generation
# - 4. fill-mask
# - 5. ner
# - 6. translation_en_to_fr
5. 5
print(func_pipeline(input_task))
Output:
Select number task: 1
Example input: I've been waiting for a HuggingFace course my whole life.
Input: Help me!
Use GPU? (True or False)1
Output:
[{'label': 'NEGATIVE', 'score': 0.574838399887085}]
4.4. Klasifikasi Teks
Anda mencoba memahami apakah sebuah kalimat membawa sentimen positif atau negatif, tetapi
proses pengkodeannya tampak menakutkan? 🤔 Jangan takut! Dengan memanfaatkan fungsi
pipeline() Hugging Face , Anda dapat dengan mudah mengatasi hal ini. Kode berikut
menyederhanakan proses:
Potongan kode ini menciptakan alat yang dapat menentukan sentimen teks:
from transformers import pipeline
classifier = pipeline("sentiment-analysis", model="distilbert-base-uncased-
finetuned-sst-2-english")
Now, let's use this tool to analyze a sentence:
classifier("Huggingface is easy to use, but needs a little improvement.")
Output:
[{'label': 'NEGATIVE', 'score': 0.9983354210853577}]
Bagaimana dengan beberapa kalimat? Tidak masalah: Tapi kali ini, mari kita hitung waktu yang
dibutuhkan model untuk melakukan inferensi
sentences = [
"I've been waiting for a HuggingFace course my whole life.",
"I hate this so much!"
]
classifier(sentences)
Output:
[{'label': 'POSITIVE', 'score': 0.9598048329353333}, {'label': 'NEGATIVE',
'score': 0.9994558691978455}]
Semua perhitungan kompleks terjadi di belakang layar. Fungsi alur dan model terlatih memberi Anda
label sentimen (positif/negatif), dan skor keyakinan untuk setiap teks. Sederhana, bukan? 😎
Tunggu!!!
6. 6
Bagaimana dengan kinerjanya dalam bahasa yang tidak ada dalam data prapelatihan model
(Data prapelatihan BERT/distill-BERT hanya terdiri dari Bahasa Inggris)
# Example dataset from indonlp/indonlu - smsa
sentence_id = [
"menu warkop , tempat gaul . paling enak ke sini pagi hari masih sepi . kalau
siang - malam ramai bingitzzxz . cocok untuk anak baru besar atau remaja .
buat bincang bisnis tidak cocok terlalu ramai . kopi nya gayo arabica mantap
, sayang tidak ada manual brew . semuanya pakai expresso mesin . buat kawula
muda cocoklah"
]
classifier(sentence_id)
Output:
[{'label': 'NEGATIVE', 'score': 0.9971126317977905}]
Bagaimana menurutmu 🤔
Yakin labelnya harus positif kan?
Mari kita coba dengan model finetuned yang menggunakan dataset bahasa indonesia sebagai data
prapelatihan.
from transformers import pipeline
classifier_id = pipeline("sentiment-analysis", model="ayameRushia/roberta-
base-indonesian-1.5G-sentiment-analysis-smsa")
classifier_id("Pemilu 2 putaran.")
Output:
[{'label': 'NEUTRAL', 'score': 0.9991310238838196}]
4.5. Klasifikasi zero-shot
Anda memiliki pernyataan dan Anda ingin tahu tentang kategori mana yang dimilikinya: pendidikan,
politik, atau bisnis. Namun, Anda menemukan bagian pengkodean sedikit rumit, bukan? 🤔 Jangan
khawatir! Menggunakan fungsi pipeline() Hugging Face, Anda dapat dengan mudah
mengklasifikasikan pernyataan Anda.
Mari kita uraikan dengan kode berikut, Kita mulai dengan membuat alat untuk klasifikasi:
from transformers import pipeline
classifier = pipeline("zero-shot-classification", model="facebook/bart-
large-mnli")
Next, let's classify a sentence into one of the three categories:
classifier(
7. 7
"This is a course about the Transformers library",
candidate_labels=["education", "politics", "computer"]
)
Output:
{'sequence': 'This is a course about the Transformers library', 'labels':
['education', 'computer', 'politics'], 'scores': [0.7643018960952759,
0.19639979302883148, 0.03929830342531204]}
What's happening behind the scenes? The pipeline function and the specified model combine their
powers to classify the provided statement into either "education", "politics", or "business", even though
it hasn't seen these labels before during its training.
This process is called 'zero-shot classification', and it's cool because the model is making an educated
guess based on its understanding of language and the relationships between words. Isn't that amazing?
😎
## Alternative, you can use model which used Bahasa Indonesia as
pretraining dataset, here we have "ilos-vigil/bigbird-small-indonesian-nli"
classifier_zero_id = pipeline("zero-shot-classification", model="ilos-
vigil/bigbird-small-indonesian-nli")
classifier_zero_id(
"Saya adalah mahasiswa Unsia",
candidate_labels=["pendidikan", "bisnis", "olahraga"]
)
Output:
Attention type 'block_sparse' is not possible if sequence_length: 16 <= num
global tokens: 2 * config.block_size + min. num sliding tokens: 3 *
config.block_size + config.num_random_blocks * config.block_size +
additional buffer: config.num_random_blocks * config.block_size = 704 with
config.block_size = 64, config.num_random_blocks = 3. Changing attention
type to 'original_full'...
{'sequence': 'Saya adalah mahasiswa Unsia',
'labels': ['pendidikan', 'olahraga', 'bisnis'],
'scores': [0.6308442950248718, 0.23793083429336548, 0.1312248706817627]}
4.6. Pembuatan Teks
Anda tertarik untuk menghasilkan teks baru berdasarkan input yang diberikan, tetapi detail
pengkodeannya tampak luar biasa, bukan? 🤔 Jangan khawatir! Dengan fungsi pipeline() Hugging
8. 8
Face, Anda dapat menghasilkan teks dengan mudah. Lihat bagaimana kami menyederhanakannya di
bawah ini:
from transformers import pipeline
generator = pipeline("text-generation")
Selanjutnya, mari kita gunakan alat ini untuk menghasilkan beberapa teks:
generator("In this course, we will teach you how to")
Output:
Setting `pad_token_id` to `eos_token_id`:50256 for open-end generation.
[{'generated_text': 'In this course, we will teach you how to create and
test interactive web applications and projects that can be used in both the
real world and on the fly. We will learn how to code and use JavaScript in
conjunction with your team to ensure your applications'}]
Inilah yang terjadi: generator, dibangun dengan model pra-terlatih, menggunakan string "Dalam kursus
ini, kami akan mengajari Anda cara" sebagai titik awal dan menghasilkan teks baru darinya.
Now, let's add a few more features to our text generation:
generator = pipeline("text-generation", model="distilgpt2")
generator(
"In this course, we will teach you how to",
max_length=30,
num_return_sequences=2,
)
Output:
Setting `pad_token_id` to `eos_token_id`:50256 for open-end generation.
[{'generated_text': 'In this course, we will teach you how to use the
techniques to generate the correct results - including making the correct
results easily easy. You can see'},
{'generated_text': 'In this course, we will teach you how to apply the "A"
test. Each module uses the following concepts:nnnnnn'}]
generator(
"After today's course, I will",
max_length=30
)
Output:
Setting `pad_token_id` to `eos_token_id`:50256 for open-end generation.
[{'generated_text': "After today's course, I will be going back in time and
giving you a full list as you learn more from this post.nnFor the"}]
Dalam hal ini, max_length=30 memberi tahu generator bahwa teks tidak boleh melebihi 30
token. num_return_sequences=2 meminta generator untuk menyediakan dua kemungkinan
kelanjutan dari teks input.
9. 9
Jadi dengan bantuan baris kode ini, Anda dapat menghasilkan satu atau lebih kemungkinan kelanjutan
dari string yang diberikan. Bukankah itu rapi? 😎
Untuk setiap tugas, Anda dapat mencari model hub untuk berbagai model yang dapat Anda gunakan
dalam pipeline.
4.7. Pelengkapan teks (mask filling)
Anda mencoba menyelesaikan kalimat yang memiliki kata yang hilang tetapi bagian pengkodeannya
tampaknya agak sulit, bukan? 🤔 Tanpa stres! Dengan fungsi pipeline() dari Hugging Face, Anda
dapat mengisi bagian yang kosong dengan mudah. Berikut adalah versi sederhana dengan kode:
Mari kita mulai dengan membuat alat yang akan mengisi kata-kata mask dalam sebuah kalimat:
from transformers import pipeline
unmasker = pipeline("fill-mask")
Selanjutnya, kami menggunakan alat ini untuk menemukan kata yang hilang dalam kalimat:
unmasker("This course will teach you all about <mask> models", top_k=2)
Output:
[{'score': 0.19631513953208923, 'token': 30412, 'token_str': ' mathematical',
'sequence': 'This course will teach you all about mathematical models'},
{'score': 0.04449228197336197, 'token': 745, 'token_str': ' building',
'sequence': 'This course will teach you all about building models'}]
unmasker("After this course, I want to eat <mask> until I get full",
top_k=3
Output:
10. 10
[{‘score’: 0.08515623956918716, ‘token’: 18236, ‘token_str’: ‘ pasta’,
‘sequence’: ‘After this course, I want to eat pasta until I get full’},
{‘score’: 0.0690297931432724, ‘token’: 1085, ‘token_str’: ‘ nothing’,
‘sequence’: ‘After this course, I want to eat nothing until I get full’},
{‘score’: 0.03407108783721924, ‘token’: 960, ‘token_str’: ‘ everything’,
‘sequence’: ‘After this course, I want to eat everything until I get full’}]
Inilah keajaiban di baliknya: Unmasker, dilengkapi dengan model pra-terlatih, melihat kalimat "Kursus
ini akan mengajarkan Anda semua tentang model <mask>". Ia memahami <mask> sebagai placeholder
untuk kata yang perlu diprediksi berdasarkan sisa kalimat. Parameter top_k=2 memberitahukannya
untuk menghasilkan dua kata teratas yang paling mungkin yang dapat mengisi bagian yang kosong.
Keren, bukan? 😎
4.8. Klasifikasi token
![NER](https://storage.googleapis.com/rg-ai-bootcamp/model_usage/ner.png)
Anda memiliki kalimat dengan nama, lokasi, atau organisasi, dan Anda ingin mengidentifikasi masing-
masing dari mereka. Tetapi aspek pengkodean tampaknya agak menakutkan, bukan? 🤔 Jangan
khawatir! Dengan fungsi pipeline() Hugging Face, Anda dapat dengan mudah mengidentifikasi
entitas ini. Mari kita sederhanakan dengan kode ini:
Pertama, buat alat yang dapat mengenali entitas bernama:
from transformers import pipeline
ner = pipeline("ner", grouped_entities=True)
Output:
No model was supplied, defaulted to dbmdz/bert-large-cased-finetuned-
conll03-english and revision f2482bf (https://huggingface.co/dbmdz/bert-
large-cased-finetuned-conll03-english).
Using a pipeline without specifying a model name and revision in production
is not recommended.
Selanjutnya, gunakan alat ini untuk menemukan entitas bernama dalam kalimat:
ner("My name is Hendro Gunawan and I study at Unsia in Jakarta")
Output:
[{'entity_group': 'PER',
'score': 0.9980493,
'word': 'Hendro Gunawan',
'start': 11, 'end': 25},
{'entity_group': 'ORG',
'score': 0.9482717,
11. 11
'word': 'Unsia',
'start': 41,
'end': 46}, {'entity_group': 'LOC',
'score': 0.99793637,
'word': 'Jakarta',
'start': 50,
'end': 57}]
Inilah yang terjadi: Alat ner, dibangun dengan model pra-terlatih, akan menganalisis kalimat "Nama
saya Hendro Gunawan dan saya belajar di Unsia di Jakarta". Ini mengidentifikasi entitas bernama seperti
"Hendro Gunawan", "Unsia", dan "Jakarta", dan memberi label mereka dengan tepat sebagai 'orang',
'organisasi', 'lokasi' berdasarkan konteks mereka. Parameter grouped_entities=True
memungkinkan model untuk mengelompokkan kata-kata terkait ke dalam satu entitas. Hasilnya? Daftar
entitas yang terdeteksi masing-masing terkait dengan label dan skor kepercayaan. Rapi, ya? 😎
4.9. Jawaban Atas Pertanyaan
Anda memiliki sepotong teks dan pertanyaan yang terkait dengannya, tetapi menemukan jawabannya di
dalam teks itu tampaknya agak menakutkan, bukan? 🤔 Jangan khawatir! Dengan fungsi pipeline()
Hugging Face, Anda dapat dengan mudah menemukan jawabannya. Mari kita sederhanakan dengan
kode berikut:
Kita mulai dengan membuat alat yang dapat menjawab pertanyaan:
from transformers import pipeline
question_answerer = pipeline("question-answering")
Output:
No model was supplied, defaulted to distilbert-base-cased-distilled-squad
and revision 626af31 (https://huggingface.co/distilbert-base-cased-
distilled-squad).
Using a pipeline without specifying a model name and revision in production
is not recommended.
Selanjutnya, kami menggunakannya untuk menemukan jawaban atas pertanyaan:
question_answerer(
question="Who is my name?",
context="My name is Hendro Gunawan and I work at PT Indospring Tbk in
Gresik"
)
Output:
12. 12
{'score': 0.9961605072021484,
'start': 11,
'end': 25,
'answer': 'Hendro Gunawan'}
Inilah bagian yang rapi: alat question_answerer, dilengkapi dengan model pra-terlatih, akan
menganalisis konteks "Nama saya Hendro Gunawan dan saya bekerja di PT Indospring Tbk di Gresik"
untuk menemukan jawaban atas pertanyaan "Di mana saya bekerja?". Hasil yang dikembalikan akan
menjadi jawaban atas pertanyaan, diekstraksi langsung dari konteks yang disediakan, bersama dengan
skor keyakinan tentang seberapa yakin itu tentang jawabannya. Luar biasa, bukan? 😎
4.10. Ringkasan
Anda memiliki teks yang agak panjang dan Anda ingin menemukan ringkasan singkat tanpa melalui
kerumitan pengkodean, bukan? 🤔 Jangan katakan lagi! Menggunakan fungsi pipeline() Hugging
Face, Anda dapat dengan mudah membuat ringkasan. Inilah cara kami menyederhanakannya dengan
kode:
Pertama, buat alat yang dapat meringkas teks:
from transformers import pipeline
summarizer = pipeline("summarization", model="facebook/bart-large-cnn")
Selanjutnya, mari kita gunakan untuk menghasilkan ringkasan:
summarizer("""
New York (CNN)When Liana Barrientos was 23 years old, she got married in
Westchester County, New York.
A year later, she got married again in Westchester County, but to a
different man and without divorcing her first husband.
Only 18 days after that marriage, she got hitched yet again. Then,
Barrientos declared "I do" five more times, sometimes only within two weeks
of each other.
In 2010, she married once more, this time in the Bronx. In an application
for a marriage license, she stated it was her "first and only" marriage.
""")
Output:
[{'summary_text': 'Liana Barrientos got married five times in less than a
decade. She said it was her "first and only" marriage in an application for
a marriage license. In 2010, she married once more, this time in the Bronx.
In 2011, she got married again in Westchester County, New York.'}]
Inilah bagian kerennya: alat peringkas, dibangun menggunakan model pra-terlatih, akan menganalisis
teks yang disediakan dan membuat ringkasan yang lebih pendek yang mempertahankan ide utama dan
detail penting dari teks asli, sehingga lebih mudah bagi Anda untuk mendapatkan intinya tanpa harus
membaca seluruh bagian. Efisien, bukan? 😎
13. 13
4.11. Terjemahan
Anda memiliki frasa bahasa Inggris dan Anda ingin menerjemahkannya ke dalam bahasa Prancis, tetapi
bagian pengkodeannya tampaknya menantang, bukan? 🤔 Jangan khawatir! Dengan fungsi
pipeline() Hugging Face, Anda bisa mendapatkan terjemahan Anda dengan cepat. Berikut adalah
kode yang disederhanakan:
Pertama, buat alat yang dapat menerjemahkan bahasa Inggris ke Prancis:
from transformers import pipeline
translator = pipeline("translation_en_to_fr")
Output:
No model was supplied, defaulted to t5-base and revision 686f1db
(https://huggingface.co/t5-base).
Using a pipeline without specifying a model name and revision in production
is not recommended.
Selanjutnya, gunakan alat ini untuk menerjemahkan frasa bahasa Inggris:
translator("How are you?")
Output:
[{'translation_text': 'Comment êtes-vous?'}]
Di balik layar, alat penerjemah, dilengkapi dengan model pra-terlatih, akan mengambil frasa bahasa
Inggris "Apa kabar?" dan menerjemahkannya ke dalam bahasa Prancis. Hasilnya? Teks bahasa Inggris
Anda diterjemahkan dengan lancar ke bahasa Prancis. Luar biasa, bukan? 😎
Referensi
Syahid Abdullah, S. M. (2023, November 11). Natural Language Processing. Diambil kembali dari
Edlink Universitas Siber Asia: https://edlink.id/panel/classes/563118
Website
Slide Share: https://www.slideshare.net/HendroGunawan8/natural-language-processing-diskusi-4docx
Google Collab