본문 바로가기

딥러닝

단어의 의미를 파악하는 방법 (4)

단어의 의미를 파악하는 기법으로 (1) 사람이 수작업으로 레이블링하는 시소러스를 활용한 기법과 텍스트 데이터로부터 단어의 의미를 자동으로 추출하는 (2) 통계 기반 기법, (3) 추론 기반 기법이 있다.

 

1. 추론 기반 기법과 신경망

단어를 벡터로 표현하는 방법은 크게 '통계 기반 기법'과 '추론 기반 기법' 두 부류로 나눌 수 있다. 두 방법은 단어의 의미를 얻는 방식은 서로 다르지만, 두 방법 모두 분포 가설에 기반한다.

1.1 통계 기반 기법의 문제점

■ 통계 기반 기법에서는 주변 단어의 빈도로 단어를 표현한다. 단어의 동시발생 행렬을 만들어 PPMI 행렬로 변환하고, PPMI 행렬에 SVD를 적용해 차원을 감소시킴으로써 밀집 벡터(단어의 분산 표현)를 얻는다.

그러나 이런 방식은 대규모 말뭉치를 처리할 때 문제가 발생한다. 어휘가 N 개라면 N x N 크기의 행렬이 생성되는데, 이때  N이 1만, 10만, 100만으로 증가할수록 행렬의 크기는 1만 x 1만, 10만 x 10만, 100만 x 100만으로 거대해진다. 결과적으로, 이러한 거대 행렬을 SVD로 처리하는 데  시간과 컴퓨팅 자원 측면에서 큰 어려움이 생긴다.

■ 이렇게 어휘 수에 따라 행렬의 크기가 커지는 이유는 통계 기반 기법이 말뭉치 전체의 통계(동시발생 행렬과 PPMI 등)를 이용해 단 1회의 처리(SVD 등) 만에 단어의 분산 표현을 얻기 때문이다.

■ 반면, 추론 기반 기법에서 신경망을 이용하는 경우 미니배치 학습을 수행하는 경우가 일반적인데, 이는 학습 데이터를 한꺼번에 처리하는 통계 기반 기법(배치 학습)과 달리 소량의 학습 샘플(미니배치)을 순차적으로 학습한다.

■ 따라서 추론 기반 기법은 말뭉치의 어휘 수가 많아도 학습이 가능하다. 또한 GPU 병렬 계산으로 학습 속도를 높일 수 있다.

 

1.2 추론 기반 기법이란

■ 추론 기반 기법은 다음과 같이 맥락이 주어졌을 때 '?'에 어떤 단어가 들어가는지 주변 단어들을 이용해 추측하는 방법이다.

신경망 모델은 '?' 자리에 적절한 단어를 채우는 추론 문제를 반복적으로 해결하면서 단어의 출현 패턴을 학습한 다음, '?' 자리에 올 수 있는 단어들의 출현 확률을 계산한다.

 

1.3 신경망에서의 단어 처리

신경망은 단어를 있는 그대로 처리할 수 없어 단어를 '고정 길이의 벡터'로 변환해야 한다. 왜냐하면, 신경망의 계층들은 벡터를 처리할 수 있기 때문이다.

■ 대표적인 방법으로 단어를 원핫 벡터로 변환하는 방법이 있다. 

■ 원핫 벡터로 변환하는 방법은 말뭉치에 있는 어휘 수만큼의 원소를 갖는 벡터에 단어 ID와 같은 인덱스의 원소에 1, 나머지는 모두 0으로 설정한다.

 예를 들어 'You say goodbye and I say hello.'의 경우 총 어휘 수는 7개이며, 단어 ID와 단어의 매핑 관계는 다음과 같다.

# 단어 ID : 단어
id_to_word
```#결과#```
{0: 'you', 1: 'say', 2: 'goodbye', 3: 'and', 4: 'i', 5: 'hello', 6: '.'}
````````````

# 총 어휘 수
len(id_to_word)
```#결과#```
7
````````````

- 총 어휘의 개수가 7개이므로 벡터의 원소는 7개이다.

