Solusi software AI kustom untuk bisnis Anda. Lihat Layanan →

Kirim AI

Panduan Lengkap NER dengan Python dan SpaCy Tutorial

Panduan lengkap Named Entity Recognition (NER) dengan Python dan SpaCy. Pelajari cara mengekstrak entitas bernama seperti nama orang, organisasi, dan lokasi dari teks. Tutorial ini mencakup instalasi, penggunaan dasar, hingga pelatihan model kustom, dan dilengkapi contoh kode yang mudah diikuti.

0
8
Panduan Lengkap NER dengan Python dan SpaCy Tutorial

Named Entity Recognition (NER) adalah proses ekstraksi informasi yang mengidentifikasi dan mengklasifikasikan entitas bernama dalam teks ke dalam kategori yang telah ditentukan. Contoh entitas bernama antara lain nama orang (PERSON), organisasi (ORG), lokasi (GPE), tanggal (DATE), dan jumlah uang (MONEY). NER merupakan bagian penting dari Pemrosesan Bahasa Alami (NLP) dan memiliki banyak aplikasi praktis, sehingga diekstraknya Entitas dalam teks menjadi lebih mudah.

NER sangat penting karena kemampuannya untuk mengekstrak informasi kunci dari data tekstual tidak terstruktur. Beberapa contoh aplikasi NER di dunia nyata meliputi:

  • Analisis Sentimen: Mengidentifikasi opini dan sentimen terhadap produk atau layanan tertentu dengan mengekstrak nama produk, perusahaan, atau fitur yang disebutkan dalam ulasan.
  • Chatbots: Memahami maksud pengguna dengan mengenali entitas kunci dalam pertanyaan mereka, seperti nama produk, tanggal, atau lokasi.
  • Ekstraksi Informasi dari Berita: Mengidentifikasi orang, organisasi, dan lokasi yang disebutkan dalam artikel berita untuk analisis lebih lanjut, seperti pemantauan tren atau analisis jaringan.
  • Sistem Rekomendasi: Meningkatkan akurasi rekomendasi dengan mengekstrak entitas yang relevan dari deskripsi produk atau preferensi pengguna.

Baca juga: Panduan Lengkap Analisis Sentimen Twitter dengan Python dan NLTK

SpaCy adalah library NLP open-source yang powerful dan efisien untuk Python. SpaCy dirancang khusus untuk aplikasi production-grade dan menawarkan berbagai fitur yang berguna untuk NER, termasuk model statistik yang sudah terlatih untuk berbagai bahasa, tokenisasi tingkat lanjut, dan visualisasi entitas yang mudah digunakan. Keunggulan SpaCy dibandingkan tools lain meliputi kecepatan pemrosesan, kemudahan penggunaan, dan model yang sudah dioptimalkan. Dengan kata lain, SpaCy Python library menjadi pilihan yang tepat untuk proyek NER.

Instalasi dan Setup SpaCy

Untuk memulai tutorial named entity recognition ini, kita perlu menginstal SpaCy dan model bahasanya. Ikuti langkah-langkah berikut:

Cara Menginstal SpaCy dan Model Bahasa

Anda dapat menginstal SpaCy menggunakan pip, package manager Python:

pip install -U spacy

Setelah SpaCy terinstal, unduh model bahasa. Model bahasa berisi data statistik dan representasi kata. SpaCy menyediakan beberapa model, seperti:

  • en_core_web_sm: Model kecil, cocok untuk pengujian.
  • en_core_web_md: Model sedang, seimbang antara kecepatan dan akurasi.
  • en_core_web_lg: Model besar, akurasi tertinggi tapi butuh memori lebih.

Untuk tutorial ini, gunakan en_core_web_sm. Unduh dengan perintah:

python -m spacy download en_core_web_sm

Ukuran model memengaruhi akurasi dan kecepatan. Model lebih besar biasanya lebih akurat tapi lebih lambat.

Cara Mengimpor SpaCy di Python

Setelah instalasi, impor SpaCy ke skrip Python Anda:

import spacy

Dasar-Dasar NER dengan SpaCy

Bagian ini menjelaskan cara menggunakan spacy untuk NER secara mendasar.

Memuat Model Bahasa

Muat model bahasa yang telah diunduh dengan spacy.load():

nlp = spacy.load("en_core_web_sm")

Variabel nlp adalah objek pipeline SpaCy. Model ini sudah terlatih untuk tokenisasi spacy dan tugas NLP lainnya.

Memproses Teks

Untuk memproses teks, panggil objek nlp dengan string teks:

text = "Apple is looking at buying U.K. startup for $1 billion"
doc = nlp(text)

doc adalah objek Doc SpaCy, berisi informasi teks, token, dan entitas bernama.

Mengakses Entitas Bernama

Entitas bernama diakses melalui doc.ents. Setiap entitas adalah objek Span dengan properti:

  • text: Teks entitas.
  • label_: Label kategori.
  • start_char: Indeks karakter awal.
  • end_char: Indeks karakter akhir.

Iterasi pada entitas dan cetak informasinya:

for ent in doc.ents:
    print(ent.text, ent.start_char, ent.end_char, ent.label_)

Output:

Apple 0 5 ORG
U.K. 27 31 GPE
$1 billion 44 54 MONEY

Visualisasi Entitas

Gunakan displacy untuk visualisasi. displacy.render() dengan style="ent":

from spacy import displacy

displacy.render(doc, style="ent")

Kode ini menghasilkan visualisasi teks dengan entitas yang disorot. Ini adalah contoh Visualisasi NER.

Teknik Lanjutan NER dengan SpaCy

