24 điểm bởi GN⁺ 2024-04-18 | 1 bình luận | Chia sẻ qua WhatsApp

Hướng dẫn sử dụng embeddings cho lập trình viên ứng dụng

  • Vector embedding rất hiệu quả trong việc đo độ tương đồng cho nhiều loại đầu vào, nên phù hợp với các tính năng tìm kiếm và gợi ý. Nó cũng hoạt động tốt với các ngôn ngữ khác như tiếng Pháp hay tiếng Nhật.
  • Pgvector là tiện ích mở rộng của Postgres cho phép lưu trữ và truy vấn embedding, rất mạnh vì có thể kết hợp logic SQL với các phép toán embedding mà không cần bổ sung dịch vụ mới.
  • Khác với LLM, việc sử dụng embedding mang lại cảm giác giống với mã quyết định luận thông thường.

Phát triển dự án tìm kiếm và gợi ý biểu tượng

  • Sau khi thiết lập Pgvector, xây dựng chiến lược mã hóa dữ liệu biểu tượng thành các vector embedding.
  • Sử dụng mô hình text-embedding-3-small của OpenAI.
  • Đo độ tương đồng giữa từ khóa tìm kiếm và embedding của từng biểu tượng bằng cosine similarity.
  • Kết hợp logic nghiệp vụ như lọc bộ biểu tượng vào tìm kiếm embedding.
  • Đưa ra ví dụ về thuật toán xếp hạng sử dụng dữ liệu nhấp vào biểu tượng theo từ khóa tìm kiếm.
  • Dùng so sánh embedding để gợi ý các biểu tượng tương tự với biểu tượng đã chọn.
Quảng cáo

Tóm tắt phương án triển khai

  • Chọn pgvector/Postgres làm vector DB. Cũng có các lựa chọn khác như MongoDB.
  • Phát triển bằng Typescript, sử dụng drizzle-orm. Cũng có nhiều thư viện cho ngôn ngữ/framework khác.
  • Ứng dụng được host trên Neon. Có thể dùng các dịch vụ host DB được quản lý như fly.io, Supabase.
  • Sử dụng mô hình embedding text-embedding-3-small của OpenAI. Có thể chọn các mô hình khác từ bảng xếp hạng của Huggingface.
  • Nhúng các thuộc tính của biểu tượng có liên quan nhiều đến tìm kiếm dưới dạng cặp key-value.
  • Dùng cosine similarity làm hàm khoảng cách. Pgvector cũng hỗ trợ l2 distance và inner product.
  • Giới hạn kết quả tìm kiếm ở top 50. Khi dùng phạm vi khoảng cách, nên đặt rộng và dùng kèm limit.

Ý kiến của GN⁺

  • Với phần lớn dự án, có lẽ chỉ cần thêm tính năng vector vào DB hiện có như pgvector là đủ. Việc đưa vào một vector DB riêng có vẻ chỉ cần cho các dịch vụ quy mô lớn.
  • Khả năng kết hợp tự nhiên logic nghiệp vụ với tìm kiếm embedding là một ưu điểm lớn. Có thể tận dụng nguyên sức mạnh của SQL.
  • Ý tưởng phản ánh dữ liệu phản hồi người dùng vào thuật toán xếp hạng rất hay. Có vẻ có thể liên tục cải thiện độ chính xác của tìm kiếm.
  • So với LLM, dịch vụ dựa trên embedding có hành vi rõ ràng hơn và cũng dễ debug hơn, nên có vẻ dễ áp dụng vào dịch vụ thực tế hơn nhiều.
  • Nhiều mô hình embedding mã nguồn mở đã được công bố, nên ngay cả khi khó tự phát triển mô hình riêng thì vẫn có thể dễ dàng tận dụng embedding chất lượng cao.

1 bình luận

 
GN⁺ 2024-04-18
Ý kiến trên Hacker News

Tóm tắt bình luận Hacker News

Sự tiện lợi của việc nhúng tài liệu và tìm kiếm độ tương đồng bằng mô hình RAG

  • Có thể dễ dàng triển khai nhúng tài liệu và tìm kiếm độ tương đồng bằng thư viện sentence-transformersfaiss
  • Đây có thể là một dự án thú vị khi cho ra hiệu năng tốt hơn cả hệ thống gợi ý của New York Times
  • Kênh YouTube của James Briggs giải thích khá tốt nội dung liên quan

Hiểu khái niệm cơ bản của embeddings

  • Ngay cả khi không dùng AI/deep learning, vẫn có thể tạo embedding bằng cách gán chỉ mục riêng cho từng từ và cộng dồn giá trị theo tần suất
  • Cũng có thể dùng cosine similarity để thực hiện tìm kiếm độ tương đồng
  • Embedding dựa trên deep learning là phiên bản được bổ sung các chức năng như lọc từ/token, xử lý từ đồng nghĩa trên nền tảng khái niệm cơ bản này

Thiếu giải thích chi tiết về quá trình tạo embedding

Độ khó trong việc xử lý từ đồng âm khác nghĩa

  • Do từ đồng âm khác nghĩa, kết quả tìm kiếm đôi khi có thể ra ngoài ý muốn, ví dụ tìm king thì lại hiện biểu tượng ruler(thước)
  • Đây có thể là một thử thách thú vị, đồng thời cũng có ưu điểm là vẫn tìm ra được các biểu tượng liên quan

Có thể dùng embeddings mà không cần vector store

  • Trong môi trường production với dữ liệu lớn, vector store quan trọng vì các lý do như độ trễ, nhưng ở mức toy project thì có thể triển khai đơn giản bằng Numpy
  • Có thể tính độ tương đồng bằng cách dùng toán tử @ của Numpy để lấy tích vô hướng giữa vector truy vấn đã chuẩn hóa và ma trận bản ghi

Cách chạy logic embedding trong môi trường local

  • Có ý kiến thắc mắc về cách tự tạo embedding trực tiếp trong môi trường local hoặc cơ sở dữ liệu mà không phụ thuộc vào OpenAI API

Khả năng ứng dụng embeddings khi viết tài liệu kỹ thuật

  • Từ sau khi ChatGPT xuất hiện, đã có nhiều thảo luận sôi nổi trong giới viết tài liệu kỹ thuật về khả năng dùng nó như một công cụ semantic search
  • Nó có thể giúp tăng hiệu quả ở giai đoạn nghiên cứu cần thiết cho việc viết tài liệu

Cách lưu trữ và sử dụng embeddings

  • Thông thường người ta tạo embedding, lưu lại rồi tải ra dùng mỗi khi cần
  • Trong các trường hợp đơn giản, cũng có thể truyền embedding trực tiếp dưới dạng mảng để sử dụng
  • Việc lưu embedding là phần khó hơn, nhưng không nhất thiết phải cần cơ sở dữ liệu đặc biệt; có thể dùng cả BLOB của SQLite
  • Embedding không có khái niệm “hết hạn”

Thiếu giải thích kiến thức nền cho lập trình viên mới bắt đầu với AI

  • Bài viết đi thẳng vào cách dùng embedding hay vector database mà không giải thích các khái niệm này trước
  • Với những người đang tìm một điểm khởi đầu tốt cho lập trình viên ứng dụng quan tâm đến AI, có lẽ cần phần giới thiệu về các khái niệm liên quan