- 이때, 단어 'you'의 ID는 0이므로 'you'를 원핫 벡터로 변환하면 벡터 인덱스 0에 원소 1을, 나머지 원소에 0을 넣으면 된다.

- 다른 예로, 단어 'hello'의 ID는 5이므로 'hello'의 원핫 벡터는 벡터의 인덱스 5에 원소 1을, 나머지 원소는 0인 형태의 벡터가 된다.

- 모든 단어를 원핫 벡터로 나타내면 다음과 같다.

■ 이렇게 단어를 고정 길이 벡터로 변환하면 신경망의 입력층은 뉴런의 수를 고정할 수 있다.

- 어휘의 수가 7개라면, 입력층은 7개의 뉴런을 갖는다. 더 정확히 말하면, 7개의 뉴런은 순서대로 7개 단어들에 대응되기 때문에(첫 번째 뉴런은 'you'에, 두 번째 뉴런은 'say'에, ... , 마지막 뉴런은 '.'에 대응) 뉴런의 수를 고정할 수 있는 것이다.

■ 이제, 입력층에 은닉층을 연결하면 각 단어 뉴런들은 다음 그림처럼 은닉층의 뉴런으로 변환된다.

 예를 들어 은닉층의 뉴런 수가 3개이고, 완전연결계층이라면 (편향 생략)

■ 은닉층 뉴런이 3개라면 신경망이 완전연결계층일 때, 입력층과 은닉층 사이 필요한 가중치 매개변수는 21개이며, 이를 가중치 행렬 \( W \)로 나타내면 행렬 \( W \)의 크기는 7 x 3이 된다.

완전연결계층의 계산은 행렬 곱으로 계산할 수 있으므로, 예를 들어 입력층 단어 'you'와 'hello'의 원핫 벡터 [1, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 1, 0, 0]가 가중치를 통과한다면, 다음과 같이 변환된다.

onehot_you = np.array([[1, 0, 0, 0, 0, 0, 0]]) # 입력 
onehot_goodbye = np.array([[0, 0, 1, 0, 0, 0, 0]]) # 입력
W = np.random.randn(7, 3) # 가중치

print(W)
```#결과#```
[[ 1.71916765  2.12148858 -0.61893316]
 [-0.31465345 -0.30287743 -1.39670006]
 [ 0.35970401  1.60319179 -0.60972146]
 [ 1.33899687  1.50685803 -0.182034  ]
 [-0.76604824 -2.14853846 -0.09078516]
 [-1.45676389 -1.48198844  0.81950778]
 [-0.23211396  0.35042162  2.10550312]]
````````````

print(onehot_you.shape, onehot_goodbye.shape, W.shape)
```#결과#```
(1, 7) (1, 7) (7, 3)
````````````

# 행렬 곱
h_1 = np.matmul(onehot_you, W) 
h_2 = np.matmul(onehot_goodbye, W)

print(h_1); print(h_2)
```#결과#```
[[ 1.71916765  2.12148858 -0.61893316]]
[[-1.45676389 -1.48198844  0.81950778]]
````````````

■ 이 행렬 곱의 계산 결과는 단어의 원핫 벡터가 단어 ID에 대응하는 원소만 1이고 나머지 원소는 0인 벡터이기 때문에 가중치 행렬과 행렬 곱을 계산하면 가중치의 행백터 하나를 추출한 것과 같다.

 

2. word2vec - CBOW(Continuous Bag of Words) 신경망

CBOW 모델은 주변 단어로부터 타깃 단어를 추측하는 방식으로 작동하는 신경망이다.

CBOW 모델의 입력은 타깃 단어의 주변 단어이다. 따라서 입력으로 사용할 주변 단어들을 원핫 벡터로 변환해야 한다.

모델의 구조는 입력층, 은닉층, 출력층으로 구성되며 활성화 함수를 사용하지 않는다.

만약, 타깃 단어의 주변 단어가 \( n \) 개라면, CBOW 신경망은 입력층 \(n \) 개를 사용한다.

[출처] Introduction to Word Embedding and Word2Vec ❘ by Dhruvil Karani ❘ Towards Data Science

■ 예를 들어 'You say goodbye and I say hello.'에서 타깃 단어가 'say'이고 주변 단어가 'you'와 'goodbye' 2개라면, CBOW 신경망의 구조는 다음과 같다.

