본문 바로가기
Programming/python

spaCy 사용하기 - nltk와 spaCy 비교

by 유주원 2018. 4. 16.

spaCy(https://spacy.io/)라고 nlp를 쉽게 할 수 있도록 도와주는 python package를 사용해 보고자 한다.


python에 nltk가 있는데 굳이 spaCy를 써야하는 이유가 있나??


NLTK와 spaCy를 비교해 놓은 글이 있어서 링크와 함께 간단히 두 패키지의 특징을 비교해 보고자 한다.


https://blog.thedataincubator.com/2016/04/nltk-vs-spacy-natural-language-processing-in-python/


1. library 지원

nltk의 경우 9개의 stemming library를 가지고 있으며(http://www.nltk.org/api/nltk.stem.html) 연구자 입장에서는 이들을 적절히 customizing 함으로써 더 좋은 성능을 낼 수가 있다. 

하지만 개발자 입장에서는 이러한 9개의 선택은 큰 방해 요소가 될 수가 있다. (그냥 잘 되는것 하나만 줘... 이런 느낌)


spaCy의 경우 개발자가 가장 성능이 좋다고 느낄 수 있는 단 하나의 stemmer만 구현되어 있으며, 항상 최고의 성능을 낼 수 있도록 업데이트를 보장해 준다고 한다.


일단 library 지원 측면에서는 nltk가 더 선택의 폭이 넓어 보인다.


2. String vs Objects

nltk의 경우 문자열을 처리하고 결과 값도 문자열을 리턴 해 준다. 반면에 spaCy의 경우 문자열을 입력으로 받아 객체를 리턴해준다.

사용성은 scaCy가 더 편리하게 되어 있는 것 같다. (실제 사용해 봐도..)


3. performance

마지막으로 성능 측정인데, 아래와 같은 성능을 나타낸다고 한다. (저 포스팅 글이 1년 전 글이란 것을 고려해 봐야 함.)

테스트 입력은 10KB의 wikipedia 문서이며 해당 문서를 각각 단어 토큰, 문장 토큰, pos 태깅한 결과 그래프가 아래에 나타나 있다.


문장 토큰을 제외한 다른 두 경우에서 spaCy가 nltk를 크게 앞서는 것을 확인해 볼 수 있다. 문장 토큰의 경우 nltk는 단순 문장 분류임에 반해 spaCy는 문장 분류 외에 문장 간의 더 많은 정보 추출을 시도하기 때문에 속도가 늦어진 것이라고 이 글에서는 설명하고 있다.


그리고 아래는 nltk와 spaCy의 github 비교 자료..


github star 및 fork 개수는 두 패키지 모두 비슷한 수치를 나타내고 있다. 웹 검색 비율의 경우 nltk가 앞서고 있지만 최근 들어 spaCy가 많이 올라가는 추세이다.