데이터과학 삼학년

[Text preprocessing] Lemmatization and Stemming 본문

Natural Language Processing

[Text preprocessing] Lemmatization and Stemming

Dan-k 2020. 3. 24. 02:03
반응형

Lemmatization (표제어 추출)과 Stemming (어간 추출)에 대해 알아보자.

 

먼저 text를 전처리하는데 있어서 단어의 개수를 줄일 수 있는 대표적인 기법이 표제어, 어간 추출이다.

이는 간다, 가자, 갑시다, 가네요 등을 가다. 라는 한가지 의미로 줄여 줄 수 있다.

 

이를 통해 분석의 복잡성을 줄일 수 있고, 특히 단어의 빈도수를 기반으로 vectorization을 하는 BoW(Bag of Words) 표현을 처리할 때 유용하게 사용할 수 있다.

 

Lemmatization (표제어 추출)

표제어란 기본 사전형 단어 정도의 의미로 받아 들일 수 있다. 즉, 각 단어들이 다른 형태를 가지더라도 그 뿌리 단어를 찾아가는 것을 말한다.

예를 들어 am, are, is --> be  로 변환할 수 있다.

표제어 추출을 하는 가장 섬세한 방법은 단어의 형태학적 파싱을 먼저 진행하는 것이다.

  • 형태소 : 의미를 가진 가장 작은 단위

  • 형태학(morphology) : 형태소로부터 단어들을 만들어가는 학문

형태소는 두가지 종류가 있는데 어간(stem) 과 접사(affix) 이다.

  • 어간 (stem) : 단어의 의미를 담고 있는 단어의 핵심 부분

  • 접사 (affix) : 단어에 추가적인 의미를 주는 부분

형태학적 파싱이란 위 두가지 요소로 분리하는 작업을 말한다.

예) cats = cat + -s

 

NLTK에서는 표제어 추출을 위해 WordNetLemmatizer를 지원한다.

from nltk.stem import WordNetLemmatizer
n=WordNetLemmatizer()
words=['policy', 'doing', 'organization', 'have', 'going', 'love', 'lives', 'fly', 'dies', 'watched', 'has', 'starting']
print([n.lemmatize(w) for w in words])


['policy', 'doing', 'organization', 'have', 'going', 'love', 'life', 'fly', 'dy', 'watched', 'ha', 'starting']

표제어 추출은 어간 추출과 달리 단어의 형태가 적절히 잘 보존된다.

 

 

Stemming (어간 추출)

어간 추출은 형태학적 분석을 단순화한 버전이다.

즉 am, are, is -> am, are, is 로 변환되는 식이다.

 

NLTK에서는 어간 추출을 위해 PorterStemmer를 지원한다.

from nltk.stem import PorterStemmer
from nltk.tokenize import word_tokenize
s = PorterStemmer()
text="This was not the map we found in Billy Bones's chest, but an accurate copy, complete in all things--names and heights and soundings--with the single exception of the red crosses and the written notes."
words=word_tokenize(text)
print(words)

['This', 'was', 'not', 'the', 'map', 'we', 'found', 'in', 'Billy', 'Bones', "'s", 'chest', ',',
'but', 'an', 'accurate', 'copy', ',', 'complete', 'in', 'all', 'things', '--', 'names', 'and', 'heights', 'and', 'soundings', '--', 'with', 'the', 'single', 'exception', 'of', 'the', 'red', 'crosses', 'and', 'the', 'written', 'notes', '.']


print([s.stem(w) for w in words])


['thi', 'wa', 'not', 'the', 'map', 'we', 'found', 'in', 'billi', 'bone', "'s", 'chest', ',', 
'but', 'an', 'accur', 'copi', ',', 'complet', 'in', 'all', 'thing', '--', 'name', 'and', 'height', 'and', 'sound', '--', 'with', 'the', 'singl',
'except', 'of', 'the', 'red', 'cross', 'and', 'the', 'written', 'note', '.']

예시)

formalize → formal
allowance → allow
electricical → electric

 

어간 추출 속도는 표제어 추출보다 일반적으로 빠른데, 포터 어간 추출기는 정밀하게 설계되어 정확도가 높으므로 영어 자연어 처리에서 어간 추출을 하고자 한다면 가장 준수한 선택이다.

Lancaster Stemmer 도 지원한다..

Stemming

Lemmatization

am → am
the going → the go
having → hav

am → be

the going → the going

having → have

 

한국어에서 어간 추출

한국어의 경우 5언 9품사의 구조를 가지고 있다.

활용(conjugation)

활용은 어간이 어미를 가지는 일을 말한다.

  • 어간(stem) : 용언(동사, 형용사)을 활용할 때, 원칙적으로 모양이 변하지 않는 부분. 활용에서 어미에 선행하는 부분. 때론 어간의 모양도 바뀔 수 있음(예: 긋다, 긋고, 그어서, 그어라).

  • 어미(ending): 용언의 어간 뒤에 붙어서 활용하면서 변하는 부분이며, 여러 문법적 기능을 수행

 

규칙 활용(conjugation)

규칙 활용은 어간이 어미를 취할 때 어간의 모습이 일정한 것을 말한다.

--다, 잡 + 다

 

 

불규칙 활용

불규칙 활용은 어간이 어미를 취할 때 어간의 모습이 바뀌거나 취하는 어미가 특수한 어미일 경우를 말합니다. 예를 들어 ‘듣-, 돕-, 곱-, 잇-, 오르-, 노랗-’ 등이 ‘듣/들-, 돕/도우-, 곱/고우-, 잇/이-, 올/올-, 노랗/노라-’와 같이 어간의 형식이 달라지는 일이 있거나 ‘오르+ 아/어→올라, 하+아/어→하여, 이르+아/어→이르러, 푸르+아/어→푸르러’와 같이 일반적인 어미가 아닌 특수한 어미를 취하는 경우 불규칙활용을 하는 예에 속합니다.

이 경우에는 어간이 어미가 붙는 과정에서 어간의 모습이 바뀌었으므로 단순한 분리만으로 어간 추출이 되지 않고 좀 더 복잡한 규칙을 필요로 합니다.



출처 : https://wikidocs.net/21707
 

위키독스

온라인 책을 제작 공유하는 플랫폼 서비스

wikidocs.net

 

 

728x90
반응형
LIST
Comments