Cách hoạt động của lớp nhúng

Tram Ho

Tại sao cần nhúng từ?

Trước khi thuật ngữ nhúng chưa được biết đến, mọi người đã sử dụng phương pháp túi từ truyền thống hoặc một phương pháp mã hóa nóng để ánh xạ các từ thành số. Để thực hiện phương pháp này, cần rất nhiều bộ nhớ vì các vectơ được tạo ra thưa thớt và lớn và mỗi vectơ đại diện cho một từ duy nhất. Để khắc phục vấn đề này, kỹ thuật nhúng từ đã ra đời.

Chắc chắn! Lớp nhúng là lớp mạng thần kinh học cách biểu diễn (nhúng) các đầu vào rời rạc (thường là từ hoặc mã thông báo) trong không gian vectơ liên tục.

Đây là một ví dụ về cách một lớp nhúng hoạt động bằng cách sử dụng một mảng có nhiều mảng:

Giả sử chúng ta có một bộ gồm 4 từ: “cat”, “dog”, “bird” và “fish”. Chúng tôi muốn biểu diễn mỗi từ này dưới dạng một vectơ có độ dài 3. Chúng tôi có thể khởi tạo lớp nhúng với các giá trị ngẫu nhiên cho biểu diễn vectơ của mỗi từ:

Điều này tạo ra một mảng numpy với 4 hàng (một cho mỗi từ) và 3 cột (độ dài của biểu diễn vectơ). Mỗi hàng đại diện cho biểu diễn véc-tơ của một trong các từ.

Bây giờ, giả sử chúng ta có một câu “Tôi nhìn thấy một con mèo”. Chúng ta có thể biểu diễn câu này dưới dạng một chuỗi các số nguyên, trong đó mỗi số nguyên tương ứng với chỉ mục của từ tương ứng trong từ vựng của chúng ta. Ví dụ: “Tôi đã thấy một con mèo” có thể được biểu diễn dưới dạng chuỗi [0, 1, 2, 0], trong đó “I” tương ứng với từ đầu tiên là “cat”, “saw” tương ứng với từ thứ hai là “dog”, và như thế.

Để có được biểu diễn véc-tơ của trình tự này bằng cách sử dụng lớp nhúng, chúng ta chỉ cần lập chỉ mục vào lớp có trình tự:

Kết quả đầu ra này:

Mỗi hàng của đầu ra tương ứng với biểu diễn vectơ của từ tương ứng trong chuỗi đầu vào. Trong trường hợp này, hàng đầu tiên và hàng thứ tư giống nhau vì từ đầu tiên và cuối cùng trong dãy đều là “mèo”.

Lưu ý rằng các giá trị trong đầu ra không phải lúc nào cũng giống với các giá trị trong lớp nhúng. Các giá trị trong đầu ra là các biểu diễn đã học của các từ đầu vào, được cập nhật trong quá trình đào tạo


Để có được biểu diễn vectơ của một chuỗi bằng lớp nhúng

trong một mạng thần kinh, bạn có thể chỉ cần chuyển chuỗi các chỉ số làm đầu vào cho lớp. Đây là một ví dụ sử dụng TensorFlow:

Kết quả đầu ra này:


Một số công thức toán học để chuyển đổi embedding_layer.

Chắc chắn! Đây là công thức toán học để tính toán đầu ra của một lớp nhúng với một chuỗi chỉ số đầu vào:

Đặt X là chuỗi đầu vào của các chỉ số, với hình dạng (batch_size, sequence_length) và đặt E là ma trận nhúng, với hình dạng (input_dim, output_dim) . Đầu ra của lớp nhúng Y được tính như sau:

Ở đây, E[X] có nghĩa là chọn các hàng của E tương ứng với các chỉ số trong X . Cụ thể, nếu X[i, j] = k thì Y[i, j, :] = E[k, :] . Đầu ra Y có hình dạng (batch_size, sequence_length, output_dim) .

Lưu ý rằng trong quá trình đào tạo, các giá trị trong E được học bằng cách lan truyền ngược qua mạng và trong quá trình suy luận, chúng được cố định.


Để sử dụng các từ cho các nhiệm vụ xử lý ngôn ngữ tự nhiên hoặc học máy, trước tiên cần phải ánh xạ chúng vào một không gian vectơ liên tục, do đó tạo ra các vectơ từ hoặc nhúng từ . Lớp Keras Embedding rất hữu ích để xây dựng các vectơ từ như vậy.

input_dim : kích thước từ vựng. Đây là số lượng từ duy nhất được thể hiện trong kho văn bản của bạn.

output_dim : kích thước mong muốn của vectơ từ. Ví dụ: nếu output_dim = 100 thì mỗi từ sẽ được ánh xạ lên một vectơ có 100 phần tử, ngược lại nếu output_dim = 300 thì mỗi từ sẽ được ánh xạ lên một vectơ có 300 phần tử.

input_length : độ dài chuỗi của bạn. Ví dụ: nếu dữ liệu của bạn bao gồm các câu, thì biến này biểu thị số lượng từ có trong một câu. Vì các câu khác nhau thường chứa số lượng từ khác nhau nên bạn thường phải đệm các chuỗi sao cho tất cả các câu đều có độ dài bằng nhau. Phương thức keras.preprocessing.pad_sequence có thể được sử dụng cho việc này ( https://keras.io/preprocessing/sequence/ ).

Trong Keras, có thể 1) sử dụng các vectơ từ được đào tạo trước như các biểu diễn GloVe hoặc word2vec hoặc 2) tìm hiểu các vectơ từ như một phần của quy trình đào tạo. Bài đăng trên blog này ( https://blog.keras.io/using-pre-training-word-embeddings-in-a-keras-model.html ) cung cấp hướng dẫn về cách sử dụng các vectơ từ được đào tạo trước của GloVe. Đối với tùy chọn 2, Keras sẽ khởi tạo ngẫu nhiên các vectơ làm tùy chọn mặc định, sau đó tìm hiểu các vectơ từ tối ưu trong quá trình đào tạo.

Chia sẻ bài viết ngay

Nguồn bài viết : Viblo