Ana içeriğe geç

LangExtract: Uygulamalı Örneklerle Bir Rehber

Yapılandırılmamış metinden yapılandırılmış veriler ve ilişkiler çıkarmak için LangExtract’i kurmayı ve kullanmayı öğrenin; yaklaşımını geleneksel NLP kütüphaneleriyle karşılaştırın.
· 12 dk. oku

Yapay Zeka ile Keşfedin

Metin belgelerinden yapılandırılmış veri çıkarmak, veri ekipleri için ciddi sorunlar yaratır. Biçimler değiştiğinde düzenli ifadeler bozulur, özel ayrıştırma kodu insanların kolayca yakaladığı bağlamı kaçırır ve veri kaynaklarınız değiştikçe bu çözümlerin sürekli yamalanması gerekir.

LangExtract bunu, metni insanlar gibi okuyabilen ve bilginin tam olarak nereden geldiğini izleyebilen yapay zeka modelleriyle çözer. Basit terimlerle ve birkaç örnekle hangi veriyi istediğinizi söylersiniz; o da bu bilgiyi anlama ve çıkarma işinin zor kısmını üstlenir.

Bu öğreticide, adlandırılmış varlık tanıma için LangExtract’i nasıl kuracağınızı, varlıklar arasındaki ilişkileri nasıl çıkaracağınızı, farklı yapay zeka sağlayıcılarıyla nasıl çalışacağınızı ve LangExtract’in yaklaşımını geleneksel NLP kütüphaneleriyle nasıl karşılaştıracağınızı adım adım açıklayacağım. Ayrıca çıkarım görevlerini tanımlamayı, eğitim örnekleri vermeyi ve yapılandırılmış sonuçları analiz iş akışlarınızda işlemeyi öğreneceksiniz.

LangExtract Nedir?

LangExtract dağınık metni yapay zekayla düzenli veriye dönüştüren bir Python kütüphanesidir. Eski metin işleme araçları bağlam karşısında şaşırır — örneğin “Apple” kelimesini teknoloji şirketinden söz ederken meyve sanabilir ya da “$500” ifadesini aslında bir çalışan kimliği iken fiyat olarak algılayabilir. Basit desen eşleştirme e-posta adreslerini yakalayabilir ama “[email protected]” güncel bir çalışan mı yoksa eski bir e-postada adı geçen biri mi, bunu ayırt edemez.

Bu bağlam ve doğruluk sorunlarını gidermek için LangExtract size şunları sunar:

  • Kaynak izleme — Her bir veri parçasının özgün metinde tam olarak nereden geldiğini gösterir
  • Birden çok yapay zeka modeli —  OpenAI, Anthropic, Google ve Ollama üzerinden yerel modellerle çalışır
  • Akıllı parçalama — Büyük belgeleri parçalara böler ve aynı anda birden çok bölümde çalışır
  • Birden fazla deneme — Atlanan bilgileri yakalamak için aynı görevi birkaç kez çalıştırır
  • Görsel raporlar — Verinin kaynağını görmek için üzerine tıklayabildiğiniz HTML sayfaları üretir

LangExtract etkileşimli görselleştirme: Romeo ve Juliet karakter çıkarımı, vurgulanan metin ve varlık öznitelikleriyle

Kaynak: GitHub

Bu araçlar, metinden bilgi çıkarmaya bakış açınızı değiştirir. Kolayca kırılan karmaşık kurallar yazmak yerine, birkaç basit örnekle ne istediğinizi yapay zekaya söylersiniz. Yapay zeka metni bir insan gibi okur ve her şeyin kaynağını izler. Böylece, eskiden yüzlerce satır kod gerektirecek karmaşık bilgileri ve ilişkileri çıkarabilirsiniz.

LangExtract’i Ne Zaman Kullanmalısınız?

LangExtract, geleneksel NLP araçlarının iyi baş edemediği, özel bilgileri çıkarmanız gerektiğinde en iyi sonucu verir. Standart adlandırılmış varlık tanımanın yetersiz kaldığı, alanınıza özgü metinlerle çalışıyorsanız, LangExtract karmaşık kurallar yazmadan veya modelleri yeniden eğitmeden işletmeniz için önemli olanı tam olarak tanımlamanızı sağlar. Yalnızca tekil varlıkları bulmak değil, bağlamı ve bilgiler arasındaki ilişkileri anlamanız gerektiğinde özellikle kullanışlıdır.

LangExtract şu durumlarda iyi bir seçimdir:

  • Alana özgü varlıklar — Sektör terimleri, ürün adları veya önceden eğitilmiş modellerin tanımadığı özel kategoriler
  • Karmaşık ilişkiler — Kişileri rollerine ve iletişim bilgilerine bağlamak gibi birlikte gruplanması gereken bilgiler
  • Bağlama bağlı çıkarım — Aynı metnin çevresindeki bilgiye göre farklı anlamlar taşıyabildiği durumlar
  • Kaynak doğrulama ihtiyacı — Çıkarılan her bir verinin tam kaynağını izleme gereksinimi
  • Karma belge türleri — E-postalar, PDF’ler ve raporlar gibi farklı formatlar için esnek işleme yaklaşımları
  • Sınırlı ML uzmanlığı — Derin makine öğrenimi bilgisi olmadan güçlü çıkarım yapmak isteyen ekipler

