티스토리 뷰

MLDL/Theory

Embedding

Lazyer 2018. 4. 11. 18:59

Word Embedding


1.Word embedding

검색을 통한 클러스터링, 텍스트 분류, 기계 번역과 같이 다양한 분야에서 텍스트 데이터가 사용된다. 딥러닝, 머신러닝을 포함하여 컴퓨터 알고리즘은 원시 형식의 문자 또는 일반 텍스트를 처리할 수 없기 때문에 '문자'의 입력을 숫자로 변환하여야 한다. 문장 속의 "Apple"이 과일인지, 회사인지를 알아내려면 의미론적 관계 및 문맥을 포착하는 단어의 표현을 구현하여야 한다.


"Word Embeddings are Word converted into numbers" 의 문장에서 ["Word","embeddings","are","Word","converted","into","numbers"] 의 단어들이 나올 수 있다. 가장 간단하게 "Word"를 표현하면 [1,0,0,0,0,0,0] 이 될 수 있다.

Word Embedding 은 텍스트처리를 위한 '단어'의 '숫자화'로써 위의 방법 이외에 몇 가지 기법이 존재한다.

  • Frequency based Embedding
  • Prediction based Embedding
    유형들의 특징과 장단점을 알아보자.

 

 

 



1.1 Frequency based Embedding

 

 

 

Frequency based Embedding에서 3가지 유형의 벡터들 볼 수 있다.

  • Count Vector
  • TF-IDF Vector
  • Co-Occurrence Vector

1) Count Vector

문장의 수를 D, 단어 토큰의 수를 N 으로 가정하였을 때, 벡터 행렬 M = (DxN) 크기로 정의된다. M의 행은 각 D의 토큰 빈도를 나타낸다.

D1 : He is a lazy boy. She also lazy.
D2 : Neeraji is lazy person.
N : [He,She,Lazy,Boy,Neeraki,Person]


M 행렬은 D=2 x N=6 행렬이 된다.

  He She lazy boy Neeraji person
D1 1 1 2 1 0 0
D2 0 0 1 0 1 1

각 열은 해당 문장에 매칭되고, 각 칼럼은 행렬 M에 대한 단어 벡터가 되며 'lazy'는 [2,1]의 벡터를 가진다고 볼 수 있다.
이렇게 행렬 M을 만들 때 약간의 작업이 추가될 수 있다.

  • 실제 단어의 수가 수백만개에 이르기 때문에 메트릭스 M의 크기가 너무 커진다. 따라서 빈도수 기반으로 상위의 N개를 추출하여 사용한다.
  • 모든 단어에 대하여 빈도를 표시할 수도 있지만, 문서에 대하여 특정 단어들의 빈도수를 벡터화 할 수도 있다.

2) TF-IDF vectorization

Frequency based Embedding과 비슷하지만 단일 문장에서 뿐만 아니라 전체 Corpus 고려하는 방법이다. 특정 단어가 전체 Corpus에서 나타나는 빈도와 해당 Document에서 나타나는 빈도수를 비교하여, 단어와 Document의 관련성을 표현한다.

  Document1 Document2
this 1 1
is 1 2
about 2 1
Messi 4 0
Tf-idf 1 0

Document1,2에서 단어의 빈도 수가 위와 같다고 해보자. 특정 단어가 모든 문서에서 동일하게 나타난다면 문서와 단어의 관련도는 낮고, 특정 문서에서만 나타난다면 문서와 단어의 관련도가 높을 것이라는 생각에서 출발한다.

IDF = log(N/n) N:문서의 수 n : 단어 t가 나타난 문서의 수

단어에 대한 가중치를 설정함으로써 TF-IDF를 구한다.


IDF(Messi)=log(2/1)=0.301
IDF(This)=log(2/2)=0

TF-IDF (This, Document1) = (1/8) * (0) = 0
TF-IDF (This, Document2) = (1/5) * (0) = 0
TF-IDF(Messi,Document1)=(4/8)*0.301=0.15
TF-IDF(Messi,Document2)=(0/5)*0.301=0.0


This는 Document의 맥락에 영향을 미치지 않으며, Messi는 Documment1과 관련성이 높다고 이해할 수 있다.

3) Co-Occurrence Matrix

'유사한 단어가 함께 발생하는 경향이 있다'는 핵셈 전제를 가지고 시작한다
Apple is fruit.
Mango is fruit.
Apple과 Mango는 비슷한 단어, 맥락에서 발생한다. 두 가지 개념을 익혀두자.

  • Co-occurrence : 주어진 입력에 대하여 단어의 쌍 w1, w2는 context window에 함께 나타난 횟수를 말한다.
  • Context Window : 크기, 방향으로 지정되며 해당 단어에서 좌,우로 크기 내의 단어들을 포함한다.

    'Quick Brown Fox Jump Over The Lazy Dog' 의 occurrence matrix는 다음과 같다.(context size = 2)
  He is not lazy intelligent smart
He 0 4 2 1 2 1
is 4 0 1 2 2 1
not 2 1 0 1 0 0
lazy 1 2 1 0 0 0
intelligent 2 2 0 0 0 0
smart 1 1 0 0 0 0