- 두 개의 입력층에서 은닉층 뉴런으로의 변환은 똑같은 가중치 \( W_{\text{in}} \), 은닉층에서 출력층 뉴런으로의 변환은 가중치  \( W_{\text{out}} \)이 처리한다.

■ 입력층에서 가중치를 통과해 변환된 값은 은닉층의 뉴런으로 들어가는데, 만약 입력층이 \( n \) 개이면, 가중치를 통과한 값 \( n \) 개를 평균 내면 된다.

■ 예를 들어 이 예에서 완전연결계층에 의해 첫 번째 입력층이 \( h_1 \), 두 번째 입력층이 \( h_2 \)로 변환되었다면, 은닉층 뉴런은 \( \dfrac{1}{2} (h_1 + h_2) \)가 된다.

■ 입력층에서 은닉층으로의 변환은 가중치 \( W_{in} \)에 의해 이뤄지는데, 입력층 뉴런이 \( m \)개, 은닉층 뉴런이 \( n \)개일 때 가중치 \(W_{\text{in m x n}} \) 행렬의 각 행은 각 단어의 분산 표현이다.

■ 예를 들어 입력층의 첫 번째 뉴런이 단어 'you'이면, 가중치 행렬 \(W_{\text{in m x n}} \)의 1행은 단어 'you'에 대한 분산 표현이다.

■ 즉, 가중치가 단어의 분산 표현이므로 학습을 진행할수록 출현 단어를 올바르게 추측하는 방향으로 분산 표현(가중치)이 업데이트된다.

■ 따라서 입력층보다 은닉층의 뉴런을 더 적은 수로 구성하는 것이 중요하다. 이는 은닉층이 단어 예측에 필수적인 정보만을 압축하여 담게 되고, 결과적으로 밀집 벡터 표현을 얻을 수 있게 해주기 때문이다.

cf) CBOW 모델은 가중치 \( W_in, W_out \)에 단어의 출현 패턴을 파악한 벡터가 학습된다. 이때, 말뭉치로부터 단어 출현 패턴을 학습하기 때문에 말뭉치가 다르면 문맥(주변 단어)이 달라지므로 동일한 단어라도 학습 후 얻게 되는 단어의 분산 표현이 달라진다.

- 예를 들어 말뭉치가 과학적인 텍스트로 구성되어 있다면 'apple'이라는 단어는 'gravity'나 'Newton'같은 단어와 자주 등장할 수 있다. 반면, 요리 관련 말뭉치에서는 'apple'이 'pie', 'dessert'같은 단어와 자주 연관될 것이다.

- CBOW 모델은 학습에 사용된 말뭉치의 특성을 반영해 단어의 분산 표현을 생성하기 때문에 과학 말뭉치와 요리 말뭉치로부터 얻은 단어의 분산 표현은 크게 다를 것이다.

■ 마지막으로, 각 단어의 출현 확률분포를 구하기 위해 은닉층에서 출력층으로 각 단어에 대한 점수(score)가 들어가고 이 점수에 softmax 함수를 적용하면, 각 단어에 대한 출현 확률 값을 얻을 수 있다. 소프트맥스 함수를 사용하기 때문에 단어의 점수가 높을수록 출확률 값도 높아진다.

■ 이와 같은 입력층 \( \rightarrow \) 은닉층 \( \rightarrow \) 출력층의 과정을 계층 관점에서 보면

입력으로 사용할 주변 단어 개수만큼의 동일한 행렬 곱 계층이 필요하다. 사용한 주변 단어가 \( n \) 개라면, \( n \) 개의 행렬 곱 계층의 출력을 더한 다음, 더한 값에 \( \dfrac{1}{n} \)을 곱해 평균을 계산한다. 평균 값은 은닉층 뉴런이 된다.(이 예에서는 2개의 주변 단어를 사용했기 때문에 더한 값에 0.5를 곱한다.) 마지막으로 각 단어의 점수를 계산하기 위해 은닉층에 또 다른 행렬 곱 계층을 적용한다.

onehot_you = np.array([[1, 0, 0, 0, 0, 0, 0]]) # 입력 
onehot_goodbye = np.array([[0, 0, 1, 0, 0, 0, 0]]) # 입력

W_in = np.random.randn(7, 3) # 입력층 - 은닉층의 가중치
W_out = np.random.randn(3, 7) # 은닉층 - 출력층의 가중치

## 은닉층 계산 과정
h_1 = np.matmul(onehot_you, W_in) 
h_2 = np.matmul(onehot_goodbye, W_in)

print(h_1);print(h_2)
```#결과#```
[[-0.92272923  1.15963422  0.60772074]]
[[-0.0814466  -0.24956729  1.25630928]]
````````````

h = (h_1 + h_2) * 0.5 # 주변 단어 2개 사용 -> *0.5로 평균 계산
h
```#결과#```
array([[-0.50208791,  0.45503347,  0.93201501]])
````````````

## 출력층 계산
output_score = np.matmul(h, W_out)
output_score # 각 단어의 점수
```#결과#```
array([[-0.68642997,  2.34656087, -0.43759844, -0.9331593 ,  0.72424969,
         1.57784615, -2.78361802]])
````````````

- 이렇게 CBOW 모델은 입력층이 여러 개이면, 입력층들은 동일한 가중치를 사용하여 행렬 곱을 계산한다.

 

2.1 CBOW 모델의 학습

CBOW 모델에서 출력층의 각 단어 점수를 기반으로 softmax 함수를 적용해 다중 클래스 분류를 수행하려면, softmax 결과로 얻은 '단어 출현 확률'과 '정답 레이블'로 '교차 엔트로피 오차'를 계산한 뒤, 이 오차 값을 손실로 활용해 신경망을 학습하면 된다.

CBOW 모델 순전파 과정

 

2.2 word2vec의 가중치와 분산 표현

■ word2vec에서 사용되는 신경망에는 입력 측의 가중치 \( W_{in} \)과 출력 측의 가중치 \( W_{out} \), 이렇게 두 가지 가중치가 있다. 

■ 가중치 행렬 \( W_{in} \)에는 각 단어의 분산 표현이 행 방향으로 저장되고 \( W_{out} \)에는 열 방향으로 각 단어의 분산 표현이 저장된다.

■ word2vec에서는 입력 측의 가중치인 \( W_{in} \)만을 최종 단어의 분산 표현으로 이용하는 것이 일반적이다.

 

2.3 CBOW 모델 구현

단어의 의미를 파악하는 방법 - CBOW 모델 구현

 

2.4 CBOW 모델과 확률

■ \( P(A) \)는 \( A \)라는 현상이 발생할 확률, \( P(A, B) \)는 \( A \)와 \( B \)가 동시에 발생할 확률(동시 확률), \( P(A \mid B) \)는 \( B \)라는 정보가 주어졌을 때 \( A \)가 일어날 확률(사후 확률)을 의미한다.

■ CBOW 모델을 확률의 관점에서 보면 주변 단어가 주어졌을 때, 타깃 단어가 출현할 확률을 구하는 것으로 말뭉치를 \( w_1, w_2, \ldots, w_{t-1}, w_t, w_{t+1}, \ldots, w_{T-1}, w_{T} \)처럼 단어 시퀀스로 표기했을 때 윈도우 크기가 1이고 타깃 단어가 \( w_t \)라면 

\( w_{t-1}과 w_{t+1} \)이 주어졌을 때 타깃 단어 \(w_t \)일 확률은 \( P(w_t \mid w_{t-1}, w_{t+1}) \)로 나타낼 수 있다. 즉, CBOW는 \( P(w_t \mid w_{t-1}, w_{t+1}) \) 식을 모델링한 것이다.

■ CBOW 모델로 다중 클래스 분류 문제를 해결하기 위해, 모델을 학습시키고자 교차 엔트로피 오차를 사용했다.

■ 교차 엔트로피 오차의 식은 \( L = - \displaystyle \sum_{k} t_{k} \log y_{k} \)이며 \( y_k \)는 \( k \)번 째에 해당하는 사건이 일어날 확률이다. \( t_k \)가 원핫 벡터로 표현된 정답 레이블이면 \( w_t \)에 해당하는 원소만 1이고 나머지 원소는 0으로 구성되어 있다.

손실 함수의 값은 예측 값이 정답에 가까울수록 loss가 작은 값을, 예측 값이 정답과 거리가 멀 수록 loss가 큰 값을 가지며, 최종 목표는 loss 값을 최소화하는 것이라는 개념과 정답 레이블이 원핫 벡터일 때의 교차 엔트로피 오차의 작동 방식을 생각한다면,

신경망 학습(1)

 

신경망 학습(1)

1. 학습■ 신경망 '학습'에서 학습은 train set으로 가중치 매개변수의 최적값을 자동으로 얻는 것을 의미한다.■ 신경망이 학습할 수 있도록 기준이 되는 지표는 손실 함수이며, 이 손실 함수의 결

hyeon-jae.tistory.com

■ CBOW 모델의 손실 함수는 확률 \( P(w_t \mid w_{t-1}, w_{t+1}) \)에 \( -\log \)를 취한 식과 동일하다. 이렇게 \( -\log \)을 취한 형태를 음의 로그 기능도(negative log likelihood)라고 한다. \[ L = -\log P(w_t \mid w_{t-1}, w_{t+1}) \] ■ 예를 들어 \( w_t \) = 'say'이고 \( w_{t-1} \)이 'you', \( w_{t+1} \)이 'goodbye'일 때

- 모델 학습 과정에서 추정한 \( P(w_t \mid w_{t-1}, w_{t+1}) = 0.2 \)라면, 손실 함수 \( L = -\log 0,2 \approx 1.609 \)가 된다.

- 학습이 진행되면서 만약, \( P(w_t \mid w_{t-1}, w_{t+1}) = 0.8 \)이 된다면 \( L = -\log 0.8 \approx 0.223 \), 손실 값은 작아진다.

\( L = -\log P(w_t \mid w_{t-1}, w_{t+1}) \), 이 식은 샘플 데이터 하나에 대한 손실 함수이며, 이 식을 말뭉치 전체 \( (w_1, w_2, \ldots, w_{T-1}, w_{T}) \)로 확장하면 다음 식이 성립한다. \[ L = -\dfrac{1}{T} \displaystyle\sum_{t=1}^T \log P(w_t \mid w_{t-1}, w_{t+1}) \] - 데이터가 늘어날수록 loss가 커질 수 있다. 따라서 \( T \)개의 데이터로 확장된 것과 상관없이 loss를 균등하게 수치화하기 위해 \(
\displaystyle\sum_{t=1}^T \log P(w_t \mid w_{t-1}, w_{t+1})
\)에 \( \dfrac{1}{T} \)을 곱한 것이다.

최종 목표는 loss 값을 최소화하는 것이기 때문에 CBOW 모델의 학습 과정은 손실 함수 \( L = -\dfrac{1}{T} \displaystyle\sum_{t=1}^T \log P(w_t \mid w_{t-1}, w_{t+1}) \) 값을 가능한 최소화하는 것이며, 이때의 가중치 매개변수가 얻고자 하는 단어의 분산 표현이 된다.

 

3. word2vec - skip-gram

■ word2vec에는 CBOW 모델과 skip-gram 모델이 있으며, skip-gram은 입력된 주변 단어와 타깃 단어를 역전시켜 추측하는 모델이다.

■ 예를 들어 'you say goodbye and I say hello.'에서 윈도우 크기가 1이고, 타깃 단어가 'say'일 때, CBOW 모델은 왼쪽 그림과 같이 주변 단어로부터 타깃 단어를 추측하지만, skip-gram은 오른쪽 그림과 같이 타깃 단어로부터 주변의 단어를 추측한다.

CBOW 모델 vs. skip-gram 모델

■ 따라서 skip-gram의 신경망 구조는 다음 그림처럼 CBOW의 입력층과 출력층이 서로 바뀐 구조이다.

CBOW 신경망 구조 vs. skio-gram 신경망 구조

■ CBOW 모델과 정반대로 skip-gram의 입력층은 한 개이고, 출력층은 주변 단어 개수만큼 존재한다.

