AIㆍML / 개발자

"자연어 처리가 필요하다면" 추천 파이썬 라이브러리 8종

Serdar Yegulalp | InfoWorld 2021.03.25
파이썬에는 NLP 관련 도구가 정말 많다. 원하는 텍스트 분석 작업에 적절한 파이썬 라이브러리는 어떻게 찾을 수 있을까? 용도별 추천 라이브러리와 장단점을 살펴본다. 

NLP(Natural Language Processing, 자연어 처리)는 ‘음성 및 텍스트를 위한 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 라이런스가 적용된다. 다른 사람에게 배포할 독점 소프트웨어에서 사용하기 위해서는 상용 라이선스가 필요하다.

Gensim
Gensim은 단 2가지 일만 하지만, 그 일을 아주 잘한다. 통계적 의미론(statistical semantics)에 초점이 맞춰져 있는데, 문서의 구조를 분석한 후 유사성을 기준으로 다른 문서에 점수를 부여한다.

Gensim은 문서를 분석 엔진으로 스트리밍하고, 점진적으로 비지도 학습을 수행해 아주 큰 텍스트 본문을 처리할 수 있게 해준다. 또 각기 다른 시나리오에 부합하는 여러 종류의 모델을 생성할 수 있다. Word2Vec, Doc2Vec, FastText 및 Latent Dirichlet Allocation이 여기에 해당된다.

Gensim의 상세한 문서에는 핵심 개념을 설명하고, 실무 예제로 설명하는 튜토리얼과 ‘하우투’ 가이드가 포함되어 있다. Gensim 깃허브 리포지토리에 공통 레시피(Common Recipes)도 있다. 최신 버전인 Gensim 4는 파이썬 3를 지원하지만, Word2Vec, 덜 복잡한 OOP 모델, 기타 다른 많은 모더니제이션 같이 많이 사용하는 알고리즘에 최적화되어 있다.

NLTK
NLTK(Natural Language Toolkit)는 가장 널리 알려진 고성능 파이썬 NLP 라이브러리다. 많은 코포라(Corpora, 데이터 세트)와 훈련된 모델을 NLTK와 함께 사용해 즉시 NLTK에 대한 실험을 시작할 수 있게 해준다.

문서에 설명되어 있듯, NLTK는 텍스트를 다루기 위한 다양한 도구들을 제공한다. 분류, 토큰화, 스테밍(Stemming), 태깅, 파싱, 시멘틱 추론을 예로 들 수 있다. 스탠포드 태거(Stanford Tagger), TADM, MEGAM 같은 써드파티 도구들 가운데 일부도 지원한다.

단 NLTK는 학계를 대상으로 만들어졌다는 것을 유념해야 한다. 비즈니스 환경에서 NLP 모델을 제공하도록 설계되어 있지 않다. 문서화가 미흡하다. 사용 방법에 대한 설명조차 부족하다. 64비트 바이너리도 없다. 32비트 버전 파이썬을 설치해야 이용할 수 있다. 마지막으로 NLTK는 아주 빠른 라이브러리도 아니다. 그러나 병렬 처리를 통해 속도를 높일 수 있다. NLTK 내부에 있는 것을 활용할 계획이면, 대신 TextBlob으로 시작할 수도 있다.

Pattern
인기 웹사이트를 스크레이핑(Scrape)해서 분석하는 것만 필요하다면 Pattern을 고려한다. 이 NLP 라이브러리는 여기에서 설명한 다른 라이브러리들보다 훨씬 작고 좁다. 많이 이뤄지는 한 가지 작업에 초점이 맞춰져 있기 때문이다.

Pattern에는 구글, 위키피디아, 트위터, 페이스북, 제네릭 RSS 등 인기 웹 서비스와 소소를 스크레이핑 할 수 있는 도구가 탑재되어 있다. 모두 파이썬 모듈로 이용할 수 있다. 이런 사이트 각각에서 데이터를 가져오기 위해 무언가를 처음부터 만들 필요가 없다. 이후 감성 분석 같은 많이 사용되는 다양한 NLP 작업을 데이터에 수행할 수 있다.

Pattern은 직접 NLP 함수, n-gram 검색, 벡터, 그래프를 사용할 수 있는 기능도 지원한다. MySQL, SQLite, MongoDB 등 많이 사용되는 데이터베이스를 다룰 수 있는 헬퍼 라이브러리가 내장되어 있다. 이전 세션에서 저장한, 또는 서드파티에서 가져온 테이블 데이터를 쉽게 처리할 수 있다는 의미다.

Polyglot
Polyglot는 이름에서 알 수 있듯, 여러 언어를 동시에 다루는 NLP 애플리케이션을 구현한다. 

Polyglot의 NLP 기능들은 다른 NLP 라이브러리에서 찾을 수 있는 것들과 비슷하다. 토큰화, 명명 엔티티 인식, 음성 일부 태깅, 감성 분석, 단어 임베딩 등을 예로 들 수 있다. 각각의 작업에서 Polyglot은 필요한 언어를 지원하는 모델을 제공한다.

