Contents
1. 문서 유사도 측정
2. Bag of words
3. doc2vec
4. N-gram 기반 언어 모델
5. RNN 기반 언어 모델
문서는 다양한 요소와 이들의 상호작용으로 구성됩니다.
가장 기본 단위인 단어 조차 문서와 관련된 다양한 정보를 포함합니다.
상위 개념인 문장 또한 추가적인 정보를 제공합니다.
문서는 가장 기본 단위인 단어를 활용하여 문서를 표현합니다.
문서 유사도를 측정하기 위해 단어 기준으로 생성한 문서 벡터 간의 코사인 유사도를 사용합니다.
그렇기 때문에 정확한 문서 유사도 측정을 위해 문서의 특징을 잘 보존하는 벡터 표현 방식이 중요합니다.
우선 문서 내 단어의 빈도수를 기준으로 문서 벡터를 생성합니다.
여기에서 자주 발생하는 단어가 문서의 특징을 나타낸다고 할 수 있습니다.
Bag of words 문서 벡터의 차원은 데이터 내 발생하는 모든 단어의 개수와 동일합니다.
이렇게 단어의 빈도수를 사용하여 벡터를 구성하는 방법이 Bag of words입니다.
물론 이 과정에서 합성어는 독립적인 단어로 개별 처리합니다.
이렇게 N-gram은 연속된 N개의 단어를 기준으로 텍스트 분석을 수행합니다.
Bag of N-grams는 n-gram의 발생 빈도를 사용합니다.
이렇게 생성된 여러 n-gram의 발생 빈도를 모두 합쳐 Bag of N-grams의 문서 벡터가 됩니다.
그러나 자주 발생하는 단어가 문서의 주요 내용 및 특징을 항상 효과적으로 표현하지는 않습니다.
당장 생각해 보아도, 관사 a
나 the
는 어마어마하게 많이 등장할 것입니다.
위의 식을 보면 해당 단어가 들어간 문서의 개수로 총 문서의 개수를 나눈 값을 곱해주는 것을 볼 수 있습니다.
만약 모든 문서에 "봄"이 들어간다면, log(1)
이 되어 계산 값이 0이 될 것입니다.
TF-IDF(term frequency - inverse document frequency)는 문서 내 상대적으로 자주 발생하는 단어가 더 중요하다는 점을 반영합니다.
따라서 TF-IDF 기반의 bag of words 문서 벡터는 단어의 상대적 중요성을 반영할 수 있게 됩니다.
벡터의 구성 요소가 직관적인 것은 bag of words 기반 기법의 큰 장점입니다.
그러나 텍스트 데이터의 양이 증가하면, 문서 벡터의 차원도 증가하게 됩니다.
또한 대부분 단어의 빈도수가 0인 희소(sparse) 벡터가 생성됩니다.
문서 벡터가 이렇게 의미없이 커지게 되면, 메모리 제약과 비효율성이 증가하게 됩니다.
차원이 커지면 커질수록 필요한 데이터의 양이 기하급수적으로 증가하고, 그에 따라 사용 가능한 데이터는 더욱 희소해집니다. 이를 차원의 저주라고 부릅니다.
doc2vec은 문서 내 단어 간 문맥적 유사도를 기반으로 문서 벡터를 임베딩합니다.
또한 문서 내 단어의 임베딩 벡터를 학습하면서 문서의 임베딩 또한 지속적으로 학습합니다.
이에 따라 유사한 문맥의 문서 임베딩 벡터는 인접한 공간에 위치하게 됩니다.
doc2vec을 사용하면 상대적으로 저차원의 공간에서 문서 벡터를 생성하므로, 문서의 개수가 많아질 때 Bag of words 문서 벡터보다 더 유리합니다.
언어 모델이란 주어진 문장이 텍스트 데이터에서 발생할 확률을 계산하는 모델입니다.
언어 모델을 통해 자동 문장 생성이 가능합니다.
이는 챗봇 내 핵심 요소 중 하나입니다.
문장의 발생 확률은 이전 단어에 대해 다음 단어가 발생할 조건부 확률의 곱으로 계산합니다.
여기에서 우리는 N-gram을 사용하여 단어의 조건부 확률을 근사할 수 있습니다.
각 N-gram 기반 조건부 확률은 데이터 내 각 n-gram의 빈도수로 계산합니다.
이를 통해 문장 생성 시, 주어진 단어 기준 최대 조건부 확률의 단어를 다음 단어로 생성합니다.
RNN으로 문장의 각 단어가 주어졌을 때 다음 단어를 예측하는 문제로 언어 모델을 학습합니다.
문자 단위 언어 모델을 사용한다면 학습 데이터 내 존재하지 않았던 단어 처리 및 생성이 가능해집니다.
모델 학습 시, 문장의 시작과 종료를 의미하는 태그(tag)를 추가합니다.
그리고 문장 생성 시, 주어진 입력값부터 순차적으로 예측 단어 및 문자를 생성합니다