한글 언어 자원과 R: KoNLP 개선과 활용

21
KoNLP 개선과 활용 SKT 데이터 분석가/KoNLP 개발자 전희원

Transcript of 한글 언어 자원과 R: KoNLP 개선과 활용

Page 1: 한글 언어 자원과 R: KoNLP 개선과 활용

KoNLP 개선과 활용

SKT 데이터 분석가/KoNLP 개발자 전희원

Page 2: 한글 언어 자원과 R: KoNLP 개선과 활용

이들의 공통점?• 워드 클라우드 예제

• 안철수 교수 대선 출마 선언문 텍스트 요약• 국정원 의심 계정 트윗 분석

• 단어간의 연관 관계 분석• 북한 신년사 비교 예제를 통한 텍스트 분석의 이해• 대하드라마 정도전 분석 사례• 한국사회의 성별갈등을 데이터로 알아보았다.

• 학술 연구(교육, 사회, 정치학 관련 )

• https://scholar.google.co.kr/scholar?q=KoNLP

• 책• 데이터 시각화 (허명회 저)

• R로하는 데이터 시각화 (전희원 저)

• R까기, R라뷰(서진수 저)

• 신입 탐정의 데이터 분석 입문 (이시다 모토히로 저)

• 소프트웨어• KoNLPy

• http://konlpy-ko.readthedocs.io/ko/v0.4.3/

• Rtextrankr

• https://cran.r-project.org/web/packages/Rtextrankr/index.html

Page 3: 한글 언어 자원과 R: KoNLP 개선과 활용

KoNLP : Korean NLP Package

Page 4: 한글 언어 자원과 R: KoNLP 개선과 활용

한글 처리의 특수성

• 자연어 처리는 대상어에 따라 분석 방식이 상당히 달라진다.

• 한국어• 1개 이상의 형태소가 한 어절을 이루고 있다.

• 형태소(morpheme) : 더 이상 분석하면 의미를 잃어버리는 말의 단위예) 마을(village) -> 마 + 을 (더 이상 의미가 없어진다.)

• 형태소 분석의 모호성• 감기는: (N 감기)+(J 는), (V 감)+(E 기)+(J 는), (V 감기)+(E 는), ...

• 형태소 분석의 필요성• 최소 어절의 정규화

• 감기는, 감기고, 감기어…. -> 감기 로 정규화• 검색 서비스, 기계번역, 스팸필터 등 텍스트 기반의 모든 서비스에는

반드시 필요한 과정

Page 5: 한글 언어 자원과 R: KoNLP 개선과 활용

통계적 품사 태깅 한 문장을 이루는 어절열 w1,n이 주어졌을 때, 가장 확률이 높은 태그열 t1,n을 구

일반적인 통계 기반 모델에서 tag의 확률 이전의 history에 대한 조건부 확률로 구함

현실적으로는 전체 history에 대해 조건부확률을 구하는 것이 불가능

∴ n-gram 모델을 도입하여 국부적인 문맥(local context)을 이용