■ 따라서 다중 클래스 분류를 수행하기 위해 손실을 계산할 때 Softmax와 Cross Entropy Error를 사용한다면, 최종 손실은 각 출력층마다 개별적으로 손실을 구한 다음, 이 개별 손실들을 모두 더한 값을 사용한다.

■ skip-gram 모델을 확률의 관점에서 보면 CBOW 모델과 정반대로 타깃 단어 \( w_t \)가 주어졌을 때, 주변 단어가 \( w_{t-1}, w_{t+1} \)일 확률 \( P(w_{t-1}, w_{t+1} \mid w_t) \)를 구하는 것이며, skip-gram은 \( P(w_{t-1}, w_{t+1} \mid w_t) \) 식을 모델링한 것이다.

\( P(w_{t-1}, w_{t+1} \mid w_t) \)에서 skip-gram은 주변 단어들 사이에 조건부 독립을 가정한다. 즉, 주변 단어들 사이에 관련성이 없다고 가정한다.

■ 따라서 \( P(w_{t-1}, w_{t+1} \mid w_t) = P(w_{t-1} \mid w_t) \cdot P(w_{t+1} \mid w_t) \)가 성립한다. 이 식에도 \( -\log \)를 취해 skip-gram 모델의 손실 함수를 다음과 같이 나타낼 수 있다. \[
\begin{aligned}
L &= -\log P(w_{t-1}, w_{t+1} \mid w_t) \\
  &\quad = -\log P(w_{t-1} \mid w_t) \cdot P(w_{t+1} \mid w_t) \quad \log xy = \log x + \log y \text{이므로} \\
  &\quad = -\big(\log P(w_{t-1} \mid w_t) + \log P(w_{t+1} \mid w_t)\big)
\end{aligned}
\] ■ \( L = -\big(\log P(w_{t-1} \mid w_t) + \log P(w_{t+1} \mid w_t)\big) \) 식에서 볼 수 있듯이 skip-gram 모델의 손실 함수는 주변 단어들의 손실을 구한 다음, 이 개별 손실들을 모두 더한 값을 최종 손실 \( L \)로 사용한다.
이 식을 말뭉치 전체 \( (w_1, w_2, \ldots, w_{T-1}, w_{T}) \)로 확장하면 다음 식이 성립한다. \[ L = -\frac{1}{T} \sum_{t=1}^T \big(\log P(w_{t-1} \mid w_t) + \log P(w_{t+1} \mid w_t)\big) \] CBOW의 손실 함수는 \( L = -\dfrac{1}{T} \displaystyle\sum_{t=1}^T \log P(w_t \mid w_{t-1}, w_{t+1}) \), skip-gram의 손실 함수는 \( L = -\frac{1}{T} \sum_{t=1}^T \big(\log P(w_{t-1} \mid w_t) + \log P(w_{t+1} \mid w_t)\big) \)으로

- CBOW 모델은 타깃 단어의 손실 하나만 계산하고 skip-gram 모델은 주변 단어들의 손실을 모두 계산하기 때문에 학습 속도에서는 CBOW 모델이 skip-gram 모델보다 더 빠르다.

- 그러나, skip-gram 모델은 타깃 단어의 주변 단어를 계산한다는 점에서 CBOW 모델보다 단어 분산 표현의 정밀도가 우수하다.

https://towardsdatascience.com/nlp-101-word2vec-skip-gram-and-cbow-93512ee24314

 

NLP 101: Word2Vec — Skip-gram and CBOW

A crash course in word embedding.

towardsdatascience.com

- 타깃 단어의 맥락을 고려하기 때문에 학습 데이터가 적어도 CBOW보다 더 잘 작동할 수 있고 저빈도 단어나 유추 문제도 잘 표현할 수 있으며, 서로 다른 말뭉치를 사용하더라도 다의어의 의미를 더 정확하게 반영할 수 있을 것이다.

- 특히, 말뭉치가 커질수록 전반적으로 skip-gram이 CBOW보다 성능이 더 우수하다고 알려져 있다.

skip-gram 모델 구현

단어의 의미를 파악하는 방법 - skip-gram 모델 구현

 

4. 통계 기반 vs. 추론 기반

4.1 학습 방법

■ 통계 기반 기법은 말뭉치의 전체 통계(동시발생 행렬과 PPMI 등)로부터 1회 학습(배치 학습)하여 단어의 분산 표현을 얻는다.

■ 추론 기반 기법은 말뭉치를 일부분씩 여러 번 학습하는 미니배치 학습을 수행하여 통계 기반 기법보다 비교적 대규모 말뭉치를 원활하게 학습할 수 있다.

 

4.2 새로운 단어를 추가해서 단어의 분산 표현을 갱신해야 할 경우

■ 통계 기반 기법은 단 1회만 학습해서 단어의 분산 표현을 얻는 학습 방법 때문에 새로운 단어가 추가되면, 새로운 단어를 포함시켜 모든 계산 과정을 처음부터 다시 수행해서 단어의 분산 표현을 얻어야 한다.

■ 반면, 추론 기반 기법은 새로운 단어를 넣고 기존에 학습한 가중치(새로운 단어 추가 전, 기존 단어들의 분산 표현)를 초깃값으로 사용해 다시 학습을 수행할 수 있기 때문에 기존의 단어 분산 표현에 큰 변동을 주지 않으면서 단어의 분산 표현을 효율적으로 갱신할 수 있다.

■ 통계 기반 기법의 학습 방법이 추론 기반 기법에 비해 비효율적이기 때문에 새로운 단어를 추가해서 단어의 분산 표현을 갱신해야 할 경우 추론 기반 기법이 더 우수하다.

 

4.3 단어의 분산 표현의 성격이나 정밀도

■ 분산 표현의 성격은, 통계 기반 기법의 경우 주로 단어의 유사성이 인코딩된다.

■ 추론 기반 기법은 단어의 유사성뿐만 아니라 단어 사이의 패턴까지 인코딩된다. 예를 들어 word2vec은 'King - Man + Woman = Queen' 같은 유추 문제를 풀어낼 수 있다.

[출처] https://medium.com/analytics-vidhya/word-embeddings-in-nlp-word2vec-glove-fasttext-24d4d4286a73

https://medium.com/analytics-vidhya/word-embeddings-in-nlp-word2vec-glove-fasttext-24d4d4286a73

 

Word Embeddings in NLP | Word2Vec | GloVe | fastText

Word embeddings are word vector representations where words with similar meaning have similar representation. Word vectors are one of the…

medium.com

■ 새로운 단어를 추가해서 단어의 분산 표현을 갱신해야 할 경우와 유추 문제 해결에서 일반적으로 추론 기반 기법이 더 우세하다. 다만, 단어의 유사성과 관련된 작업들에서는 둘 중 어떤 기법이 더 우수한 기법인지 명확히 가릴 수 없다고 알려져 있다.

https://aclanthology.org/Q15-1016/

 

Improving Distributional Similarity with Lessons Learned from Word Embeddings

Omer Levy, Yoav Goldberg, Ido Dagan. Transactions of the Association for Computational Linguistics, Volume 3. 2015.

aclanthology.org

 

4.4 통계 기반과 추론 기반의 융합

■ 통계 기반 기법과 추론 기반 기법은 서로 다른 방식으로 작동하지만, 완전히 대립하지는 않는다. 예를 들어 추론 기반 기법은 skip-gram에서 말뭉치 전체의 동시발생 행렬을 사용하는 경우도 있다.

■ word2vec 이후에 등장한 기법으로, 두 기법의 아이디어를 융합한 GloVe 기법이 있다. 이 기법의 아이디어는 말뭉치 전체의 통계 정보를 손실 함수에 도입해 미니배치 학습을 진행하는 것이다.

 

word2vec 속도 개선

 

 

 

'딥러닝' 카테고리의 다른 글

합성곱 신경망(CNN) (2)  (0) 2024.12.06
word2vec 속도 개선 (1)  (0) 2024.11.27
단어의 의미를 파악하는 방법 (2)  (0) 2024.11.21
단어의 의미를 파악하는 방법 (1)  (0) 2024.11.20
매개변수 갱신 방법(2)  (0) 2024.11.03