Hazır kategoriler için temel adlandırılmış varlık tanıma gibi yerleşik NLP görevleriyle çalışıyorsanız, çok basit desenlerin son derece hızlı işlenmesine ihtiyaç duyuyorsanız veya harici API çağrılarını kesin olarak engellemeniz gerekiyorsa başka araçları değerlendirmelisiniz. Geleneksel kütüphaneler, örneğin spaCy yüksek hacimli işlemede standart NLP görevlerinde mükemmeldir; LangExtract ise kurulum karmaşıklığı düşük, akıllı ve özel çıkarım gerektiğinde öne çıkar.

LangExtract Kurulumu

Veri çıkarmaya başlamadan önce LangExtract’i kurmanız ve yapay zeka modellerine erişimi ayarlamanız gerekir. Kütüphane birden çok kurulum yöntemini destekler ve farklı yapay zeka sağlayıcılarıyla çalışır.

Kurulum

LangExtract’i pip veya uv ile kurun. OpenAI entegrasyonu için extras paketini kullanın:

# Using pip
pip install langextract[openai]

# Using uv
uv add langextract[openai]

[openai] eklentisi OpenAI Python istemcisini içerir. Diğer sağlayıcılar için temel paketi kurabilir ve gerektikçe sağlayıcıya özel kütüphaneleri ekleyebilirsiniz.

API anahtarı kurulumu

LangExtract birkaç yapay zeka sağlayıcısıyla çalışır. API anahtarlarını ortam değişkenleri olarak ayarlayın:

# OpenAI (get your key from https://platform.openai.com/api-keys)
export OPENAI_API_KEY="your-openai-key-here"

# Anthropic (get your key from https://console.anthropic.com/settings/keys) 
export ANTHROPIC_API_KEY="your-anthropic-key-here"

# Google AI (get your key from https://aistudio.google.com/app/apikey)
export GOOGLE_API_KEY="your-google-key-here"

Yalnızca kullanmayı planladığınız sağlayıcılar için anahtarlara ihtiyacınız var. Ollama üzerinden yerel modeller için API anahtarı gerekmez — bilgisayarınıza Ollama’yı kurup çalıştırmanız yeterlidir.

Hızlı test

Kurulumunuzu basit bir testle doğrulayın:

import langextract as lx
import textwrap

# 1. Define the prompt and extraction rules
prompt = textwrap.dedent(
   """\
   Extract characters, emotions, and relationships in order of appearance.
   Use exact text for extractions. Do not paraphrase or overlap entities.
   Provide meaningful attributes for each entity to add context."""
)

# 2. Provide a high-quality example to guide the model
examples = [
   lx.data.ExampleData(
       text="ROMEO. But soft! What light through yonder window breaks? It is the east, and Juliet is the sun.",
       extractions=[
           lx.data.Extraction(
               extraction_class="character",
               extraction_text="ROMEO",
               attributes={"emotional_state": "wonder"},
           ),
       ],
   )
]

# The input text to be processed
input_text = "Lady Juliet gazed longingly at the stars, her heart aching for Romeo"

# Run the extraction
result = lx.extract(
   text_or_documents=input_text,
   prompt_description=prompt,
   examples=examples,
   model_id="gpt-4o-mini",
)

print("Extraction successful!")

LangExtract’te Adlandırılmış Varlık Tanıma (NER) Yapma

Adlandırılmış Varlık Tanıma (NER), metin içinde şirket adları, kişiler ve konumlar gibi belirli bilgi parçalarını bulur ve sınıflandırır.

Geleneksel NER araçları “PERSON” veya “ORGANIZATION” gibi önceden tanımlanmış kategorilerle çalışır ancak çoğu zaman işletmeniz için önemli olan bağlama özgü varlıkları kaçırır. LangExtract, özel varlık türleri tanımlamanıza ve alanınıza özgü kalıpları tanıması için yapay zekayı yönlendirmenize olanak tanır.

Müşteri destek e-postalarından varlık çıkarmayı adım adım inceleyelim. Genel kategoriler yerine, biletleri önceliklendirmeye yardımcı olan şikayet türleri, ürün adları ve çözüm zaman dilimleri gibi desteğe özgü varlıkları belirleyeceğiz.

Çıkarım görevini tanımlama

İlk adım, neyi çıkarmak istediğinizi net bir komutla (prompt) tarif etmektir. Bu komut, bir insan analiste verilen talimatlar gibidir — ne kadar belirgin olursanız, o kadar iyi sonuç alırsınız:

import langextract as lx
import textwrap

