본문 바로가기

Heute lerne ich/AI

[엘리스] 문서 유사도 및 언어 모델

<1> 문서 유사도 및 언어 모델

 

01 문서 유사도 측정

문서는 다양한 요소와 이들의 상호작용으로 구성

가장 기본 단위인 단어조차 문서와 관련된 다양한 정보(형태소, 키워드, 개체명, 중의적 단어 …)를 포함

상위 개념인 문장 또한 추가적인 정보(목적어, 주어, 문장 간 관계, 상호 참조 해결)를 제공

 

⇒ 문서의 가장 기본 단위인 단어를 활용하여 문서를 표현

이를 위해 단어 기준으로 생성한 문서 벡터 간의 코사인 유사도 사용

정확한 문서 유사도 측정을 위해 문서의 특징을 잘 보존하는 벡터 표현 방식이 중요


02 Bag of words

문서 내 단어의 빈도수를 기준으로 문서 벡터를 생성

자주 발생하는 단어가 문서의 특징을 나타낸다는 것을 가정

Bag of words 문서 벡터의 차원은 데이터 내 발생하는 모든 단어의 개수와 동일

합성어를 독립적인 단어로 개별 처리 → Bag of N-grams

 

Bag of N-grams

(unigram) : 포근한 / 봄 / 날씨가 / …

N=2 (bi-gram) : 포근한 봄 / 봄 날씨가 / …

⇒ N-gram은 연속된 N개의 단어를 기준으로 텍스트 분석을 수행

Bag of N-grams는 n-gram의 발생 빈도를 기준으로 문서 벡터를 표현 (unigram과 bi-gram 동시 사용 등)

자주 발생하는 단어가 문서의 주요 내용 및 특징을 항상 효과적으로 표현하지는 않음 → TF-IDF

ex) 그리고, 그러나 등

 

TF-IDF(term frequency - inverse document frequency)는 문서 내 상대적으로 자주 발생하는 단어가 더 중요하다는 점을 반영

*사진 출처 : 엘리스 코딩

TF-IDF 기반의 back of words 문서 벡터는 단어의 상대적 중요성을 반영


03 doc2vec

Bag of words : 벡터의 구성 요소가 직관적, 하지만 텍스트 데이터 양이 증가하면 문서 벡터의 차원 증가 → 대부분 단어의 빈도수가 0인 희소 벡터가 생성 → 메모리 제약 및 비효율성 → 차원의 저주(벡터 거리를 보존 못함)!

 

doc2vec : 문서 내 단어 간 문맥적 유사도를 기반으로 문서 벡터를 임베딩, 문서 내 단어의 임베딩 벡터를 학습하면서 문서의 임베딩 또한 지속적으로 학습

유사한 문맥의 문서 임베딩 벡터는 인접한 공간에 위치

ex) 스포츠 기사는 스포츠 기사 끼리 ..

상대적으로 저차원의 공간에서 문서 벡터를 생성 (연속적인 벡터로 표현)


04 N-gram 기반 언어 모델

언어 모델 : 주어진 문장이 텍스트 데이터에서 발생할 확률을 계산하는 모델

이러한 언어 모델을 통해 자동 문장 생성이 가능

ex)

안녕하세용

챗봇 내 핵심 요소 중 하나

 

문장의 발생 확률은 단어가 발생할 조건부 확률의 곱으로 계산

N-gram을 사용하여 단어의 조건부 확률을 근사

ex)

*사진 출처 엘리스 코딩

P(날씨가 | 포근한, 봄) = 전체 데이터 내 “포근한 봄 날씨가”의 빈도수 / 전체 데이터에서 “포근한 봄”의 빈도수

각 N-gram 기반 조건부 확률은 데이터 내 각 n-gram의 빈도수로 계산

문장 생성 시, 주어진 단어 기준 최대 조건부 확률의 단어를 다음 단어로 생성

ex) P(날씨 | 무더운 ,여름) = 0.87 ⇒ 따라서 무더운 여름 다음에 날씨가 생성될 확률이 높음


05 RNN 기반 언어 모델

RNN으로 문장의 각 단어가 주어졌을 때 다음 단어를 예측하는 문제로 언어 모델 학습

문자 단위 언어 모델로 학습 데이터 내 존재하지 않았던 단어 처리 및 생성 가능

모델 학습 시, 문장의 시작과 종료를 의미하는 태그 추가

ex) <start> | 포근한 | 봄 | … 입니다 | <end>

문장 생성시, 주어진 입력값부터 순차적으로 예측 단어 및 문자를 생성

 

단, 고성능 언어 모델은 대용량 데이터와 이를 학습할 수 있는 하드웨어가 필수

 

 

 

+)

실컷 예쁘게 편집해놨더니 tistory는 못 읽어서 안타깝다 :(