본문 바로가기

IT/AI

[NLP] 텍스트 데이터 전처리와 표현 방법 [기초]

728x90

자연어 처리$($NLP$)$는 인간의 언어를 기계가 이해하고 처리하는 분야로, 다양한 응용 분야에서 중요한 역할을 합니다. NLP는 텍스트 데이터를 처리하는데 있어서 다양한 과정과 기법을 포함하고 있습니다. 이 중에서도 텍스트 데이터 전처리와 표현 방법은 NLP 작업의 기초를 이루는 중요한 단계입니다.

텍스트 데이터 전처리 과정에서는 불필요한 노이즈를 제거하고, 텍스트를 일관된 형태로 정규화하는 작업이 이루어집니다. 특수 문자 제거, 오타 수정, 결측치 및 이상치 제거 등의 과정을 거쳐 텍스트 데이터를 깔끔하게 정리합니다.

또한, 텍스트 토큰화는 문장을 의미 있는 단위로 분리하는 작업으로, 문장 토큰화와 단어 토큰화가 포함됩니다. 이러한 토큰화 과정은 자연어 처리의 중요한 기반을 이루는 작업입니다.

텍스트 표현 방법으로는 Bag of Words$($BoW$)$와 TF-IDF가 사용되며, TF-IDF는 단어의 빈도와 특수성을 고려하여 가중치로 텍스트 데이터를 표현합니다. 이러한 표현 방법은 자연어 처리 작업에서 주제나 의미를 포함하는 문서를 식별하는데 효과적으로 사용됩니다.


텍스트 데이터 전처리 과정은 자연어 처리$($NLP$)$ 작업에서 중요한 단계입니다. 주요 과정은 다음과 같습니다.

1. 텍스트 클리닝 $($Text Cleaning$)$:
   - 비정형 데이터 제거: HTML 태그, XML 태그, JSON 문자열 등을 제거합니다.
   - 특수 문자 제거: &, #, @ 같은 특수 문자나 이모티콘 등을 제거합니다.
   - 오타 수정: 오타나 문법 오류를 수정합니다.
   - 결측치$($null, na값$)$와 이상치$($outlier$)$ 제거를 수행합니다.

2. 텍스트 정규화$($Text Normalization$)$:
   - 대소문자 통일: 모든 문자를 소문자나 대문자로 변환하여 일관성을 유지합니다.
   - 어간 추출$($Stemming$)$: 단어를 그 기본 형태로 변환합니다. 예를 들어, "running"은 "run"으로 변환됩니다.
   - 표제어 추출$($Lemmatization$)$: 단어를 사전형 형태로 변환합니다. 예를 들어, "ran"은 "run"으로 변환됩니다.
   - 동의어 처리: 동의어를 통일된 표현으로 변환합니다. 예를 들어, "automobile"은 "car"로 변환됩니다.

3. 토큰화$($Tokenization$)$:
   - 문장을 의미 있는 단위$($토큰$)$로 분리하는 과정입니다.
   - 문장 토큰화: 문단을 개별 문장으로 나눕니다.
   - 단어 토큰화: 문장을 개별 단어로 나눕니다.

4. 불용어 제거$($Stopword Removal$)$:
   - 분석에 큰 의미가 없는 일반적인 단어$($예: "and", "the", "is"$)$를 제거합니다.

5. 텍스트 표현$($Text Representation$)$:
   - 텍스트 데이터를 숫자 벡터로 변환하는 과정입니다.
   - 대표적인 방법으로는 Bag of Words$($BoW$)$와 TF-IDF가 있습니다.

Tokenization은 텍스트를 의미 있는 단위로 분리하는 과정으로, 단순한 띄어쓰기 기반이나 문자 단위로 토큰화하는 방법의 문제점을 극복하기 위해 다양한 Tokenizer가 필요합니다. 언어의 특성, 작업의 특성, 모델의 구조에 따라 최적화된 Tokenizer를 선택하여 사용합니다.

