[ML] Bài 5.1. Một ứng dụng của học không giám sát

Trong thế giới ngày càng phức tạp của dữ liệu số, học không giám sát (Unsupervised Learning) nổi lên như một công cụ mạnh mẽ trong lĩnh vực học máy. Khác với học có giám sát, phương pháp này không cần đến dữ liệu được gán nhãn trước, mà thay vào đó, nó tự khám phá các mẫu và cấu trúc ẩn trong dữ liệu thô. Khả năng này mở ra vô số khả năng ứng dụng, từ phân tích thị trường đến xử lý ngôn ngữ tự nhiên.

Các thuật toán học không giám sát thường được phân loại thành các nhóm chính sau:

  1. Phân cụm (Clustering):
    • K-means
    • Phân cụm phân cấp (Hierarchical clustering)
    • DBSCAN
    • Gaussian Mixture Models
  2. Giảm chiều dữ liệu (Dimensionality Reduction):
    • Phân tích thành phần chính (PCA)
    • t-SNE
    • UMAP
  3. Phát hiện bất thường (Anomaly Detection):
    • Isolation Forest
    • One-class SVM
    • Autoencoder cho phát hiện bất thường
  4. Mô hình học biểu diễn (Representation Learning):
    • Autoencoder
    • Restricted Boltzmann Machines
  5. Phân tích thành phần (Component Analysis):
    • Independent Component Analysis (ICA)
    • Thuật toán Singular Value Decomposition (Phân tích suy biến – SVD)
    • Non-negative Matrix Factorization (NMF)
  6. Mô hình chủ đề (Topic Modeling):
    • Latent Dirichlet Allocation (LDA)
  7. Học luật kết hợp (Association Rule Learning):
    • Apriori algorithm
    • FP-growth algorithm

Trong bài viết này, chúng ta sẽ đi sâu vào một ứng dụng đặc biệt thú vị của học không giám sát: Phân tích suy biến (Singular Value Decomposition – SVD) và cách nó được áp dụng trong lập chỉ mục ngữ nghĩa tiềm ẩn (Latent Semantic Indexing – LSI). Đây là một ví dụ tuyệt vời về cách học không giám sát có thể khai thác các mối quan hệ ngữ nghĩa phức tạp trong dữ liệu văn bản, mang lại những tiến bộ đáng kể trong lĩnh vực truy xuất thông tin và xử lý ngôn ngữ tự nhiên.

Các bài trong cùng chủ đề:

Bài 1: Học AI bắt đầu từ đâu?

Bài 2: Giới thiệu về Học máy

Bài 3: Mô hình hồi quy tuyến tính

Bài 4.1: Phân loại với hồi quy Logistic

Bài 4.2: Hồi quy Logistic cho phân loại đa lớp và Ứng dụng phân loại cảm xúc văn bản

Bài 5.1. Một ứng dụng của học không giám sát

Bài 5.2. Thuật toán K-Means và Ứng dụng phân cụm khách hàng

Bài 6. Bình minh của mạng nơ-ron nhân tạo – Cấu Trúc Perceptron


PHƯƠNG PHÁP PHÂN TÍCH SUY BIẾN VÀ ỨNG DỤNG TRONG LẬP CHỈ MỤC NGỮ NGHĨA TIỀM ẨN

Phép phân tích suy biến

Phép phân tích suy biến [1] (Singular Value Decomposition, được viết tắt là SVD) là một dạng matrix factorization khái quát hơn so với phép phân tích riêng. Theo đó phương pháp này nhằm phân rã một ma trận thành tích của ba ma trận số thực hoặc số phức, trong đó hai ma trận ở vị trí đầu tiên và cuối cùng là ma trận trực giao có thể không là khả nghịch của nhau và ở giữa là ma trận đường chéo có thể không vuông.

                                         \( \mathbf{A}_{m n}=\mathbf{U}_{m m} \mathbf{\Sigma}_{m n} \mathbf{V}_{n n}^{\top}\)                                                                                 (1)

