자연어처리(NLP) 20일차 (개체명 인식)

정민수
3 min readJul 2, 2019

--

2019.07.02

출처 : https://wikidocs.net/book/2155

핵심키워드

  • Named Entity Recognition

개체명 인식(Named Entity Recognition)

이번 챕터에서는 코퍼스로부터 각 개체(Entity)의 유형을 인식하는 개체명 인식(Named Entity Recognition)에 대해서 배운다. 개체명 인식을 사용하면 코퍼스로부터 어떤 단어가 사람, 장소, 조직 등을 의미하는 단어인지를 찾을 수 있다.

1. 개체명 인식(Named Entity Recognition)이란?

개체명 인식(Named Entity Recognition)이란 말 그대로 이름을 가진 개체(Named Entity)를 인식하겠다는 것을 의미한다. 좀 더 쉽게 설명하면, 어떤 이름을 의미하는 단어를 보고는 그 단어가 어떤 유형인지를 인식하는 것을 말한다.

예를 들어 도연이는 2018년에 골드만삭스에 입사했다. 라는 문장이 있을 때, 사람(Person), 조직(Organization), 시간(Time)에 대해 개체명 인식을 수행하는 모델이라면 다음과 같은 결과를 보여준다.

도연 - 사람
2018년 - 시간
골드만삭스 - 조직

여기서는 우선 개체명 인식의 정의부터 이해하기 위해 중간 과정을 생략했지만 개체명 인식 모델이 개체명을 인식하기 위해서는 보통은 전처리 과정이 필요하다. 문장 그대로 입력으로 넣어도 내부적으로 전처리까지 다 끝내고 개체명을 보여주는 모델이 있을 수 있겠지만, 많은 개체명 모델이 토큰화와 품사 태깅(POS Tagging, Part-Of-Speech Tagging) 전처리를 끝내고 난 상태를 입력으로 요구한다.

예제를 통해 개체명 인식을 이해해보자.

2. NLTK를 이용한 개체명 인식(Named Entity Recognition using NLTK)

NLTK에서는 개체명 인식기(NER chunker)를 지원하고 있으므로, 별도 개체명 인식기를 구현할 필요없이 NLTK를 사용해서 개체명 인식을 수행할 수 있다. 만약 아래의 실습에서 nltk.download(‘maxent_ne_chunker’), nltk.download(‘words’) 등의 설치를 요구하는 에러 문구가 뜬다면, 지시하는 대로 설치하면 된다.

from nltk import word_tokenize, pos_tag, ne_chunk
sentence = "James is working at Disney in London"
sentence = pos_tag(word_tokenize(sentence))
# 토큰화와 품사 태깅을 동시 수행
print(sentence)
[('James', 'NNP'), ('is', 'VBZ'), ('working', 'VBG'), ('at', 'IN'), ('Disney', 'NNP'), ('in', 'IN'), ('London', 'NNP')]
sentence = ne_chunk(sentence)
print(sentence)
(S
(PERSON James/NNP)
is/VBZ
working/VBG
at/IN
(ORGANIZATION Disney/NNP)
in/IN
(GPE London/NNP))

ne_chunk는 개체명을 태깅하기 위해서 앞서 품사 태깅(pos_tag)이 수행되어야 한다. 위의 결과에서 James는 PERSON(사람), Disney는 조직(ORGANIZATION), London은 위치(GPE)라고 정상적으로 개체명 인식이 수행된 것을 볼 수 있다.

--

--

정민수
정민수

No responses yet