Encoding$($인코딩$)$은 데이터를 특정 형식이나 형태로 변환하는 과정으로, 데이터의 압축, 정보 보호, 데이터 전송, 머신러닝 모델 입력 준비 등에 사용됩니다. Embedding$($임베딩$)$은 특정 대상을 저차원의 밀집 벡터로 인코딩하는 과정으로, 단어나 문장을 연속적인 벡터 공간에 매핑하는 것입니다.

텍스트 데이터의 표현 방식으로는 Bag of Words$($BoW$)$와 TF-IDF가 있습니다. BoW는 문서의 내용을 단어들의 빈도로 표현하며, 단어의 순서를 무시합니다. Count Vectorization은 BoW를 숫자 벡터로 변환하여 단어의 등장 횟수를 표현합니다. TF는 단어의 특정 문서 내에서의 등장 빈도를 나타내며, TF-IDF는 각 단어의 중요성을 평가하여 가중치로 표현합니다. TF-IDF는 주제나 개념을 포함하는 문서 식별에 효과적이며, 빈번한 단어의 중요도를 낮추는 장점이 있습니다.

 

TF-IDF$($t,d$)$ = TF$($t,d$)$ x IDF$($t,D$)$

더보기

단어 빈도 tf$($t,d$)$: 문서 d 내에서 단어 t의 총 빈도

    the raw count itself$($가장 단순한 빈도 산출 방식$)$: tf$($t,d$)$ = f$($t,d$)$
    Boolean "frequencies"$($불린 빈도$)$: tf$($t,d$)$ = t가 d에 한 번이라도 나타나면 1, 아니면 0;
    logarithmically scaled frequency$($로그 스케일 빈도$)$:  tf$($t,d$)$ = log $($f$($t,d$)$ + 1$)$;
    augmented frequency$($증가 빈도$)$: 최빈 단어를 분모로 target 단어의 TF를 나눈 값으로, 일반적으로는 문서의 길이가 상대적으로 길 경우, 단어 빈도값을 조절하기 위해 사용한다.
\begin{align}tf(t,d) = 0.5 + \frac {0.5\times f(t,d)}{\max{\{f(w,d): w \in d}\}}\end{align}

 

역문서 빈도는 한 단어가 문서 집합 전체에서 얼마나 공통적으로 나타나는지를 나타내는 값이다. 전체 문서의 수를 해당 단어를 포함한 문서의 수로 나눈 뒤 로그를 취하여 얻을 수 있다.

\begin{align}idf(t,D) = \log \frac {|D|}{|\{d\in D:t\in d\}|}\end{align}
|D|: 문서 집합 D의 크기, 또는 전체 문서의 수
$|\{d\in D:t\in d\}|$ : 단어 t가 포함된 문서의 수.$($즉, tf$($t,d$)$$\neq$ 0}$)$. 단어가 전체 말뭉치 안에 존재하지 않을 경우 이는 분모가 0이 되는 결과를 가져온다. 이를 방지하기 위해 1 + $|\{d\in D:t\in d\}|$로 쓰는 것이 일반적이다.
TF-IDF는 다음과 같이 표현된다. \begin{align}tfidf(t,d,D) = tf(t,d) \times idf(t,D)\end{align}

 

특정 문서 내에서 단어 빈도가 높을 수록, 그리고 전체 문서들 중 그 단어를 포함한 문서가 적을 수록 TF-IDF값이 높아진다. 따라서 이 값을 이용하면 모든 문서에 흔하게 나타나는 단어를 걸러내는 효과를 얻을 수 있다. IDF의 로그 함수 안의 값은 항상 1 이상이므로, IDF값과 TF-IDF값은 항상 0 이상이 된다. 특정 단어를 포함하는 문서들이 많을 수록 로그 함수 안의 값이 1에 가까워지게 되고, 이 경우 IDF값과 TF-IDF값은 0에 가까워지게 된다.