summ의 블로그

자연어처리 (2) w2v & glove 본문

자연어처리

자연어처리 (2) w2v & glove

summ._ 2024. 9. 30. 23:30

자연어 처리의 모든 것

 

 

https://www.boostcourse.org/ai330/joinLectures/369533

 

자연어 처리의 모든 것

부스트코스 무료 강의

www.boostcourse.org

 

 

 

w2v 

 

희소 표현 vs 밀집 표현 

 

  • 희소 표현

: one-hot encoding 으로 표현. 벡터나 행렬의 값이 0과 1로만 이루어짐 

단어의 갯수가 크면 클수록 고차원의 벡터가 만들어지며, 해당 단어만 1이고 나머지는 다 0으로 처리됨

→ '메모리 공간 부족' 이라는 문제점이 발생함

 

 

밀집 표현

 

: 단어의 갯수와 상관없이 차원을 사용자가 설정함. 백터나 행렬의 값이 실수로 이루어짐

워드 임베딩이 밀집 표현에 해당함 

 

이러한 밀집 벡터가 워드 임베딩을 통해 나온 결과로 embedding vector 라고 한다. 

 

+ 분산 표현:  단어의 의미를 벡터의 여러 차원에 분산해서 표현하기에 분산표현이라고 한다. 

 

 

w2v 

 

  • 기본 가정 

문장에 나타나는 인접한 단어들 간 의미가 비슷할 것이다. 

 

  • 처리 과정

: tokenizing 한 text 사전인 학습 데이터를 갖고 dimension 수를 미리 지정해서 input으로 넣는다. 학습 후 해당 좌표에서 단어에 대한 좌표나 벡터를 output으로 산출한다. 

 

비슷한 의미를 가지는 단어가 좌표 공간 상 비슷한 위치의 점으로 mapping 하여 단어의 의미상 유사도를 처리한다. 

' 유사한 단어는 가까이, 유사하지 않은 단어는 멀리 위치하는 '

 

 

ex. I study math. 

 

- tokenize: I / study / math 

 

- 각 단어에 대한 window size 를 옮겨가며 단어쌍을 만들 수 있다. 

 

i 를 중심으로 왼쪽 - x 오른쪽 - (I, study)

study 를 중심으로 왼쪽 - (study, I) 오른쪽 - (study, math)

math 를 중심으로 왼쪽 - (math, study) 오른쪽 - x

 

- 문장의 중심 단어인 study 를 중심으로 Word2Vec 계산

input output 차원은 단어의 갯수와 동일해야 하며, hidden layer는 hyper parameter이기에 직접 지정

 

따라서 위의 예제에선 input output 3차원, hidden layer 2차원으로 지정 

study = {0,1,0} 열벡터 input 3차원 (3,1)

hidden layer 

output 3차원 (3,1)

 

 

w계산 

 

* 행렬 곱셉의 규칙: 입력 벡터가 열벡터라면? w1 * input 입력 벡터가 행벡터라면? input * w1T (transpose)

 

위의 예제에서 input은 열벡터 이기 때문에, w1 * input() 의 결과가 hidden layer에 맞는 (2,1) 이어야 한다. 

따라서 w1 = (2,3) 

==> (2,3) (3,1) hidden layer (2,1) 

 

 

이후 output 이 (3,1) 이기에 

w2 * hidden layer (2,1) = (3,1) 

w2 = (3,2)  

 

 

 

이후 softmax 변형을 통해 출력 벡터를 확률 분포로 변환함

softmax의 결과: 각 단어가 선택될 확률로 최종 단어와 거리가 최대한 가까워지도록 함

 

 

결론적으로

단어 간의 의미적 유사성을 학습하고, 의미적으로 가까운 단어들이 벡터 공간에서 가까운 위치에 있도록 가중치weight를 조정하는 방식으로 작동

 

 

cbow

 

Continuous Bag of Words 

: 주변 단어 (context word) 들을 입력으로 하여 중간에 있는 단어 (center word) 들을 예측하는 방법

중심 단어와의 거리가 가까워지도록 가중치를 학습

 

 

skip-gram 

 

: 중심 단어에서 주변 단어를 예측하는 방법으로 희소 데이터셋에서 성능이 더 우수

 

 

+++ Word2Vec 모델에서 입력은 실제로 원핫벡터가 아니고 보다 쉬운 설명과 이해를 위해 원핫벡터를 이용한 것임.

모델은 실수 기반의 밀집 벡터를 생성하고 사용함

 

 

 

 

https://github.com/dhammack/Word2VecExample

 

GitHub - dhammack/Word2VecExample: An example application using Word2Vec. Given a list of words, it finds the one which isn't 'l

An example application using Word2Vec. Given a list of words, it finds the one which isn't 'like' the others - a typical language understanding evaluation task. - dhammack/Word2VecExample

github.com

 

 

https://word2vec.kr/search/

 

Korean Word2Vec

ABOUT 이곳은 단어의 효율적인 의미 추정 기법(Word2Vec 알고리즘)을 우리말에 적용해 본 실험 공간입니다. Word2Vec 알고리즘은 인공 신경망을 생성해 각각의 한국어 형태소를 1,000차원의 벡터 스페이

word2vec.kr

 

 

GloVe

 

Global Vectors for Word Representation

 

학습 data에서 두 단어가 한 개의 window 내에서 총 몇번 동시에 등장하는가? 

에 대한 정보를 사용한다. 

 

단어 쌍이 동시에 등장하는 횟수를 미리 계산하여 log값을 취한 것을 빼 과도한 빈도차이, = 사전에 계산된 값의 차이를 줄여가는 형태로 학습  

 

 

 

 

input word vector ui output word vector vj 내적값 uiTvj 

두 단어 벡터 간의 내적(혹은 유사도)을 실제 동시 발생 빈도와 비교하여 차이를 줄이는 방식으로 학습

 

중복 제거해도 w2v보다 학습이 빠르며 적은 데이터, 추천 system에 적용중이다. 

why? 동시 발생 행렬을 미리 계산하고, 학습하기 때문

 

==> 문법적인 관계의 단어들도 학습을 잘함

 

pre trained word vectors 이미 만들어진 dataset이 존재하며 6b 40만개의 데이터가 오픈소스로 존재한다. 

 

손실 함수에서 사용하는 가중치 함수

: 동시 출현 빈도가 높은 단어 쌍에 낮은 가중치를 부여하고, 동시 출현 빈도가 낮은 단어 쌍에 높은 가중치를 부여

 

 

 

 

 

 

* 참고자료 https://wikidocs.net/22644

 

09. 워드 임베딩(Word Embedding)

텍스트를 컴퓨터가 이해하고, 효율적으로 처리하게 하기 위해서는 컴퓨터가 이해할 수 있도록 텍스트를 적절히 숫자로 변환해야 합니다. 단어를 표현하는 방법에 따라서 자연어 처리의 성…

wikidocs.net

 

glove의 수식 시간이 된다면 이해해보기  

'자연어처리' 카테고리의 다른 글

자연어처리 (6) transformer  (1) 2024.11.09
자연어처리 (5) 출력값 생성기법  (1) 2024.10.29
자연어처리 (4) seq2seq with attention  (1) 2024.10.24
자연어처리 (3) RNN  (0) 2024.10.15
자연어처리 (1)  (1) 2024.09.30