[NLP Project] 형태소 tokenizer(2)

주혜린·2023년 8월 23일
0

[NLP Project]

목록 보기
3/3

konlpy tokenizer

  • konlpy는 한국어 자연어 처리 라이브러리이고, komoran은 konlpy를 통해 이용할 수 있는 형태소 분석기 중 하나이다.

[KOMORAN 사이트]
https://docs.komoran.kr/index.html

[komoran]

  • komoran을 사용하여 형태소 분석을 하면 아래와 같은 결과가 나온다.
    45개로 나뉜 기준을 따라 문장의 형태소가 토큰화된다.

sentence = '롯데 자이언츠의 거인 이대호(40)의 꿈이 무너져가고 있다. 이대호가 새해 40세 불혹(不惑)의 나이가 됐다. 불혹은 주위에서 어떤 일이 벌어져도 중심을 잃지 않고 자신만의 원칙을 지켜 나갈 수 있는 경지에 오르는 시기다. 이번 스토브리그에 롯데 구단에 걱정스러운 일이 벌어지고 있다. 그런데 이대호는 어떤 대외 활동도 하지 않고 침묵하며 조용히 개인 훈련에 집중하는 모습이다. 불혹이 돼서인가? 지난 2017년 1월24일이다. 벌써 5년의 시간이 흘렀다. 롯데의 프랜차이즈 스타 이대호가 일본프로야구 미국 메이저리그를 거쳐 고향팀 롯데로 돌아왔다. 그는 ‘조선의 4번타자’답게 단숨에 최고가 됐다. 삼성에서 FA가 된 최형우가 고향팀 KIA 타이거즈와 4년 계약을 하면서 기록한 총액 100억 원을 훨씬 넘어 150억 원에 롯데와 계약했다. 당시 인터뷰에서 이대호는 ‘메이저리그에서 열심히 노력해 꿈을 이루었다. 남은 것은 롯데로 돌아와 함께 우승을 하는 것이다. 마지막 소원이 롯데의 우승’이라고 밝혔다. 2001년 롯데에 2차 1순위로 입단해 2011시즌까지 11시즌 동안 이대호는 무려 225개의 홈런을 쏘아 올렸다. 그리고 2008~2011 시즌까지 4년 연속 롯데를 포스트시즌으로 이끌었으나 한국시리즈 우승을 못하고 일본 프로야구로 떠났다.'

from konlpy.tag import Komoran
komoran = Komoran()
tokens = komoran.pos(sentence)

--> 형태소 분석기를 이용하면 각 토큰별로 품사와 함께 토큰화 된 텍스트를 가져올 수 있다.
또한 "롯데 자이언츠"처럼 중간에 공백이 삽입된 명사도 고유명사로 잘 구분하는 모습을 보여준다.
"이대호가", "이대호는"과 같은 단어도 "이대호", "가", "이대호", "는"으로 분리해주어 의미 단위로 토큰을 잘 분리하는 모습을 보여준다.

  • 하지만 형태소 분석기는 신조어나 고유 명사에 상당히 취약한 모습을 보이기도 합니다.
    komoran 모델을 이용해 아래의 문장을 형태소 분석을 하면 고유명사로 분리되어야 하는 'SSG', '안우진' 등이 제대로 분해되지 못한것을 볼 수 있다.
sentence = "SSG 랜더스의 추신수 선수가 NC 다이노스의 안우진 선수를 상대로 홈런을 쳤습니다."
print(komoran.pos(sentence))

khaiii

  • "Kakao Hangul Analyzer III"의 첫 글자들만 모아 만든 이름으로 카카오에서 개발한 세 번째 형태소분석기이다.

[khaiii github]
https://github.com/kakao/khaiii

  • 설치방법은 다소 번거로우나 komoran 보다 정확도 측면에서 우수하다는 평가가 있어 똑같은 방법으로 시도해보았다.
sentence = '롯데 자이언츠의 거인 이대호(40)의 꿈이 무너져가고 있다. 이대호가 새해 40세 불혹(不惑)의 나이가 됐다. 불혹은 주위에서 어떤 일이 벌어져도 중심을 잃지 않고 자신만의 원칙을 지켜 나갈 수 있는 경지에 오르는 시기다. 이번 스토브리그에 롯데 구단에 걱정스러운 일이 벌어지고 있다. 그런데 이대호는 어떤 대외 활동도 하지 않고 침묵하며 조용히 개인 훈련에 집중하는 모습이다. 불혹이 돼서인가? 지난 2017년 1월24일이다. 벌써 5년의 시간이 흘렀다. 롯데의 프랜차이즈 스타 이대호가 일본프로야구 미국 메이저리그를 거쳐 고향팀 롯데로 돌아왔다. 그는 ‘조선의 4번타자’답게 단숨에 최고가 됐다. 삼성에서 FA가 된 최형우가 고향팀 KIA 타이거즈와 4년 계약을 하면서 기록한 총액 100억 원을 훨씬 넘어 150억 원에 롯데와 계약했다. 당시 인터뷰에서 이대호는 ‘메이저리그에서 열심히 노력해 꿈을 이루었다. 남은 것은 롯데로 돌아와 함께 우승을 하는 것이다. 마지막 소원이 롯데의 우승’이라고 밝혔다. 2001년 롯데에 2차 1순위로 입단해 2011시즌까지 11시즌 동안 이대호는 무려 225개의 홈런을 쏘아 올렸다. 그리고 2008~2011 시즌까지 4년 연속 롯데를 포스트시즌으로 이끌었으나 한국시리즈 우승을 못하고 일본 프로야구로 떠났다.'

from khaiii import KhaiiiApi
api = KhaiiiApi()
for word in api.analyze(sentence):
    print(word)

--> 위에서 사용했던 문장을 똑같이 사용하여 형태소 분석한 결과 큰 차이를 보이는 것 같지 않았다.
  • 아래도 같은 문장을 사용하여 형태소 분석을 해보았다.
sentence = "SSG 랜더스의 추신수 선수가 NC 다이노스의 안우진 선수를 상대로 홈런을 쳤습니다."

for word in api.analyze(sentence):
    print(word)

--> 여전히 'SSG', '안우진'을 고유명사로 인식하지 못하는 모습을 보였다.

Insight

  • 형태소 분석에 있어 komoran과 khaiii의 성능 차이를 느끼지는 못했다.
    한글 데이터를 NLP 하는데 있어 모델의 성능을 올리기 위해서는 고유 명사를 직접 지정하는 사용자 사전 기능으로 극복하는 방법을 사용하는게 가장 도움이 될 것 같다.
profile
💻🐜💡

0개의 댓글