한글 언어 자원과 R: KoNLP 개선과 활용
-
Upload
r-kor -
Category
Data & Analytics
-
view
280 -
download
11
Transcript of 한글 언어 자원과 R: KoNLP 개선과 활용
KoNLP 개선과 활용
SKT 데이터 분석가/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
KoNLP : Korean NLP Package
한글 처리의 특수성
• 자연어 처리는 대상어에 따라 분석 방식이 상당히 달라진다.
• 한국어• 1개 이상의 형태소가 한 어절을 이루고 있다.
• 형태소(morpheme) : 더 이상 분석하면 의미를 잃어버리는 말의 단위예) 마을(village) -> 마 + 을 (더 이상 의미가 없어진다.)
• 형태소 분석의 모호성• 감기는: (N 감기)+(J 는), (V 감)+(E 기)+(J 는), (V 감기)+(E 는), ...
• 형태소 분석의 필요성• 최소 어절의 정규화
• 감기는, 감기고, 감기어…. -> 감기 로 정규화• 검색 서비스, 기계번역, 스팸필터 등 텍스트 기반의 모든 서비스에는
반드시 필요한 과정
통계적 품사 태깅 한 문장을 이루는 어절열 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
KoNLP
KoNLP 구조
한나눔 형태소 분석라이브러리 for KoNLP
한글 코퍼스 분석 도구
• KoNLP에 최적화 시킨 한나눔 형태소 분석기• 문장 분리기, 부적합 어절 필터 등• 대용량 사전 로딩 가능
• Concordance, Mutual Information 등
System 사전
Sejong NIADic
Dictionary Interface tools
From : 한나눔 형태소 분석기 사용자 매뉴얼
KoNLP : Korean NLP Package
• R 패키지로는 유일한 한글 텍스트 전처리 도구
• openNLP, RKEA, Snowball 등 영문 전용 텍스트 전처리 도구 위주
• 라이브러리로 제공하는 기존 형태소 분석기와는 다르게 ….
• 한글 텍스트 분석에 자주 쓰이는 기능 위주 인터페이스 제공
• 한글 분석에 대해 특별한 배경 지식 없이 간단한 함수로
사용가능
• 형태소 분석 및 POS Tagging 결과를 튜닝할 수 있는 사용자 사전
입력 인터페이스 제공
• 연구 분야별 사전 적용 가능, 연구자들의 활용도 높음
• 현재 시스템사전(28만) , 세종사전(8만), NIADic(93만) 사전을
제공하고 있음.
KoNLP v.0.80.0 개선 포인트
기존의 버그 수정/개선빈번한 사전 데이터 호출로 인한 out of memory
대기큐로 인한 Infinite loop 현상
대용량(100만 이상 형태소) 사전 적용메모리 사용 효율 고도화
저사양 유저들도 고품질의 사전을 활용할 수 있게
유연한 사전 활용 기반 제공
텍스트 전처리 플러그인 개발문장 경계 인식비정상 어절 필터띄어쓰기 플러그인
OutofMemory!
• 비효율적인 메모리 관리로 인한 OutofMemory 빈번• 100만 단어 이상의 사전을 로딩하기 위해서 해결해야 되는 문제
• 개선을 통해 저사양 PC에서도 전체 130만 단어를 모두 로딩 후 분석 가능
Total: 344.3 MB Total: 176.6 MB
갤럭시S5
CPU
Slow?!
느림
SimplePos09() -> SimplePos22() -> extractNoun()
빠름
extractNoun() -> extractNoun() -> extractNoun()
동일 함수를 여러 번 구동하는 사용패턴에 최적화
More dictionary and Category!
NIADic을 통한 36만 -> 130만 형태소 사전 보강
우리말샘 사전(58만), 인사이터 사전(35만)
우리말샘 인사이터
• 40개 -> 82개 어절 단위 형태소• 기존 2배 이상의 형태소 후보군 도출
Exporting Dictionary
• 형태소 사전의 txt 파일 다운로드 인터페이스 제공• 타 형태소 분석기에 사전 데이터 활용 가능
문장 경계 인식 플러그인
자동 띄어쓰기(개발중)
75만 문장을 기반으로 학습된 띄어쓰기 엔
진 (한국일보 코퍼스, 세종 코퍼스..)
유니그램, 바이그램 HMM
Etc
useNIAdic()
Support Scala plugins
SQLite based dictionary management
Solving infinite wait of results with abnormal sentence.
Adding Hangul vignette
Schedule
~ 11.20
KoNLP v.0.80.0 CRAN 등록
패키지 용량 이슈, vignette 한글 이슈 등등
~ 12.05
자동 띄어쓰기 교정 플러그인 구현/적용
사용자 정의 사전 강제 적용 옵션 구현
~
RNN POS Tagger plugins
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”)
KoNLP v0.80.0 Tutorial
Q&A
• https://github.com/haven-jeon/KoNLP
• https://github.com/haven-jeon/Sejong
• https://github.com/haven-jeon/NIADic