반응형

/*******************************************************************************************************************
-- Title : [NLP] Stanford POS Tagger vs. NLTK 성능 비교
-- Key word : nlp mop stanford core nlp core nltk 스탠포드 maxenttagger stanford pos tagger 
                  corenlp  nltk tag stanford 자연어 처리 품사 형태소 분석 자연어처리 형태소분석
*******************************************************************************************************************/

■ 테스트 상황

- 테스트 셋    : ti 40개, ab 40개

- 원본 단어수 : 평균 122 개

- 원본 사이즈 : 평균 800 byte

 

■ MOP 처리

- 처리 순서    : tokenize -> POS Tagging -> Lemmatize

- 추가 함수    : nvarFilter

 

■ 분석 결과

- 추출 단어수 : 평균 46개

- 분석 시간    : NLTK(0.09), STFD(1.75)

 

■ 비교 결과
- 분석속도     : NLTK > STFD (약 170배 정도 차이)
- 추출 단어수 : NLTK > STFD (1문서당 평균 0.5개 차이. 문서 길이가 늘어날수록 늘어남)

- 품사 태깅    : NLTK <= STFD (STFD의 품사정보가 좀 더 정확해 보이나 문서당 1~2개 차이)
- 기타 차이점 : 'ti'에서는 분석 결과가 약 99% 일치(평균 1개의 단어에 대해서 품사가 틀린 경우가 존재)
                     'ab'에서는 동일한 단어에 대해서 품사가 다르게 측정되거나 형태소 출현여부 차이 발생(평균 3.5개)
                     STFD에서는 ')','(' 등의 문자가 추출되서 비교시 제외함
                     문장이 길어질수록 형태소별 품사 정보 판단이 틀린 경우가 발생


* 1문서당 평균 10단어, 80byte 기준


* 1문서당 평균 122단어, 80byte 기준


* 1문서당 평균 10단어, 80byte 기준


* 1문서당 평균 122단어, 800byte 기준

-- 풀이 :
1. 둘다 학습에 사용한 소스 데이터는 wsj penn treebank로 같음. ( wsj : wall street journal )
2. 그러나 내부적으로, nltk는 가중치 평균 방식, stanford는 maximum entropy 방식을 사용해 품사 선정
3. wsj에서 정답셋을 추출해 정확도를 비교하면, 둘다 정확도는 97%로 비슷
4. stanford가 더 느린 이유는, python에서 java 프로그램을 돌려야 하기 때문.

-- 결론 :
nltk의 속도가 약 170배 빠르고, 정확도도 크게 차이 없으니 nltk 사용.

 

반응형

+ Recent posts