V개의 단어가 있다고 가정해보자.
  • matrix size는 VxV가 된다. corpus가 매우 커지면 전체 단어 수 또한 매우 커지기 때문에 VxV 행렬의 처리가 힘들어진다.
  • V개의 단어 집합에서 관련성 없는 단어를 제거하고 N개의 새로운 단어 집합을 얻을 수 있다.

VxV의 행렬에서 PCA, SVD을 사용하여 관련성이 높거나 중요한 벡터 k개를 추출 할 수 있으며, 차원은 줄어들지만 동일한 문맥적 의미를 유지할 수 있다. 단어 사이의 의미적 관계를 보존할 수 있으며, 한 번 계산 후 재사용 할 수 있는 장점이 있다.
'Bad'와 'Good'의 단어에 있어서 Context Window내의 단어들이 유사하기 때문에 그 의미적 특성을 캐치할 수 없으며 높은 차원으로 '차원의 저주'와 힘들게 싸워야 한다..


2.2 Prediction based Vector

단어의 벡터적 표현에 있어서 확률을 사용하며, 단어의 유사성 및 유추에 잇어서 상당히 뛰어난 성능을 발휘함이 입증되었다. 흔히 word2vec로 불린다. NLP모델로 시작되었고 이후 엄청난 발전이 이루어졌다. word2vec의 대표적 모델이 CBOW, Skip-gram에 앞서 distributed representation(분산표상), Neural Network Language Model(NNLM) 를 살펴보자.

1) Distributed Representation

통계 기반의 자연어 처리 기법은 임베딩의 핵심으로 여겨진다. 고차원의 단어들을 저차원의 벡터 공간에 존재하게 함으로써 차원의 저주를 해결하고 단어들간의 관계를 효율적으로 나타내기 위해 '분산표상'이 사용된다.

'분산표상'은 기본적으로 비슷한 의미를 지닌 단어는 비슷한 문맥에 등장하는 경향이 있을 것 이라는 핵심 내용을 전제로 한다. 분산표상 벡터의 주된 장점은 벡터들 간의 유사성을 코사인 유사도와 같은 지표를 사용하여 측정 가능 하다는 것이다.

  • V차원의 단어를 D차원에 mapping 할 수 있으며, 단어 간 유사도를 확인할 수 있다.


    dietrivuted_representation
    distributed_representation


    word embedding은 데이터 처리 계층에 자주 사용되며, 문맥 유사도를 잡아내는 데 효율적이라는 사실이 입증되었다. 딥러닝 기반의 NLP모델은 임베딩 벡터를 활용하여 단어, 구, 문장을 표현하며 이는 Counting based 방법과 가장 큰 차이점이다. 워드 임베딩은 주로 문맥(context)를 통해 학습된다.

2) NNLM

분상표상을 학습하는 Bengio et al의 neural language model을 살펴보자.

(2-1)
문장 속에서 빈칸이 주어졌다고 가정해보자. 문장의 처음 단어부터 빈 칸 바로 이전의 단어들이 주어졌을 때, 단어 벡터들 속에서 조건부확률이 최대가 되는 output을 얻는다. 위의 식에서 빈 칸 단어의 특성은 문장의 처음부터 빈 칸의 이전 단어들로 결정된다.
따라서


(2-2)


(2-3)
로 표현된다.


ywty_{w_t}wtw_t 라는 단어에 해당하는 점수 벡터이며, 단어 사전 벡터 V와 동일한 크기의 벡터를 가진다. NNLM의 출력은 소프트맥스 함수를 적용한 V차원의 확률 벡터이며 NNLM은 가장 높은 값을 가진 Index에 해당되는 단어가 실제 정답과 일치하도록 학습을 진행한다. 모델의 입력은
xt=C∗wtx_t = C*w_t (* : 내적)

로써 one-and-hot 벡터인 단어 xtx_t를 C와 wtw_t의 내적으로 표현되는 분산벡터로 만든다.

llnm


NNLM의 출력을 식으로 정리하면 ywt=b+U∗tanh(d+Hxt){y_{w_t}} = b + U*tanh(d+Hx_t) (* : 내적)

dim


으로 표현된다.

  • 계산량이 높아 학습 속도가 느리다.
  • 이전의 단어들에 대해서만 가중치를 부여하며, 이후의 단어들은 무시한다.
  • 이전의 단어들을 보는 개수인 N이 고정되어 있다.

3) RNNLM

rnnlm

NNLM의 형태를 순환형태로 변환한 것이며 Projection Layer가 없다. Input, Output Layer로만 구성되어 있으며 U를 통하여 Word Embedding이 이루어진다.

순차적인 특성 때문에 LLNM과 달릴 단어의 개수인 N이 정해지지 않으며, Otuput이 다음의 Input이 되는 특성으로 Memory역할을 하게 된다.

Projection Layer의 생략으로 연산량이 줄어들어든다.

LLMN과 RLLMN보다 계산 복잡도를 줄이고 더욱 빠른 학습을 위해 Word2Vec가 최근 각광받고 있다고한다.


아래 사이트를 바탕으로 작성 및 첨부하였습니다.
ratsgo's님 블로그
원문_bengio A Neural Probabilistic Language Model
shuuki4님 블로그
https://www.analyticsvidhya.com/blog/2017/06/word-embeddings-count-word2veec/

 

*부족한점, 틀린점이 있다면 댓글달아주시면 정말 감사드리겠습니다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함