신경망에서 임베딩 레이어는 무엇입니까?


92

많은 신경망 라이브러리에는 Keras 또는 Lasagne 와 같은 '임베딩 레이어'가 있습니다.

설명서를 읽었음에도 그 기능을 이해하고 있는지 잘 모르겠습니다. 예를 들어, Keras 문서에서 다음과 같이 말합니다.

양의 정수 (인덱스)를 고정 크기의 밀도 벡터로 변환합니다 (예 : [[4], [20]]-> [[0.25, 0.1], [0.6, -0.2]]

지식이 풍부한 사람이 자신이하는 일과 사용시기를 설명 할 수 있습니까?


편집 : 문서의 붙여 넣기와 관련하여 문서에서 붙여 넣을 것이 많지 않으므로 내 질문입니다. 변형이 무엇인지, 왜 사용해야 하는지를 이해하지 못합니다.

어쨌든, 이것은 Keras에서 설명하는 방법입니다.

임베딩

keras.layers.embeddings.Embedding (input_dim, output_dim, init = 'uniform', input_length = None, weights = None, W_regularizer = None, W_constraint = None, mask_zero = False) 양의 정수 (인덱스)를 고정 된 크기의 밀도 벡터로 바꿉니다. 예를 들어. [[4], [20]]-> [[0.25, 0.1], [0.6, -0.2]]

입력 모양 : 모양이있는 2D 텐서 : (nb_samples, sequence_length). 출력 모양 : 모양이있는 3D 텐서 : (nb_samples, sequence_length, output_dim). 인수 :

input_dim : int> = 0. 어휘의 크기, 즉 입력 데이터에서 발생하는 1+ 최대 정수 인덱스. output_dim : int> = 0. 조밀 한 임베딩의 차원

다음은 Lasagne에서 설명하는 방법입니다.

단어 포함을위한 레이어입니다. 입력은 정수 유형 텐서 변수 여야합니다.

매개 변수 : 수신 : 레이어 인스턴스 또는 튜플

이 레이어로 공급되는 레이어 또는 예상 입력 모양.

입력 _ 크기 : int

다른 임베딩 수 마지막 임베딩에는 인덱스 input_size-1이 있습니다.

output_size : int

각 포함의 크기입니다.

W : Theano 공유 변수, 표현식, numpy 배열 또는 호출 가능

임베딩 매트릭스의 초기 값, 표현식 또는 이니셜 라이저. 모양이있는 행렬 (input_size, output_size)이어야합니다. 자세한 내용은 lasagne.utils.create_param ()을 참조하십시오.

>>> from lasagne.layers import EmbeddingLayer, InputLayer, get_output
>>> import theano
>>> x = T.imatrix()
>>> l_in = InputLayer((3, ))
>>> W = np.arange(3*5).reshape((3, 5)).astype('float32')
>>> l1 = EmbeddingLayer(l_in, input_size=3, output_size=5, W=W)
>>> output = get_output(l1, x)
>>> f = theano.function([x], output)
>>> x_test = np.array([[0, 2], [1, 2]]).astype('int32')
>>> f(x_test) array([[[  0.,   1.,   2.,   3.,   4.],
                      [ 10.,  11.,  12.,  13.,  14.]],
                     [[  5.,   6.,   7.,   8.,   9.],
                      [ 10.,  11.,  12.,  13.,  14.]]], dtype=float32)

1
질문을 이해하고 답변하기 위해 필요한 상황에 붙여 넣으십시오. 사람들은 다른 곳으로 가고 싶거나 문서를 읽고 당신의 질문에 대답하고 싶지 않을 것입니다.
gung

1
나는 당신이 요청한 변경을했다
Francesco

나는 똑같은 의심을 가지고 그것에 대해 이야기하는 몇 가지 문서를 발견했습니다. 다음은 몇 가지 흥미로운 것들입니다 cs.cmu.edu/afs/cs/academic/class/15782-f06/slides/... fromthebottomoftheheap.net/2011/01/21/...은 분명히 그것은 inputed 시계열에 지연을 적용하고 있음을 고려 새로운 벡터로 지연됩니다.
abutremutante

이 비디오 봐 : youtube.com/watch?v=bvZnphPgz74를 . 약 30 분 동안 임베딩에 대해 이야기합니다.
Pieter

답변:


69

Word2Vec과의 관계

===========================================

간단한 그림에서 Word2Vec :

word2vec pic

더 자세한 설명 :

나는 그것이 자연어 처리의 최근 Word2Vec 혁신과 관련이 있다고 생각합니다. 대략적으로 Word2Vec은 어휘가 분리되어 있으며 각 단어를 연속 벡터 공간에 포함시키는지도를 배우게됩니다. 이 벡터 공간 표현을 사용하면 어휘 단어를 지속적으로 분산 표현할 수 있습니다. 예를 들어 데이터 집합이 n- 그램으로 구성된 경우 연속 단어 기능을 사용하여 n- 그램의 분산 표현을 만들 수 있습니다. 언어 모델을 훈련하는 과정에서 우리는이 단어 포함지도를 배울 것입니다. 희망은 지속적인 표현을 사용함으로써 우리의 임베딩이 유사한 단어를 비슷한 지역에 매핑 할 것입니다. 예를 들어 획기적인 논문 에서 단어와 구의 분산 표현 및 그 구성표 6과 7에서 의미하는 관점에서 특정 문구가 가장 가까운 인접 문구를 가지고 있음을 관찰하십시오. 이 연속 공간으로 변환하면 유사한 유사 메트릭 개념을 사용하여 포함의 의미 품질을 평가할 수 있습니다.

라자냐 코드를 사용한 설명

Lasagne 코드 스 니펫을 분석해 보겠습니다.

x = T.imatrix()

x는 정수의 행렬입니다. 그래, 문제 없어. 어휘의 각 단어는 정수 또는 1-hot sparse encoding으로 표현 될 수 있습니다. 따라서 x가 2x2 인 경우 각각 2 그램 인 두 개의 데이터 포인트가 있습니다.

l_in = InputLayer((3, ))

입력 레이어. 3은 우리 어휘의 크기를 나타냅니다. 예를 들어 단어 가 있습니다 .w0,w1,w2

W = np.arange(3*5).reshape((3, 5)).astype('float32')

이것이 우리의 단어 포함 행렬입니다. 항목이 0-14 인 3 행 x 5 열 매트릭스입니다.

지금까지는 다음과 같은 해석이 있습니다. 우리의 어휘에는 3 개의 단어가 있으며 5 차원 벡터 공간에 단어를 포함시킵니다. 예를 들어, 우리는 하나의 단어 , 다른 단어 및 다른 단어 을 예를 들어 핫 스파 스 인코딩으로 있습니다. 행렬 을 행렬 곱셈을 통해 이러한 단어를 포함 하는 것으로 볼 수 있습니다 . 그러므로 첫 단어간단히 w_1 . w0=(1,0,0)w1=(0,1,0)w2=(0,0,1)Ww0w0W=[0,1,2,3,4].w1w1W=[5,6,7,8,9]

우리가 사용하는 one-hot sparse encoding으로 인해 테이블 ​​조회라고도합니다.

l1 = EmbeddingLayer(l_in, input_size=3, output_size=5, W=W)

퍼가기 레이어

 output = get_output(l1, x)

임베드에 대한 기호 Theano 표현식.

f = theano.function([x], output)

임베딩을 계산하는 Theano 함수.

x_test = np.array([[0, 2], [1, 2]]).astype('int32')

x_test가 정확히 무엇을 의미하는지 논의하기 위해 여기서는 일시 중지 할 가치가 있습니다. 먼저 모든 x_test 항목은 {0, 1, 2}, 즉 range (3)에 있습니다. x_test에는 2 개의 데이터 포인트가 있습니다. 첫 번째 데이터 포인트 [0, 2] 2 g 나타낸다 과 두번째 데이터 포인트는 2 g 나타낸다 .( w 1 , w 2 )(w0,w2)(w1,w2)

이제 단어 임베딩 레이어를 사용하여 2 그램을 포함하고 싶습니다. 그렇게하기 전에 내장 함수 f에 의해 무엇이 반환되어야하는지 명확히하자. 2 그램 은 [[1, 0, 0], [0, 0, 1]] 행렬과 같습니다. 임베드 행렬 W를이 희소 행렬에 적용하면 [[0, 1, 2, 3, 4], [10, 11, 12, 13, 14]]가됩니다. 행렬 곱셈을 풀기 위해서는 오른쪽 곱셈을 통해 매입 행렬 라는 단어를 2 그램의 희소 행렬 표현에 적용해야합니다 .W(w0,w2)W

f(x_test) 

보고:

          array([[[  0.,   1.,   2.,   3.,   4.],
                  [ 10.,  11.,  12.,  13.,  14.]],
                 [[  5.,   6.,   7.,   8.,   9.],
                  [ 10.,  11.,  12.,  13.,  14.]]], dtype=float32)

3이 실제로 어휘 크기를 나타내는 지 확인하려면 행렬을 입력하십시오 x_test = [[5, 0], [1, 2]]. 매트릭스 불일치 오류가 발생 함을 알 수 있습니다.


2
이 답변은 좋습니다. 임베디드 계층이 Imdb 감정 샘플 (또는 다른 데이터 세트)을 벡터로 변환하는 방법에는이 질문의 확장이 하나 있습니다. 이들은 단어의 모음입니다.
직감

1

에서 https://stackoverflow.com/questions/45649520/explain-with-example-how-embedding-layers-in-keras-works/ 나는이 개 문장을 사용하는 예제를 준비하는 keras의 texts_to_sequences 시도

'This is a text' --> [0 0 1 2 3 4]

임베딩 레이어. 를 기반으로 Keras '퍼가기'레이어 작업을 수행하는 방법? 임베딩 레이어는 먼저 임베딩 벡터를 무작위로 초기화 한 다음 네트워크 최적화 프로그램을 사용하여 케 라스의 다른 네트워크 레이어와 마찬가지로 업데이트합니다.

[0 0 1 2 3 4] --> 
[-0.01494285, -0.007915  ,  0.01764857],
[-0.01494285, -0.007915  ,  0.01764857],
[-0.03019481, -0.02910612,  0.03518577],
[-0.0046863 ,  0.04763055, -0.02629668],
[ 0.02297204,  0.02146662,  0.03114786],
[ 0.01634104,  0.02296363, -0.02348827]

위는 (최대) 6 단어의 문장과 output_dim의 3에 대한 초기 삽입 벡터입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.