NER
#
Find similar titles
Structured data
- Category
- Big Data
Table of Contents
개체명 인식(Named-Entity Recognition) #
개체명 인식이란? #
비정형 데이터인 문자열 내에서 개체명, 이를테면 이미 사회적으로 정의된 사람, 장소, 시간, 단위 등에 해당하는 단어(개체명)를 인식하여 추출 및 분류하는 기법이다. 쉽게 말해, 문서 내에 존재하는 단어(개체)를 보고, 그 단어가 어떤 유형에 해당하는지를 인식하는 기술이다. 개체명 인식은 정보 추출을 목적으로 발전하여, 현재는 자연어 처리, 정보 검색 등에 사용되고 있다.
예시)
철수[person]는 2021년 7월[time] 인실리코젠[organization]에 입사했다.
논문 “A Survey on Deep Learning for Named Entity Recognition”에서는 NER을 “문자열 안에서 NE의 위치를 알아내고, 사전 정의한 카테고리에 따라 알맞게 분류하는 작업”이라 정의한다. 즉, 문자열을 입력으로 받아 단어별로 해당되는 태그를 내뱉게 하는 multi-class 분류 작업으로 성격을 정의할 수 있다.
NLTK를 이용한 개체명 인식 #
Python 라이브러리 중 nltk에서 개체명 인식기(NER chunker)를 지원하므로, 별도의 구현 없이 간단하게 개체명 인식을 수행할 수 있다. 아래 코드 흐름을 따르면 NLTK를 활용하여 간단하게 개체명 인식을 할 수 있다.
- 라이브러리 임포트 & NER 대상 문자열 선언

- 문자열을 단어 단위로 토큰화 & 품사 태깅

- 토큰화 및 품사 태깅된 문자열에서 개체명 추출

위처럼 라이브러리를 활용하여 간단하게 문자열 내의 개체명을 추출할 수 있다. 하지만, 생물학, 의학 등 특정 도메인에 맞는 개체를 인식하기 위해서는, 위와 같은 방법보다는 lstm과 같은 인공지능 모델을 학습하여 개체명 인식기를 만들어 사용해야 한다. 비정형 데이터를 활용해 모델을 학습하기 위해서는 단어와 정답을 짝지어 주는, 이른바 태깅 작업이 필요한데, 그중에서도 가장 널리 사용되는 BIO 태깅 시스템을 알아보자.
개체명 인식에서 B-I-O tag #
BIO 태깅은 NER에서 보편적으로 사용되는 태깅 시스템이다. 개체명의 경우 하나의 단어뿐만 아니라 두 개 이상의 단어 합으로 만들어질 수 있기에 개체명의 시작 단어인지, 중간 단어인지, 아니면 개체로 인식되지 않는 단어인지 태깅이 필요하다. BIO 태깅에서 B는 begin의 약자, I는 inner의 약자, O는 outside의 약자이다. 단어 그대로 개체명의 시작 단어에는 B 태그를, 개체명에 포함되지만, 첫 단어가 아닌 경우 I 태그를, 개체명이 아닌 경우 O 태그를 부여한다. 아래 예제를 통해 BIO 태깅 시스템을 이해해보자.
예제)

위 예제 문장에서 hereditary breast cancers는 질병 개체에 해당되며, BRACA1, BRCA2는 각각 유전자 개체로 분류할 수 있다. 따라서 아래와 같이 각 단어에 B, I, O 태그를 부여할 수 있다. ‘breast’와 ‘cancers’의 경우, 개체명에 속하나 첫 단어가 아니기에 I 태그를 부여한다.

Reference #
- [네이버 지식백과] 개체명 인식 [Named-Entity Recognition, 個體名認識] (IT용어사전, 한국정보통신기술협회)
- https://wikidocs.net/24682
- https://stellarway.tistory.com/29
- https://lovit.github.io/nlp/2018/06/22/crf_based_ner/