faang-vector-database

Dành cho các bạn đang đang làm về lập trình và AI

Ngày ấy, ấy, chúng tôi hợp tác với website âm nhạc lớn nhất Việt Nam thời điểm bấy giờ để triển khai một dự án AI có tên là Music Recommendation. Nghe thực sự là hổ báo cáo chồn!

Trong công đoạn xây dựng sản phẩm về Gợi ý bài hát thì có một phân đoạn mang tên: Similar songs – tìm các bài hát có độ tương đồng nhau về giai điệu. Ấy, vấn đề bắt đầu nghe sexy rồi, làm sao để tìm ra bài hát tôi đang nghe của Đan Trường lại có nhạc điệu na ná bài nào đó bên TQ (nhạc Hoa lời Việt). Và thế là anh em AI điên cuồng lao vào đọc paper rồi thử nghiệm các thể loại mô hình để có thể cho “máy học” được cái Melody của bài hát từ một file nhạc mp3. Sau quá trình băm chặt, nén nủng các thể loại thì đội AI cũng cho ra lò được cái model có thể Embedding một bài hát thành một vector. Vector nó kiểu kiểu như thế này này: [1.25,0.76,…,0.34]

Ace đều biết thì máy tính hay AI nó không hiểu một phát hiểu ngay được mấy cái như là bài hát này thể loại gì, nhạc nhanh hay chậm. Để nó có thể xử lý được thì phải đưa nó về dữ liệu dạng số như trên. Tuy nhiên quan trọng là dữ liệu số này phải đại diện được cho bài hát đấy, chứ không phải là một dãy số vô giá trị.

vector-database

Mọi người có thể hình dung đề bài là tìm các bài hát có giai điệu tương đồng nhau. Thế thì quay trở lại toán học phổ thông một chút, khi chúng ta đã biểu diễn được 2 bài hát dưới dạng Vector rồi thì để xem chúng có tương tự nhau hay không thì chúng ta làm phép toán tìm khoảng cách giữa 2 Vector, bằng cách tính Cosine là xong. Đấy đại loại là như thế, chứ tôi cũng quên cách tính rồi 😢 Vậy thì lời giải của tôi là tôi đem Vector đầu vào (là bài hát của Đan Trường) đi so sánh với tất cả các Vector bài hát mà tôi có “là xong”. Rồi thì sau khi team AI cặm cụi mày mò một thời gian phát triển, demo ngon lành khá là cành đào với vài nghìn bài hát, anh em chắc mẩm, triển khai production được rồi…

Nhưng “Thế giới này vận hành theo cái cách luôn ghì ta xuống”, khách hàng đưa cho chúng tôi 5 triệu bài hát. 5 triệu bài thì sao? Cứ cầm bài hát mình muốn tìm kiếm đi so sánh lần lượt cho đến hết thôi 😀 Nếu đời mà đơn giản như vậy thì anh em lập trình đã không phải vất vả học suốt ngày như vậy. Với những vector hạng nặng như vậy để tìm ra được các bài hát tương đồng nhất với bài hát của Đan Trường trong 5 triệu bài thì tôi phải mất đến vài phút. Vài phút ư? Không người dùng nào vào website lại chờ đến vài phút chúng tôi mới đưa ra gợi ý cả. Thế thì mình chạy trước đi, cứ tính trước các similar songs cho cả 5 triệu bài rồi lưu lại vào Database, rồi khi người dùng đang nghe bài nào thì vào Database lấy ra luôn. Nghe có vẻ bùi tai, để nhẩm tính xem nào, 2 phút một bài, 100k bài thì khoảng 200k phút = 200*60s = 12 triệu giây = 138 ngày !!! ôi mẹ ơi, tính xong chắc chuyển việc. Đấy mới là nhẩm vo cho khoảng 100k bài. Không được, làm thế này thì xôi thịt quá.

AI tìm ra model đã khó, giờ đi triển khai AI lên Production cũng khoai không kém. May sao, mình không phải là kẻ đi thay đổi thế giới, vấn đề mình gặp phải thì thế giới họ đã có solution rồi. Và keyword ở đây chính là “Vector Database”. Lạ nhỉ, bình thường thì đưa vào Database toàn là chữ với số, giờ lại còn đưa vào cả Vector nữa. Yeah, nhưng thực sự nó giải quyết được vấn đề mà chúng tôi gặp phải, khi tôi đưa Vector đầu vào để tìm kiếm những Vector tương đồng, nó chỉ mất 300ms để đưa ra top 10 kết qủa sát nhất. Tất nhiên sâu thẳm bên trong nó là cả một hệ thống phương pháp, thuật toán, cách lưu trữ, indexing … Và quả thực nhờ giải pháp này mà chúng tôi đã triển khai thành công dịch vụ Recommendation cho khách hàng, đảm bảo tốc độ nhanh nhất khi tích hợp vào hệ thống của khách hàng.

Và bạn thắc mắc là nó hoạt động như thế nào ư? Câu trả lời sẽ nằm trên Google kết hợp với kiến thức của bạn nhé 😄 Hi vọng với câu chuyện và keyword này sẽ giúp các bạn ít nhiều có solution khi gặp những bài toán tương tự. Chúc bạn tìm hiểu và ứng dụng nó thành công!

Xin chào mình là Huy Đê Tê!

Leave a Reply

Your email address will not be published. Required fields are marked *