HMM

),(maxarg)(

),(maxarg

)|(maxarg)(

,1,1

,1

,1,1

,1,1,1

,1,1

,1

nntn

nn

t

nnt

n

wtPwP

wtP

wtPwT

nn

n

),|( 1,1,1 qqq twtP

Page 6: 한글 언어 자원과 R: KoNLP 개선과 활용

KoNLP

KoNLP 구조

한나눔 형태소 분석라이브러리 for KoNLP

한글 코퍼스 분석 도구

• KoNLP에 최적화 시킨 한나눔 형태소 분석기• 문장 분리기, 부적합 어절 필터 등• 대용량 사전 로딩 가능

• Concordance, Mutual Information 등

System 사전

Sejong NIADic

Dictionary Interface tools

From : 한나눔 형태소 분석기 사용자 매뉴얼

Page 7: 한글 언어 자원과 R: KoNLP 개선과 활용

KoNLP : Korean NLP Package

• R 패키지로는 유일한 한글 텍스트 전처리 도구

• openNLP, RKEA, Snowball 등 영문 전용 텍스트 전처리 도구 위주

• 라이브러리로 제공하는 기존 형태소 분석기와는 다르게 ….

• 한글 텍스트 분석에 자주 쓰이는 기능 위주 인터페이스 제공

• 한글 분석에 대해 특별한 배경 지식 없이 간단한 함수로

사용가능

• 형태소 분석 및 POS Tagging 결과를 튜닝할 수 있는 사용자 사전

입력 인터페이스 제공

• 연구 분야별 사전 적용 가능, 연구자들의 활용도 높음

• 현재 시스템사전(28만) , 세종사전(8만), NIADic(93만) 사전을

제공하고 있음.

Page 8: 한글 언어 자원과 R: KoNLP 개선과 활용

KoNLP v.0.80.0 개선 포인트

기존의 버그 수정/개선빈번한 사전 데이터 호출로 인한 out of memory

대기큐로 인한 Infinite loop 현상

대용량(100만 이상 형태소) 사전 적용메모리 사용 효율 고도화

저사양 유저들도 고품질의 사전을 활용할 수 있게

유연한 사전 활용 기반 제공

텍스트 전처리 플러그인 개발문장 경계 인식비정상 어절 필터띄어쓰기 플러그인

Page 9: 한글 언어 자원과 R: KoNLP 개선과 활용

OutofMemory!

• 비효율적인 메모리 관리로 인한 OutofMemory 빈번• 100만 단어 이상의 사전을 로딩하기 위해서 해결해야 되는 문제

• 개선을 통해 저사양 PC에서도 전체 130만 단어를 모두 로딩 후 분석 가능

Total: 344.3 MB Total: 176.6 MB

갤럭시S5

CPU

Page 10: 한글 언어 자원과 R: KoNLP 개선과 활용

Slow?!

느림

SimplePos09() -> SimplePos22() -> extractNoun()

빠름

extractNoun() -> extractNoun() -> extractNoun()

동일 함수를 여러 번 구동하는 사용패턴에 최적화

Page 11: 한글 언어 자원과 R: KoNLP 개선과 활용

More dictionary and Category!

NIADic을 통한 36만 -> 130만 형태소 사전 보강

우리말샘 사전(58만), 인사이터 사전(35만)

Page 12: 한글 언어 자원과 R: KoNLP 개선과 활용

우리말샘 인사이터

Page 13: 한글 언어 자원과 R: KoNLP 개선과 활용

• 40개 -> 82개 어절 단위 형태소• 기존 2배 이상의 형태소 후보군 도출

Page 14: 한글 언어 자원과 R: KoNLP 개선과 활용

Exporting Dictionary

• 형태소 사전의 txt 파일 다운로드 인터페이스 제공• 타 형태소 분석기에 사전 데이터 활용 가능

Page 15: 한글 언어 자원과 R: KoNLP 개선과 활용

문장 경계 인식 플러그인

Page 16: 한글 언어 자원과 R: KoNLP 개선과 활용

자동 띄어쓰기(개발중)

75만 문장을 기반으로 학습된 띄어쓰기 엔

진 (한국일보 코퍼스, 세종 코퍼스..)

유니그램, 바이그램 HMM

Page 17: 한글 언어 자원과 R: KoNLP 개선과 활용

Etc

useNIAdic()

Support Scala plugins

SQLite based dictionary management

Solving infinite wait of results with abnormal sentence.

Adding Hangul vignette

Page 18: 한글 언어 자원과 R: KoNLP 개선과 활용

Schedule

~ 11.20

KoNLP v.0.80.0 CRAN 등록

패키지 용량 이슈, vignette 한글 이슈 등등

~ 12.05

자동 띄어쓰기 교정 플러그인 구현/적용

사용자 정의 사전 강제 적용 옵션 구현

~

RNN POS Tagger plugins

Page 19: 한글 언어 자원과 R: KoNLP 개선과 활용

How to use KoNLP

• How to Install

• To install from CRAN

• Install.package(“KoNLP”)

• To install from github

• Install.package(“devtools”)

• devtools::install_github(“haven-jeon/KoNLP”)

• Functions

• vignette(“KoNLP-API”)

Page 20: 한글 언어 자원과 R: KoNLP 개선과 활용

KoNLP v0.80.0 Tutorial

Page 21: 한글 언어 자원과 R: KoNLP 개선과 활용

Q&A

• https://github.com/haven-jeon/KoNLP

• https://github.com/haven-jeon/Sejong

• https://github.com/haven-jeon/NIADic