Business Information Learning

  1. Trang chủ
  2. Lưu
  3. Thẻ
  4. Hỏi - Đáp

 
 
Trang chủ
BIL'log, ⌚ 2021-04-05
***
☕ Nhàn đàm ICT: Embeddings ⚶
Tác giả: Lê Văn Lợi
Bài đã đăng trên diễn đàn ICT_VN (ict_vn@googlegroups.com).
Ngày đăng: 5-4-2021.

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 SamplingSubsampling. Đạ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 PfizerBioNTech, 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ị.

 

(_/)
( •_•)
/ >☕