분석하고싶은코코

개체명 인식(NER)_(1)품사태깅 본문

머신러닝&딥러닝/NLP

개체명 인식(NER)_(1)품사태깅

코코로코코 2023. 9. 20. 13:35
반응형

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

개체명 인식이란 이름을 가진 개체(Named Entity)를 인식하겠다는 의미이다. 쉽게 이야기하면 어떤 이름을 보고 어떤 유형의 단어인지를 판단하는 것이다. 예를 들어 '혜린은 2022년에 데뷔한 뉴진스라는 그룹 소속이다'라는 문장이 있다. 여기서 개체명은 다음과 같다.

1. 혜린 - 사람(person)

2. 2022년 -  시간(time)

3. 뉴진스 - 조직(organization)

 

그렇다면 '혜린', '2022년', '뉴진스'라는 단어를 컴퓨터가 각각 사람, 시간, 조직으로 어떻게 판단할까?? 이는 품사 태깅을 통해 컴퓨터에게 학습을 시켜줄 수 있다. 그렇게 하기 위해서는 기본적으로 품사태깅에 대한 방법을 알아야한다.

 

 

품사태깅

 

1) NLTK

우선 NLTK에서 지원해주는 토크나이저로 단어를 토큰화하고 품사 태깅까지 진행한다.

from nltk import word_tokenize, pos_tag, ne_chunk

sentence = "James is working at Disney in London"

# 토큰화 후 품사 태깅
tokenized_sentence = pos_tag(word_tokenize(sentence))
print(tokenized_sentence)
[('James', 'NNP'), ('is', 'VBZ'), ('working', 'VBG'), ('at', 'IN'), ('Disney', 'NNP'), ('in', 'IN'), ('London', 'NNP')]

 

2) KoNLPy

 

NLTK는 기본적으로 한국어 자연처리를 위한 패키지가 아니다. 따라서 한국어에 대한 자연어처리를 위해서는 그에 맞는 패키지를 사용할 필요가 있다. 그게 KoNLPy이다. KoNLPy에서 제공해주는 Okt, Mecab을 통해서 품사태깅은 내장 함수를 사용해 처리가 가능하다.

from konlpy.tag import Okt, Mecab

# Okt, Mecab 초기화
okt = Okt()
mecab = Mecab()

sentence = '서울특별시는 한국의 수도이다.'

# pos 내장 함수를 사용해 태깅작업
okt_sentence = okt.pos(sentence)
mecab_sentence = mecab.pos(sentence)

print('Okt POS TAG : ', okt_sentence)
print('Mecab POS TAG : ', mecab_sentence)
Okt POS TAG :  [('서울특별시', 'Noun'), ('는', 'Josa'), ('한국', 'Noun'), ('의', 'Josa'), ('수도', 'Noun'), ('이다', 'Josa'), ('.', 'Punctuation')]
Mecab POS TAG :  [('서울', 'NNP'), ('특별시', 'NNG'), ('는', 'JX'), ('한국', 'NNP'), ('의', 'JKG'), ('수도', 'NNG'), ('이', 'VCP'), ('다', 'EF'), ('.', 'SF')]

 

결과에서 보면 두 모듈의 품사 태깅 결과가 다르게 나오는데 이는 사용하는 모듈에 따라 각각 다르게 나온다. 즉 개체명인식을 위해서 본인에게 맞는 모듈을 선택하거나 아니면 직접 전처리와 태깅작업을 거치는 작업을 해줘야한다. 모델의 보다 정확한 결과를 원한다면 당연히 특정 모듈에 의존하기보다 직접 태깅작업을 해주는게 가장 좋은 방법이다.

 

 

반응형