Phác họa bài post:
ⓐ Word
embedding.
ⓑ Embeddings
dùng vào việc gì?
ⓒ Extensions.
-
Trước hết, tôi xin
luận bàn một chút về từ embedding. Có thể tạm dịch sang tiếng Việt từ
này có nghĩa là “nhúng”. Đối với các anh/chị đã từng “lăn lộn” trong lĩnh vực
điện tử, tự động hóa thì hệ thống nhúng (embedded systems) chắc anh/chị
đã thuộc nằm lòng. Hệ thống nhúng có nghĩa là một hệ thống con “nhúng” vào
trong một hệ thống lớn hơn. Rất trực quan, đúng không ạ! 😊
-
Cái mà tôi muốn
đàm luận với anh/chị ở đây – trong bài post này - liên quan trực tiếp đến
Machine Learning, không liên quan đến hệ thống nhúng như đề cập ở trên. “Nhúng”
ở đây là chúng ta nhúng các phần tử thuộc tập hợp X nào đó vào một không gian số
thực N chiều. Nghĩa là ta biến mọi thứ thành một điểm trong không gian ℝN. (Xin lưu ý với anh/chị, các bài báo họ
dùng từ vector. Nghĩa là một điểm trong không gian ℝN có hướng xuất phát từ tâm của không
gian ℝN
và mũi tên chỉ đến tọa độ của điểm đó.) Khi chúng là số, chúng ta có thể dùng
các mạng nơ ron (neural networks) để huấn luyện (training). Sau
khi huấn luyện xong, chúng ta có thể rút ra được một số kết luận hữu ích nào
đó!
-
Cũng xin thống
nhất thêm với anh/chị: khi tôi dùng từ “ngôn ngữ” thì từ này ám chỉ “ngôn ngữ tự
nhiên”, “ngôn ngữ tiếng nói” (Natural Language). Còn khi tôi dùng từ “vấn
đề ngôn ngữ” tức là tôi đang đề cập đến khái niệm trong tiếng Anh là “Natural
Language Processing” (NLP). 😊
⚶
ⓐ Word embedding.
Trong vấn đề
ngôn ngữ, người ta tìm cách ghép các từ tương tự nhau về ngữ nghĩa. Chú ý rằng
tính “tương tự” (similarity) có “mối quan hệ” của nó. Ví dụ: xanh, đỏ,
tím, vàng, … tương tự theo mối quan hệ “màu”. Ông, bà, cha, mẹ, cô, bác, anh,
em, … tương tự theo mối quan hệ “phả hệ”. Hà Nội-Việt Nam, Vientiane-Laos,
Bangkok-Thailand, Canberra-Australia, Wellington-New Zealand, Paris-France,
London-England, Washington D.C.-USA, … tương tự theo mối quan hệ “thủ đô của một
nước”, … Theo cách đặt vấn đề như vậy, chúng ta hình dung còn có rất nhiều các mối
quan hệ khác nữa.
① Mã
hóa thông tin về “word” (từ).
Trong ngôn ngữ, rõ ràng “từ” là hạt nhân. Vì sao vậy? Vì chúng ta có thể lập câu
văn, lập các đoạn văn hoặc xuất bản các tài liệu từ tập hợp các “từ” trong từ vựng.
Tất nhiên, các câu, các đoạn văn, các tài liệu phải có nghĩa. Về mặt logic,
chúng ta có thể tạo ra chúng từ tổ hợp các “từ”.
-
Dưới góc độ toán học, nhiều nghiên cứu đề xuất biểu diễn một “từ” bằng một điểm
trong một không gian số thực N chiều. Với cách biểu diễn này thì các từ tương tự
nhau sẽ ở cạnh nhau. Nghĩa là khoảng cách giữa 2 từ “tương tự” sẽ ngắn. Còn 2 từ
rất khác nhau sẽ ở xa nhau. Chú ý rằng mỗi một “mối quan hệ” trong ngôn ngữ sẽ
tương ứng với một “trục” trong không gian này. Không gian này có N trục.
-
Việc mã hóa thông tin như trên là khả thi vì các ngôn ngữ lập trình hiện đại đều
có ma trận (hoặc mảng) N chiều. Về công cụ, trên mạng có “vô số” các thư viện mở
(open source) về đại số tuyến tính. Như vậy, về mặt nguyên tắc, chúng ta
đủ các công cụ để thực hiện.
② Thách
thức. Làm thế nào để biết 2 từ nào đó tương tự nhau? Dưới góc độ tự nhiên,
chúng ta (con người) có thể nhận biết rằng ông, bà, cha, mẹ, cô, bác, anh, em,
… tương tự theo mối quan hệ “phả hệ”. Nhưng bằng máy tính, bằng lập trình thì
làm thế nào? Quan hệ về mặt cú pháp thì “may ra” (tôi nhấn mạnh từ “may ra”)
thuật toán có thể “mày mò”. Nói về mặt ngữ nghĩa thì máy tính (ý nói là thuật
toán) thì làm thế nào mà biết được nghĩa của từ này gần với nghĩa của từ kia! Rất
khó, đúng không ạ?!
-
💡 Thưa
anh/chị, khó thế mà vẫn có một cứu cánh đấy! (Đôi lúc, trong nghiên cứu khoa học,
chìa khóa để giải quyết một vấn đề lại đến rất tình cờ.) Số là, nhà ngôn ngữ học
người Anh John Rupert Firth (1890-1960) có một câu nói được rất nhiều
người trích dẫn: “You shall know a word by the company it keeps”. Đại ý
của câu này là chúng ta nhận biết được đặc tính của một từ nhờ các từ đi kèm.
Ơ-rê-ka! Như vậy, nếu chúng ta có kho ngữ liệu đủ lớn (tổ hợp của các tác phẩm
văn học, báo chí, bài luận, …), bao phủ đủ từ vựng thì chúng ta sẽ “suy ra được”
đặc tính của bất cứ một từ nào và xác định mức độ tương tự (similarity)
với các từ đi kèm từ đó.
-
Chú ý thêm, trong câu nói nổi tiếng của Firth, ông không hề đề cập đến thứ tự của
các từ. Nghĩa là, các từ đi kèm có thể nằm trước, nằm sau từ “mục tiêu”. Chúng
có thể ở sát từ “mục tiêu” hoặc ở xa, miễn là chúng phải nằm trong cùng câu với
từ “mục tiêu”. Việc này rất phù hợp với việc huấn luyện (training) của
Machine Learning.
③ Word2Vec. Word2vec là một lớp mô hình mạng
nơ-ron dùng để huấn luyện nhằm “nhúng” từ (word) vào không gian ℝN. Vào năm 2013, sau khi các bài báo của Tomáš
Mikolov và cộng sự được giới thiệu thì cộng đồng Machine Learning xem đây
là một bước đột phá lớn. Để hiểu kỹ hơn về Word2Vec mời anh/chị tham khảo 2 bài
báo mà tôi xin liệt kê ở đây:
* Efficient Estimation of Word Representations in Vector
Space
* Representations of Words and Phrases and
their Compositionality
---
[Mở ngoặc:
➡ Trong lập trình,
người ta hay dùng từ ghép tượng âm. “Word2Vec” có nghĩa là “Word-to-Vector” (vì
phát âm số “2” và từ “to” trong tiếng Anh nghe từa tựa như nhau) và cũng có
nghĩa là biến đổi “Word” (Từ) thành “Vector”.
➡ Tomáš Mikolov
là người Czech (Cộng hòa Séc thuộc Tiệp Khắc cũ). Tại thời điểm đăng bài báo
(2013), Tomáš Mikolov làm cho Google (Google Brain).
Đóng ngoặc.]
---
Có lẽ cái gây ấn tượng nhất là: sau một hồi huấn luyện (training),
Word2Vec liệt kê ra được các từ tương tự nhau về mặt ngữ nghĩa (semantic) của một
từ bất kỳ thuộc một bộ từ điển trên dưới 1 triệu từ! Như từ dưới đất chui lên,
một giải pháp phần mềm máy tính lại có thể biết được mức độ tương tự về mặt
nghĩa của một từ bất kỳ. Thần kỳ quá! Quả là “magic”! Thì đây là trí tuệ nhân tạo
(AI) chứ còn gì nữa?!
---
Họ đưa ra một số ví dụ “gây sốc” như này:
➡ vector(”King”)
- vector(”Man”) + vector(”Woman”) ≈ vector(”Queen”). Vì
Vua (King) là đàn ông và Hoàng hậu (Queen) là đàn bà nên nếu cho
biết các giá trị của Vua, Đàn ông (Man), Đàn bà (Woman) chúng ta
sẽ dễ dàng tính ra giá trị của Hoàng hậu (Queen)! Một phép tính đại số
đơn giản!
➡ vector(“Madrid”)
- vector(“Spain”) + vector(“France”) ≈ vector(“Paris”). Vì
sao?
Áp dụng hằng đẳng thức:
vector(“Thủ đô”) - vector(“Nước”) = hằng số (*)
Ta có:
vector(“Madrid”) - vector(“Spain”) = vector(“Paris”) - vector(“France”)
(**)
Suy ra từ (**):
vector(“Paris”) = vector(“Madrid”) - vector(“Spain”) + vector(“France”)
😊
---
Về mặt mô hình mạng nơ-ron và cách phát hiện tính độ tương tự của các từ,
Word2Vec đưa ra một số mô hình mới, cách lấy mẫu và cách huấn luyện mà về sau
đã trở thành “kinh điển” trong Machine Learning. Anh/chị nào không quan tâm đến
kỹ thuật thì bỏ qua đoạn sau.
➡ Về mô hình,
Word2Vec có kiến trúc tổ hợp của 2 mô hình:
* Một mặt, Word2Vec sử dụng mô hình CBOW (Continuous Bag-of-Words) để
suy đoán một từ dựa trên các từ quanh nó (tham chiếu câu trích dẫn của Firth ở
trên). Các từ đứng trước và đứng sau từ của từ mục tiêu được gọi là ngữ cảnh (context).
* Mặt khác, Word2Vec sử dụng mô hình Skip-gram để suy đoán các từ xung quanh (context)
khi biết từ mục tiêu (đảo ý câu trích dẫn của Firth).
➡ Về cách tính độ
tương tự (similarity), Word2Vec lấy các trọng số (weights) của lớp
ẩn (hidden layer) ngay trước lớp đầu ra (output layer). Đây là một
điểm rất thú vị trong việc huấn luyện mạng nơ-ron. Chất lượng đầu ra không quan
trọng, quan trọng là tìm cách điều chỉnh trọng số của lớp ẩn ngay trước lớp đầu
ra! Như vậy, việc tối ưu hóa hàm tổn thất (loss function) không phải là
mục tiêu chính. Mục tiêu chính phải chọn mẫu sao cho việc điều chỉnh giá trị
các trọng số của lớp ẩn này đạt tối ưu.
➡ Về lấy mẫu, để rút
ngắn thời gian huấn luyện mô hình mạng Skip-gram, Word2Vec đưa 2 đề xuất là Negative
Sampling và Subsampling. Đại ý, chúng ta chỉ cần hiểu thế này:
* Negative Sampling (tạm dịch Chọn mẫu bất liên quan): Cách chọn
mẫu này của nhóm nghiên cứu có 2 mục tiêu:
+ Một mặt, việc tính toán hàm tổn thất (loss function) sẽ nhẹ đi nhiều
do chỉ cần cập nhật một phần các trọng số (weights). Nên nhớ rằng tổng số
các trọng số có thể lên tới hàng trăm tỷ.
+ Mặt khác, vì mẫu có chủ ý được chọn các từ không liên quan đến từ “mục tiêu”
nên từ “mục tiêu” sẽ bị đẩy xa ra các từ “bất liên quan”. Như vậy, kết quả
chung của hệ thống sẽ tốt hơn.
* Subsampling (tạm dịch Chọn tập con của mẫu): Khi huấn luyện,
người ta nhận thấy (trong tiếng Anh) các mạo từ như ‘the’, ‘a’
hay giới từ như ‘in’, ‘on’ có tần suất xuất hiện cao nhưng chẳng
giúp gì trong việc cải thiện độ tương tự (similarity). Vì vậy, phương
pháp chọn mẫu này loại bỏ các từ có tần suất xuất hiện cao. Như thế nào là tần
suất xuất hiện cao? Đương nhiên, người ta phải có một ngưỡng và công thức tính
ngưỡng đó. Tôi không đưa ra công thức ở đây để giúp anh/chị đỡ phải “đau hết cả
đầu”.
---
∴ Tóm lại,
Word2Vec đã làm được việc “kinh thiên động địa” là xếp các từ tương tự về nghĩa
ở cạnh nhau!
⚶
ⓑ Embeddings dùng vào việc gì?
Word embedding
là “vĩ đại” rồi. Đồng ý là thế nhưng ngoài ứng dụng trong xử lý ngôn ngữ (NLP)
thì ý tưởng này có còn dùng vào được việc gì nữa không? Anh/chị thế nào chả
đoán là embeddings ứng dụng vào nhiều việc! Hẳn là thế rồi.
Có một chi tiết
thú vị, xin nhắc lại, là Word2Vec đã biến thứ chả liên quan gì đến số (văn bản)
thành một không gian số về mối quan hệ của cái thứ chả liên quan gì ấy
(văn bản). Vậy thì ngoài văn bản ra, thuật toán của Word2Vec cũng sẽ thành công
đối với bất cứ đối tượng nào, miễn là đối tượng đó có dữ liệu đủ lớn. Quả thực
là như vậy, thưa anh/chị. Và chìa khóa của giải pháp là người ta đo được độ
tương tự (similarity) của các thứ không liên quan gì đến số đó!
Trước hết, xin
thống nhất với anh/chị một số từ ngữ:
·
Người
dùng (User): Như
tôi và anh/chị được gọi là người dùng. Nhìn chung, người dùng đều thuộc vào một
hoặc nhiều mạng xã hội (social network) nào đó. Chú ý rằng mạng xã hội
được hiểu theo nghĩa rộng chứ không phải chỉ có mấy mạng Facebook, Twitter hay
LinkedIn đâu. Ví dụ, anh/chị nếu có email trên Gmail là anh/chị đã tham gia mạng
xã hội rồi đấy!
·
Bối
cảnh / Truy vấn (Context
/ Query): Khi chúng ta “làm” một loạt cái gì đấy (click “Like” trên
Facebook, Twitter, lướt web, xem video, nghe nhạc, tìm hàng trên trang thương mại
điện tử, …) thì tổ hợp các hành vi này được gọi là bối cảnh (context). Bối
cảnh giống như “câu văn” trong trường hợp của Word2Vec.
·
Mục (Item / Document): Ví dụ về mục:
một status trên Facebook, một video trên Youtube, một tài liệu tải xuống, một
trang web, … Trong Word2Vec, “Mục” chính là “Từ” trong trường hợp của Word2Vec.
Một cách tổng
quát: Khi lên mạng (Internet) Người dùng thực hiện một loạt Truy vấn
một hoặc nhiều Mục nào đó (và hành vi này thường thuộc vào một hoặc nhiều
mạng xã hội).
Bây giờ chúng ta
thử xem họ đã dùng embeddings để “quản lý”, “khai thác” các hành vi của
chúng ta như thế nào 😊. Một cách tổng quan thì tôi không biết
hết, chỉ xin đàm luận cùng anh/chị một số trường hợp.
① Hệ
thống khuyến nghị (Recommendation Systems). Ví dụ khi lên mạng, chúng ta tìm nghe một
bản nhạc nào đó trên trang Youtube. Khi anh/chị đang nghe bản nhạc, ngay ở cột
phía phải màn hình chúng ta nhìn thấy một loạt gợi ý các video khác. Nếu nhìn kỹ
chúng ta sẽ thấy các video gợi ý cũng rất gần với video chúng ta đang nghe! Rất
tài, rất “magic”, đúng không ạ! Đương nhiên nếu là dân CNTT thì chúng ta sẽ tò
mò xem cái gì đã tạo ra cái “magic” đó.
---
➡ Chúng ta biết rằng
cách mà Word2Vec xác lập được độ tương tự của các từ là do huấn luyện mạng
nơ-ron dùng mẫu từ hàng triệu câu văn. Chính nhờ hàng triệu câu văn đó mà
Word2Vec đã “suy ra” độ tương tự của các từ.
↓
Bây giờ chúng ta thay “từ” bằng “video bài hát” và thay “câu văn” bằng “phiên
nghe nhạc” của tập hợp người dùng. Có thể chúng ta không có tương đương hàng
triệu “câu văn” nhưng chúng ta chí ít cũng có hàng nghìn, hàng chục nghìn
“phiên nghe nhạc”.
↓
Để có được độ tương tự của các “video bài hát”, chúng ta chỉ việc huấn luyện một
mạng nơ-ron (theo phương pháp của Word2Vec) nhưng lần này lấy mẫu từ các “phiên
nghe nhạc”. Kết quả là chúng ta được một không gian ℝN về độ tương tự của các “video bài hát”.
↓
Chúng ta thiết lập danh mục gợi ý bằng cách nào?
⥱
Giả thiết chúng ta đang
nghe bài hát A. Chúng ta thiết lập danh mục gợi ý sẽ là các bài hát V1,
V2, … V10, trong đó khoảng cách (A, V1) là ngắn
nhất, tiếp đến là khoảng cách (A, V2), … và cuối cùng là khoảng cách
(A, V10). Chú ý rằng độ tương tự nằm trong không gian ℝN và độ tương tự của 2 điểm X, Y được xác
định bằng khoảng cách từ X đến Y. Khoảng cách càng ngắn thì chúng càng tương tự
nhau.
---
➡ Quay trở lại với
phương pháp của Word2Vec, trong mô hình hệ thống khuyến nghị, lần này chúng ta
thay “từ” bằng “người dùng”, thay “câu văn” bằng loạt “người dùng” cùng nghe một
“video bài hát”.
↓
Tiếp theo, chúng ta huấn luyện mạng nơ-ron theo phương pháp của Word2Vec nhưng
lấy mẫu là loạt “người dùng” cùng nghe một “video bài hát”.
↓
Kết quả là chúng ta vẫn được một không gian về độ tương tự nhưng lần này là độ
tương tự giữa các người dùng.
Độ tương tự này là gì? ⥱ Chính
là chúng ta đo được “gu” âm nhạc giữa người dùng U có gần giống với dùng V hay
không đấy!
-
⚠ Đã đo
được “gu” âm nhạc thì có nghĩa là người ta cũng có thể đo được các ý thích khác
của người dùng!
② Lưu
ký bối cảnh. Một cách tổng quát, để có được embedding, người ta phải
tìm cách lưu ký được càng nhiều “bối cảnh” càng tốt. Nhiều bối cảnh nghĩa là
nhiều dữ liệu. Càng có nhiều dữ liệu thì embedding có chất lượng càng cao.
Xin nhắc lại bối cảnh (context): loạt hành vi người dùng (click “Like”
trên Facebook, Twitter, lướt web, xem video, nghe nhạc, tìm hàng trên trang
thương mại điện tử, …)
---
Ai có thể lưu ký được nhiều bối cảnh? Thưa anh/chị, đó là các mạng xã hội. Nếu
chúng ta ngạc nhiên sao các mạng xã hội có nhiều “đĩa cứng” thế, sao post ảnh,
video thoái mái thế?! Anh/chị khỏi phải lo cho họ. 😊 Mạng xã hội “ghi chép cẩn thận” hành vi
người dùng (lưu ký càng nhiều “bối cảnh” càng tốt). Thảo nào mà các mạng xã hội
đều tìm cách khuyến khích người dùng tham gia mạng!
---
Hiện nay có nhiều trang báo mạng, khi chúng ta vào đọc, họ nói là chỉ cần “đăng
ký miễn phí” một địa chỉ email và mời bạn “hăng hái” đọc tiếp! 😊 Đấy là họ đang cần một ID người dùng và
mục tiêu là lưu ký được nhiều bối cảnh của ID đó.
-
⚠ Lưu ý rằng
họ có nhiều cách khác để “xác minh” anh/chị là ai, chứ không nhất thiết phải bằng
cách yêu cầu anh/chị đăng ký email.
③ Tìm
kiếm thông tin (Embeddings
in Search Engines). Có lẽ có nhiều anh/chị trên diễn đàn này, cũng giống
như tôi, đã từng “mày mò” viết một engine tìm kiếm thông tin. Cách “truyền thống”
là lấy từ khóa từ câu truy vấn và “lục tìm” trong khối thông tin chúng ta đang
lưu giữ sao cho khớp với các từ khóa mà người dùng đưa vào. Thưa anh/chị, phương
pháp này “xưa rồi Diễm ơi”! 😊 (Mượn ý tựa đề bài “Diễm xưa” của nhạc
sỹ Trịnh Công Sơn.)
---
Vấn đề đặt ra đối với các công cụ tìm kiếm hiện đại là:
☞ Tìm kiếm theo ngữ nghĩa của cụm từ khóa đưa
vào (trường hợp người dùng thường chỉ căn cứ vào ngữ nghĩa chứ không căn cứ vào
chính tả của từ khóa);
☞ Tìm ảnh tương tự (gần giống) với một ảnh nào
đó;
☞ Tìm các phim (hoặc bài hát) giống với phim đã
xem hoặc bài hát đã nghe;
☞ Tư vấn các dòng sản phẩm tương tự với một sản
phẩm đã chọn (thuật toán thường được áp dụng trên các trang thương mại điện tử);
---
Một trong các giải pháp cho các vấn đề nêu ở trên là ứng dụng embeddings,
có tên gọi là Feature Embedding. Feature (đặc tính) là “Word” ở
trong Word2Vec. Khi tìm kiếm ảnh thì Feature là ảnh, khi tìm kiếm video
thì Feature là video, khi tìm kiếm sản phẩm thì Feature là đặc tả
sản phẩm, …
-
Đầu tiên, người ta huấn luyện trước kho dữ liệu. Chú ý rằng kho dữ liệu này biến
động theo thời gian nên việc huấn luyện là online và liên tục chứ không phải
làm một lần là xong. Kết quả của huấn luyện là họ có không gian độ tương tự (similarity)
ℝN.
↓
Người ta biến đổi câu truy vấn thành một điểm Q trong không gian ℝN.
↓
Tiếp theo, người ta tìm các điểm gần với Q nhất và sắp xếp chúng theo thứ tăng
dần theo khoảng cách (Search Ranking).
---
Ở trên, tôi đã bỏ qua rất nhiều chi tiết khác của Search Engines, chỉ tập
trung vào ý tưởng áp dụng embedding trong tìm kiếm. (Thì chúng ta chả
đang nhàn đàm về embeddings là gì! 😊)
⚶
ⓒ Extensions.
Có nhiều ý tưởng
bắt chước nguyên lý của Word2Vec. Tuy nhiên, tôi ấn tượng nhất là ý tưởng
BioVec, “nhúng” các thực thể sinh học vào ℝN và tìm các mối liên kết, mối quan hệ ngầm
của chúng thông qua huấn luyện các chuỗi trình tự sinh học (biological
sequences) có trong tự nhiên. Bài báo đấy ở đây, mời anh/chị tham khảo:
Continuous Distributed Representation of
Biological Sequences for Deep Proteomics and Genomics
Như trong lần
nhàn đàm trước, khi giải mã nguồn của vắc-xin mã hiệu BNT162b2 của 2
công ty Pfizer và BioNTech, chúng ta thấy sự sống có nhiều cách để
truyền tải thông tin ở mức tế bào, DNA, RNA, protein (đạm). Bài nghiên cứu trên
tuy có tham vọng là tìm mối liên kết giữa các thực thể sinh học, nhưng cụ thể
chỉ đi sâu vào tìm mối liên kết giữa các protein.
Cách tiếp cận gần
giống với Word2Vec:
·
“Từ”
trong Word2Vec được thay bằng “Protein”;
·
Tập
hợp các “Câu văn” được thay bằng 546.790 “Chuỗi protein” (lấy từ một cơ sở dữ
liệu có tên là Swiss-Prot);
·
Khi
huấn luyện họ kết hợp mạng n-gram (họ chọn n=3) và mạng Skip-gram. (Xin nhắc lại:
Word2Vec sử dụng CBOW và Skip-gram.)
---
Kết quả là họ
đã phân ra được 7.027 họ protein và một cơ sở dữ liệu về protein rối loạn (disordered
proteins).
---
Tựu trung, ý tưởng
embeddings đã vượt ra ngoài vấn đề ngôn ngữ (NLP).
⚶
Khi ngồi đọc
các bài báo về Machine Learning, đặc biệt là mạng nơ-ron (neural networks)
tôi thấy có nhiều kết quả rất “magic”, rất hay nhưng cơ sở lý thuyết của nó thì
“chịu”, không hiểu được. Ngành này chắc còn mang đến nhiều ngạc nhiên thú vị.
(\_/)
(
•_•)
/
>☕