Kích thước ma trận được để ở bên dưới chân ma trận, tức là ma trận \(\mathbf{A}_{m n} \in \mathbb{R}^{m \times n}\). Trong công thức trên thì \(\mathbf{U}_{m m}, \mathbf{V}_{n n}\) là các ma trận trực giao và \( \mathbf{\Sigma}_{m n} \) là ma trận đường chéo.

Hình 1. Phép phân tích suy biến SVD cho ma trận A. Σ là một ma trận đường chéo với các phần tử không âm. Các cột của 𝑈 được gọi là hệ vector suy biến phải. Các cột của ma trận 𝑉 là hệ vector suy biến trái.

Ví dụ: Giả sử ​\(A=\left(\begin{array}{llll}
1 & 0 & 0 & 0 \\
0 & 1 & 2 & 0 \\
0 & 0 & 0 & 1
\end{array}\right)\). Phép phân tích SVD của A sẽ là:

\(U=\left(\begin{array}{lll}
1 & 0 & 0 \\
0 & 1 & 0 \\
0 & 0 & 1
\end{array}\right), \Sigma=\left(\begin{array}{cccc}
1 & 0 & 0 & 0 \\
0 & \sqrt{5} & 0 & 0 \\
0 & 0 & 1 & 0
\end{array}\right), V^{T}=\left(\begin{array}{ccc}
1 & 0 & 0 \\
0 & \frac{1}{\sqrt{5}} & \frac{2}{\sqrt{5}} \\
0 & \frac{2}{\sqrt{5}} & -\frac{1}{\sqrt{5}}
\end{array}\right)\)

Lập chỉ mục ngữ nghĩa tiềm ẩn

Lập chỉ mục ngữ nghĩa tiềm ẩn (tên tiếng Anh là Latent Semantic Indexing, viết tắt LSI) là một kỹ thuật được sử dụng rộng rãi trong xử lý ngôn ngữ tự nhiên và truy xuất thông tin. LSI được giới thiệu bởi Deerwester và đồng sự vào năm 1990 [2] như một phương pháp để khám phá các khái niệm tiềm ẩn và mối quan hệ ngữ nghĩa giữa các thuật ngữ và tài liệu trong một tập hợp văn bản lớn. Ý tưởng cốt lõi của LSI là sử dụng kỹ thuật Singular Value Decomposition (SVD) để phân tích ma trận thuật ngữ-tài liệu, trong đó mỗi hàng đại diện cho một tài liệu và mỗi cột đại diện cho một thuật ngữ. SVD phân tích ma trận này thành ba ma trận: ma trận U chứa thông tin về mối quan hệ giữa các tài liệu và các khái niệm tiềm ẩn, ma trận Σ chứa các giá trị suy biến (singular values) và ma trận V chứa thông tin về mối quan hệ giữa các thuật ngữ và các khái niệm tiềm ẩn. Bằng cách giữ lại chỉ một số lượng nhỏ các giá trị suy biến lớn nhất và các vector suy biến tương ứng, LSI có thể giảm chiều dữ liệu và khám phá các khái niệm tiềm ẩn trong không gian ngữ nghĩa mới. Điều này giúp LSI vượt qua một số hạn chế của các phương pháp truy xuất thông tin truyền thống dựa trên sự xuất hiện của từ, như vấn đề đồng nghĩa và đa nghĩa.