# Define what we want to extract from support emails
prompt = textwrap.dedent("""
   Extract customer support entities from email text.
   Focus on actionable information that helps prioritize and route tickets.
   Use exact text from the email - don't paraphrase or summarize.
   Include helpful attributes that add context for support agents.
""")

textwrap.dedent() işlevi, çok satırlı dizgilerdeki fazla girintiyi kaldırır; böylece komutlarınız kod içinde okunabilir kalırken, yapay zekaya gönderildiğinde temiz biçimde iletilir. Aksi halde, yapay zeka kod girintilerinden kaynaklanan fazla boşlukları da görecektir.

Bu komut, yapay zekaya desteğe özgü bilgileri aramasını, metinden birebir alıntılar kullanmasını ve özniteliklerle bağlam eklemesini söyler. Önemli olan alanınızı (müşteri desteği) ve bilgiyi faydalı kılan unsurları (biletleri önceliklendirme ve yönlendirme) net olarak tanımlamaktır.

Çıkarım örnekleri sağlama

Örnekler, tam olarak ne istediğinizi ve sonuçların nasıl biçimlendirileceğini yapay zekaya öğretir. Her örnek, yapay zekaya bir metin parçası ve buradan çıkarılmasını istediğiniz varlıkları gösterir:

# Create examples that show the AI what to extract
examples = [
   lx.data.ExampleData(
       text="My laptop screen keeps flickering. I bought it 3 months ago and need this fixed urgently for my presentation tomorrow.",
       extractions=[
           lx.data.Extraction(
               extraction_class="product",
               extraction_text="laptop",
               attributes={"issue": "screen flickering", "urgency": "high"}
           ),
           lx.data.Extraction(
               extraction_class="timeline",
               extraction_text="3 months ago",
               attributes={"context": "purchase_date"}
           ),
           lx.data.Extraction(
               extraction_class="urgency_indicator",
               extraction_text="urgently for my presentation tomorrow",
               attributes={"priority": "high", "deadline": "tomorrow"}
           )
       ]
   )
]

Her bir ExampleData nesnesi bir metin örneği ve Extraction nesneleri listesini içerir. Extraction nesneleri üç şeyi belirtir:

  • extraction_class: Varlık türü ("product" veya "timeline" gibi)
  • extraction_text: Özgün metinden alınan tam ifadeler
  • attributes: Varlığı daha iyi anlamaya yardımcı ek bağlam

Öznitelikler, LangExtract’i geleneksel NER’den ayıran noktadır. Sadece “laptop”u bulmak yerine “ekran titremesi” sorunu olduğunu yakalar ve yüksek öncelik olarak işaretleyebiliriz.

Çıkarımı çalıştırma

Artık komutunuzu ve örneklerinizi kullanarak yeni metin üzerinde çıkarımı çalıştırabilirsiniz. LangExtract, öğrendiklerini benzer varlıkları bulmak için uygular:

# Sample support email to analyze
support_email = """
Subject: WiFi adapter not working after Windows update

Hi support team,

My USB WiFi adapter stopped working completely after yesterday's Windows update.
I've tried restarting my computer multiple times but no luck. This is blocking me
from working from home today. I have an important client call at 2 PM and really
need internet access. The adapter worked perfectly before the update.

Thanks,
Mike Chen
"""

# Run the extraction
result = lx.extract(
   text_or_documents=support_email,
   prompt_description=prompt,
   examples=examples,
   model_id="gpt-4o-mini"
)

print("Extraction completed successfully!")

Çıktı:

INFO:absl:Finalizing annotation for document ID doc_435b1cd5.
INFO:absl:Document annotation completed.
✓ Extracted 4 entities (3 unique types)
 • Time: 3.34s
 • Speed: 123 chars/sec
 • Chunks: 1
Extraction completed successfully!

lx.extract() işlevi metninizi alır, komut talimatlarını uygular ve çıkarıma örneklerle yön verir. Özgün metinde bulunan tüm varlıkları ve bunların tam konumlarını içeren bir sonuç nesnesi döndürür.

Farklı modelleri model_id parametresini değiştirerek deneyebilirsiniz. "claude-3-haiku" veya "gpt-4o" gibi modeller, metninizin karmaşıklığına ve gereksinimlerinize göre farklı sonuçlar verebilir.

LangExtract’te Çıkarılan Verilerle Çalışma

Çıkarım tamamlandığında LangExtract, bulunan tüm varlıkları tam konumları ve öznitelikleriyle içeren bir sonuç nesnesi döndürür. Asıl güç, bu yapılandırılmış veriye nasıl erişip analiz edeceğiniz ve paylaşacağınızda yatar.

Çıkarılan varlıklara erişme

Sonuç nesnesi, bulunan tüm varlıkları extractions özelliğinde saklar. Her çıkarım; varlık metnini, türünü, özgün belgedeki konumunu ve varsa özniteliklerini içerir:

# Look at all extracted entities
for extraction in result.extractions:
   print(f"Type: {extraction.extraction_class}")
   print(f"Text: '{extraction.extraction_text}'")
   print(f"Location: chars {extraction.char_interval.start_pos}-{extraction.char_interval.end_pos}")
   print(f"Attributes: {extraction.attributes}")
   print("---")

Çıktı:

Type: product
Text: 'USB WiFi adapter'
Location: chars 78-94
Attributes: {'issue': 'not working after Windows update', 'previous_status': 'worked perfectly before the update'}
---
Type: timeline
Text: 'yesterday'
Location: chars 128-137
Attributes: {'context': 'Windows update'}
---
Type: urgency_indicator
Text: 'blocking me from working from home today'
Location: chars 227-268
Attributes: {'priority': 'high', 'context': 'work from home'}
---
Type: urgency_indicator
Text: 'important client call at 2 PM'
Location: chars 280-309
Attributes: {'priority': 'high', 'deadline': '2 PM today'}
---

Her çıkarım nesnesi, özgün metindeki başlangıç ve bitiş konumlarını gösteren char_interval ile bilginin kaynağını tam olarak izler. Bu kaynak takibi, sonuçları doğrulamanıza ve bağlamı anlamanıza olanak tanır.

Varlık kalıplarını analiz etme

Verilerinizdeki kalıpları anlamak için varlıkları gruplayıp sayabilirsiniz:

from collections import Counter

# Count different entity types
entity_types = Counter(e.extraction_class for e in result.extractions)
print("Entity breakdown:")
for entity_type, count in entity_types.items():
   percentage = (count / len(result.extractions)) * 100
   print(f"  {entity_type}: {count} entities ({percentage:.1f}%)")

# Find high-priority support tickets
urgent_entities = [
   e for e in result.extractions
   if e.extraction_class == "urgency_indicator"
   and e.attributes.get("priority") == "high"
]
print(f"\nFound {len(urgent_entities)} high-priority indicators")

Çıktı:

Entity breakdown:
 product: 1 entities (25.0%)
 timeline: 1 entities (25.0%)
 urgency_indicator: 2 entities (50.0%)

Found 2 high-priority indicators

Bu analiz, hangi ürün türlerinin en çok destek bileti ürettiği veya kaç acil istek aldığınız gibi kalıpları hızla görmenize yardımcı olur.

Çıkarım sonuçlarını kaydetme

LangExtract, sonuçları her satırda bir belge olacak şekilde JSONL (JSON Lines) formatında kaydeder. Bu format veri işleme araçlarıyla iyi çalışır ve birden çok çıkarımın sonuçlarını birleştirmeyi kolaylaştırır:

# Save results to a JSONL file
lx.io.save_annotated_documents(
   [result],
   output_name="support_ticket_extractions.jsonl",
   output_dir="."
)

JSONL, her belgeyi ayrı bir satırda tam bir JSON nesnesi olarak saklar. Tek bir büyük dizi içeren normal JSON dosyalarının aksine JSONL dosyaları satır satır işlenebilir; bu da onları büyük veri kümeleri için ideal kılar. Bu dosyaları herhangi bir metin düzenleyicide açabilir veya pandas gibi veri analizi araçlarına yükleyebilirsiniz.

Etkileşimli HTML görselleştirmeleri oluşturma

HTML görselleştirme, LangExtract’in gerçekten öne çıktığı yerdir. Özgün metindeki çıkarılmış varlıkları vurgulayan ve sonuçlar arasında tıklayarak gezmenizi sağlayan etkileşimli bir rapor oluşturur:

# Generate interactive HTML visualization
html_content = lx.visualize("support_ticket_extractions.jsonl")

# Save the HTML file
with open("support_analysis.html", "w") as f:
   if hasattr(html_content, "data"):
       f.write(html_content.data)  # For Jupyter notebooks
   else:
       f.write(html_content)  # For regular Python scripts

print("HTML visualization saved as 'support_analysis.html'")

Çıktı:

HTML visualization saved as 'support_analysis.html'

LangExtract HTML görselleştirme arayüzü: çıkarılmış varlıklar renk kodlu vurgular ve tıklanabilir öznitelik paneliyle

HTML görselleştirme, her varlık türü için renk kodlu vurgularla özgün metninizi gösterir. Vurgulanan metne tıklayarak çıkarılmış öznitelikleri görebilir, denetimleri kullanarak varlıklar arasında gezinebilir ve yapay zekanın önemli bilgileri doğru tanımladığını doğrulayabilirsiniz. Bu, sonuçları nokta atışı kontrol etmeyi ve çıkarım hattınıza güven oluşturmayı kolaylaştırır.

Görselleştirme; her varlık türünü gösteren bir lejant, varlıklar arasında gezinme denetimleri ve her çıkarım için ayrıntılı öznitelik bilgilerini içerir. Bu etkileşimli yaklaşım, ham JSON verisine bakmaya kıyasla sonuçlarınızı anlamayı ve doğrulamayı çok daha kolay hale getirir.

