2023. 9. 6. 16:22ㆍ자연어처리
자연어처리에서는 텍스트를 표현하는 방법으로는 여러가지가 있다.
주로 사용되는 DTM, TF-IDF , TF-IDF 에 대해서 다룸
텍스트를 위와 같은 방식으로 수치화 하면, 통계적인 접근 방법을 통해 여러 문서로 이루어진 텍스트 데이터가 있을 때 어떤 단어가 특정 문서 내에서 얼마나 중요한 것인지를 나타내거나, 문서의 핵심어 추출, 검색 엔진에서 검색 결과의 순위 결정, 문서들간의 유사도를 구할 때 사용 할 수 있다.
단어 표현 방법은 크게 국소 표현 방법과 분산 표현 방법으로 나뉜다. 국소 표현 방법은 해당 단어 그 자체만 보고 특정값을 맵핑 하여 단어를 표현하는 방식인데 반해 분산 표현방법은 그 단어를 표현하고자 주변을 참고하여 단어를 표현하는 방법이다.
예를 들어 각아지 , 귀여운 , 사랑스러운 이라는 단어가 있을 때 이를 1, 2, 3 으로 맵핑하면 이것은 단순히 국소 표현 방법에 해당한다.
하지만 강아지라는 단어 근처에 귀여운, 사랑스러운 이라는 단어가 자주 등장하므로 이렇게 되면 강아지 라는 단어는 귀여운 , 사랑스러운 느낌이다 라고 정의한다. 이렇게 되면 두 방법의 차이는 국소 표현 방법은 단어의 의미, 뉘앙스를 표현 할 수는 없지만 분산 표현 방법은 단어의 뉘양스를 표현 할 수 있다.
또한 비슷한 의미로 국소 표현 방법(Local Representation)을 이산 표현(Discrete Representation)이라고도 하며, 분산 표현(Distributed Representation)을 연속 표현(Continuous Represnetation)이라고도 한다.

1. Bag of Words란?
Bag of Words란 단어들의 순서는 전혀 고려하지 않고, 단어들의 출현 빈도에만 집중하는 텍스트 데이터의 수치화 표현 방법이다.

사이킷 런에서는 단어의 빈도를 Count하여 Vector로 만드는 CountVectorizer 클래스를 지원합니다. 이를 이용하면 영어에 대해서는 손쉽게 BoW를 만들 수 있다.
영어의 BoW를 만들기 위해 사용하는 CountVectorizer는 불용어를 지정하면, 불용어는 제외하고 BoW를 만들 수 있도록 불용어 제거 기능을 지원하고 있다.
2. 문서 단위 행렬(DTM) 이란?
서로 다른 문서들의 BoW들을 결합한 표현 방법인 문서 단어 행렬(Document-Term Matrix, DTM) 표현 이라고 한다.
문서1 : 먹고 싶은 사과
문서2 : 먹고 싶은 바나나
문서3 : 길고 노란 바나나 바나나
문서4 : 저는 과일이 좋아요
띄어쓰기 단위 토큰화를 수행한다고 가정하고, 문서 단어 행렬로 표현하면 다음과 같다
| 문서1 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 0 | 0 |
| 문서2 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | 0 |
| 문서3 | 0 | 1 | 1 | 0 | 2 | 0 | 0 | 0 | 0 |
| 문서4 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 |
각 문서에서 등장한 단어의 빈도를 행렬의 값으로 표기한다.
문서 단어 행렬은 문서들을 서로 비교할 수 있도록 수치화할 수 있다는 점에서 의의를 갖는다.
2-1 . 문서 단어 행렬(Document-Term Matrix)의 한계
1) 희소 표현(Sparse representation)
원-핫 벡터는 단어 집합의 크기가 벡터의 차원이 되고 대부분의 값이 0이 되는 벡터다. 원-핫 벡터는 공간적 낭비와 계산 리소스를 증가시킬 수 있다는 점에서 단점을 가진다.
2) 단순 빈도 수 기반 접근
여러 문서에 등장하는 모든 단어에 대해서 빈도 표기를 하는 이런 방법은 때로는 한계를 가지기도 한다. 예를 들어 영어에 대해서 DTM을 만들었을 때, 불용어인 the는 어떤 문서이든 자주 등장할 수 밖에 없다.
그런데 유사한 문서인지 비교하고 싶은 문서1, 문서2, 문서3에서 동일하게 the가 빈도수가 높다고 해서 이 문서들이 유사한 문서라고 판단해서는 안 된다.
3 . TF-IDF( Term Frequency-Inverse Document Frequency)

TF-IDF는 DTM 내에 있는 각 단어에 대한 중요도를 계산할 수 있는 가중치이다.
기존의 DTM을 사용하는 것 보다 많은 정보를 고려하여 문서들을 비교할 수 있다.
TF-IDF는 단어의 빈도와 역 문서 빈도를 사용하여 DTM 내의 각 단어들마다 중요한 정도를 가중치로 주는 방법이다.
우선 DTM을 만든 후, TF-IDF 가중치를 부여하게 된다. 한마디로 TF-IDF 는 가중치라고 보면 된다.
TF-IDF는 TF와 IDF 를 곱한 값을 의미하는데
(1) tf(d,t) : 특정 문서 d에서의 특정 단어 t의 등장 횟수.
(2) df(t) : 특정 단어 t가 등장한 문서의 수.
(3) idf(d, t) : df(t)에 반비례하는 수.
입니다.
TF-IDF는 모든 문서에서 자주 등장하는 단어는 중요도가 낮다고 판단하며, 특정 문서에서만 자주 등장하는 단어는 중요도가 높다고 판단한다.
TF-IDF 값이 낮으면 중요도가 낮은 것이며, TF-IDF 값이 크면 중요도가 큰 것이다.
즉, the나 a와 같이 불용어의 경우에는 모든 문서에 자주 등장하기 마련이기 때문에
자연스럽게 불용어의 TF-IDF의 값은 다른 단어의 TF-IDF에 비해서 낮아지게 된다.
| 문서1 | 0 | 0 | 0 | 0.287682 | 0 | 0.693147 | 0.287682 | 0 | 0 |
| 문서2 | 0 | 0 | 0 | 0.287682 | 0.287682 | 0 | 0.287682 | 0 | 0 |
| 문서3 | 0 | 0.693147 | 0.693147 | 0 | 0.575364 | 0 | 0 | 0 | 0 |
| 문서4 | 0.693147 | 0 | 0 | 0 | 0 | 0 | 0 | 0.693147 | 0.693147 |
출처 : 자연어처리 위키독스
'자연어처리' 카테고리의 다른 글
| Long Short - Term Memory , LSTM (1) | 2023.09.07 |
|---|---|
| Recurrent Neural Network , 순환 신경망 (0) | 2023.09.06 |
| 워드 임베딩(Word Embedding) 이란? (0) | 2023.08.28 |
| [2] 자연어처리에서의 언어 모델 : 한국어에서의 언어 모델(Language Model for Korean Sentences) (0) | 2023.07.21 |
| [1] 자연어처리에서의 언어 모델 : 언어 모델(Language Model) (0) | 2023.07.21 |