Khi huấn luyện mô hình máy học để xử lý ngôn ngữ tự nhiên, thì chắc chắn dữ liệu bạn có ở dạng chữ viết, sự thật là bạn không thể đem trực tiếp dữ liệu chữ viết thô vào để huấn luyện mô hình máy học ngay được, bởi vì các mô hình máy học chỉ làm việc được trên những con số, hay chính xác hơn là tính toán trên các ma trận, véc-tơ số.
Điều này dẫn đến việc bạn phải nghĩ cách làm thế nào đó để chuyển dữ liệu chữ viết thô thành dữ liệu số thực, sau đó mới có thể đưa dữ liệu số thực này vào các mô hình học được, có rất nhiều kĩ thuật để làm việc này và gọi chung chúng là kĩ thuật Embedding.
Embedding có thể hiểu là ẩn, gắn vào. Chính cái tên của nó cũng giúp bạn mường tượng được rằng bạn sẽ phải ẩn dữ liệu ban đầu dưới dạng một không gian vectơ số mới, cho nên huấn luyện mô hình trên không gian vectơ số này cũng chính là bạn đang gián tiếp học trên tập dữ liệu ban đầu.
Đó chỉ mới là ý tưởng của kĩ thuật Embedding, còn việc chuyển từ không gian này sang một không gian vec-tơ khác bạn không thể làm tùy tiện được mà phải đảm bảo:
- Không gian véc-tơ mới (hay véc-tơ số thực) phải thể hiện được bản chất của tập dữ liệu ban đầu (dữ liệu chữ viết).
- Cực tiểu hóa lượng mất mát thông tin xảy ra khi bạn chuyển sang không gian mới.
Một số kĩ thuật Embedding được sử dụng phổ biến như mạng Neural Network, PCA (Principal Component Analysis) gọi là kĩ thuật phân tích thành phần chính, TF-IDF, Bag of Word, Encoder-Decoder sử dụng trong RNN (Recurrent Neural Network) hoặc LSTM (Long-Short Term Memory), ...v.v.
Một số thư viện sử dụng kĩ thuật Embedding như sklearn, Word2vec, FastText, ...v.v.
Ví dụ về sử dụng thư viện sklearn
để chuyển một đoạn chữ đơn giản sang một không gian vec-tơ số thực mới,
from sklearn.feature_extraction.text import CountVectorizer
vectorizer = CountVectorizer()
text = ['I am doing my homework.',
'This is question in my homework.',
'And another question.',
'I will finish my homework.']
text_embedding = vectorizer.fit_transform(text)
text_embedding.toarray()
Kết quả sau khi embedding đoạn text ở trên:
array([[1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0],
[0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0],
[0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0],
[0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1]])
Hope it help...