Sparse embedding

1. embedding space

 

지문을 vector space에 mapping하여 하나의 vector로 나타냄

 

vector space는 여러 숫자들로 이루어진 포인트들이 모인 상당히 고차원의 추상적인 공간

 

embedding space를 추상적으로 나타낸 그림

 

이렇게 지문을 embedding space 위에 벡터로 나타내면 두 지문 사이 유사성을 두 벡터 사이 거리를 이용해 계산할 수 있다.

 

 

2. bag of words

 

sparse하다는 뜻은 dense의 반댓말로 0이 아닌 숫자가 상당히 적다는 뜻

 

바꿔말하면 대부분이 0인 원소를 가지는 벡터가 sparse vector

 

bag of words의 기본형은 문서에 vocab의 각 단어가 존재하면 1, 존재하지 않으면 0을 부여하여 아주 긴 벡터로 표현하는 방법

 

특정 단어가 존재하는지 아닌지로만 표현함

 

벡터의 길이는 고려하는 vocab size와 동일함

 

vocab에 30만개의 단어가 들어가 있으면 document의 embedding vector는 30만 차원

 

각 dimension이 하나의 단어를 나타냄

 

bag of words의 예시

 

예시에서는 문서 크기와 vocab size가 상당히 작지만 실제로는 문서 크기는 수천, 수백단어는 기본이고 vocab size는 수십만 수백만은 기본

 

 

3. n-gram bag of words

 

기본형은 n=1인 unigram으로 문서 내 단어들 하나하나씩 비교함

 

예를 들어 it was the best of times하면 it, was, the, best, of, times 각각 unigram vocab 각각 한단어씩 비교해서 있으면 1, 없으면 0으로 mapping

 

이 경우 vector의 크기는 vocab size와 동일함

 

그런데 이렇게 하면 각 단어의 순서를 반영하기 어려움

 

n=2인 bigram은 단어를 2개씩 묶은 다음에 2개 단어를 마치 1개 단어처럼 보고 term을 형성함

 

예를 들어 it was the best of times하면 (it, was), (was, the), (the, best), (best,of), (of, times)로 2개씩 묶은 다음에 vocab과 비교함

 

vocab 구성은 N*N으로 vocab*vocab product 집합으로 구성함. 예를 들어 원래 {it,was,the,best,of,times,worst} 이게 vocab이면 {(it,it),(it,was),(it,the),(it,best),....}해서

 

N*N이라고 강의에서 언급은 하셨는데 진짜인지 아무리 검색으로 찾아봐도 못찾겠다..

 

ngram에서 n이 커지면 vocab size가 기하급수적으로 커진다. 요즘 기본이 수십만인데 N=10만이라고만 해도 bigram이면 size가 100억임

 

그러면서 순식간에 embedding vector는 sparse해짐

 

n=2까지는 보통 쓰긴하고 필요에 따라 3도 쓰긴한다고함(trigram)

 

 

4. term value의 결정

 

보통 bag of words는 단어가 존재하면 1, 존재하지 않으면 0으로 표현하는 binary기법

 

binary로 표현하면 단어가 여러번 등장하는 것을 무시함

 

이것의 대안으로 각 단어가 등장하는 빈도수를 표현할 수 있음

 

 

5. bag of words의 단점

 

vocab size가 vector의 차원을 결정함. vocab size가 클수록 vector차원은 커지면서 sparse해짐

 

비슷하게 n-gram에서 n이 커질수록 기하급수적으로 차원이 커짐

 

단어가 존재하는지 존재하지 않는지 여부로 embedding을 하므로 의미가 비슷한데 다른 단어인 경우 이러한 점을 반영하지 못하고 완전한 다른 벡터로 embedding시킴

 

이런 경우 Word2Vec같은 dense embedding이 필요

 

 

6. bag of words의 장점

 

그럼에도 불구하고 bag of words로 인한 sparse vector를 사용하는 이유는 term의 overlap을 잡아내는 것이 유용함

 

검색하고자 하는 단어와 지문내 그 단어가 실제 존재하는지 여부를 검사하기 쉬움

 

 

sparse embedding은 해당 검색 단어가 지문 내에 실제로 존재하는지 여부다

 

 

TAGS.

Comments