LangExtract’te İlişki Çıkarımı

Çıkardığımız müşteri destek varlıkları tekil olarak işe yarar, ancak tam resmi vermez. Bir müşteri “2021 model MacBook Pro’ mda pil sorunları var” dediğinde, ürünün, model yılının ve sorunun tek bir destek vakasına ait olduğunu anlamanız gerekir. Bu parçaları ayrı ayrı bulmak işe yaramaz — aralarındaki ilişkilere ihtiyaç vardır.

Geleneksel NLP bunu zayıf yönetir çünkü her varlığı yalıtılmış bilgi olarak ele alır. “MacBook Pro”, “2021” ve “pil sorunları”nı ayrı varlıklar olarak çıkarabilirsiniz; ancak hangi detayın hangi ürünle ilişkili olduğunu bulmak için karmaşık kurallar gerekir. Aynı metinde birden fazla ürün veya müşteri olduğunda bu yaklaşım hızla çöker.

LangExtract, varlıkları sonradan bağlamaya çalışmak yerine, ilk geçişte ilişkileri de çıkararak bunu çözer. Paylaşılan öznitelikleri kullanarak ilgili bilgileri gruplayabilir ve yine de her bir parçanın özgün metindeki kaynağını tam olarak izleyebilirsiniz. İnsanları rollerine, departmanlarına ve iletişim bilgilerine bağlamamız gereken İK belgelerinden çalışan bilgisi çıkarmayı birlikte ele alalım.

İlişki çıkarımını ayarlama

Bu örnekte, kişi başına birden fazla detayın bağlanması gereken şirket duyurularından çalışan bilgisi çıkaracağız:

import langextract as lx
import textwrap

# Define relationship extraction prompt
prompt = textwrap.dedent("""
   Extract employee information from company announcements.
   Group related details about each person using employee_group attributes.
   Connect names, titles, departments, and contact info for each employee.
   Use exact text from the announcement - don't paraphrase.
""")

# Create examples showing how to group related information
examples = [
   lx.data.ExampleData(
       text="Sarah Johnson, our new Marketing Director, will lead the digital campaigns team. You can reach Sarah at [email protected] for any marketing questions.",
       extractions=[
           lx.data.Extraction(
               extraction_class="person",
               extraction_text="Sarah Johnson",
               attributes={"employee_group": "Sarah Johnson"}
           ),
           lx.data.Extraction(
               extraction_class="job_title",
               extraction_text="Marketing Director",
               attributes={"employee_group": "Sarah Johnson"}
           ),
           lx.data.Extraction(
               extraction_class="department",
               extraction_text="digital campaigns team",
               attributes={"employee_group": "Sarah Johnson"}
           ),
           lx.data.Extraction(
               extraction_class="contact",
               extraction_text="[email protected]",
               attributes={"employee_group": "Sarah Johnson", "type": "email"}
           )
       ]
   )
]

employee_group özniteliği bir bağlantı sistemi gibi çalışır — aynı employee_group değerine sahip tüm varlıklar aynı kişiye aittir. Bu sayede, her bir parçanın özgün metindeki kaynağını izlemeye devam ederek, çok parçalı karmaşık bilgileri çıkarabilirsiniz.

İlişki çıkarımını çalıştırma

Şimdi birden çok çalışanı içeren bir şirket duyurusundan çıkarım yapalım:

# Sample HR announcement with multiple employees
hr_announcement = """
We're excited to announce two new hires joining our team this month.

Mike Chen joins us as Senior Software Engineer in our Backend Development group. Mike brings 8 years of Python experience and will focus on API architecture. Please welcome Mike - he'll be working from our Seattle office and you can reach him at [email protected].

Additionally, Lisa Rodriguez starts as Product Manager for our Mobile Apps division. Lisa previously worked at TechStart Inc and has extensive experience with user research. Her office phone is 555-0199 and email is [email protected].
"""

# Extract relationships
result = lx.extract(
   text_or_documents=hr_announcement,
   prompt_description=prompt,
   examples=examples,
   model_id="gpt-4o-mini"
)

print(f"Extracted {len(result.extractions)} entities")

Çıktı:

✓ Extraction processing complete

INFO:absl:Finalizing annotation for document ID doc_a349ae1d.
INFO:absl:Document annotation completed.
✓ Extracted 10 entities (4 unique types)
 • Time: 8.57s
 • Speed: 67 chars/sec
 • Chunks: 1
Extracted 10 entities

İlişki gruplarıyla çalışma

Çıkardıktan sonra, her çalışan için tam bilgiyi görmek üzere ilgili varlıkları gruplayabilirsiniz. Bu, dağınık varlıkları mantıksal gruplara yeniden düzenlemek için biraz Python kodu gerektirir:

from collections import defaultdict

# Group entities by employee_group
employee_groups = defaultdict(list)
for extraction in result.extractions:
   group_id = extraction.attributes.get("employee_group")
   if group_id:
       employee_groups[group_id].append(extraction)

