Data Science/Machine Learning & Deep Learning
[Deep Learning] NLP - 어간추출(stemming) & 표제어추출(lemmatization)
oduu
2021. 4. 16. 15:46
어간 추출과 표제어 추출은 token 의 수를 줄일 수 있습니다.
apple, apples가 있다면 apple 하나로 하여 단어의 수를 줄일 수 있는 것입니다.
어간추출 Stemming
- 접사를 제거하고 단어의 의미가 포함된 핵심 부분만 남겨 변환
- 어간과 접사 분리( ing, ed, s 와 같은 것들을 제거 )
- ex ) wolves -> wolv
from nltk.stem import PorterStemmer
ps = PorterStemmer()
text = 'Wolves were feeding in the forest'
words = text.split(" ")
for word in words:
print(ps.stem(word))
표제어추출 Lemmatization
- 단어들은 기본 사전형 단어 형태인 lemma(표제어)로 변환
- 명사의 복수형은 단수형으로, 동사는 타동사로
- ex ) wolves -> wolf
import spacy
nlp = spacy.load("en_core_web_sm")
lem = "Wolves were feeding in the forest"
doc = nlp(lem)
for token in doc:
print(token.lemma_)
어간 추출은 표제어 추출보다 알고리즘이 간단해 속도가 빠릅니다.
조금 부정확할 수 있다는 단점이 있지만 사용하는데 있어서 성능이 나쁘다고 할 정도는 아닙니다.
반면 표제어 추출은 어간 추출보다 연산이 더 필요하기에 속도는 느리지만 더 체계화되어 있다는 장점이 있습니다.