Ainized-StanfordNLP (KOR)
If you want to see this post as english please click this link.
NLP(Natural Language Processing)에 대해서 검색하던 중 StanfordNLP라는 것을 찾아 보게 되었습니다. StanfordNLP의 설명을 읽어보던 중 API 서버로 만들어 보면 괜찮을 것 같다 생각하여 nodejs를 이용해 API서버를 구현하여 dockerize한 후 ainize에 배포하였습니다. 배포된 API 서버는 70여 개의 언어 모델을 제공하며 아래 링크를 통해 확인해 볼 수 있습니다.
StanfordNLP란 ?
StanfordNLP는 자연어 분석을 위해 만들어진 파이썬 패키지입니다. StanfordNLP는, Universal Dependency Parsing from Scratch 논문에서 소개된 CoNLL 2018 UD Shared Task라는 대회의 Stanford 시스템을 토대로 만들어진 라이브러리입니다. StanfordNLP에서는 pipeline이라는 것을 통해 다양한 도구 사용할 수 있습니다. 여기에는 다음과 같은 도구가 있습니다.
Tokenization
Tokenization이란 주어진 코퍼스(corpus)를 Token(의미있는 단위)으로 나누는 작업입니다. 논문에 따르면, Tokenization과 sentence segmentation을 unit-level 시퀀스 태깅 문제로 다뤄 BiLSTMs 모델을 통해 예측한 후 CoNLL-U 포맷으로 출력 값을 제공합니다.
Lemmatization
Lemmatization은 표제어 추출이라고 하며, 단어들로부터 표제어를 찾아가는 과정입니다. 예를 들어, 영어에서 am, is, are과 같은 동사들은 Be동사에서 나왔으므로, 이 단어들의 표제어는 Be 라고 할 수 있습니다.
품사(POS) 태깅
토큰화 과정에서 각 단어가 어떤 품사로 쓰였는지 구분해 줍니다. 이 API 서버에서는 UPOS와 XPOS 값을 제공합니다. UPOS는 Universal part-of-speech의 줄임말로, Universal Dependency의 가이드라인에 따름 품사를 제공합니다. XPOS는 Language-specific POS로, 국가 별 품사를 제공합니다.
의존성 파싱
의존성 파싱은 문장의 문법적 구조를 파악하여 단어간의 관계를 기본으로 누가 그 단어의 head 인지, child 인지를 가지고 관계를 구분합니다.
Reference
https://stanfordnlp.github.io/stanfordnlp/index.html
http://nlpprogress.com/english/dependency_parsing.html