이 함수는 NER 모델을 실행하지 않는다. 사용자가 제공한 개체명 사전을 문장에서 찾아
참조 개체명 span의 Entity CER와 정확한 언급 기준 precision, recall, F1을 계산한다.
import nlptutti as nt
report = nt.evaluate_entities(
["삼성전자의 갤럭시 S26 발표"],
["삼성전다의 갤럭시 에스 이십육 발표와 애플"],
{
"ORG": ["삼성전자", "애플"],
"PRODUCT": ["갤럭시 S26"],
},
aliases={
"갤럭시 S26": ["갤럭시 에스 이십육"],
},
)
print(report["entity_cer"]["micro"]) # 0.1
print(report["summary"]["f1"]) # 0.5
print(report["labels"]["PRODUCT"]["f1"]) # 1.0
print([(e["type"], e["entity"]) for e in report["errors"]])
# [("misrecognition", "삼성전자"), ("addition", "애플")]
결과 읽기
- entity_cer.micro: 모든 참조 개체명 span의 편집 횟수를 합쳐 계산한다.
- entity_cer.macro: 참조 개체명 언급별 CER를 동일한 가중치로 평균한다.
- 계산식 선택: 기본
normalized는 기존 패키지 호환용이다. 논문의 NE-WER처럼 참조 개체명 문자 수를 분모로 보고할 때는 rate_mode="standard"를 지정한다.
- summary: 개체명 언급의 precision, recall, F1과 false positive, false negative를 제공한다.
- labels: ORG, PERSON, PRODUCT처럼 사용자가 지정한 유형별 결과를 제공한다.
- errors: omission, addition, misrecognition과 해당 문장 인덱스 및 편집 횟수를 보여준다.
한국어와 별칭 정책
- 개체명 내부 띄어쓰기와 기본 조사·어미 결합을 허용하며, 조사는 개체명 span에 포함하지 않는다.
aliases를 생략하면 정확한 개체명 표기만 인정한다. 발음 유사도나 퍼지 매칭은 적용하지 않는다.
- 숫자 읽기나 영문 표기의 허용 가능한 전사형처럼 실제로 같은 개체인 경우에만 별칭을 등록한다.
- 별칭은 문자 정렬 전에 대표 개체명으로 바뀌므로 등록된 별칭의 Entity CER는
0.0이다.
- 참조에 없는 개체명 추가는 Entity CER가 아니라 precision/F1과
addition 오류로 확인한다.
왜 두 점수를 함께 보나
LREC 2016의 NE-WER 연구는
전체 WER 대신 참조 개체명 span에 속한 오류를 따로 계산한다. Nlptutti는 한국어의 불안정한
단어 경계를 줄이기 위해 이 개념을 문자 단위 Entity CER로 독립 구현했다. 이는 특정 논문이나 공개 구현을
그대로 포팅한 지표가 아니며, 다른 구현과 점수가 같다는 의미도 아니다.
다만 참조 span 밖에 새로 생긴 개체명은 이 CER에 포함되지 않으므로 언급 precision/F1을 함께 반환한다.
NAACL 2025의 Spoken NER 연구도
개체명 오류율을 전체 WER의 대체제가 아닌 보완 지표로 설명한다. 따라서 보고서에는 전체 CER,
Entity CER, 개체명 F1과 평가 정책을 함께 기록하는 것이 좋다.