Embedding Layers
임베딩 레이어는 신경망의 데이터 흐름에 추가 정보를 자동으로 삽입할 수 있는 Keras의 편리한 기능이다. 임베딩 레이어를 사용하면 단어 인덱스 대신 n차원 벡터를 자동으로 삽입할 수 있습. 프로그래머는 자연어 처리 (NLP)와 함께 임베딩 레이어를 사용하는 경우가 많지만, 인덱스 값 자리에 더 긴 벡터를 삽입하고 싶을 때도 이 레이어를 사용할 수 있다. 어떤 면에서 임베딩 레이어는 차원 확장이라고 생각할 수 있다.
|
이제, 어휘 크기가 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가 시작점으로 생성한 임의의 매개변수이다. 일반적으로 임베딩을 전송하거나 이러한 임의의 값을 유용한 값으로 훈련한다.
'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 |