Lớp 'Nhúng' của Keras hoạt động như thế nào?


70

Cần hiểu hoạt động của lớp 'Nhúng' trong thư viện Keras. Tôi thực thi đoạn mã sau trong Python

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

model = Sequential()
model.add(Embedding(5, 2, input_length=5))

input_array = np.random.randint(5, size=(1, 5))

model.compile('rmsprop', 'mse')
output_array = model.predict(input_array)

cung cấp đầu ra sau

input_array = [[4 1 3 3 3]]
output_array = 
[[[ 0.03126476  0.00527241]
  [-0.02369716 -0.02856163]
  [ 0.0055749   0.01492429]
  [ 0.0055749   0.01492429]
  [ 0.0055749   0.01492429]]]

Tôi hiểu rằng mỗi giá trị trong input_array được ánh xạ tới 2 vectơ phần tử trong output_array, vì vậy một vectơ 1 X 4 cho các vectơ 1 X 4 X 2. Nhưng các giá trị ánh xạ được tính như thế nào?


1
Có lẽ một khởi đầu tốt: github.com/fchollet/keras/issues/3110 ?
fnl

Trong blog này một nhúng từ bằng cách sử dụng lớp Keras Nhúng được coi learn-neural-networks.com/world-embedding-by-keras
Фаиль Гафаров

Câu trả lời:


87

Trong thực tế, các vectơ đầu ra không được tính toán từ đầu vào bằng bất kỳ phép toán nào. Thay vào đó, mỗi số nguyên đầu vào được sử dụng làm chỉ mục để truy cập vào một bảng có chứa tất cả các vectơ có thể nhìn thấy. Đó là lý do tại sao bạn cần xác định kích thước của từ vựng làm đối số đầu tiên (để bảng có thể được khởi tạo).

Ứng dụng phổ biến nhất của lớp này là để xử lý văn bản. Hãy xem một ví dụ đơn giản. Tập huấn luyện của chúng tôi chỉ bao gồm hai cụm từ:

Mong sớm được gặp lại bạn

Rất vui được gặp lại bạn

Vì vậy, chúng tôi có thể mã hóa các cụm từ này bằng cách gán cho mỗi từ một số nguyên duy nhất (theo thứ tự xuất hiện trong tập dữ liệu đào tạo của chúng tôi chẳng hạn). Sau đó, cụm từ của chúng tôi có thể được viết lại thành:

[0, 1, 2, 3, 4]

[5, 1, 2, 3, 6]

Bây giờ hãy tưởng tượng chúng ta muốn đào tạo một mạng có lớp đầu tiên là lớp nhúng. Trong trường hợp này, chúng ta nên khởi tạo nó như sau:

Embedding(7, 2, input_length=5)

Đối số đầu tiên (7) là số lượng từ riêng biệt trong tập huấn luyện. Đối số thứ hai (2) chỉ ra kích thước của các vectơ nhúng. Tất nhiên , argumet input_length xác định kích thước của từng chuỗi đầu vào.

Khi mạng đã được đào tạo, chúng ta có thể lấy trọng số của lớp nhúng, trong trường hợp này sẽ có kích thước (7, 2) và có thể được coi là bảng được sử dụng để ánh xạ các số nguyên để nhúng vectơ:

+------------+------------+
|   index    |  Embedding |
+------------+------------+
|     0      | [1.2, 3.1] |
|     1      | [0.1, 4.2] |
|     2      | [1.0, 3.1] |
|     3      | [0.3, 2.1] |
|     4      | [2.2, 1.4] |
|     5      | [0.7, 1.7] |
|     6      | [4.1, 2.0] |
+------------+------------+

Vì vậy, theo các nhúng này, cụm từ đào tạo thứ hai của chúng tôi sẽ được trình bày dưới dạng:

[[0.7, 1.7], [0.1, 4.2], [1.0, 3.1], [0.3, 2.1], [4.1, 2.0]]