Một trong những ứng dụng chính của LSI là truy xuất thông tin. Bằng cách biểu diễn tài liệu và truy vấn trong không gian ngữ nghĩa tiềm ẩn, LSI có thể tìm ra các tài liệu liên quan đến truy vấn một cách hiệu quả hơn so với các phương pháp truyền thống. LSI cũng được sử dụng trong việc phân loại văn bản, gom cụm văn bản và tóm tắt văn bản. Ngoài ra, LSI còn là một kỹ thuật mạnh mẽ trong việc xử lý đa nghĩa và đồng nghĩa trong xử lý ngôn ngữ tự nhiên. LSI giúp khắc phục những hạn chế của các phương pháp truyền thống dựa trên sự xuất hiện của từ bằng cách khám phá các mối quan hệ ngữ nghĩa tiềm ẩn giữa các từ và tài liệu. Trong không gian ngữ nghĩa tiềm ẩn, các từ có nghĩa giống nhau sẽ có xu hướng gần nhau, trong khi các từ có nghĩa khác nhau sẽ xa nhau. Điều này giúp LSI phân biệt và xác định đúng nghĩa của từ dựa trên ngữ cảnh. Trong không gian ngữ nghĩa tiềm ẩn, các từ đồng nghĩa sẽ có xu hướng gần nhau và có vectơ biểu diễn tương tự. Điều này giúp LSI xác định và nhóm các từ đồng nghĩa lại với nhau, cho phép truy xuất thông tin và xử lý ngôn ngữ tự nhiên hiệu quả hơn.

Các bước chính của LSI có thể tóm tắt như sau:

  • Tạo ma trận thuật ngữ-tài liệu.
  • Thực hiện Singular Value Decomposition (SVD) trên ma trận đó để tìm các thành phần chính.
  • Sử dụng các thành phần chính để biểu diễn dữ liệu trong không gian ngữ nghĩa giảm chiều.

Mặc dù LSI đã đạt được nhiều thành công trong các ứng dụng thực tế, nó cũng có một số hạn chế. Một trong những hạn chế chính là chi phí tính toán cao khi làm việc với các tập dữ liệu lớn. Việc tính toán SVD trên các ma trận lớn có thể tốn nhiều thời gian và tài nguyên. Ngoài ra, việc lựa chọn số lượng khái niệm tiềm ẩn phù hợp cũng là một thách thức và có thể ảnh hưởng đến hiệu suất của LSI. Trong những năm gần đây, nhiều phương pháp và mô hình mới đã được phát triển để cải thiện và mở rộng LSI, như Probabilistic Latent Semantic Analysis (PLSA) và Latent Dirichlet Allocation (LDA). Các phương pháp này kết hợp các khía cạnh xác suất và thống kê để khám phá các chủ đề tiềm ẩn trong dữ liệu văn bản.

Phần tiếp theo đây, tôi sẽ trình bày chi tiết kèm mã nguồn minh họa một số các ứng dụng chính của LSI.


1. Giảm chiều dữ liệu

SVD được sử dụng để giảm chiều của ma trận thuật ngữ-tài liệu (term-document matrix) thành một không gian ngữ nghĩa tiềm ẩn có chiều thấp hơn. Ma trận ban đầu có kích thước \(\mathbf{A}_{m * n}\), trong đó m là số lượng thuật ngữ và n là số lượng tài liệu. SVD phân tích ma trận này thành ba ma trận: \(\mathbf{U}_{m * k}, \mathbf{\Sigma}_{k * k} \text { và } \mathbf{V}_{k * \pi}^{\top}\),  và  trong đó k là số chiều tiềm ẩn được chọn (thường nhỏ hơn nhiều so với m và n).

Phân biệt giữa Thuật toán PCA và SVD

Principal Component Analysis (PCA) [3] là một kỹ thuật giảm chiều dữ liệu được sử dụng để tìm ra các hướng chính (principal directions) trong dữ liệu, nhằm tối đa hóa phương sai của dữ liệu dọc theo các hướng đó. PCA chủ yếu được sử dụng trong giảm chiều dữ liệu, phân tích và trực quan hóa dữ liệu. Nó không tập trung vào ngữ nghĩa của từ trong ngữ cảnh văn bản. Trong khi đó, kỹ thuật giảm chiều dữ liệu sử dụng SVD trong LSI giúp tìm ra các mối quan hệ ngữ nghĩa tiềm ẩn giữa các từ và tài liệu.

