Mengekstrak Data dari Teks Tidak Terstruktur
Bangun alur pemrosesan ekstraksi informasi yang membaca teks mentah seperti email, tanda terima, dan artikel, lalu mengembalikan bidang terstruktur dengan tipe, nilai bawaan, dan validasi.
Mengekstrak Data dari Teks Tidak Terstruktur adalah pelajaran AI Engineering Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar AI Engineering Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus AI Engineering Academy mencakup 4 pelajaran total.
Masalah Ekstraksi Informasi
Organisasi kewalahan menghadapi teks tidak terstruktur: email, tiket dukungan, kontrak, faktur, artikel berita, catatan medis, dan kiriman media sosial. Data terstruktur yang berharga terkubur di dalam teks ini, tetapi mengekstraknya secara manual lambat, mahal, dan rentan terhadap kesalahan. LLM dengan keluaran terstruktur mengubah keadaan ini: LLM dapat membaca teks apa pun dan mengisi skema yang telah ditentukan dengan bidang yang relevan, dalam skala besar, dengan tingkat akurasi yang wajar.
Ekstraksi informasi (IE) adalah proses mengidentifikasi dan mengambil fakta terstruktur dari teks tidak terstruktur secara otomatis. IE berbasis LLM jauh mengungguli pendekatan berbasis aturan atau NLP klasik karena LLM memahami konteks, sinonim, dan informasi tersirat tanpa memerlukan pola regex yang dirancang secara manual untuk setiap variasi.
Kasus Penggunaan Ekstraksi yang Umum
Ekstraksi informasi mendukung banyak penerapan bisnis yang bernilai:
- Pemrosesan faktur: Mengekstrak vendor, item baris, jumlah, dan tanggal jatuh tempo dari faktur PDF untuk mengotomatiskan utang usaha
- Analisis kontrak: Mengekstrak para pihak, tanggal berlaku, ketentuan pembayaran, dan klausul penghentian dari dokumen hukum
- Penguraian resume: Mengekstrak keterampilan, pengalaman, pendidikan, dan informasi kontak dari CV untuk sistem ATS
- Pengarahan tiket dukungan: Mengekstrak kategori, tingkat keparahan, produk yang terdampak, dan tingkatan pelanggan untuk mengarahkan tiket secara otomatis
- Pemantauan berita: Mengekstrak entitas, peristiwa, dan sentimen dari artikel berita untuk intelijen persaingan
Membangun Alur Ekstraksi Email
Mari kita bangun alur ekstraksi praktis yang membaca email pelanggan dan mengekstrak data terstruktur yang dapat ditindaklanjuti. Alur ini menggunakan skema Pydantic untuk mendefinisikan dengan tepat hal yang kita inginkan dari setiap email, lalu memproses email secara berkelompok.
import openai
from pydantic import BaseModel
from typing import List, Optional
from enum import Enum
client = openai.OpenAI()
class Priority(str, Enum):
urgent = 'urgent'
high = 'high'
normal = 'normal'
low = 'low'
class EmailExtraction(BaseModel):
subject_summary: str
sender_intent: str
product_mentioned: Optional[str]
issue_category: str # billing / technical / general / feedback
priority: Priority
action_required: bool
action_description: Optional[str]
customer_sentiment: str # positive / negative / neutral / frustrated
def extract_from_email(email_body: str) -> EmailExtraction:
result = client.beta.chat.completions.parse(
model='gpt-4o-mini',
messages=[
{'role': 'system', 'content': 'You are an expert at analyzing customer emails and extracting structured information for a support team.'},
{'role': 'user', 'content': f'Analyze this customer email:\n\n{email_body}'}
],
response_format=EmailExtraction
)
return result.choices[0].message.parsedPengenalan Entitas Bernama dengan LLM
Pengenalan Entitas Bernama (NER) adalah tugas IE klasik: mengidentifikasi dan mengklasifikasikan entitas bernama (orang, organisasi, lokasi, tanggal, jumlah uang) dalam teks. LLM sangat menyederhanakan NER karena Anda cukup menjelaskan entitas yang diinginkan, lalu LLM mengekstraknya tanpa memerlukan model NER yang dilatih secara khusus.
import openai
from pydantic import BaseModel
from typing import List, Optional
client = openai.OpenAI()
class NamedEntity(BaseModel):
text: str # The exact text as it appears
entity_type: str # PERSON / ORG / LOCATION / DATE / MONEY / PRODUCT
normalized: Optional[str] # Standardized form where applicable
class NERResult(BaseModel):
entities: List[NamedEntity]
text = '''
Apple Inc. CEO Tim Cook announced yesterday that the company will invest $1.2 billion
in a new manufacturing facility in Austin, Texas, expected to open in Q3 2026.
'''
result = client.beta.chat.completions.parse(
model='gpt-4o-mini',
messages=[
{'role': 'system', 'content': 'Extract all named entities from the text. Classify each as PERSON, ORG, LOCATION, DATE, MONEY, or PRODUCT.'},
{'role': 'user', 'content': text}
],
response_format=NERResult
)
for entity in result.choices[0].message.parsed.entities:
print(f'[{entity.entity_type}] {entity.text}')Mengekstrak dari Dokumen dalam Skala Besar
Untuk alur ekstraksi produksi yang memproses ribuan dokumen, Anda memerlukan pemrosesan asinkron dan penanganan batas laju. Pola yang umum menggunakan asyncio dengan semaphore untuk memproses dokumen secara paralel sambil mematuhi batas laju API.
import asyncio
import openai
from pydantic import BaseModel
from typing import List, Optional
async_client = openai.AsyncOpenAI()
class InvoiceExtraction(BaseModel):
vendor: str
total_amount: Optional[float]
currency: str
invoice_date: Optional[str]
async def extract_invoice(doc_text: str, semaphore: asyncio.Semaphore) -> InvoiceExtraction:
async with semaphore: # Limit concurrent requests
result = await async_client.beta.chat.completions.parse(
model='gpt-4o-mini',
messages=[
{'role': 'system', 'content': 'Extract invoice data.'},
{'role': 'user', 'content': doc_text}
],
response_format=InvoiceExtraction
)
return result.choices[0].message.parsed
async def process_invoices(documents: List[str]):
sem = asyncio.Semaphore(5) # Max 5 concurrent requests
tasks = [extract_invoice(doc, sem) for doc in documents]
return await asyncio.gather(*tasks, return_exceptions=True)
# results = asyncio.run(process_invoices(invoice_texts))
print('Async pipeline defined - handles rate limits via semaphore')Menangani Informasi Tersirat dan yang Disimpulkan
LLM dapat mengekstrak bukan hanya informasi yang dinyatakan secara eksplisit, tetapi juga informasi yang disimpulkan atau tersirat. Jika sebuah ulasan menyatakan 'Saya telah menggunakan ini setiap hari selama sebulan dan masih berfungsi sempurna', model dapat menyimpulkan bahwa daya tahan merupakan atribut positif meskipun kata 'daya tahan' tidak pernah muncul. Ini merupakan keunggulan besar dibandingkan ekstraksi berbasis regex yang hanya dapat menemukan hal yang dinyatakan secara eksplisit.
Namun, kemampuan ini juga memiliki risiko: model dapat menarik kesimpulan secara berlebihan dan mengisi bidang dengan tebakan, bukan fakta. Untuk ekstraksi yang berdampak besar (hukum, keuangan, medis), tambahkan bidang confidence ke skema Anda dan instruksikan model untuk menilai tingkat kepastiannya, serta tandai hasil ekstraksi dengan tingkat keyakinan rendah untuk ditinjau oleh manusia.
Merancang Prompt Ekstraksi
Kualitas ekstraksi Anda sangat bergantung pada perancangan prompt. Prinsip utama untuk prompt ekstraksi:
- Tentukan bidang yang ambigu: Jika 'tanggal' dapat berarti tanggal faktur, tanggal jatuh tempo, atau tanggal diterima, tentukan dengan tepat tanggal yang diinginkan
- Berikan contoh untuk format yang tidak biasa: 'Untuk harga, kembalikan hanya nilai numerik, misalnya 29.99, bukan $29.99'
- Tangani normalisasi: 'Normalisasi nama negara menjadi kode ISO 3166-1 alpha-2'
- Tentukan sumber ekstraksi: 'Ekstrak hanya dari baris subjek, bukan isi email'
Anggap prompt ekstraksi sebagai spesifikasi yang tepat bagi operator entri data manusia—setiap ambiguitas yang Anda biarkan dalam prompt akan menjadi keputusan yang dibuat model secara tidak konsisten.
Ekstraksi Multi-Tahap untuk Dokumen Kompleks
Beberapa dokumen terlalu kompleks untuk diekstrak dalam satu tahap karena skema lengkapnya besar, bagian yang berbeda memerlukan keahlian yang berbeda, atau struktur dokumennya sangat bervariasi. Ekstraksi multi-tahap memecah tugas menjadi langkah-langkah berurutan: pertama mengklasifikasikan jenis dokumen, lalu mengekstrak skema yang sesuai untuk jenis tersebut.
import openai
from pydantic import BaseModel
from typing import Optional
client = openai.OpenAI()
class DocumentType(BaseModel):
doc_type: str # invoice / contract / resume / report
confidence: float
def classify_document(text: str) -> str:
result = client.beta.chat.completions.parse(
model='gpt-4o-mini',
messages=[
{'role': 'system', 'content': 'Classify the document type.'},
{'role': 'user', 'content': text[:500]} # Use only the beginning for classification
],
response_format=DocumentType
)
return result.choices[0].message.parsed.doc_type
# Then route to the appropriate extraction schema
EXTRACTION_SCHEMAS = {
'invoice': 'InvoiceSchema', # Replace with actual Pydantic classes
'contract': 'ContractSchema',
'resume': 'ResumeSchema',
}
print('Multi-pass: classify first, then extract with the right schema')Pengayaan Setelah Ekstraksi
Data hasil ekstraksi sering memerlukan pengayaan setelah ekstraksi awal: mengubah nama perusahaan yang diekstrak menjadi bentuk kanonis dengan meminta data dari basis data perusahaan, mencari kode pos yang diekstrak untuk mengisi kota dan provinsi, atau mengubah tanggal yang diekstrak menjadi format standar. Langkah pengayaan ini harus dilakukan dalam kode aplikasi Anda setelah ekstraksi, bukan selama pemanggilan LLM.
Memisahkan ekstraksi dan pengayaan membuat alur lebih mudah diuji dan dipelihara. Anda dapat melakukan pengujian unit terhadap logika pengayaan secara terpisah dan mengganti model ekstraksi tanpa mengubah kode pengayaan.
Mengukur Akurasi Ekstraksi
Untuk alur ekstraksi produksi, ukur akurasi secara sistematis menggunakan kumpulan pengujian berlabel. Metrik utamanya adalah:
- Akurasi bidang: Persentase bidang yang diekstrak dengan benar per dokumen
- Kecocokan tepat: Nilai bidang sama persis dengan nilai acuan
- Kecocokan ternormalisasi: Nilai bidang sama setelah normalisasi (misalnya, '$1,234.00' == '1234.0')
- Tingkat positif palsu: Seberapa sering model mengekstrak bidang yang seharusnya bernilai null
- Tingkat negatif palsu: Seberapa sering model mengembalikan null untuk bidang yang sebenarnya ada
Jalankan evaluasi ini setiap kali Anda mengubah model, memperbarui prompt, atau menambahkan sumber dokumen baru ke alur Anda. Bahkan penurunan akurasi yang kecil dapat menimbulkan dampak bisnis yang signifikan saat memproses ribuan dokumen.
Pencatatan Ekstraksi untuk Perbaikan Berkelanjutan
Setiap hasil ekstraksi dalam produksi merupakan titik data yang dapat meningkatkan alur Anda. Catat setiap dokumen masukan, keluaran hasil ekstraksi, dan setiap kesalahan validasi ke basis data. Secara berkala, ambil sampel dari catatan produksi untuk mengidentifikasi pola kegagalan yang umum: format dokumen tertentu yang sulit dipahami model, bidang yang sering bernilai null padahal seharusnya tidak, atau nilai tidak biasa yang menunjukkan pergeseran prompt.
Data yang dicatat ini juga dapat menjadi kumpulan data pelatihan Anda di masa mendatang jika Anda ingin menyempurnakan model secara khusus untuk tugas ekstraksi, sehingga memberi Anda alternatif dengan akurasi lebih tinggi dan biaya lebih rendah dibandingkan LLM serbaguna untuk ekstraksi terstruktur.
Pemeriksaan Cepat
Uji pemahaman Anda tentang konsep Rekayasa AI dari pelajaran ini.
Rangkuman Pelajaran
Dalam pelajaran ini Anda mempelajari bahwa: LLM dengan skema Pydantic mengekstrak data terstruktur dari sumber teks tidak terstruktur apa pun secara andal, pemrosesan asinkron dengan semaphore memungkinkan ekstraksi berkelompok dari ribuan dokumen sambil mematuhi batas laju, dan ekstraksi multi-tahap mengklasifikasikan dokumen terlebih dahulu, lalu menerapkan skema yang sesuai untuk setiap jenis. Selanjutnya, kita akan membangun logika validasi dan percobaan ulang otomatis untuk menangani kasus ketika data hasil ekstraksi tidak memenuhi aturan bisnis.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Mengekstrak Data dari Teks Tidak Terstruktur” gratis?
Ya — teks lengkap “Mengekstrak Data dari Teks Tidak Terstruktur” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus AI Engineering Academy, upgrade ke CoddyKit PRO. Kursus AI Engineering Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Mengekstrak Data dari Teks Tidak Terstruktur”?
Bangun alur pemrosesan ekstraksi informasi yang membaca teks mentah seperti email, tanda terima, dan artikel, lalu mengembalikan bidang terstruktur dengan tipe, nilai bawaan, dan validasi. Kamu berlatih AI Engineering Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai AI Engineering Academy?
Tidak diperlukan pengalaman sebelumnya. AI Engineering Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.
Berapa lama pelajaran “Mengekstrak Data dari Teks Tidak Terstruktur” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran AI Engineering Academy ini?
Ya. Setiap pelajaran AI Engineering Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Mode JSON dan response_format
- Keluaran Terstruktur dengan Pydantic
- Mengekstrak Data dari Teks Tidak Terstruktur
- Memvalidasi dan Mencoba Ulang Keluaran yang Buruk