☀️Siang
AI & Data Science

NLP: Natural Language Processing untuk Pemula

Tutorial lengkap belajar NLP dari nol — text processing, tokenization, sentiment analysis, dasar chatbot, dan HuggingFace Transformers dengan contoh kode Python praktis

Artikel: Nlp Dasar Artikel: Nlp Dasar


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 TranslationGoogle Translate, DeepLSequence-to-Sequence, Transformer
Sentiment AnalysisAnalisis review produk, komentar media sosialText Classification, BERT
ChatbotCustomer service, virtual assistantIntent Recognition, Generation
Text SummarizationRangkuman artikel otomatisExtractive / Abstractive
Named Entity RecognitionDeteksi nama orang, tempat, organisasiSequence Labeling, CRF
Question AnsweringGoogle Search, ChatGPTReading Comprehension, RAG
Speech RecognitionSiri, Google AssistantASR, Whisper

Evolusi NLP

Diagram: Evolusi Teknik NLP
Evolusi Teknik NLP

1950s: Rule-based\n(Regex, Grammar)

1990s: Statistical\n(N-gram, HMM)

2010s: ML\n(SVM, Naive Bayes)

2017: Deep Learning\n(Transformer, BERT)

2023: LLM\n(GPT-4, LLaMA)

Library NLP untuk Python

Library Kegunaan Instalasi
NLTKNLP klasik, tokenisasi, stemming, corpuspip install nltk
spaCyNLP production-ready, cepat dan efisienpip install spacy
HuggingFace TransformersPre-trained models (BERT, GPT, dll)pip install transformers
GensimTopic modeling, word embeddingspip install gensim
TextBlobNLP sederhana untuk pemulapip install textblob
scikit-learnText classification, TF-IDFpip install scikit-learn
💡 Tips

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

Diagram

👤 User Input

🧠 NLU\n(Understanding)

🎯 Intent\nClassification

🏷️ Entity\nExtraction

📋 Dialogue\nManager

💬 NLG\n(Generation)

📤 Response

Implementasi Chatbot Sederhana

Python — Simple Chatbot
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

Bash
# 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

Python — HuggingFace Pipeline
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

Python — Custom Model Loading
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()
💡 Tips

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:

Pertanyaan 1: Apa tujuan utama dari text preprocessing dalam NLP?

a) Mengubah teks menjadi gambar
b) Membersihkan dan menyiapkan teks agar siap diproses oleh model ML
c) Menghapus semua kata dari teks
d) Menerjemahkan teks ke bahasa lain

Pertanyaan 2: Apa perbedaan antara Stemming dan Lemmatization?

a) Stemming lebih lambat, Lemmatization lebih cepat
b) Stemming memotong akhiran secara mekanis, Lemmatization mengembalikan ke bentuk dasar yang valid
c) Tidak ada perbedaan, keduanya sama
d) Stemming untuk bahasa Indonesia, Lemmatization untuk bahasa Inggris

Pertanyaan 3: Apa keunggulan TF-IDF dibanding Bag of Words (BoW)?

a) TF-IDF lebih cepat dihitung
b) TF-IDF memberikan bobot lebih tinggi pada kata yang penting dan jarang muncul
c) TF-IDF tidak memerlukan vocabulary
d) TF-IDF hanya untuk bahasa Inggris

Pertanyaan 4: Apa fungsi dari HuggingFace Transformers?

a) Mengelola database untuk NLP
b) Menyediakan akses mudah ke ribuan model pre-trained untuk NLP dan tugas AI lainnya
c) Menggantikan Python untuk NLP
d) Membuat visualisasi data

Pertanyaan 5: Dalam pipeline chatbot sederhana, apa langkah yang dilakukan setelah preprocessing?

a) Response Generation
b) Text to Speech
c) Intent Classification
d) Database Query
🔍 Zoom
100%
🎨 Tema