1. Pengenalan NLP
Natural Language Processing (NLP) adalah bidang kecerdasan buatan yang berfokus pada interaksi antara komputer dan bahasa manusia. NLP memungkinkan komputer untuk membaca, memahami, dan menghasilkan teks dalam bahasa alami manusia.
NLP ada di sekitar kita setiap hari: ketika Anda menggunakan Google Translate, bertanya pada Siri atau Google Assistant, mendapatkan rekomendasi dari email spam filter, atau chatting dengan customer service bot — semuanya menggunakan NLP.
Aplikasi NLP di Dunia Nyata
| Aplikasi | Contoh | Teknik NLP |
|---|---|---|
| Machine Translation | Google Translate, DeepL | Sequence-to-Sequence, Transformer |
| Sentiment Analysis | Analisis review produk, komentar media sosial | Text Classification, BERT |
| Chatbot | Customer service, virtual assistant | Intent Recognition, Generation |
| Text Summarization | Rangkuman artikel otomatis | Extractive / Abstractive |
| Named Entity Recognition | Deteksi nama orang, tempat, organisasi | Sequence Labeling, CRF |
| Question Answering | Google Search, ChatGPT | Reading Comprehension, RAG |
| Speech Recognition | Siri, Google Assistant | ASR, Whisper |
Evolusi NLP
Library NLP untuk Python
| Library | Kegunaan | Instalasi |
|---|---|---|
| NLTK | NLP klasik, tokenisasi, stemming, corpus | pip install nltk |
| spaCy | NLP production-ready, cepat dan efisien | pip install spacy |
| HuggingFace Transformers | Pre-trained models (BERT, GPT, dll) | pip install transformers |
| Gensim | Topic modeling, word embeddings | pip install gensim |
| TextBlob | NLP sederhana untuk pemula | pip install textblob |
| scikit-learn | Text classification, TF-IDF | pip install scikit-learn |
Untuk tutorial ini, kita akan menggunakan NLTK untuk konsep dasar NLP dan HuggingFace Transformers untuk model modern. Instal keduanya sebelum mulai: pip install nltk transformers torch
2. Text Processing
Sebelum teks bisa diproses oleh model machine learning, teks harus diubah menjadi format numerik melalui serangkaian tahap text preprocessing. Tahap ini sangat krusial karena kualitas preprocessing sangat mempengaruhi kualitas model.
Text Cleaning
Implementasi Chatbot Sederhana
import re
import random
class SimpleChatbot:
"""Chatbot sederhana berbasis pattern matching"""
def __init__(self):
# Definisi pola dan response
self.patterns = {
'greeting': {
'patterns': [
r'halo|hai|hi|hey|selamat (pagi|siang|sore|malam)',
r'apa kabar|gimana kabar',
],
'responses': [
'Halo! 👋 Ada yang bisa saya bantu?',
'Hai! Selamat datang! Silakan tanya apa saja.',
'Halo! Senang bisa membantu Anda. 😊',
]
},
'product_info': {
'patterns': [
r'(info|informasi|detail) (produk|barang)',
r'(produk|barang) (apa|yang) (tersedia|ada|jual)',
r'cari (produk|barang)',
],
'responses': [
'Kami menyediakan berbagai produk elektronik, fashion, dan aksesoris. Kategori apa yang Anda cari?',
'Silakan lihat katalog kami di halaman utama. Ada yang spesifik yang Anda cari?',
]
},
'price': {
'patterns': [
r'harga (berapa|nya)',
r'berapa (harga|biayanya)',
r'(mahal|murah)',
],
'responses': [
'Harga produk kami sangat bersaing! Silakan sebutkan produk yang diminati untuk info harga.',
'Kami punya promo menarik! Kunjungi halaman harga untuk detail lengkap.',
]
},
'order': {
'patterns': [
r'(cara|bagaimana) (pesan|order|beli)',
r'mau (beli|pesan|order)',
r'(order|pesan|beli)',
],
'responses': [
'Untuk memesan, silakan pilih produk yang diinginkan dan klik "Tambah ke Keranjang".',
'Anda bisa langsung order melalui website kami. Butuh bantuan untuk proses tertentu?',
]
},
'thanks': {
'patterns': [
r'terima kasih|thanks|makasih|thx',
],
'responses': [
'Sama-sama! Senang bisa membantu. 😊',
'Terima kasih kembali! Jangan ragu bertanya lagi ya.',
]
},
'goodbye': {
'patterns': [
r'bye|sampai jumpa|selamat tinggal|dadah',
],
'responses': [
'Sampai jumpa! Semoga harimu menyenangkan! 👋',
'Bye! Jangan lupa kembali lagi ya! 😊',
]
},
}
def preprocess(self, text):
"""Bersihkan input user"""
text = text.lower().strip()
text = re.sub(r'[^\w\s]', '', text)
return text
def get_intent(self, text):
"""Identifikasi intent dari input user"""
processed = self.preprocess(text)
for intent, data in self.patterns.items():
for pattern in data['patterns']:
if re.search(pattern, processed):
return intent
return 'unknown'
def get_response(self, intent):
"""Generate response berdasarkan intent"""
if intent in self.patterns:
return random.choice(self.patterns[intent]['responses'])
else:
return random.choice([
'Maaf, saya belum memahami pertanyaan Anda. Bisa diulang?',
'Hmm, saya kurang mengerti. Coba tanyakan dengan cara lain?',
'Mohon maaf, silakan hubungi customer service untuk bantuan lebih lanjut.',
])
def chat(self, user_input):
"""Main chat function"""
intent = self.get_intent(user_input)
response = self.get_response(intent)
return response
# Jalankan chatbot
bot = SimpleChatbot()
# Simulasi percakapan
conversations = [
"Halo, apa kabar?",
"Mau pesan produk",
"Berapa harga laptop ASUS?",
"Terima kasih!",
"Bye!",
]
for msg in conversations:
print(f"User: {msg}")
print(f"Bot: {bot.chat(msg)}\n")
6. HuggingFace Transformers
HuggingFace adalah platform dan library open-source yang menyediakan ribuan model pre-trained untuk NLP, Computer Vision, Audio, dan lainnya. Dengan HuggingFace, Anda bisa menggunakan model state-of-the-art seperti BERT, GPT, T5, dan LLaMA hanya dalam beberapa baris kode.
Instalasi
# Instal HuggingFace Transformers dan dependencies
pip install transformers torch
# Untuk pipeline sederhana (sudah termasuk model)
pip install transformers[sentencepiece]
# Untuk dataset
pip install datasets
# Verifikasi
python -c "from transformers import pipeline; print('HuggingFace siap!')"
Pipeline: NLP dalam Satu Baris Kode
from transformers import pipeline
# 1. Sentiment Analysis — dalam satu baris!
classifier = pipeline('sentiment-analysis')
result = classifier("I love this product! It's amazing!")
print(result)
# [{'label': 'POSITIVE', 'score': 0.9998}]
# Batch sentiment analysis
texts = [
"This movie is fantastic!",
"I hate waiting in long lines.",
"The weather is okay today.",
"Best restaurant in town, highly recommended!",
]
results = classifier(texts)
for text, result in zip(texts, results):
print(f"{result['label']} ({result['score']:.4f}): {text}")
# 2. Text Generation
generator = pipeline('text-generation', model='gpt2')
result = generator("Natural Language Processing adalah", max_length=50, num_return_sequences=1)
print(result[0]['generated_text'])
# 3. Question Answering
qa = pipeline('question-answering')
context = """
TensorFlow adalah framework machine learning open-source yang dikembangkan oleh Google.
TensorFlow pertama kali dirilis pada tahun 2015 dan telah menjadi salah satu framework
paling populer untuk deep learning.
"""
result = qa(question="Siapa yang mengembangkan TensorFlow?", context=context)
print(f"Jawaban: {result['answer']}")
print(f"Skor: {result['score']:.4f}")
# 4. Summarization
summarizer = pipeline('summarization')
teks_panjang = """
Natural Language Processing (NLP) adalah bidang kecerdasan buatan yang berfokus pada
interaksi antara komputer dan bahasa manusia. NLP menggunakan teknik dari linguistik
komputational, machine learning, dan deep learning untuk memproses dan memahami teks.
Aplikasi NLP meliputi machine translation, sentiment analysis, text summarization,
question answering, dan banyak lagi. Perkembangan terbaru dalam NLP didorong oleh
transformer models seperti BERT, GPT, dan T5 yang telah mencapai performa manusia
dalam berbagai benchmark NLP.
"""
summary = summarizer(teks_panjang, max_length=50, min_length=20)
print(f"Ringkasan: {summary[0]['summary_text']}")
# 5. Translation
translator = pipeline('translation_en_to_id', model='Helsinki-NLP/opus-mt-en-id')
result = translator("Hello, how are you? I am learning NLP.")
print(f"Terjemahan: {result[0]['translation_text']}")
Memuat Model Spesifik dari HuggingFace Hub
from transformers import AutoTokenizer, AutoModelForSequenceClassification
import torch
# Load model dan tokenizer dari HuggingFace Hub
model_name = "indolem/indobert-base-uncased" # BERT untuk bahasa Indonesia
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSequenceClassification.from_pretrained(model_name, num_labels=2)
# Tokenisasi teks
teks = "Film ini sangat bagus dan menghibur!"
inputs = tokenizer(teks, return_tensors="pt", padding=True, truncation=True)
print(f"Input IDs: {inputs['input_ids']}")
print(f"Tokens: {tokenizer.convert_ids_to_tokens(inputs['input_ids'][0])}")
# ['[CLS]', 'film', 'ini', 'sangat', 'bagus', 'dan', 'menghibur', '!', '[SEP]']
# Prediksi
with torch.no_grad():
outputs = model(**inputs)
logits = outputs.logits
prediction = torch.argmax(logits, dim=-1)
print(f"Prediksi: {'Positif' if prediction.item() == 1 else 'Negatif'}")
# Fine-tuning pada dataset sendiri
from transformers import Trainer, TrainingArguments
training_args = TrainingArguments(
output_dir='./results',
num_train_epochs=3,
per_device_train_batch_size=16,
per_device_eval_batch_size=64,
warmup_steps=500,
weight_decay=0.01,
logging_dir='./logs',
logging_steps=10,
evaluation_strategy="epoch",
save_strategy="epoch",
load_best_model_at_end=True,
)
trainer = Trainer(
model=model,
args=training_args,
train_dataset=train_dataset,
eval_dataset=eval_dataset,
tokenizer=tokenizer,
)
# Mulai training
# trainer.train()
Untuk bahasa Indonesia, gunakan model indolem/indobert-base-uncased atau indobenchmark/indobert-base-p1 yang sudah di-pre-train pada korpus bahasa Indonesia. Model ini jauh lebih baik dari model bahasa Inggris untuk tugas NLP bahasa Indonesia.
7. Quiz: Uji Pemahamanmu!
Setelah membaca tutorial di atas, jawablah 5 pertanyaan berikut untuk menguji pemahamanmu tentang NLP: