일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 부스트코스 서포터즈
- kkuber
- 부스트코스
- 코틀린 배우기
- IT
- 정처기 정리
- 코틀린 기초
- 정보처리기사
- 정보처리기사 내용정리
- edwith
- 코틀린배우기
- 정보처리기사 요약
- 정처기 요약
- 코틀린
- naver
- 정처기
- 정보처리기사 정리
- 정처기 필기
- 정보처리기사 필기
- 코틀린강의
- 코틀린 강의
- 백엔드
- 개발자
- boostcourse
- Kotlin
- 큐버
- 안드로이드
- 코틀린기초
- 한이아지
- 정보처리기사 요약정리
- Today
- Total
초보 개발자의 성장기
한이아지와 함께하는 워드 임베딩(Word Embedding) 본문
📕 Word Embedding
🔸 딥러닝에서의 임베딩은 보통 이산적이고 고차원의 연속된 벡터 표현입니다.
🔸 NLP에서 워드 임베딩은 보통 단어를 연속적인 벡터로 매핑하는 것입니다.
가장 유명한 Word Embedding 기법으로는 Word2Vec이 있습니다.
📗 Word2Vec
Word2Vec은 단어 간 유사도를 반영할 수 있도록 단어의 의미를 벡터화할 수 있는 방법입니다.
한번 한국어 단어를 벡터 연산 해볼까요?
http://w.elnn.kr/search/ ← 여기 사이트의 도움을 받아서 해보겠습니다.
정말 단어가 가지고 있는 어떤 의미들을 가지고 연산을 하고 있는 것 같이 보입니다.
이런 연산이 가능한 이유는 각 단어 벡터가 단어 간 유사도를 반영한 값을 가지고 있기 때문입니다.
Word2Vec은 두 가지 사용 방식이 있습니다.
1. CBOW
2. Skip-Gram
📘 CBOW
CBOW는 주변에 있는 단어들을 가지고 중심에 있는 단어를 예측하는 방법입니다.
예문 : "The fat cat sat on the mat"
예를 들어 갖고 있는 Corpus에 위와 같은 문장이 있다고 해보겠습니다.
{"The", "fat", "cat", "on", "the", "mat"}으로부터 sat을 예측한다고 했을 때 예측해야하는 단어 sat을 중심 단어(center word)라고 하고, 예측에 사용되는 단어들을 주변 단어(context word)라고 합니다.
<그림 1> CBOW를 위한 전체 데이터 셋
중심 단어를 예측하기 위해서 앞, 뒤로 몇 개의 단어를 볼지를 결정했다면 이 범위를 윈도우(window)라고 합니다.
예를 들어서 윈도우 크기가 2이고, 예측하고자 하는 중심 단어가 sat이라고 한다면
앞의 두 단어인 fat와 cat, 그리고 뒤의 두 단어인 on, the를 참고합니다.
윈도우 크기가 n이라고 한다면, 중심 단어를 예측하기 위해 참고하려고 하는 주변 단어는 앞 뒤로 n개가 될 것입니다.
(이 때 중심 단어가 끝 쪽에 있다면 앞 뒤 주변단어 개수가 n개보다 적게 될 경우도 있습니다.)
윈도우 크기를 정했다면, 윈도우를 계속 움직여서 주변 단어와 중심 단어 선택을 바꿔가며 학습을 위한 데이터 셋을 만들 수 있는데, 이 방법을 슬라이딩 윈도우(sliding window)라고 합니다.
현재 위 그림이 윈도우 크기가 2인 슬라이딩 윈도우 방법을 사용하고 있다고 볼 수 있습니다.
또한 Word2Vec에서 입력은 모두 원-핫 벡터가 되어야 하는데, 우측 그림은 중심 단어와 주변 단어를 어떻게 선택했을 때에 따라서 각각 어떤 원-핫 벡터가 되는지를 보여줍니다.
<그림 2> CBOW의 인공 신경망 도식화
도식화를 이용해 CBOW 학습 과정을 다시 한번 살펴보겠습니다.
(1) 학습시킬 문장의 모든 단어들을 one-hot encoding 방식으로 벡터화 합니다.
(2) 하나의 중심단어에 대해 2n개의 주변 단어 벡터를 input값으로 갖게 만듭니다.
(3) 이제 파라미터는 Input에서 Hidden Layer로 가는 파라미터 행렬과 output layer로 가는 파라미터 행렬 2가지 입니다.
★ 이 모델의 목적은 주변단어들이 주어졌을 때 중심 단어의 조건부 확률을 최대화 하는 것입니다.
(4) one-hot encoding 방식의 단어벡터들을 파라미터와 곱하여 embedded word vector를 만듭니다.
(5) 그 다음 2n개의 embedded vector들의 평균을 구합니다. 이 때 평균해서 구한 벡터가 Hidden Layer값이 됩니다.
(6) 이제 output layer로 전달할 값인 score값을 계산해야 합니다.
파라미터 UU를 곱해서 각 단어에 대한 score를 만든다. 가까운 위치의 단어들은 높은 값을 갖도록 해야 한다.
(7) 마지막으로 softmax 함수를 이용해 각 score 값들을 확률 값으로 계산 합니다.
이제 나온 파라미터를 가지고 학습을 진행하면 됩니다.
📘 Skip-gram
Skip-gram은 CBOW와 매커니즘이 동일합니다.
가장 중요한 차이점은 CBOW와는 반대로 중심 단어에서 주변 단어를 예측합니다.
중심 단어에 대해서 주변 단어를 예측하므로 투사층에서 벡터들의 평균을 구하는 과정이 없습니다.
또한 CBOW는 한 번만 업데이트가 가능한 반면 Skip-gram은 같은 단어를 여러 번 업데이트할 수 있기 때문에
일반적으로 CBOW보다 높은 성능을 보여주고 있습니다.
<그림 3> Skip-gram을 위한 전체 데이터 셋
<그림 4> Skip-gram의 인공 신경망 도식화