Dưới đây là ví dụ sử dụng thuật toán SVD để giảm chiều của ma trận thuật ngữ-tài liệu.

Chương trình 1. Sử dụng SVD để giảm chiều của ma trận thuật ngữ-tài liệu

2. Cải thiện hiệu suất truy xuất thông tin

LSI sử dụng SVD để biểu diễn tài liệu và truy vấn trong không gian ngữ nghĩa tiềm ẩn. Độ tương đồng giữa tài liệu và truy vấn được tính toán dựa trên khoảng cách giữa các vector trong không gian này, giúp cải thiện hiệu suất truy xuất thông tin.

Dưới đây là một ví dụ về cách sử dụng LSI với SVD để cải thiện hiệu suất truy xuất thông tin trong Python. Cho một tập dữ liệu mẫu gồm 5 tài liệu

  • D1: “The cat in the hat is disabled”,
  • D2: “A cat is a fine pet ponies.”,
  • D3: “Dogs and cats make good pets.”,
  • D4: “I haven’t got a hat.”,
  • D5: “A dog is a man’s best friend.”

Chúng ta có thể tiến hành xây dựng ma trận thuật ngữ-tài liệu X sử dụng TF-IDF. Chúng ta sẽ sử dụng thư viện svds để thực hiện SVD và giữ lại k thành phần chính. Sau đó, sẽ biến đổi ma trận thuật ngữ-tài liệu X ban đầu vào không gian LSI.

Tiếp theo, giả sử NCS tạo một truy vấn query = [“cat hat”], có thể tính toán độ tương đồng cosine giữa truy vấn và các tài liệu trong không gian LSI. Dựa vào độ tương đồng trên, truy xuất top 2 tài liệu liên quan nhất. Kết quả của thực nghiệm thu được Top 2 tài liệu liên quan đến truy vấn query = [“cat hat”] là

  • D1: “The cat in the hat is disabled”
  • D4: “I haven’t got a hat.”


Hình 2. Truy xuất top các tài liệu liên quan nhất dựa vào độ tương đồng cosine giữa truy vấn và các tài liệu trong không gian LSI.

Chương trình 2. Sử dụng LSI với SVD để cải thiện hiệu suất truy xuất thông tin

3. Xử lý đa nghĩa và đồng nghĩa

LSI sử dụng SVD để biểu diễn tài liệu và truy vấn trong không gian ngữ nghĩa tiềm ẩn, từ đó giúp giải quyết vấn đề đa nghĩa (polysemy) và từ đồng nghĩa (synonymy) trong ngôn ngữ tự nhiên. Nó có thể nhóm các từ có cùng ngữ nghĩa lại với nhau và phân biệt các từ có nhiều nghĩa khác nhau dựa trên ngữ cảnh của chúng.

Cách LSI xử lý đa nghĩa và đồng nghĩa như sau:

  • LSI sử dụng Singular Value Decomposition (SVD) để phân tích ma trận thuật ngữ-tài liệu và tìm ra các khái niệm tiềm ẩn trong không gian ngữ nghĩa mới.
  • Trong không gian ngữ nghĩa tiềm ẩn, các từ có nghĩa tương tự sẽ có vectơ biểu diễn gần nhau, trong khi các từ có nghĩa khác nhau sẽ có vectơ biểu diễn xa nhau. LSI giúp xử lý vấn đề đa nghĩa bằng cách phân tích ngữ cảnh và mối quan hệ giữa các từ trong không gian ngữ nghĩa tiềm ẩn. Từ “bank” có thể có nghĩa là “ngân hàng” hoặc “bờ sông” tùy thuộc vào ngữ cảnh. LSI sẽ phân tích các tài liệu chứa từ “bank” và các từ liên quan để xác định nghĩa phù hợp trong từng trường hợp.
  • LSI sử dụng các vectơ biểu diễn này để xác định nghĩa của từ dựa trên ngữ cảnh và nhóm các từ đồng nghĩa lại với nhau. Ví dụ, các từ “car” và “automobile” đều có nghĩa là xe hơi, và LSI sẽ gom chúng vào cùng một thành phần chính, giúp cải thiện hiệu suất truy vấn và phân loại