# Print organized employee information
for employee, details in employee_groups.items():
   print(f"\n=== {employee} ===")
   for detail in details:
       print(f"{detail.extraction_class}: {detail.extraction_text}")
       if detail.attributes.get("type"):
           print(f"  Type: {detail.attributes['type']}")

Çıktı:

=== Mike Chen ===
person: Mike Chen
job_title: Senior Software Engineer
department: Backend Development group
contact: [email protected]
 Type: email
contact: Seattle office
 Type: location

=== Lisa Rodriguez ===
person: Lisa Rodriguez
job_title: Product Manager
department: Mobile Apps division
contact: [email protected]
 Type: email
contact: 555-0199
 Type: phone

Bu kod adım adım şunları yapar:

  1. defaultdict(list) her yeni girdinin otomatik olarak boş listeyle başladığı bir sözlük oluşturur
  2. extraction.attributes.get("employee_group") her varlığın özniteliklerinden grup kimliğini güvenle alır, yoksa None döner
  3. employee_groups[group_id].append(extraction) her varlığı kendi grubunun listesine ekler
  4. İç içe döngüler daha sonra her grubun tamamlanmış bilgisini, çalışan bazında yazdırır

defaultdict, eksik girdileri otomatik oluşturan bir Python koleksiyonudur. employee_groups["Mike Chen"] anahtarına ilk kez eriştiğinizde, o çalışan için otomatik olarak boş bir liste oluşturur. Böylece her çalışan sözlükte var mı diye kontrol etmenize gerek kalmaz.

Bu gruplama yaklaşımı, özgün metindeki dağınık bilgilerden tam çalışan profilleri oluşturmanızı sağlar ve her veri parçasının tam kaynak konumunu korur.

İlişki görselleştirmeleri oluşturma

HTML görselleştirme, ilişki verileriyle çok daha değerli hale gelir; hem tekil varlıkları hem de bağlantılarını gösterir:

# Save the relationship extraction results
lx.io.save_annotated_documents(
   [result],
   output_name="employee_relationships.jsonl",
   output_dir="."
)

# Generate HTML visualization showing relationships
html_content = lx.visualize("employee_relationships.jsonl")
with open("employee_relationships.html", "w") as f:
   if hasattr(html_content, "data"):
       f.write(html_content.data)
   else:
       f.write(html_content)

print("Relationship visualization saved as 'employee_relationships.html'")

LangExtract ilişki çıkarımı görselleştirmesi: renk kodlu varlıklar ve bağlı özniteliklerle gruplanmış çalışan bilgileri

İlişki görselleştirmesi, farklı bilgi parçalarının nasıl bağlanarak tam çalışan kayıtlarını oluşturduğunu vurgular; böylece yapay zekanın özgün duyurudan ilgili detayları doğru biçimde tanımlayıp grupladığını kolayca doğrulayabilirsiniz.

LangExtract’i Farklı Model Sağlayıcılarıyla Kullanma

LangExtract, maliyet, hız ve doğruluk arasında farklı dengeler sunan birkaç yapay zeka sağlayıcısıyla çalışır. Google’ın Gemini modelleri, yerleşik şema desteğiyle kutudan çıktığı gibi çalışır ve çoğu çıkarım görevi için en kolay seçenektir. OpenAI’nin GPT modelleri sıklıkla daha yüksek doğruluk sağlar ancak ek yapılandırma gerektirir ve çıkarım başına daha pahalıdır.

# Using Google Gemini (default and recommended)
result_gemini = lx.extract(
   text_or_documents=employee_text,
   prompt_description=prompt,
   examples=examples,
   model_id="gemini-2.5-flash"  # Fast and cost-effective
)

# Using OpenAI GPT models
result_openai = lx.extract(
   text_or_documents=employee_text,
   prompt_description=prompt,
   examples=examples,
   model_id="gpt-4o-mini",
   fence_output=True,              # Required for OpenAI
   use_schema_constraints=False    # OpenAI doesn't support constraints
)

Yerel işlem veya API maliyetlerinden kaçınmak istediğinizde, modelleri Ollama ile yerelde çalıştırabilirsiniz. Yerel modeller, daha basit çıkarım görevlerinde iyi çalışır ve verileriniz üzerinde tam kontrol sağlar; ancak genellikle daha yavaş çalışır ve bulut tabanlı seçeneklere göre daha az doğru olabilir.

# Using local models with Ollama (requires Ollama installed)
result_local = lx.extract(
   text_or_documents=employee_text,
   prompt_description=prompt,
   examples=examples,
   model_id="gemma2:2b",                    # Local Gemma model
   model_url="http://localhost:11434",     # Ollama server
   fence_output=False,                     # Local models don't need fencing
   use_schema_constraints=False            # Disable constraints
)

Üretime Ölçekleme

