본문 바로가기
DNN with Keras/NLP with Hugging Face

Embedding Layers

by goatlab 2024. 1. 11.
728x90
반응형
SMALL

Embedding Layers

 

 

임베딩 레이어는 신경망의 데이터 흐름에 추가 정보를 자동으로 삽입할 수 있는 Keras의 편리한 기능이다. 임베딩 레이어를 사용하면 단어 인덱스 대신 n차원 벡터를 자동으로 삽입할 수 있습. 프로그래머는 자연어 처리 (NLP)와 함께 임베딩 레이어를 사용하는 경우가 많지만, 인덱스 값 자리에 더 긴 벡터를 삽입하고 싶을 때도 이 레이어를 사용할 수 있다. 어떤 면에서 임베딩 레이어는 차원 확장이라고 생각할 수 있다.

 

  • input_dim : 어휘의 크기는 어느 정도인지 얼마나 많은 카테고리를 인코딩하고 있는지에 대한 이 매개변수는 "조회 테이블"의 항목 수
  • output_dim : 반환하려는 벡터의 숫자 수
  • input_length : 입력 특징 벡터에 변환해야 하는 항목의 수

 

이제, 어휘 크기가 10인 신경망을 생성하여 0 ~ 9 사이의 값을 4개의 숫자 벡터로 줄인다. 이 신경망은 임베딩을 출력으로 전달하는 것 외에는 아무것도 하지 않는다. 하지만 임베딩이 어떤 역할을 하는지 확인할 수 있다. 들어오는 각 특징 벡터에는 그러한 특징이 두 개씩 있다.

 

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Embedding
import numpy as np

model = Sequential()
embedding_layer = Embedding(input_dim=10, output_dim=4, input_length=2)
model.add(embedding_layer)
model.compile('adam', 'mse')

 

이 신경망의 구조를 살펴본다.

 

model.summary()
Model: "sequential"
_________________________________________________________________
 Layer (type)                Output Shape              Param #   
=================================================================
 embedding (Embedding)       (None, 2, 4)              40        
                                                                 
=================================================================
Total params: 40 (160.00 Byte)
Trainable params: 40 (160.00 Byte)
Non-trainable params: 0 (0.00 Byte)
_________________________________________________________________

 

임베딩 레이어에 불과한 이 신경망의 경우 입력은 크기 2의 벡터이다. 이 두 입력은 0에서 9 사이의 정수이다 (요청된 input_dim 값인 10에 해당). 위의 요약을 보면 임베딩 레이어에 40개의 파라미터가 있다는 것을 알 수 있다. 이 값은 두 입력에 대해 가능한 정수 값 10개 (input_dim) 각각에 대해 4개의 양 (output_dim)을 포함하는 임베디드 룩업 테이블에서 가져온 것이다. 출력은 가로 2 (input_length) 세로 4 (output_dim) 벡터로, 총 출력 크기는 8이며, 이는 위의 요약에 주어진 출력 모양에 해당한다. 이제 두 개의 행으로 신경망을 쿼리해 보겠다. 입력은 신경망을 생성할 때 지정한 대로 두 개의 정수 값이다.

 

input_data = np.array([
    [1, 2]
])

pred = model.predict(input_data)
print(input_data.shape)
print(pred)
1/1 [==============================] - 0s 134ms/step
(1, 2)
[[[-0.02862814 -0.01403201 -0.01289365  0.03813902]
  [-0.04721135  0.0336272   0.02483148 -0.00661988]]]

 

여기에서는 Keras가 각 입력 정수에 대해 조회한 두 개의 길이 4 벡터를 볼 수 있다. Keras는 1이라는 값을 10 x 4 조회 행렬의 두 번째 행으로 대체했다. 마찬가지로 Keras는 조회 행렬의 세 번째 행으로 2 값을 반환했다. 다음 코드는 조회 행렬 전체를 표시한다. 임베딩 레이어는 조회 테이블에서 올바른 행을 삽입하는 것 외에는 수학적 연산을 수행하지 않는다.

 

embedding_layer.get_weights()
[array([[ 0.01829093, -0.0128026 , -0.02350076,  0.03279856],
        [-0.02862814, -0.01403201, -0.01289365,  0.03813902],
        [-0.04721135,  0.0336272 ,  0.02483148, -0.00661988],
        [-0.04586966, -0.03995179, -0.0348855 ,  0.001151  ],
        [-0.03958526, -0.03989649,  0.02246929,  0.02678991],
        [ 0.00999547, -0.02025222,  0.00154229, -0.0155445 ],
        [ 0.03523051,  0.02452383, -0.03256404, -0.0269943 ],
        [ 0.010908  , -0.01657059,  0.04906002,  0.00555729],
        [ 0.02931524, -0.02338985,  0.00278703, -0.0254088 ],
        [-0.00239071,  0.04724098, -0.04171529, -0.00240098]],
       dtype=float32)]

 

위의 값은 Keras가 시작점으로 생성한 임의의 매개변수이다. 일반적으로 임베딩을 전송하거나 이러한 임의의 값을 유용한 값으로 훈련한다.

728x90
반응형
LIST

'DNN with Keras > NLP with Hugging Face' 카테고리의 다른 글

임베딩 훈련 (Training Embedding)  (0) 2024.01.11
임베딩 전송 (Transferring Embedding)  (0) 2024.01.11
Training HUGGING FACE models  (0) 2024.01.11
Tokenizers  (0) 2024.01.10
Hugging Face API (2)  (0) 2024.01.10