정규화 기법 중 코퍼스에 있는 단어의 개수를 줄일 수 있는 기법에는 표제어 추출(Lemmatization)과 어간 추출(Stemming)이 있다. 이 두 기법이 갖고 있는 의미는 눈으로 봤을 때는 서로 다른 단어들이지만, 하나의 단어로 일반화시킬 수 있다면 하나의 단어로 일반화시켜 문서 내의 단어 수를 줄이고자 하는 것이다. 이처럼 자연어 처리에서 정규화의 지향점은 언제나 갖고 있는 코퍼스로부터 복잡성을 줄이는 것이다.
표제어 추출(Lemmatization)
표제어 추출이란
표제어 추출은 단어들로부터 표제어를 찾아가는 과정이다. 단어들이 다른 형태를 가지더라도, 그 뿌리 단어를 찾아가서 단어의 개수를 줄일 수 있는지 판단한다. 이러한 표제어 추출을 하는 가장 섬세한 방법은 단어의 형태학적 파싱을 먼저 진행하는 것이다.
1) 어간(Stem) : 단어의 의미를 담은 핵심
2) 접사(Affix) : 단어에 추가 용법을 부여
ex)
- lectures -> 단수, 복수가 중요한 게 아니라 강의가 중요한 것이므로 s는 지워도 된다.
- playing -> 놀고 있든, 놀았든 중요한 게 아니라 논다는 표현이 중요. 하지만 중요할 때도 있다. 중요할 땐 두어야 한다.
- kindness
-> 이처럼 주어진 문자에서 추출을 통해 중요하지 않은 부분을 지워도 되는 상황에서는 지워도 된다. 즉 뿌리 단어를 찾아가자!
NLTK를 활용한 표제어 추출 예제 - WordNetLemmatizer
표제어 추출 전 : ['policy', 'doing', 'organization', 'have', 'going', 'love', 'lives', 'fly', 'dies', 'watched']
표제어 추출 후 : ['policy', 'doing', 'organization', 'have', 'going', 'love', 'life', 'fly', 'dy', 'watched']
표제어 추출은 단어의 형태가 적절히 보존되는 양상을 보이는 특징이 있다. 하지만 위의 결과의 'dy'와 같이 의미를 알 수 없는 적절하지 못한 단어를 출력하는 것을 볼 수 있는데 이는 lemmatizer(표제어 추출기)이 본래 단어의 품사 정보를 알아야만 정확한 결과를 얻을 수 있기 때문이다.
따라서 WordNetLemmatizer는 입력으로 단어가 동사 품사라는 사실을 알려줌에 따라 정확한 Lemma를 출력할 수 있다.
출력 결과 : die
어간 추출(Stemming)
어간 추출은 정해진 규칙만 보고 단어의 어미를 자르는 어림짐작의 작업이라고 볼 수 있다. 이 작업은 섬세한 작업이 아니기 때문에 어간 추출 후에 나오는 결과 단어는 사전에 존재하지 않는 단어일 수도 있다. 파생어들을, 즉 단어의 역할을 부여하는 것들을 지워주는 것을 어간 추출이라고 한다.
포터 알고리즘을 활용한 예제
어간 추출 전 : ['policy', 'doing', 'organization', 'have', 'going', 'love', 'lives', 'fly', 'dies', 'watched', 'has', 'starting']
포터 스테머의 어간 추출 후: ['polici', 'do', 'organ', 'have', 'go', 'love', 'live', 'fli', 'die', 'watch', 'ha', 'start']
랭커스터 스태머 알고리즘을 활용한 예제
어간 추출 전 : ['policy', 'doing', 'organization', 'have', 'going', 'love', 'lives', 'fly', 'dies', 'watched', 'has', 'starting']
랭커스터 스테머의 어간 추출 후: ['policy', 'doing', 'org', 'hav', 'going', 'lov', 'liv', 'fly', 'die', 'watch', 'has', 'start']
어간 추출 VS 표제어 추출
표제어 추출은 단어의 품사 정보를 포함하고 있다.
어간 추출은 품사 정보를 포함하지 않는다.
어떤 것을 사용해야 할까?
단어의 뜻이 분명한 단어들만 모여 있을 때는 굳이 품사 정보를 포함할 필요가 없다.
=> 이 경우 어간 추출이 효율적이다. (데이터 메모리를 절약할 수 있다.)
명사로 쓰일 때와 동사로 쓰일 때 단어의 의미가 완전히 달라질 때는 품사의 정보를 포함하는 것이 중요하다.
ex) bear : 곰(명사) - 견디다(동사)
=> 이 경우 표제어 추출을 사용해야 한다.
어간 추출 속도는 표제어 추출보다 일반적으로 빠른데, 포터 어간 추출기는 정밀하게 설계되어 정확도가 높으므로 영어 자연어 처리에서 어간 추출을 하고자 한다면 가장 준수한 선택이다. 포터 알고리즘 이외에도 랭커스터 스태머 알고리즘이 있는데 두 알고리즘은 서로 다른 알고리즘을 사용하기 때문에 동일한 단어들의 나열에 대해서 전혀 다른 결과를 보여준다. 따라서 사용하고자 하는 코퍼스에 스태머를 적용해보고 어떤 스태머가 해당 코퍼스에 적합한지를 판단한 후에 사용해야 한다.
'NLP > 딥러닝을 이용한 자연어 처리 입문' 카테고리의 다른 글
[NLP] 1-5. 정수 인코딩 (0) | 2023.11.30 |
---|---|
[NLP] 1-4. 불용어(Stopword) (1) | 2023.11.30 |
[NLP] 1-2. 정제(Cleaning)와 정규화(Normalization) (0) | 2023.11.29 |
[NLP] 1-1. 토큰화(Tokenization) (0) | 2023.11.28 |
[NLP] 1. 전처리 과정 (0) | 2023.11.28 |