Gerçek dünyadaki metinler, temiz örneklerimize hiç benzemez. Karman çorman biçimlendirmeli 50 sayfalık raporlar, yazım hatalarıyla dolu müşteri e-postaları ve tuhaf boşluklara sahip PDF’ler alırsınız. Bazı belgelerde farklı bölümlere yayılmış binlerce kelime olabilir ve önemli bilgiler herhangi bir yerde gizli olabilir.

LangExtract bu dağınık durumları üç ana araçla yönetir: aynı anda birden fazla belgeyi çalıştırma, çıkarımı birkaç kez deneme ve büyük belgeleri daha küçük parçalara ayırma. Belgeleri teker teker işlemek yerine birçoğunu birlikte ele alabilir, böylece her şey çok daha hızlı olur.

# Settings for processing lots of real documents
result = lx.extract(
   text_or_documents=document_batch,
   prompt_description=prompt,
   examples=examples,
   model_id="gemini-2.5-flash",
   max_workers=20,           # Work on many documents at once
   extraction_passes=3,      # Try extraction 3 times
   max_char_buffer=1000      # Break big text into small pieces
)

max_workers ayarı, aynı anda kaç belgenin işleneceğini kontrol eder. Daha fazla işçi daha hızlı sonuç demektir; ancak daha fazla maliyet getirir ve API limitlerine takılabilirsiniz. 10–20 işçiyle başlayıp duruma göre ayarlayın.

Birden fazla çıkarım geçişi, ilk seferde kaçabilecek bilgileri bulmaya yardımcı olur. LangExtract çıkarımı birkaç kez çalıştırır ve sonuçları birleştirir. Bu, daha fazla detayı yakalar ama daha uzun sürer ve daha pahalıya mal olur.

Belgeleri parçalara ayırmak, uzun metinlerde yardımcı olur. max_char_buffer ayarı, büyük belgeleri yapay zekaya daha uygun daha küçük parçalara böler. Küçük parçalar (1000–2000 karakter) daha fazla detayı yakalar; büyük parçalar (3000–5000 karakter) daha çok bağlamı korur ama bazı şeyleri kaçırabilir.

# Different settings for different types of documents

# For important documents that need careful review
detailed_result = lx.extract(
   text_or_documents=legal_documents,
   extraction_passes=5,      # Try 5 times for accuracy
   max_char_buffer=800,      # Small chunks for detail
   max_workers=10           # Fewer workers to avoid limits
)

# For quick processing of simple documents
quick_result = lx.extract(
   text_or_documents=email_batch,
   extraction_passes=1,      # Single pass for speed
   max_char_buffer=3000,     # Bigger chunks for speed
   max_workers=30           # More workers for faster results
)

Üretim ortamı sorunlarla baş etmek demektir. Belgelerde kodlama hataları olabilir, ağ bağlantıları kesilebilir ve API’ler ne kadar hızlı işlem yapabileceğinize sınır koyabilir. Çıkarım işlerinizi izleyin, başarısız belgeler için yeniden deneme mantığı ekleyin ve farklı yapay zeka sağlayıcılarında ne kadar harcadığınızı takip edin.

Farklı belge türleriyle çalışırken, her tür için farklı çıkarım kuralları oluşturun. Hukuki sözleşmelerin, müşteri e-postalarından farklı komutlara ihtiyacı vardır. Finansal raporların, sosyal medya gönderilerinden farklı parça boyutlarına ihtiyacı vardır. Tek bir sistemin her şeyi yönetmesini zorlamak yerine her belge türü için ayrı hatlar oluşturun.

LangExtract ve Diğer NLP Kütüphaneleri

LangExtract, geleneksel NLP kütüphanelerine kıyasla farklı bir yaklaşım benimser. Çoğu kütüphane önceden eğitilmiş modellere veya kural tabanlı sistemlere dayanırken LangExtract, bağlamı ve anlamı insanlar gibi kavrayabilen Büyük Dil Modellerini kullanır. LangExtract’i ne zaman diğer seçeneklere tercih edeceğinizi anlamak için onu üç popüler Python NLP kütüphanesiyle karşılaştıralım.

spaCy

spaCy hız ve üretime hazır NLP görevlerine (tokenizasyon, sözcük türü etiketleme, adlandırılmış varlık tanıma gibi) odaklanır. Kişiler, kurumlar ve konumlar gibi yaygın varlıkları tanıyan önceden eğitilmiş modellerle gelir; ancak alanınıza özgü varlıklar veya özel kategorilerde zorlanır. spaCy, büyük miktarda metni hızlıca işler; ancak özel bilgi çıkarmak için modelleri yeniden eğitmeniz veya karmaşık kurallar yazmanız gerekir.

LangExtract, basit örnekler ve komutlarla özel varlıkları tanımlamanıza olanak tanıyarak bu karmaşıklığı ortadan kaldırır ve spaCy’nin izlemediği tam kaynak konumlarını da sağlar.

NLTK (Natural Language Toolkit)

