Cosine Similarity Là Gì?
Cosine Similarity là một phương pháp đo độ giống nhau giữa hai vector, dựa trên góc giữa chúng chứ không phải độ dài. Trong AI và machine learning, nó là thước đo phổ biến nhất để so sánh văn bản, tìm kiếm ngữ nghĩa, và xây dựng hệ thống gợi ý.
Ý tưởng cốt lõi rất đơn giản: hai vector cùng hướng thì giống nhau, dù độ dài khác nhau. Góc càng nhỏ, độ tương đồng càng cao. Góc 0 độ nghĩa là hoàn toàn giống nhau, góc 90 độ nghĩa là không liên quan.
Cosine Similarity Tính Như Thế Nào?
Công thức tính Cosine Similarity giữa hai vector A và B là:
cos(A, B) = (A . B) / (||A|| × ||B||)
Trong đó A . B là tích vô hướng (dot product) của hai vector, còn ||A|| và ||B|| là độ dài (magnitude) của từng vector. Kết quả luôn nằm trong khoảng từ -1 đến 1.
Giá trị 1 nghĩa là hai vector cùng hướng hoàn toàn. Giá trị 0 nghĩa là hai vector vuông góc, không liên quan. Giá trị -1 nghĩa là hai vector ngược hướng. Trong xử lý văn bản, vì tần suất từ luôn không âm, kết quả thường nằm từ 0 đến 1.
Tại Sao Dùng Góc Mà Không Dùng Khoảng Cách?
Nhiều người thắc mắc: tại sao không đo khoảng cách (Euclidean) cho xong? Lý do là Cosine Similarity “bỏ qua” độ dài của vector, chỉ quan tâm đến hướng.
Ví dụ thực tế: một bài viết 500 từ về “AI” và một bài 2000 từ cũng về “AI” sẽ có nội dung giống nhau về chủ đề. Nhưng nếu dùng khoảng cách Euclidean, hai vector này sẽ rất xa nhau vì độ dài khác biệt. Cosine Similarity thì không, nó nhìn thấy hai vector cùng hướng và báo “hai bài này giống nhau”.
Đây là lý do Cosine Similarity trở thành tiêu chuẩn trong xử lý ngôn ngữ tự nhiên. Văn bản dài hay ngắn không quan trọng, quan trọng là nội dung nói về cái gì.
Ứng Dụng Của Cosine Similarity Trong AI
Tìm kiếm ngữ nghĩa (Semantic Search): Khi bạn nhập câu truy vấn, hệ thống sẽ chuyển câu đó thành vector embedding, rồi tính Cosine Similarity với tất cả vector tài liệu trong cơ sở dữ liệu. Tài liệu nào có độ tương đồng cao nhất sẽ hiện lên đầu.
RAG (Retrieval-Augmented Generation): ChatGPT và các AI assistant dùng Cosine Similarity để chọn ra những đoạn văn bản liên quan nhất từ kiến thức của chúng, trước khi dùng LLM để tạo câu trả lời.
Hệ thống gợi ý: Netflix, Spotify, Shopee đều dùng Cosine Similarity để tìm người dùng có sở thích tương tự, hoặc sản phẩm có đặc tính gần giống nhau.
Phân cụm văn bản: Nhóm các bài viết, đánh giá, hoặc bình luận có nội dung tương đồng lại với nhau để phân tích xu hướng.
Cosine Similarity Vs Euclidean Distance
Đây là câu hỏi mình gặp thường xuyên. Cả hai đều đo độ giống nhau, nhưng cách tiếp cận khác hẳn.
Euclidean Distance đo khoảng cách tuyến tính giữa hai điểm. Nó bị ảnh hưởng bởi độ dài vector, nên phù hợp khi độ dài mang ý nghĩa quan trọng (ví dụ: so sánh hình ảnh pixel).
Cosine Similarity đo góc giữa hai vector. Nó bỏ qua độ dài, nên phù hợp khi chỉ quan tâm đến “hướng” hay “phân bố” (ví dụ: so sánh văn bản).
Mình ủng hộ dùng Cosine Similarity cho hầu hết tác vụ xử lý văn bản. Nó nhanh, dễ hiểu, và cho kết quả hợp lý hơn trong đa số trường hợp. Euclidean Distance chỉ thắng khi bạn cần phân biệt rõ ràng giữa các mức độ cường độ.
Vector Database Và Cosine Similarity
Khi nói đến Cosine Similarity trong AI hiện đại, không thể bỏ qua Vector Database. Các nền tảng như Pinecone, Weaviate, Milvus, hay Qdrant đều dùng Cosine Similarity làm thước đo mặc định.
Quá trình diễn ra như sau: bạn chuyển văn bản thành vector embedding (thông qua các model như OpenAI text-embedding-3-small hay Cohere embed), lưu vào vector database. Khi cần tìm kiếm, câu truy vấn cũng được embedding, rồi database tính Cosine Similarity để trả về kết quả gần nhất. Toàn bộ quá trình diễn ra trong mili-giây, ngay cả với hàng triệu vector.
Hạn Chế Của Cosine Similarity
Cosine Similarity không hoàn hảo. Một số hạn chế cần lưu ý:
Bỏ qua độ dài: Đôi khi độ dài lại mang thông tin quan trọng. Ví dụ, một đoạn 10 từ và một bài 1000 từ cùng nói về “machine learning” sẽ có Cosine Similarity cao, nhưng mức độ chi tiết rất khác nhau.
Nhạy với chất lượng embedding: Cosine Similarity chỉ tốt khi vector embedding tốt. Nếu model embedding kém, kết quả so sánh cũng kém theo. Garbage in, garbage out.
Vấn đề dim mismatch: Khi vector có quá nhiều chiều (hàng nghìn), sự khác biệt giữa các giá trị trở nên nhỏ, hiện tượng gọi là “curse of dimensionality”. Cosine Similarity vẫn hoạt động nhưng độ phân biệt giảm.
Kết Luận
Cosine Similarity là nền tảng của hầu hết hệ thống AI tìm kiếm và gợi ý mà chúng ta dùng mỗi ngày. Hiểu được nó giúp bạn nắm được cách Google tìm kiếm, Netflix gợi ý phim, hay ChatGPT trích xuất thông tin hoạt động.
Khái niệm thì đơn giản, nhưng sức mạnh nằm ở cách kết hợp với vector embedding tốt. Nếu bạn đang xây dựng hệ thống RAG, chatbot, hay công cụ tìm kiếm nội bộ, Cosine Similarity gần như chắc chắn là thước đo bạn cần dùng.