Setelah memahami dasar-dasarnya, mari kita lihat teknik lanjutan, yang merupakan langkah demi langkah NER dengan python.

Melatih Model NER Kustom

Terkadang, Anda perlu melatih model NER kustom untuk entitas khusus. Misalnya, nama produk atau istilah teknis. Ini memerlukan custom NER model.

Baca juga: Panduan Lengkap Membuat Chatbot Python dengan Rasa NLU

SpaCy memungkinkan pelatihan dengan data berlabel. Formatnya adalah list of tuples, tiap tuple berisi teks dan dictionary entitas:

TRAIN_DATA = [
    ("Who is Shaka Khan?", {"entities": [(7, 17, "PERSON")]}),
    ("I like London and Berlin.", {"entities": [(7, 13, "GPE"), (18, 24, "GPE")]}),
]

Contoh kode lengkap untuk training NER model kustom:

import spacy
import random

# Data pelatihan
TRAIN_DATA = [
    ("Who is Shaka Khan?", {"entities": [(7, 17, "PERSON")]}),
    ("I like London and Berlin.", {"entities": [(7, 13, "GPE"), (18, 24, "GPE")]}),
]

# Memuat model kosong
nlp = spacy.blank("en")

# Membuat pipeline komponen 'ner'
ner = nlp.add_pipe("ner")

# Menambahkan label
for _, annotations in TRAIN_DATA:
    for ent in annotations.get("entities"):
        ner.add_label(ent[2])

# Melatih model
optimizer = nlp.initialize()
for i in range(20):  # Jumlah iterasi
    random.shuffle(TRAIN_DATA)
    for text, annotations in TRAIN_DATA:
        example = spacy.training.Example.from_dict(nlp.make_doc(text), annotations)
        nlp.update([example], sgd=optimizer)

# Menyimpan model (opsional)
nlp.to_disk("model_ner_kustom")

# Tes model
test_text = "I like London."
doc = nlp(test_text)
for ent in doc.ents:
    print(ent.text, ent.label_)

Evaluasi Performa Model

Evaluasi model memerlukan data uji terpisah. Metrik umum: precision, recall, dan F1-score. Hitung dengan library seperti scikit-learn. Bandingkan prediksi model dengan entitas sebenarnya.

Matcher Berbasis Aturan

Selain model statistik, SpaCy punya Matcher untuk ekstraksi berbasis pola atau rule-based. Berguna untuk entitas dengan pola jelas (nomor telepon, email).

Contoh, ekstrak entitas “ORG” diawali “The”:

from spacy.matcher import Matcher

nlp = spacy.load("en_core_web_sm")
matcher = Matcher(nlp.vocab)

# Pola: "The" diikuti kata benda (PROPN)
pattern = [{"LOWER": "the"}, {"POS": "PROPN", "OP": "+"}]
matcher.add("THE_ORG", [pattern])

doc = nlp("I work at The New York Times")
matches = matcher(doc)

for match_id, start, end in matches:
    string_id = nlp.vocab.strings[match_id]  # String ID
    span = doc[start:end]  # Span entitas
    print(string_id, span.text)

Contoh Kode NER Lengkap

Berikut contoh kode named entity recognition python spacy lengkap dengan skenario penggunaan praktis:

import spacy
from spacy import displacy

# Muat model
nlp = spacy.load("en_core_web_sm")

# Teks contoh (ulasan produk)
text = "I recently purchased the Kirim.ai SaaS platform, and I'm very impressed. The AI tools are fantastic, and the customer support is excellent. I highly recommend Kirim.ai to any business looking to leverage AI."

# Proses teks
doc = nlp(text)

# Iterasi dan cetak entitas
for ent in doc.ents:
    print(f"Entitas {ent.text}, Label {ent.label_}")

# Visualisasi
displacy.render(doc, style="ent")

# Skenario Penggunaan:
# Ekstrak informasi dari ulasan: nama produk (Kirim.ai), jenis produk (SaaS platform), fitur (AI tools, customer support).
# Gunakan untuk analisis sentimen, pemantauan merek, atau riset pasar.

Penjelasan Kode:

  1. import spacy dan from spacy import displacy: Impor SpaCy dan displacy.
  2. nlp = spacy.load("en_core_web_sm"): Muat model.
  3. text = ...: Teks input.
  4. doc = nlp(text): Proses teks.
  5. for ent in doc.ents:: Iterasi entitas.
  6. print(f"Entitas {ent.text}, Label {ent.label_}"): Cetak teks dan label.
  7. displacy.render(doc, style="ent"): Visualisasi.
  8. # Skenario Penggunaan: ...: Contoh penerapan.

Kesimpulan

Named Entity Recognition (NER) penting untuk ekstraksi informasi dari teks. SpaCy menyediakan tool yang powerful dan mudah untuk NER, dengan model statistik atau kustom.

Kita telah pelajari konsep dasar, instalasi, model bahasa, akses entitas, visualisasi, dan pelatihan model kustom. Dengan latihan, Anda siap menerapkan NER.

Baca juga: Panduan Lengkap Framework & Library Machine Learning Deep Learning

Untuk memperdalam, baca dokumentasi SpaCy (https://spacy.io/), coba model lain, dan eksperimen. Cari juga tutorial NER Bahasa Indonesia.

Untuk solusi bisnis, Kirim.ai menawarkan platform SaaS AI dengan alat pemrosesan teks, termasuk NER. Pelajari lebih lanjut.

SEO Jago AIS
DITULIS OLEH

SEO Jago AI

Semua pekerjaan SEO ditangani secara otomatis oleh agen AI, memungkinkan Anda untuk lebih fokus membangun bisnis dan produk Anda.

Tanggapan (0 )