0Pricing
AI Prompt Engineering · Ders

Adlandırılmış Varlık Çıkarma İstemleri

Yapılandırılmamış metinden adları, tarihleri, konumları ve özel varlıkları çıkarın.

Adlandırılmış Varlık Çıkarma İstemleri, CoddyKit'te ücretsiz bir AI Prompt Engineering dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, AI Prompt Engineering öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. AI Prompt Engineering kursu toplamda 4 dersten oluşur.

Adlandırılmış Varlık Çıkarma Nedir

Adlandırılmış varlık çıkarma (NER), metinde bahsedilen belirli gerçek dünya varlıklarını belirleme ve kategorilere ayırma görevidir. Geleneksel doğal dil işleme, NER için istatistiksel modeller kullanır; LLM'ler ise iyi tasarlanmış bir istemle bunu gerçekleştirebilir.

Yaygın varlık türleri:

  • PERSON: Kişi adları (Elon Musk, Dr. Jane Smith)
  • ORG: Şirketler ve kuruluşlar (Apple, WHO)
  • DATE: Tarihler ve zaman ifadeleri (15 Ocak, geçen salı, 2024'ün 3. çeyreği)
  • LOCATION: Yerler (New York, Amazon Nehri)
  • MONEY: Mali tutarlar ($4,2 milyar)

Temel NER İstemi

En basit NER istemi, tüm varlıkların belirli bir biçimde döndürülmesini ister:

import anthropic, json

client = anthropic.Anthropic(api_key='YOUR_API_KEY')

text = 'Apple CEO Tim Cook met with European Commission President Ursula von der Leyen in Brussels on March 15, 2025 to discuss the Digital Markets Act.'

prompt = f'''
Extract all named entities from the text below.
Return ONLY a JSON object with no other text:
{{
  "people": ["string"],
  "organizations": ["string"],
  "locations": ["string"],
  "dates": ["string"]
}}

Text: {text}
'''

r = client.messages.create(
    model='claude-opus-4-5', max_tokens=300,
    messages=[{'role': 'user', 'content': prompt}]
)
print(json.loads(r.content[0].text))

Çıkarmaya Tür Kısıtlamaları Ekleme

Temel çıkarma, varlık dizelerini döndürür. Tür kısıtlamaları doğrulama ekler; tarihlerin belirli bir biçimde olmasını ve kuruluşların yaygın sözcükleri içermemesini sağlar:

prompt_typed = '''
Extract named entities from the text below with type constraints.
Return JSON:
{
  "people": ["Full name as written in text"],
  "organizations": ["Official organization name only, no articles (the, a)"],
  "dates": ["ISO 8601 format if possible: YYYY-MM-DD, else exact text as written"],
  "money": ["Include currency symbol and amount: $4.2B, EUR 500K"],
  "locations": ["City, Country format if applicable"]
}
If a category has no entities, use an empty array [].

Text: {text}
'''

print(prompt_typed[:200])
print('\nConstraints enforce consistent output format per entity type.')

Şema Tabanlı Çıkarma

Üretim kullanımı için varlık şemasını önceden tanımlayın ve istemde ona başvurun. Bu, çıktı sözleşmesini açıkça belirtir:

ENTITY_SCHEMA = '''
{
  "entities": [
    {
      "text": "exact text as it appears in the document",
      "type": "PERSON | ORG | DATE | LOCATION | MONEY | PRODUCT | EVENT",
      "normalized": "canonical form (e.g., full name, ISO date)",
      "start_char": "integer, character offset in source text",
      "confidence": "high | medium | low"
    }
  ]
}
'''

def extract_entities(text):
    prompt = f'Extract all named entities. Return JSON matching this schema exactly:\n{ENTITY_SCHEMA}\n\nText: {text}'
    r = client.messages.create(
        model='claude-opus-4-5', max_tokens=500,
        messages=[{'role': 'user', 'content': prompt}]
    )
    return json.loads(r.content[0].text)

result = extract_entities('Tesla stock rose 5% after Elon Musk announced the Cybertruck delivery on December 1.')
print(result['entities'][0])

Belirsiz Varlıkları Ele Alma

Bazı varlık dizeleri belirsizdir — Apple şirket veya meyve olabilir, Jordan ise kişi veya ülke olabilir. Belirsizliği bağlamı kullanarak çözümlemesi için modeli yönlendirin:

prompt_disambiguation = '''
Extract named entities from the text. For ambiguous entities, use the surrounding
context to determine the correct type. Include your reasoning in an "evidence" field.

Return JSON:
{
  "entities": [
    {
      "text": "string",
      "type": "PERSON | ORG | LOCATION | OTHER",
      "evidence": "brief reason for type assignment"
    }
  ]
}

Text: Jordan and Apple signed a distribution deal for the new Air Jordan shoes.
'''

# Expected output: Jordan = PERSON (context: Air Jordan), Apple = ORG (context: signed a deal)
print(prompt_disambiguation)

Alan Tanımlarıyla Çıkarma

Alanınıza özgü özel varlık türleri için, modelin neyin varlık sayılacağını tam olarak bilmesi amacıyla istemde alan tanımları sağlayın:

prompt_custom = '''
Extract entities from the medical text below using these custom entity types:

Entity Types:
- MEDICATION: Any drug name, trade name, or generic name
- DOSAGE: Amounts and frequencies (mg, mcg, units/day)
- CONDITION: Diagnoses, symptoms, or medical conditions
- PROCEDURE: Medical tests, surgeries, or treatments
- PROVIDER: Doctor names and medical professionals

Return JSON: {"entities": [{"text": str, "type": str}]}

Text: Dr. Patel prescribed Metformin 500mg twice daily for Type 2 Diabetes.
A follow-up HbA1c test is scheduled for next month.
'''

print(prompt_custom)

Toplu Varlık Çıkarma

Birden fazla belgeyi işlemek için toplu çıkarma daha verimlidir. İstemi birden fazla girdiyi ele alacak ve her belge için yapılandırılmış bir sonuç döndürecek şekilde tasarlayın:

def batch_extract(documents):
    docs_formatted = '\n'.join(
        f'<document id="{i+1}">\n{doc}\n</document>'
        for i, doc in enumerate(documents)
    )

    prompt = f'''
Extract named entities from each document below.
Return JSON: {{
  "results": [
    {{"doc_id": int, "entities": {{"people": [], "organizations": [], "dates": []}}}}
  ]
}}

{docs_formatted}
'''

    r = client.messages.create(
        model='claude-opus-4-5', max_tokens=1000,
        messages=[{'role': 'user', 'content': prompt}]
    )
    return json.loads(r.content[0].text)

docs = [
    'Satya Nadella presented at Microsoft Build 2025.',
    'The WHO released guidelines on May 10.'
]
print(batch_extract(docs))

Çıkarılan Varlıkları Sonradan İşleme

Çıkarılan varlıkların kullanılmadan önce çoğu zaman sonradan işlenmesi gerekir:

from datetime import datetime

def normalize_entities(raw_entities):
    normalized = {'people': [], 'organizations': [], 'dates': [], 'money': []}

    for person in raw_entities.get('people', []):
        normalized['people'].append(person.strip().title())

    for org in raw_entities.get('organizations', []):
        normalized['organizations'].append(org.strip())

    for date_str in raw_entities.get('dates', []):
        # Try to parse to ISO format
        for fmt in ['%B %d, %Y', '%Y-%m-%d', '%b %d, %Y']:
            try:
                parsed = datetime.strptime(date_str.strip(), fmt)
                normalized['dates'].append(parsed.strftime('%Y-%m-%d'))
                break
            except ValueError:
                pass
        else:
            normalized['dates'].append(date_str.strip())

    return normalized

raw = {'people': ['tim cook', 'URSULA VON DER LEYEN'], 'dates': ['March 15, 2025']}
print(normalize_entities(raw))

Çıkarma Kalitesini Değerlendirme

NER kalitesi, etiketli bir sınama kümesine göre Kesinlik, Duyarlılık ve F1 puanıyla ölçülür:

  • Kesinlik: Çıkarılan tüm varlıkların ne kadarı doğrudur?
  • Duyarlılık: Gerçek varlıkların ne kadarı çıkarılmıştır?
  • F1: Kesinlik ve duyarlılığın harmonik ortalaması
def evaluate_extraction(predicted, ground_truth):
    pred_set = set(predicted)
    true_set = set(ground_truth)

    true_positives = len(pred_set & true_set)
    false_positives = len(pred_set - true_set)
    false_negatives = len(true_set - pred_set)

    precision = true_positives / (true_positives + false_positives) if pred_set else 0
    recall = true_positives / (true_positives + false_negatives) if true_set else 0
    f1 = 2 * precision * recall / (precision + recall) if (precision + recall) else 0

    return {'precision': round(precision, 3), 'recall': round(recall, 3), 'f1': round(f1, 3)}

predicted = ['Tim Cook', 'Apple', 'Brussels', 'March 15 2025']
ground_truth = ['Tim Cook', 'Apple', 'Ursula von der Leyen', 'Brussels', 'March 15, 2025', 'European Commission']
print(evaluate_extraction(predicted, ground_truth))

Halüsinasyonla Üretilen Varlıkları Azaltma

Modeller bazen kaynak metinde bulunmayan varlıkları, yani halüsinasyonları çıkarır. Azaltma stratejileri:

  • Şunu belirtin: Yalnızca metinde açıkça bahsedilen varlıkları çıkarın. Metinde bulunmayan varlıkları çıkarsamayın veya eklemeyin.
  • Şunu belirtin: Her varlık için, metinde göründüğü yerdeki tam alıntıyı ekleyin.
  • Sonradan işleyin: çıkarılan her varlık dizesinin gerçekten özgün metinde geçtiğini doğrulayın
def anti_hallucination_extract(text):
    prompt = f'''
Extract ONLY entities that are explicitly present in the text below.
Do NOT infer, add, or supplement with external knowledge.
For each entity, include the exact quote from the text.

Return JSON: {{"entities": [{{"text": str, "type": str, "quote": str}}]}}

Text: {text}
'''
    r = client.messages.create(model='claude-opus-4-5', max_tokens=400, messages=[{'role': 'user', 'content': prompt}])
    extracted = json.loads(r.content[0].text)

    # Post-process: verify each entity appears in original text
    verified = [e for e in extracted['entities'] if e['text'].lower() in text.lower()]
    return {'entities': verified}

result = anti_hallucination_extract('Google announced a $5B investment in AI infrastructure.')
print(result)

Gönderim Çözümleme ve Varlık Bağlama

Ham varlık dizelerini çıkardıktan sonra, sonraki işlemlerdeki faydayı artıran iki ek görev vardır:

  • Gönderim çözümleme: o, şirket ve bu ifadelerini gönderimde bulundukları adlandırılmış varlığa bağlama
  • Varlık bağlama: Çıkarılan adları standart tanımlayıcılara eşleme (örneğin, bir bilgi tabanında "Apple" → apple_sirketi)

Her iki görev de ilk çıkarmadan sonra ek bir istem adımıyla gerçekleştirilebilir.

coref_prompt = '''
Resolve coreferences in the text below.
For each pronoun or definite reference (he, she, it, the company, the CEO),
identify which named entity it refers to.

Return JSON: {"coreferences": [{"text": str, "refers_to": str, "position": int}]}

Text: Apple released its new chip. The company said it would ship in Q4.
Tim Cook announced that he would present it at the fall event.
'''

print(coref_prompt)

Hızlı Kontrol

Bir modelin kaynak metinde bulunmayan varlıkları çıkarmasını önlemenin en etkili yolu nedir?

Adlandırılmış Varlık Çıkarma — Temel Çıkarımlar

İstem iyi tasarlandığında LLM tabanlı adlandırılmış varlık çıkarma esnek ve güçlüdür:

  • Varlık türlerini açıkça tanımlayın — PERSON, ORG, DATE, LOCATION, MONEY ve alana özgü türler
  • Tutarlı bir çıktı yapısını zorunlu kılmak için istemde JSON şeması kullanın
  • Modelin neyin uygun olduğunu tam olarak bilmesi için özel varlık türlerine alan tanımları ekleyin
  • Varlık halüsinasyonlarını önlemek için kaynak alıntıları zorunlu tutun
  • Varlık biçimlerini normalleştirmek için sonradan işleyin (tarihleri ISO biçimine, adları başlık biçimine dönüştürün)
  • Kaliteyi, etiketli bir sınama kümesine göre kesinlik, duyarlılık ve F1 ile değerlendirin
  • Toplu işlemlerde bir çağrıda birden fazla belgeyi, belge başına yapılandırılmış çıktı üreterek işleyin

Sıkça Sorulan Sorular

“Adlandırılmış Varlık Çıkarma İstemleri” dersi ücretsiz mi?

Evet — “Adlandırılmış Varlık Çıkarma İstemleri” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve AI Prompt Engineering kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. AI Prompt Engineering kursu toplamda 4 dersten oluşur.

“Adlandırılmış Varlık Çıkarma İstemleri” dersinde ne öğreneceğim?

Yapılandırılmamış metinden adları, tarihleri, konumları ve özel varlıkları çıkarın. AI Prompt Engineering ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

AI Prompt Engineering öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te AI Prompt Engineering, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.

“Adlandırılmış Varlık Çıkarma İstemleri” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu AI Prompt Engineering dersinde kod yazıp çalıştırabilir miyim?

Evet. Her AI Prompt Engineering dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Adlandırılmış Varlık Çıkarma İstemleri
  2. Şema Odaklı Veri Çıkarma
  3. Metin Sınıflandırıcısı Olarak LLM
  4. Sınıflandırmada Güven ve Belirsizlik
← AI Prompt Engineering Sayfasına Dön