NLTK (Natural Language Toolkit) eğitim ve araştırma için tasarlanmıştır; çok çeşitli NLP algoritmaları ve veri kümeleri sunar. Metin işleme için yapı taşları sağlar ancak tam çözümler inşa etmek ciddi programlama bilgisi gerektirir. NLTK, NLP kavramlarını öğrenmek ve prototiplemek için uygundur; ancak üretime hazır çıkarım sistemleri kurmak, birden çok NLTK bileşenini birleştirmeyi ve hatırı sayılır miktarda kod yazmayı gerektirir.

LangExtract, kutudan çıkar çıkmaz eksiksiz bir çözüm sunar — algoritma kodlamak yerine örneklerle ne istediğinizi tanımlarsınız ve ek geliştirme yapmadan etkileşimli görselleştirmeler elde edersiniz.

Transformers (Hugging Face)

Transformers (Hugging Face) adlandırılmış varlık tanıma ve soru yanıtlama dahil olmak üzere çeşitli NLP görevleri için son teknoloji dönüştürücü modellere erişim sunar. Güçlü olmakla birlikte, alanlara özgü kullanım için modelleri ince ayar yapmak makine öğrenimi uzmanlığı gerektirir ve yerleşik kaynak izleme veya ilişki çıkarımı sağlamaz. Model dağıtımını yönetmeniz, farklı model formatlarıyla başa çıkmanız ve kendi görselleştirme araçlarınızı oluşturmanız gerekir.

LangExtract, farklı yapay zeka modelleriyle çalışmanın karmaşıklığını soyutlar, kaynak izlemeyi otomatik olarak yönetir ve karmaşık model mimarilerine gerek kalmadan basit öznitelik gruplamayla ilişki çıkarımı sunar.

Özellik

LangExtract

spaCy

NLTK

Transformers

Kurulum karmaşıklığı

Basit komutlar + örnekler

Model eğitimi/kurallar

Algoritma kodlama

Model ince ayarı

Özel varlıklar

Doğal dil tanımı

Yeniden eğitim gerekir

Manuel kural yazımı

Model ince ayarı

Kaynak izleme

Tam konumlarla otomatik

Yok

Manuel uygulama

Manuel uygulama

İlişki çıkarımı

Yerleşik gruplama

Karmaşık kural yazımı

Manuel kodlama

Özel model geliştirme

Bağlam anlama

LLM destekli

Desen tabanlı

Kural tabanlı

Modele bağlı

Görselleştirme

Etkileşimli HTML

Harici araç gerekir

Harici araç gerekir

Harici araç gerekir

Öğrenme eğrisi

Düşük (örnek tabanlı)

Orta (NLP bilgisi)

Yüksek (algoritmalar)

Yüksek (ML uzmanlığı)

En uygun kullanım

Alana özgü çıkarım

Genel NLP hatları

Araştırma/öğrenme

Özel yapay zeka uygulamaları

Sonuç

LangExtract, metin çıkarımını karmaşık kurallar yazmaktan, verileriniz hakkında yapay zekayla konuşmaya dönüştürür. Basit komutlar ve örneklerle özel varlık çıkarımını kurmayı, ilişki çıkarımıyla ilgili bilgileri gruplamayı ve her bir veri parçasının tam kaynağını gösteren etkileşimli görselleştirmeler oluşturmayı öğrendiniz. Kütüphane, paralel işleme ve belge parçalama gibi üretim zorluklarını da ele alır; bu da onu dağınık, tutarsız metinlere sahip gerçek dünya uygulamaları için pratik kılar.

İster müşteri destek biletlerini işleyin, ister hukuki belgeleri analiz edin, ister akademik makalelerden içgörü çıkarın; LangExtract, geleneksel NLP kütüphanelerine göre daha sezgisel bir yaklaşım sunar. Model eğitimi veya kural yazmaya zaman harcamak yerine, belirli kullanım senaryonuz için hangi bilginin önemli olduğunu tanımlamaya odaklanabilirsiniz. Kendi metin verilerinizde basit çıkarımlarla başlayın, ardından bu öğreticide ele alınan üretim tekniklerini kullanarak ölçekleyin.

Bexruz (Bex) Tuychiev

Yazar

Bexruz (Bex) Tuychiev

2 yılı aşkın deneyime sahip bir veri bilimi içerik üreticisiyim ve Medium’da en büyük takipçi kitlelerinden birine sahibim. Yapay zekâ ve makine öğrenimi üzerine, biraz da alaycı bir üslupla yazılmış, ayrıntılı makaleler kaleme almayı seviyorum; çünkü onları biraz daha az sıkıcı hale getirmek için bir şeyler yapmak gerekiyor. 130’un üzerinde makale ve bir de DataCamp kursu ürettim; bir diğeri de hazırlık aşamasında. İçeriklerim 5 milyondan fazla kişi tarafından görüldü; bunların 20 bini Medium ve LinkedIn’de takipçim oldu. 

Konular

İlgili