Thoạt nhìn có vẻ phản trực giác, nhưng các công cụ phân biệt tự động cơ bản (ví dụ: Tensorflow hoặc Theano) quản lý để tối ưu hóa các vectơ này liên quan đến từng số nguyên đầu vào giống như bất kỳ tham số nào khác trong mô hình của bạn. Cũng rất thú vị khi sử dụng các nhúng được học bởi các phương thức / người khác trong các miền khác nhau (xem https://blog.keras.io/USE-pre-trained-word-embeddings-in-a-keras-model.html ) như thực hiện trong [1].

[1] López-Sánchez, D., Herrero, JR, Arrieta, AG, & Corchado, JM Kết hợp học tập số liệu và lý luận dựa trên trường hợp để phát hiện clickbait thích ứng. Ứng dụng thông minh, 1-16.


4
Cảm ơn bạn đã trả lời. Chỉ cần một truy vấn là trọng lượng của lớp nhúng thu được như thế nào. Giống như đối với chỉ số 0, làm thế nào [1.2, 3.1] thu được.
prashanth

5
Nội dung của bảng liên quan đến các chỉ mục với các vectơ nhúng (nghĩa là các trọng số của lớp nhúng) được khởi tạo ngẫu nhiên và sau đó được tối ưu hóa bằng thuật toán đào tạo (ví dụ: Gradient Descent).
Daniel López

3
Cảm ơn. Tôi vẫn còn chưa rõ trình tối ưu hóa sẽ chống lại cái gì? Giống như, "câu trả lời đúng" cho phép nó tính toán hàm mất là gì? Hoặc nói một cách khác, nó đang làm gì cho việc vượt qua và lùi lại?
bwest87

2
vì vậy ... nhúng về cơ bản chỉ là một mạng con của kiến ​​trúc tổng thể giúp giảm bất kỳ đầu vào được mã hóa nóng nào thành ít đầu vào hơn, kể từ khi ..
Mike Campbell

1
Vì lớp nhúng có thể huấn luyện được, nó nhạy cảm như thế nào với các giá trị bị thiếu trong tập huấn luyện? Giả sử, tôi có mười từ trong tập huấn luyện và năm từ nữa trong tập kiểm tra - độ dài từ vựng của tôi là 15 ... nhưng lớp thực sự không bao giờ được kích hoạt bởi năm từ 'kiểm tra' đó trong quá trình đào tạo. Bạn có thể vui lòng giải thích tình huống này?
mikalai

6

Tôi cũng có câu hỏi tương tự và sau khi đọc một vài bài viết và tài liệu tôi nghĩ rằng tôi đã tìm ra vai trò của lớp nhúng là gì.

Tôi nghĩ rằng đây bài cũng rất hữu ích để hiểu, tuy nhiên, tôi thực sự tìm thấy câu trả lời của Daniel thuận tiện để tiêu hóa. Nhưng tôi cũng có ý tưởng đằng sau nó chủ yếu bằng cách hiểu các từ nhúng .

Tôi tin rằng không chính xác khi nói các lớp nhúng làm giảm đầu vào mã hóa một nóng xuống còn ít đầu vào hơn. Sau khi tất cả các vectơ một nóng là dữ liệu một chiều và nó thực sự được chuyển thành 2 chiều trong trường hợp của chúng tôi. Tốt hơn để nói rằng

lớp nhúng đi kèm với một mối quan hệ của các đầu vào trong một chiều không gian khác

Cho dù đó là 2 chiều hoặc thậm chí cao hơn.

Tôi cũng tìm thấy một sự tương đồng rất thú vị giữa việc nhúng từ vào Phân tích thành phần chính. Mặc dù tên có thể trông phức tạp, khái niệm này là đơn giản. Những gì PCA làm là xác định một tập hợp dữ liệu dựa trên một số quy tắc chung (được gọi là các thành phần nguyên tắc). Vì vậy, nó giống như có một dữ liệu và bạn muốn mô tả nó nhưng chỉ sử dụng 2 thành phần. Theo nghĩa này thì rất giống với từ nhúng. Cả hai đều làm công việc giống nhau trong bối cảnh khác nhau. Bạn có thể tìm hiểu thêm ở đây . Tôi hy vọng có thể hiểu PCA giúp hiểu các lớp nhúng thông qua sự tương tự.

Để kết thúc, câu trả lời cho câu hỏi ban đầu của bài đăng rằng " làm thế nào để tính giá trị? " Sẽ là:

  • Về cơ bản, mạng lưới thần kinh của chúng ta nắm bắt cấu trúc cơ bản của các yếu tố đầu vào (câu của chúng ta) và đặt mối quan hệ giữa các từ trong từ vựng của chúng ta lên một chiều cao hơn (giả sử 2) bằng cách tối ưu hóa.
  • Hiểu sâu hơn sẽ nói rằng tần suất của mỗi từ xuất hiện với một từ khác từ ảnh hưởng từ vựng của chúng tôi (theo cách tiếp cận rất ngây thơ, chúng tôi có thể tính toán nó bằng tay)
  • Tần số không được đề cập có thể là một trong nhiều cấu trúc cơ bản mà NN có thể nắm bắt
  • Bạn có thể tìm thấy trực giác trên liên kết youtube giải thích các từ nhúng

7
Quan điểm tốt đẹp. Tuy nhiên, tôi nghĩ rằng đáng chú ý là trong khi các kỹ thuật nhúng từ như word2vec cố gắng nắm bắt toàn bộ ý nghĩa của các từ trong việc nhúng kết quả, lớp nhúng trong mạng được giám sát có thể không học được cách biểu diễn chung và giàu ngữ nghĩa như vậy. Ví dụ: nếu mạng của bạn được đào tạo để thực hiện phân loại tình cảm, có thể nó sẽ chỉ nhóm / cụm từ trong nhúng theo tải "cảm xúc" của chúng. Tuy nhiên, dựa trên kinh nghiệm của tôi, sẽ rất hữu ích khi khởi tạo lớp nhúng của bạn với các trọng số được học bởi word2vec trên một kho văn bản lớn.
Daniel López

2
vector một nóng không phải là dữ liệu một chiều. Kích thước của nó là kích thước của từ vựng.
Binu Jasim

2
@BinuJasim bạn nói đúng. Các vectơ một nóng đại diện cho một từ vựng không phải là dữ liệu một chiều. Nhưng thông tin mà nó đại diện thực sự là một chiều và mọi thực thể trong từ vựng là dữ liệu một chiều. Đúng là chúng ta có các phần tử n * w (n = kích thước từ vựng, w = số bit) nhưng mỗi giá trị nhị phân đại diện cho một vectơ lại là đầu vào một chiều.
Novin Shahroudi

@NovinShahroudi Brilliant, cảm ơn vì lời giải thích.
Benyamin Jafari
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.