https://www.ciokorea.com/news/187313
Serdar Yegulalp | InfoWorld
파이썬에는 NLP 관련 도구가 정말이지 많다. 원하는 텍스트 분석 작업에 적절한 파이썬 라이브러리는 어떻게 찾을 수 있을까? 용도별 추천 라이브러리와 장단점을 살펴본다.
NLP는 ‘음성 및 텍스트를 위한 AI’라고 말할 수 있다. 음성 명령, 음성 및 텍스트 번역, 감성 분석, 텍스트 요약, 언어와 관련된 여타 많은 애플리케이션은 그 동안 크게 개선됐다. 분석에 사용되는 NLP의 성능 또한 딥러닝을 통해 획기적으로 향상됐다.
파이썬 언어는 NLP를 포함한 모든 종류의 머신러닝에 유용한 프론트-엔드를 제공한다. 하지만 파이썬 생태계에는 고를 NLP가 너무 많아 당황스러운 것도 사실이다. 이번 기사는 파이썬용 라이브러리 각각에 관해 소개한다. 각각의 유즈 케이스와 장점, 단점 그리고 인기도를 살펴보도록 한다.

Image Credit : Getty Images Bank
CoreNLP 스탠포드 대학(Stanford University)이 만든 CoreNLP 라이브러리는 NLP 예측 및 분석 작업을 대규모로 수행할 수 있게 해주는 실용 단계의 NLP 솔루션이다. CoreNLP는 자바(Java)로 작성됐지만, 이를 위한 API와 여러 파이썬 패키지가 등장해 있는 상태다. Stanza로 불리는 네이티브 NLP 라이브러리가 그 중 하나다.
문법 태깅, 명명 엔티티 인식, 파싱, 구문 분석, 감성 분석 등 많은 언어 관련 도구들이 CoreNLP에 포함되어 있다. 언어별 특성을 차지 않도록 고안되어 있으며, 현재 영어에 더해 아랍어, 중국어, 프랑스어, 독일어, 스페인어(써드파티를 통해 러시아어 및 스웨덴어, 덴마크어)를 지원한다. CoreNLP에는 간편하게 예측을 하는 기능을 제공하는 웹 API 서버도 포함되어 있다.
CoreNLP의 파이썬 래퍼(Python wrappers)를 이용해 시작하기 좋은 출발점은 스탠포드 NLP 그룹이 만든 참조 구현체인 Stanza이다. Stanza는 문서화가 잘 되어 있고, 정기적으로 유지 관리되는 것이 장점이다. 다른 CoreNLP 파이썬 라이브러리 가운데 상당수는 상당 기간 업데이트가 되지 않은 상태이다.
이 밖에 CoreNLP는 아래에 설명할 주요 파이썬 NLP 라이브러리 중 하나인 NLTK를 이용할 수 있는 기능을 지원한다. NLTK 버전 3.2.3에는 파서(Parser)에 CoreNLP에 대한 인터페이스가 포함되어 있다. 올바른 API를 사용하기만 하면 된다.
CoreNLP의 단점은 구현과 실행을 위해 어느 정도 자바에 친숙할 필요가 있다는 것이다. 단, 문서를 잘 읽으면 충분히 할 수 있는 일이긴 하다. 또 다른 걸림돌은 CoreNLP의 라이선싱이다. 전체 툴킷이 GPLv3 아래 라이선싱 된다. 다른 사람에게 배포할 사유 소프트웨어에서 사용하기 위해서는 상용 라이선스가 필요하다.
GensimGensim은 단 2가지 일만 한다. 그러나 그 일을 아주 잘한다. 통계적 의미론(statistical semantics)에 초점이 맞춰져 있다. 문서의 구조를 분석한 후 유사성을 기준으로 다른 문서에 점수를 부여한다.
Gensim은 문서를 분석 엔진으로 스트리밍하고, 점진적으로 비지도 학습을 수행해 아주 큰 텍스트 본문을 처리할 수 있게 해준다. 또 각기 다른 시나리오에 부합하는 여러 종류의 모델을 생성할 수 있다. Word2Vec, Doc2Vec, FastText 및 Latent Dirichlet Allocation이 여기에 해당된다.
Gensim의 상세한 문서에는 핵심 개념을 설명하고, 실무 예제로 설명하는 튜토리올과 ‘하우-투(방법)’ 가이드가 포함되어 있다. Gensim 기트허브 레포지토리에 공통 레시피(Common Recipes)도 있다.
최신 버전인 Gensim 4는 파이썬 3를 지원하지만, Word2Vec, 덜 복잡한 OOP 모델, 기타 다른 많은 모더니제이션 같이 많이 사용하는 알고리즘에 최적화되어 있다.
NLTKNLTK(Natural Language Toolkit)는 특히 잘 알려졌고, 강력한 파이썬 NLP 라이브러리다. 많은 코포라(Corpora, 데이터 세트)와 훈련된 모델을 NLTK와 함께 사용해 즉시 NLTK에 대한 실험을 시작할 수 있게 해준다.
문서에 설명되어 있듯, NLTK는 텍스트를 다루기 위한 다양한 도구들을 제공한다. 분류, 토큰화, 스테밍(Stemming), 태깅, 파싱, 시멘틱 추론을 예로 들 수 있다. 스탠포드 태거(Stanford Tagger), TADM, MEGAM 같은 써드파티 도구들 가운데 일부도 지원한다.
단 NLTK는 학계를 대상으로 만들어졌다는 것을 유념해야 한다. 비즈니스 환경에서 NLP 모델을 제공하도록 설계되어 있지 않다. 문서화가 미흡하다. 하우-투(방법)에 대한 설명조차 부족하다. 64비트 바이너리도 없다. 32비트 버전 파이썬을 설치해야 이용할 수 있다. 마지막으로 NLTK는 아주 빠른 라이브러리도 아니다. 그러나 병렬 처리를 통해 속도를 높일 수 있다.