워드 임베딩(Word Embedding)
1.희소 표현
▪원핫인코딩: 하나만 1 / 나머지 0
공간 낭비, 단어 구분은 가능하지만 단어의 의미를 이해하기 힘들다.
단어 사이의 유사관계 표현 불가능
->유사도를 계산하지 못하고 차원의 저주에 빠져 속도가 느림.
2.워드 임베딩 = 밀집표현(밀집 벡터(dense vector)의 형태로 표현)
▪Embedding: 임베딩 클래스에 넣어서 차원 축소를 하여 사용
공간 낭비x, 실수로 표현 가능
함께 등장한 단어들이 무엇인지 임베딩에 표현되어 있어
단어의 의미가 어느정도는 반영이된 벡터이다.
학습을 통해서 만들어진다
저차원 공간에 만들어진다.
▪Word2vec: 단어 사이의 유사관계 표현 가능
벡터 연산을 통해 다른 단어를 추론 할 수 있음.
king – man + woman = queen

말뭉치에 나오는 모든 단어를 벡터로 표현함(임의 벡터)
말뭉치의 각 위치 t에 대해, 중심 단어 c가 주어졌을 때 주변에 나오는 단어들 o의 확률이 커지도록 (혹은 반대로 주변에 나오는 단어들 c가 주어졌을 때 중심 단어 c의 확률이 커지도록) 벡터를 조정
->여러 가지 수치를 적절히 나타낼 수 있는 방식이다!
Skipgram <-> CBOW
(1)Skip-Gram 모델
주변 단어로 중심단어를 예측
타겟 단어를 기준으로 앞뒤 2단어씩(윈도우의 크기를 내가 지정할 수 있음) 보게 된다.

(2)Continuous Bag Of Words(CBOW) 모델
중심단어로 주변 단어 예측하기


The Illustrated Word2vec
Word2vec 참고 http://jalammar.github.io/illustrated-word2vec/
The Illustrated Word2vec
Discussions: Hacker News (347 points, 37 comments), Reddit r/MachineLearning (151 points, 19 comments) Translations: Chinese (Simplified), French, Korean, Portuguese, Russian “There is in all things a pattern that is part of our universe. It has symmetry
jalammar.github.io
▪ 주변의 단어를 잘 표현하는 것이 좋은 표현
▪ 주변에 같은 단어들이 나타난다면 두 단어의 표현은 비슷하게
▪Personality Embeddings

a사람에 대한 내향/외향 테스트에서 38/100점으로 수치로 표현하면 특성 하나로 내향/외향

이것을 –1~1 사이로 스케일링
a사람의 한가지 특성을 알고 있지만, 사람 평가에는 하나의 차원으로 하는 것은 너무 빈약해서 추가적인 특성(차원)이 필요하다.

두 개의 차원을 하나의 점으로 표현할 수 있고 그 점까지의 벡터로 표현할 수 있음.

jay는 사람1과 2중 누구와 더 비슷할까?
코사인 유사도를 이용해서 계산해보자

사람1과 더 유사도가 높다.
2개의 차원(특성)을 가지고 사람이 얼마나 다른지 식별할 수 있지만 이 정보도 부족하다.
특성을 더 추가해보자 그런데
+) 특성이 너어어어어무 많으면 오버피팅, 특성이 너무 적으면 언더피팅
+) 다중공선성 독립변수에 다른 독립변수 조합이 해당되는 것을 말함.
+) 참고: https://mindscale.kr/course/%ED%86%B5%EA%B3%84/
▪Word Embedding

“king”을 Wikipedia로 훈련된 GloVe vector로 임베딩 하면 50 벡터 공간으로 출력된다.

임베딩한 “king”을 숫자를 그대로 50개 나열해서 색상을 칠해보았음.

색상으로 비교해 보면 king과 man이 비슷해 보임.
▪Analogies
임베딩된 벡터들을 연산을 통해서 유용하게 추론 유추가 가능하다
“king”: +부호
- “man”: -부호
+ “woman”: +부호





▪Language Modeling

