일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- pmf
- 조건부확률
- 포아송분포
- 표본평균
- 이산확률질량함수
- 기댓값과 분산
- 모평균
- 모수
- 이변량자료
- 기본행연산
- 수치형자료
- 행사다리꼴
- 첨가행렬
- 베르누이분포
- 균일분포
- 통계학개론
- 누적분포함수
- 수학적확률
- 이항분포
- jupyter notebook
- 범주형자료
- 연속확률변수
- 확률밀도함수
- 사조사
- Anaconda
- 통계학입문
- 피어슨상관계수
- 이산형
- 표본공간
- 절삭평균
- Today
- Total
summ의 블로그
자연어처리 (2) w2v & glove 본문
자연어 처리의 모든 것
https://www.boostcourse.org/ai330/joinLectures/369533
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
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
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 |