Python/NLP Code

파이썬 개체명 태깅(NER Tagging) 방법 정리(nltk, spacy)

jimmy_AI 2022. 11. 9. 17:47
반응형

지난번에 nltk 및 spacy 모듈을 통하여 품사 태깅(POS Tagging) 방법을 다루었던 글에 이어

이번에는 두 모듈로 개체명 태깅(NER Tagging)을 진행하는 방법을 살펴보도록 하겠습니다.

 

품사 태깅 방법과 관련된 내용은 아래 글을 참고해주세요.

 

파이썬 품사 태깅(POS Tagging) 방법 정리(nltk, spacy)

파이썬에서 각 단어 토큰의 품사 종류를 찾는 pos tagging을 nltk와 spacy 모듈을 통하여 진행하는 방법에 대하여 정리해보도록 하겠습니다. nltk를 활용한 POS Tagging 방법 먼저, nltk 모듈 설치가 진행되

jimmy-ai.tistory.com

 

 

nltk를 활용한 NER Tagging 방법

nltk에서 개체명 태깅을 진행하려면 품사 태깅이 선행되어야 하므로,

이를 포함하여 아래의 코드로 필요한 패키지들을 먼저 설치해야 합니다.

!pip install nltk # 참고 : nltk 모듈 미설치 시

import nltk
nltk.download('punkt')
nltk.download('averaged_perceptron_tagger')
nltk.download('maxent_ne_chunker')
nltk.download('words')

 

이후, 문장에 대하여 토큰화 -> 품사 태깅 -> NER 태깅 순서로 진행해주면 되는데,

이를 위한 코드는 다음과 같습니다.

from nltk import word_tokenize, pos_tag, ne_chunk

sentences = "Tom was born in New York, 2020"
result = ne_chunk(pos_tag(word_tokenize(sentences))) # 토큰화 -> 품사 태깅 -> NER 태깅 순서

print(result)

# 출력 결과
(S
  (PERSON Tom/NNP)
  was/VBD
  born/VBN
  in/IN
  (GPE New/NNP York/NNP)
  ,/,
  2020/CD)

 

위 예시 문장에서 Tom에는 PERSON 개체명이, New와 York에서는 GPE 개체명

할당된 것을 확인하실 수 있습니다.

 

참고로, 개체명 목록은 OntoNotes 5.0의 기준을 따르는데,

아래 문서의 21~22 페이지를 참고해주시면 됩니다.

https://catalog.ldc.upenn.edu/docs/LDC2013T19/OntoNotes-Release-5.0.pdf

 

반응형

 

spacy를 활용한 NER Tagging 방법

spacy에서는 모델에 직접 input으로 feed할 수 있는 형태인 BIO 표현을 포함한 NER 태깅을

손쉽게 진행할 수 있습니다.

 

참고로, BIO 표현은 B는 개체명을 가지기 시작하는 토큰, I는 개체명이지만 시작은 아닌 토큰,

O는 개체명이 아닌 토큰을 의미합니다.

 

spacy를 활용하여 BIO 표현 및 NER 타입을 토큰마다 출력한 예시 코드는 다음과 같습니다.

!pip install spacy # 참고 : spacy 모듈 미설치 시

import spacy

sentences = "Tom was born in New York, 2020"

nlp = spacy.load("en_core_web_sm")
doc = nlp(sentences)

for token in doc:
    print(f'token : {token.text:}, ent_job : {token.ent_iob_}, ent_type : {token.ent_type_}')