Dưới đây là một ví dụ về cách sử dụng LSI với SVD xử lý đa nghĩa và đồng nghĩa trong Python. Cho một tập dữ liệu mẫu X gồm 6 tài liệu.

  • D1: “The bank will not loan me money.”
  • D2: “The river bank was flooded.”
  • D3: “The car is a wonderful means of transport.”
  • D4: “The automobile is very fast.”
  • D5: “I went to the bank to deposit money.”
  • D6: “The bank of the river is a nice place to relax.”

Chúng ta tiến hành xây dựng ma trận thuật ngữ-tài liệu X sử dụng TF-IDF, sau đó sử dụng thư viện svds để thực hiện SVD và giữ lại k thành phần chính. Sau đó, sẽ biến đổi ma trận thuật ngữ-tài liệu X ban đầu vào không gian LSI. Ma trận độ tương đồng cosine hiển thị mức độ tương đồng giữa các tài liệu sau khi được biến đổi vào không gian LSI. Các tài liệu có giá trị tương đồng cao hơn sẽ gần nhau hơn trong không gian LSI. Đồ thị hiển thị các tài liệu trong không gian LSI với hai thành phần chính. Các tài liệu có nội dung tương tự nhau sẽ gần nhau hơn trong đồ thị. Ví dụ, “car” và “automobile” đều có nghĩa là xe hơi sẽ được gom cụm gần nhau trong không gian ngữ nghĩa tiền ẩn LSI. Trong khi đó, từ  “bank” có đa nghĩa, có thể là “ngân hàng” hoặc “bờ sông”. Trong hình 6 kết quả có thể thấy, trường hợp câu D2 và D6 được gom cụm gần nhau để giúp chúng phân biệt được với câu D1 và D5, điều này cho thấy khả năng xử lý đa nghĩa và đồng nghĩa của LSI.

Hình 3. Đồ thị hiển thị các tài liệu trong không gian LSI với hai thành phần chính. Các tài liệu có nội dung tương tự nhau sẽ gần nhau hơn trong đồ thị.

Chương trình 3. Sử dụng LSI với SVD xử lý đa nghĩa và đồng nghĩa

Bài viết trên đây đã tập trung vào Phương pháp phân tích suy biến và ứng dụng trong lập chỉ mục ngữ nghĩa tiềm ẩn như một ví dụ cụ thể của học không giám sát trong xử lý ngôn ngữ tự nhiên. Đây chỉ là một ví dụ trong nhiều ứng dụng hiện nay của “học không giám sát”. Lĩnh vực học không giám sát còn rất nhiều khía cạnh thú vị và ứng dụng đa dạng chưa được đề cập trong bài viết này.

Tôi hy vọng thời gian tới đây sẽ có thể cung cấp thêm cho bạn đọc một số bài viết liên quan đến chủ đề đầy tiềm năng này.

TÀI LIỆU THAM KHẢO

[1] V. Klema and A. Laub, “The singular value decomposition: Its computation and some applications,” IEEE Transactions on Automatic Control, vol. 25, no. 2, pp. 164-176, 1980.
[2] S. Deerwester, S. Dumais, G. Furnas, T. Landauer and R. Harshman, “Indexing by latent semantic analysis,” Journal of the American Society for Information Science, vol. 41, 1990.
[3] I. Jolliffe, “Principal Component Analysis,” in International Encyclopedia of Statistical Science, Berlin, Heidelberg, Springer, 2011.

@Hong-Quan Do

5/5 - (1 bình chọn)
Comments: 96