NLP는 머신이 인간의 언어를 이해하고 해석하는 데 중점을 두고 기술이 발전
텍스트 마이닝이라고도 불리는 텍스트 분석은 비정형 텍스트에서 의미 있는 정보를 추출하는 것에 중점을 두고 기술이 발전
NLP 영역에는 기계 번역, 질의응답 시스템 등
NLP는 텍스트 분석을 향상하게 하는 기반 기술이라고 볼 수 있음
NLP 기술 발전에 따라 텍스트 분석도 정교하게 발전할 수 있었음
NLP와 텍스트 분석 발전 근간에는 머신러닝이 있음
과거 텍스트를 구성하는 언어적인 룰이나 업무의 룰에 따라 텍스트를 분석하는 룰 기반 시스템에서 머신러닝의 텍스트 데이터를 기반으로 모델 학습, 예측하는 기반으로 변경되면서 많은 기술적 발전이 가능해짐
텍스트 분석은 머신러닝, 언어 이해, 통계 등을 활용하여 모델을 수립하고 정보를 추출하여 비즈니스 인텔리전스나 예측 분석 등 분석 작업을 주로 수행
비정형 데이터인 텍스트를 분석하는 것
이전 적용해본 ML 모델은 주어진 정형 데이터 기반에서 모델을 수립하고 예측
머신러닝 알고리즘은 숫자형의 피처 기반 데이터만 입력받을 수 있기 때문에 비정형 텍스트를 어떻게 피처 형태로 추출하고 추출된 피처에 의미있는 값을 부여하는 것이 중요
텍스트를 word(혹은 word 일부분) 기반의 다수 피처로 추출하고 이 피처에 단어 빈도수와 같은 숫자 값을 부여하면 텍스트는 단어의 조합인 벡터값으로 표현될 수 있음 (피처 벡터화, 피처 추출) (Feature Vectorization, Extraction)
대표적인 텍스트를 피처 벡터화해서 변환하는 방법은 BOW, Word2Vec 등이 있음
텍스트 분석을 위해 쉽고 편하게 텍스트 사전 정제 작업, 피처 벡터화/추출, ML 모델 지원하는 라이브러리들이 있음 (대부분 영어 기반)
사이킷런은 머신러닝 위주 라이브러리로 NLP 패키지에 특화된 라이브러리는 가지고 있지 않음
텍스트 자체를 바로 피처로 변경할 순 없음
이를 위해 사전에 텍스트를 가공하는 준비 작업 필요
불필요한 문자, 기호 등 사전에 제거
HTML, XML 태그, 특정 기호 등
문장을 분리하는 문장 토큰화, 문장에서 단어를 토큰으로 분리하는 단어 토큰화로 나눌 수 있음
문장의 마침표, 개행문자 등 문장의 마지막을 뜻하는 기호에 따라 분리
정규 표현식에 따른 문장 토큰화도 가능
NLTK에서 자주 사용되는 sent_tokenizer
공백, 콤마, 마침표, 개행문자 등으로 단어를 분리하지만, 정규 표현식을 이용해 다양한 유형으로 토큰화 수행 가능
마침표나 개행문자 같이 문장을 분리하는 구분자를 이용해 단어를 토큰화할 수 있으므로 Bag of Word와 같이 단어의 순서가 중요하지 않은 경우 문장 토큰화를 사용하지 않고 단어 토큰화만 사용해도 충분
문장 토큰화는 각 문장이 가지는 시맨틱적인 의미가 중요한 요소로 사용될 때 사용
문장을 단어별로 하나씩 토큰화 할 경우 문맥적인 의미는 무시될 수 밖에 없음
이런 문제를 조금이라도 해결해 보고자 도입된 것이 n-gram
연속된 n개의 단어를 하나의 토큰 단위로 분리하는 것
분석에 큰 의미가 없는 단어를 지칭
문장을 구성하는 필수 문법 요소이나 문맥적으로 큰 의미가 없는 단어
빈번하게 텍스트에 나타나므로 이것들을 사전에 제거하지 않으면 그 빈번함으로 인해 오히려 중요한 단어로 인지될 수 있음
언어별 스톱워드 목록이 있으며 NLTK의 경우 가장 다양한 언어의 스톱 워드 제공
NLTK의 스톱 워드에는 어떤 것이 있는지 확인
많은 언어에서 문법적인 요소에 따라 단어가 다양하게 변함
영어의 경우 과거/현재, 3인칭 단수 여부, 진행형 등 매우 많은 조건에 따라 원래 단어가 변함
문법적 또는 의미적으로 변화하는 단어의 원형을 찾는 것
두 기능 모두 원형 단어를 찾는다는 목적은 유사하나 Lemmatization이 Stemming보다 정교하며 의미론적인 기반에서 단어의 원형을 찾음
Stemming은 원형 단어로 변환 시 일반적인 방법을 적용하거나 더 단순화된 방법을 적용하여 원래 단어에서 일부 철자가 훼손된 어근 단어를 추출하는 경향이 있음
Lemmatization은 품사와 같은 문법적인 요소와 더 의미적인 부분을 감안해 정확한 철자로 된 어근 단어를 찾아줌
Lemmatization이 Stemming보다 변환에 더 오랜 시간을 필요로 함
Lemmatization은 보다 정확한 원형 단어 추출을 위해 품사를 인자로 입력해야 함