Nimettyjen entiteettien poimintapromptit
Poimikaa jäsentämättömästä tekstistä nimiä, päivämääriä, sijainteja ja mukautettuja entiteettejä.
Nimettyjen entiteettien poimintapromptit on ilmainen Tekoälyn prompt engineering-oppitunti CoddyKitissä. Tämä on oppitunti 1/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Tekoälyn prompt engineering-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Tekoälyn prompt engineering-kurssilla on yhteensä 4 oppituntia.
Mitä nimettyjen entiteettien poiminta tarkoittaa
Nimettyjen entiteettien poiminta (NER) tarkoittaa tekstissä mainittujen tiettyjen tosimaailman entiteettien tunnistamista ja luokittelua. Perinteisessä NLP:ssä NER toteutetaan tilastollisilla malleilla; LLM:t pystyvät siihen hyvin suunnitellun kehotteen avulla.
Yleisiä entiteettityyppejä:
- PERSON: Henkilöiden nimet (Elon Musk, Dr. Jane Smith)
- ORG: Yritykset ja organisaatiot (Apple, WHO)
- DATE: Päivämäärät ja ajanilmaukset (15. tammikuuta, viime tiistaina, vuoden 2024 kolmas neljännes)
- LOCATION: Paikat (New York, Amazonjoki)
- MONEY: Rahamäärät (4,2 miljardia dollaria)
NER:n peruskehote
Yksinkertaisin NER-kehote pyytää kaikkia entiteettejä tietyssä muodossa:
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))Tyyppirajoitusten lisääminen poimintaan
Peruspoiminta palauttaa entiteettimerkkijonot. Tyyppirajoitukset lisäävät validoinnin — niiden avulla varmistetaan, että päivämäärät ovat tietyssä muodossa ja että organisaatioista jätetään yleiset sanat pois:
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.')Skeemalähtöinen poiminta
Määritelkää tuotantokäyttöä varten entiteettiskeema etukäteen ja viitatkaa siihen kehotteessa. Näin tulosteen sopimus määritellään yksiselitteisesti:
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])Monitulkintaisten entiteettien käsittely
Jotkin entiteettimerkkijonot ovat monitulkintaisia — Apple voi tarkoittaa yritystä tai hedelmää, ja Jordan voi tarkoittaa henkilöä tai valtiota. Ohjatkaa mallia ratkaisemaan tulkinta asiayhteyden avulla:
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)Poiminta kenttämääritelmien avulla
Jos tarvitsette toimialakohtaisia mukautettuja entiteettityyppejä, antakaa kenttämääritelmät kehotteessa, jotta malli tietää täsmälleen, mikä lasketaan entiteetiksi:
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)Entiteettien eräpoiminta
Useiden asiakirjojen käsittelyssä eräpoiminta on tehokkaampaa. Suunnitelkaa kehote käsittelemään useita syötteitä ja palauttamaan jokaisesta asiakirjasta jäsennelty tulos:
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))Poimittujen entiteettien jälkikäsittely
Poimitut entiteetit tarvitsevat usein jälkikäsittelyä ennen käyttöä:
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))Poiminnan laadun arviointi
NER:n laatua mitataan täsmällisyyden, kattavuuden ja F1-arvon avulla merkityllä testijoukolla:
- Täsmällisyys: Mikä osuus kaikista poimituista entiteeteistä on oikein?
- Kattavuus: Mikä osuus kaikista todellisista entiteeteistä poimittiin?
- F1: Täsmällisyyden ja kattavuuden harmoninen keskiarvo
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))Hallusinoitujen entiteettien vähentäminen
Mallit poimivat joskus entiteettejä, joita lähdetekstissä ei ole — kyse on hallusinaatioista. Lieventämisstrategioita:
- Ohjeistakaa: Poimikaa vain tekstissä nimenomaisesti mainitut entiteetit. Älkää päätelkö tai lisätkö entiteettejä, joita tekstissä ei ole.
- Ohjeistakaa: Lisätkää jokaiseen entiteettiin täsmällinen tekstisitaatti, jossa se esiintyy.
- Jälkikäsitelkää: varmistakaa, että jokainen poimittu entiteettimerkkijono esiintyy todella alkuperäisessä tekstissä
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)Koreferenssi ja entiteettien linkitys
Raakojen entiteettimerkkijonojen poiminnan jälkeen kaksi lisätehtävää parantaa niiden hyödyllisyyttä jatkokäsittelyssä:
- Koreferenssin ratkaisu: Yhdistäkää ilmaukset hän, yritys ja se niiden tarkoittamaan nimettyyn entiteettiin
- Entiteettien linkitys: Yhdistäkää poimitut nimet kanonisiin tunnisteisiin (esimerkiksi "Apple" → apple_inc tietämyskannassa)
Molemmat voidaan toteuttaa ensimmäisen poiminnan jälkeen lisättävänä kehotteen vaiheena.
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)Pikatarkistus
Mikä on tehokkain tapa estää mallia poimimasta entiteettejä, joita lähdetekstissä ei ole?
Nimettyjen entiteettien poiminta — tärkeimmät opit
LLM-pohjainen nimettyjen entiteettien poiminta on joustavaa ja tehokasta, kun kehote on suunniteltu hyvin:
- Määritelkää entiteettityypit yksiselitteisesti — PERSON, ORG, DATE, LOCATION, MONEY sekä toimialakohtaiset tyypit
- Käyttäkää kehotteessa JSON-skeemaa yhdenmukaisen tulosterakenteen varmistamiseksi
- Lisätkää mukautetuille entiteettityypeille kenttämääritelmät, jotta malli tietää täsmälleen, mikä niihin kuuluu
- Vaatikaa lähdetekstin sitaatteja entiteettien hallusinoinnin estämiseksi
- Jälkikäsitelkää tiedot entiteettien muotojen yhdenmukaistamiseksi (päivämäärät ISO-muotoon, nimet otsikkokirjaimille)
- Arvioikaa laatua täsmällisyyden, kattavuuden ja F1-arvon avulla merkityn testijoukon perusteella
- Käsitelkää erissä useita asiakirjoja yhdellä kutsulla ja palauttakaa kustakin asiakirjasta jäsennelty tulos
Opi Tekoälyn prompt engineering tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 53
- Oppitunnit
- 199
Usein kysytyt kysymykset
Onko oppitunti ”Nimettyjen entiteettien poimintapromptit” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Tekoälyn prompt engineering-oppimispolun 3 oppituntia, myös oppitunnin “Nimettyjen entiteettien poimintapromptit”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Tekoälyn prompt engineering-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Nimettyjen entiteettien poimintapromptit”?
Poimikaa jäsentämättömästä tekstistä nimiä, päivämääriä, sijainteja ja mukautettuja entiteettejä. Harjoittelet Tekoälyn prompt engineering-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Tekoälyn prompt engineering-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Tekoälyn prompt engineering-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/4.
Kuinka kauan ”Nimettyjen entiteettien poimintapromptit”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Tekoälyn prompt engineering-oppitunnilla?
Kyllä. Jokainen Tekoälyn prompt engineering-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Nimettyjen entiteettien poimintapromptit
- Skeemalähtöinen tietojen poiminta
- LLM tekstiluokittelijana
- Luottamus ja epävarmuus luokittelussa