Polyglot의 언어 지원은 기능들마다 차이가 있다. 예를 들어, 언어 감지 시스템은 약 200개 언어, 토큰화는 165개 언어(Unicode Text Segmentation 알고리즘을 사용하기 때문), 감성 분석은 136개 언어를 지원한다. 그러나 음성 일부 태깅은 16개 언어만 지원한다.

PyNLPI
PyNLPI(‘파인애플’로 발음)은 기본적인 NLP 기능들만 갖고 있다. 그러나 NLP 데이터 형식에 정말 유용하게 사용할 수 있는 데이터 변환 및 데이터 처리 기능들 가운데 일부를 제공한다.

PyNLPI의 NLP 함수의 대부분은 토큰화나 n-gram 추출과 같은 기본 작업, 문자열 간 Levenshtein 거리, Markov 체인 같은 NLP에서 유용한 통계 기능들을 지원한다. 이러한 기능들은 편의를 위해 순수한 파이썬으로 구현되며, 따라서 프로덕션 수준 성능을 갖추지 못할 가능성이 높다.

그러나 PyNLPI는 NLP 공간에서 새로 등장한 더 ‘이국적’인 데이터 종류와 형식 가운데 일부를 지원하는 것이 장점이다. PyNLPI는 GIZA, Moses + +, SoNaR, Taggerdata 및 TiMBL 데이터 형식을 읽고 처리할 수 있다. 

또 전체 모듈을 FoLiA를 다루는 데 사용할 수 잇다. 이는 코포라(번역이나 다른 분석에 사용되는 텍스트 본문) 같은 언어 리소스 주석에 사용되는 XML 문서 형식이다. 이런 데이터 유형은 PyNLPI가 유용하다.

SpaCy
편의성에는 파이썬, 속도에는 Cython를 활용하는 SpaCy는 ‘산업에 강한 NLP’라고 말할 수 있다. 속도와 모델 크기, 정확성 측면에서 NLTK, CoreNLP 등의 다른 경쟁자를 앞선다고 주장한다. SpaCy에는 여러 언어용 모델이 포함되어 있다. 그렇지만 완전한 데이터 파이프라인은 64개 언어 중 16개에 국한된다.

SpaCy에는 경쟁 프레임워크에서 제공되는 거의 대부분 기능이 포함되어 있다. 음성 태깅, 종속성 파싱, 명명 엔티티 인식, 토큰화, 감성 세그멘테이션, 규칙 기반 매칭 작업, 워드 백터 등을 예로 들 수 있다. SpaCy에는 GPU 작업 최적화 기능도 지원한다. 연산을 가속화하고, 복제를 막기 위해 GPU에 데이터를 저장한다.

SpaCy는 문서화가 아주 잘 되어 있다. 설정 마법사가 윈도우와 리눅스, 맥OS, 기타 여러 파이썬 환경(pip와 conda 등)을 위한 명령줄 설치 작업을 생성한다. 언어 모델은 파이썬 패키지로 설치된다. 따라서 애플리케이션의 종속성 리스트의 일부로 추적할 수 있다.

이 프레임워크의 최신 버전인 SpaCy 3.0은 많은 업그레이드를 제공한다. 여러 머신에서 분산형 트레이닝을 수행하는 Ray 프레임워크를 지원하는 것에 더해, 정확성을 높이는 새로운 트랜스포머 기반 파이프라인 시스템, 새 트레이닝 시스템과 워크플로우 구성 모델, 엔드-투-엔드 워크플로우 관리 기능들을 지원한다.

TextBlob
TextBlob은 Pattern과 NLTK 라이브러리의 친화적인 프론트엔드이다. 두 라이브러리를 고수준의 사용하기 쉬운 인터페이스로 포장한다. TextBlob을 사용하면 패턴과 NLTK의 복잡함에 어려움을 겪는 시간이 줄어들고, 결과를 얻는 시간이 늘어난다.

TextBlob은 네이티브 파이썬 객체와 구문을 활용해 원활한 작업을 돕는다. 퀵스타트 예제는 처리할 텍스트를 문자열로 단순히 처리하는 방법을 보여주며, 음성 일부 태깅 등 많이 사용하는 NLP 방법을 문자열 객체에서 사용할 수 있다.

Textblob의 또 다른 장점은 더 자신감을 얻었을 때 기능성을 변경할 수 있다는 것이다. 감성 분석 시스템이나 토큰화 같은 많은 기본 구성요소들을 필요에 따라 교체할 수 있다. 또한 감성 분석 도구나 분류자 등 구성요소를 결합하는 고수준 객체를 생성하고, 최소한의 노력으로 이를 재사용할 수 있다. 이런 방식으로 TextBlob을 이용해 무언가의 프로토타입을 구현하고, 나중에 이를 다시 정립할 수 있다. ciokr@idg.co.kr

회사명 : 한국IDG | 제호: ITWorld | 주소 : 서울시 중구 세종대로 23, 4층 우)04512
| 등록번호 : 서울 아00743 등록발행일자 : 2009년 01월 19일

발행인 : 박형미 | 편집인 : 박재곤 | 청소년보호책임자 : 한정규
| 사업자 등록번호 : 214-87-22467 Tel : 02-558-6950

Copyright © 2024 International Data Group. All rights reserved.