BIO 태그가 뭔지부터 짚자
NER(Named Entity Recognition, 개체명 인식)의 근본 문제는 이거다.
“삼성전자 이재용 회장이” 이 문장에서 어디서부터 어디까지가 하나의 엔티티(entity, 사람/조직/장소 같은 고유 대상)인지 어떻게 표시하냐?
모델 입장에서 텍스트는 그냥 토큰(token, 단어보다 작은 분석 단위) 나열이다. “삼성전자”가 한 덩어리인지, “삼성”과 “전자”가 별개인지 모델이 구분할 방법이 필요하다. 그걸 해결하려고 도입된 게 BIO 태그다.
B / I / O 각각의 의미
| 태그 | 뜻 | 언제 붙이나 |
|---|---|---|
| B | Begin | 엔티티의 첫 번째 토큰 |
| I | Inside | 엔티티의 이어지는 토큰 |
| O | Outside | 엔티티가 아닌 토큰 |
실제 예시로 감 잡기
삼 성 전 자 이 재 용 회장 이
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)“을 찍어 경계를 표시하는 방식이다.