BIO 태그가 뭔지부터 짚자

NER(Named Entity Recognition, 개체명 인식)의 근본 문제는 이거다.

“삼성전자 이재용 회장이” 이 문장에서 어디서부터 어디까지가 하나의 엔티티(entity, 사람/조직/장소 같은 고유 대상)인지 어떻게 표시하냐?

모델 입장에서 텍스트는 그냥 토큰(token, 단어보다 작은 분석 단위) 나열이다. “삼성전자”가 한 덩어리인지, “삼성”과 “전자”가 별개인지 모델이 구분할 방법이 필요하다. 그걸 해결하려고 도입된 게 BIO 태그다.


B / I / O 각각의 의미

태그언제 붙이나
BBegin엔티티의 첫 번째 토큰
IInside엔티티의 이어지는 토큰
OOutside엔티티가 아닌 토큰

실제 예시로 감 잡기

삼  성  전  자    이  재  용    회장  이
B   I   I   I    B   I   I     O    O
ORG ORG ORG ORG  PER PER PER
  • “삼성전자” → B-ORG, I-ORG, I-ORG, I-ORG (토큰 4개지만 하나의 덩어리)
  • “이재용” → B-PER, I-PER, I-PER (토큰 3개지만 한 명의 인물)
  • “회장이” → O (일반 단어)

왜 굳이 이렇게 나누냐

“엔티티다/아니다” 이진 분류만 하면 되지 않냐 싶을 수 있는데, 그러면 “삼성전자” 바로 뒤에 “이재용”이 붙어나올 때 두 엔티티 경계를 구분 못한다. B 태그가 “여기서부터 새 엔티티 시작”이라는 신호를 주는 역할이다.


모델이 실제로 하는 일

BERT(Bidirectional Encoder Representations from Transformers, 양방향 트랜스포머 인코더 모델) 같은 모델은 각 토큰을 읽고 그 토큰에 B-PER / I-PER / B-ORG / I-ORG / O 중 하나를 분류한다. 토큰 분류(Token Classification) 태스크라서 경량으로 돌아간다. 문장 전체를 생성할 필요 없이 토큰마다 레이블 하나만 찍으면 되니까.

한마디 요약

BIO 태그는 토큰 단위로 “엔티티 시작(B)/이어짐(I)/아님(O)“을 찍어 경계를 표시하는 방식이다.