0Pricing
AI Engineering Academy · Pelajaran

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.parsed

Pengenalan 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

  1. Mode JSON dan response_format
  2. Keluaran Terstruktur dengan Pydantic
  3. Mengekstrak Data dari Teks Tidak Terstruktur
  4. Memvalidasi dan Mencoba Ulang Keluaran yang Buruk
← Kembali ke AI Engineering Academy