단어 입력시 훈련된 언어모델이 있으면 다음단어에 예측에 하나의 단어만 나오는 것이 아니라
-> 전체 단어의 확률이 모두 나오지만 softmax로 확률이 제일 높은 것을 고르는 것이다.

Look Up Embedding는 워드투 벡터 기법과 유사하다.
각 단어를 임베딩한 것을 가지고 있음. -> 예측 단어가 나온다.
▪Language Model Training

슬라이딩 윈도우 기법
윈도우를 하나 설정하고 오른쪽으로 한칸씩 이동하며 단어를 추출
-> 데이터 셋 구성(앞 두 개를 피처로 설정 세 번째 단어는 레이블(답))

input이 2~3번째, output이 4번째
▪Look both ways
양쪽 방향을 다 참고한다.

기존: 앞에 5 단어를 보고 마지막 빈칸 채우기

앞의 5개의 단어가 이어져있을 때 여기에는 oo가 들어갈 수 있겠다 예측했다
그런데 사이의 빈칸의 경우(뒤의 정보가 하나더 추가)에는 완전히 달라질 수 있다.
앞에있는 단어의 시퀀스만 신경쓰지말고 뒤에있는 단어도 참조하여 빈칸 단어를 유추해야함. (왼-> 오뿐만아니라 오->왼도 신경써야한다.)
▪Revisiting the training process

입력단어로 not이 학습되지 않은 모델로 들어오면 주변단어를 예측하는 과업을 수행한다.

모델이 만들어져있으면 임베딩 테이블 not에 대한 벡터 값을 찾아 예측 값으로 출력하지만 학습 진행 전이라 엉뚱한 단어 출력

실제 타겟과 모델이 예측한 것의 확률 차이를 계산한 에러값이다.

신경망을 통해서 반복적으로 업데이트해서 에러 값이 0에 가까워지도록 학습한다.
▪Negative Sampling
마지막 단계에서 예측하는 방식과 관련

예측할때는 확률이 가장 큰값을 결과적으로 1로 만들고 나머지는 0으로 만든다.
1에 해당하는 것을 예측 결과로 사용

데이터가 어느 한쪽으로 쏠릴 수 잇어, 이웃이 아닌 단어의 샘플이 필요한다. 그것을 0으로 만들어 줘야한다.
▪Word2vec Training Process
1.학습 전 전처리 작업한다.
2.voc의 크기를 정해주고
3.임베딩 행렬과 컨텍스트 행렬 만들어준다. 단어에 대한 의미가 포함된다.
차원 = 단어 종류 수, 임베딩 사이즈
+)Word2vec임베딩 참고 https://radimrehurek.com/gensim/
Gensim: topic modelling for humans
Efficient topic modelling in Python
radimrehurek.com
행렬의 값은 처음에 랜덤으로 초기화

학습하면 업데이트한 값이 나오고 최종적으로 각각의 단어의 임베딩 벡터가 된다.
-> 한 단어를 4차원 벡터 공간의 좌표로 표현
4. 학습한다.


각 단어 임베딩시 단어에 대한 값 참조, 다음 단어 예측시 각각에 대한 컨텍스트 임베딩과 입력 벡터의 유사도를 나타낼 수 있음. 타겟값과 가까운 것을 찾는다.

두단어 사이의 관계를 나타내는 값 = input*output, 에러를 보고 값을 업데이트 한다.
이 것을 계속 반복해서 최종적인 결과를 컨텍스트 벡터라고 한다.
'자연어처리(NLP) & CHAT GPT > NLP' 카테고리의 다른 글
| [NLP] Seq2eq에서 BERT까지 (0) | 2023.08.07 |
|---|---|
| [NLP] 워드 임베딩(Word Embedding), RNN - 실습 (0) | 2023.08.05 |
| [NLP] LSTM (0) | 2023.08.03 |
| [NLP] 신경망기반 텍스트 분류 - 실습 (0) | 2023.08.02 |
| [NLP] 신경망기반 텍스트 분류 - 개념 (0) | 2023.08.01 |