3 điểm bởi GN⁺ 2024-09-22 | 1 bình luận | Chia sẻ qua WhatsApp

Giới thiệu về Contextual Retrieval

  • Để mô hình AI hữu ích trong một ngữ cảnh cụ thể, nó cần có kiến thức nền
  • Chatbot hỗ trợ khách hàng cần kiến thức về một doanh nghiệp cụ thể, còn bot phân tích pháp lý cần lượng kiến thức khổng lồ về các tiền lệ trước đó
  • Nhà phát triển thường sử dụng Retrieval-Augmented Generation (RAG) để nâng cao kiến thức của mô hình AI
  • Các giải pháp RAG truyền thống thường loại bỏ ngữ cảnh khi mã hóa thông tin, nên nhiều trường hợp không thể truy xuất được thông tin liên quan

Phương pháp Contextual Retrieval

  • Contextual Retrieval là một phương pháp cải thiện đáng kể giai đoạn truy xuất của RAG
  • Nó sử dụng hai kỹ thuật thành phần là Contextual Embeddings và Contextual BM25
  • Giảm số lần truy xuất thất bại 49%, và khi kết hợp với reranking có thể giảm tới 67%
  • Có thể dễ dàng triển khai giải pháp Contextual Retrieval bằng Claude

Chỉ đơn giản dùng prompt dài hơn

  • Nếu cơ sở tri thức có dưới 200.000 token, cung cấp toàn bộ cơ sở tri thức cho mô hình có thể là cách tốt hơn
  • Khi dùng tính năng prompt caching của Claude, cách tiếp cận này nhanh hơn và hiệu quả chi phí hơn
  • Khi cơ sở tri thức lớn hơn, cần một giải pháp có khả năng mở rộng tốt hơn

Khái niệm cơ bản của RAG

  • RAG được dùng để xử lý các cơ sở tri thức lớn
  • Cơ sở tri thức được chia thành các đoạn văn bản nhỏ, rồi dùng mô hình embedding để mã hóa ý nghĩa
  • Sau đó lưu vào cơ sở dữ liệu vector để truy xuất theo độ tương đồng ngữ nghĩa
  • BM25 hiệu quả trong việc tìm các từ hoặc cụm từ khớp chính xác

Hạn chế của RAG truyền thống

  • Quá trình chia tài liệu thành các đoạn nhỏ có thể làm mất ngữ cảnh
  • Ví dụ, với câu hỏi tìm thông tin tài chính của một công ty cụ thể, có thể trả về một đoạn không có đủ ngữ cảnh

Triển khai Contextual Retrieval

  • Thêm ngữ cảnh mô tả vào từng đoạn để tạo chỉ mục embedding và BM25
  • Dùng Claude để tạo ngữ cảnh ngắn gọn cho từng đoạn
  • Có thể dùng prompt caching để giảm chi phí

Cải thiện hiệu năng

  • Contextual Embeddings giúp giảm tỷ lệ truy xuất thất bại 35%
  • Kết hợp Contextual Embeddings và Contextual BM25 giúp giảm tỷ lệ truy xuất thất bại 49%

Các điểm cần cân nhắc khi triển khai

  • Cần cân nhắc cách chia tài liệu thành đoạn, lựa chọn mô hình embedding, prompt ngữ cảnh hóa tùy chỉnh, v.v.
  • Bao gồm nhiều đoạn hơn sẽ làm tăng khả năng chứa thông tin liên quan

Nâng cao hiệu năng bằng reranking

  • Reranking cải thiện chất lượng phản hồi bằng cách chỉ chuyển các đoạn liên quan nhất cho mô hình
  • Contextual Embedding và Contextual BM25 sau khi reranking giúp giảm tỷ lệ truy xuất thất bại 67%

Kết luận

  • Kết hợp Embeddings và BM25 có thể mang lại kết quả tốt hơn
  • Embedding của Voyage và Gemini là hiệu quả nhất
  • Truyền 20 đoạn đứng đầu cho mô hình là hiệu quả nhất
  • Việc thêm ngữ cảnh giúp cải thiện đáng kể độ chính xác truy xuất
  • Reranking tiếp tục cải thiện hiệu năng

Tổng hợp của GN⁺

  • Contextual Retrieval là phương pháp có thể cải thiện mạnh độ chính xác truy xuất của mô hình AI
  • Đặc biệt hữu ích khi xử lý các cơ sở tri thức lớn
  • Có thể triển khai hiệu quả về chi phí bằng tính năng prompt caching của Claude
  • Các dự án khác có chức năng tương tự gồm GPT-3 của OpenAI và BERT của Google

1 bình luận

 
GN⁺ 2024-09-22
Ý kiến trên Hacker News
  • Ý kiến thứ nhất

    • Chia sẻ kinh nghiệm xây dựng RAG doanh nghiệp cho cơ quan chính phủ
    • Kết quả thử nghiệm A/B dùng chỉ số RAGAS:
      • Tìm kiếm lai (ngữ nghĩa + vector) và xếp hạng lại dựa trên LLM hầu như không tạo khác biệt lớn trên các câu hỏi đánh giá tổng hợp
      • HyDE làm suy giảm nghiêm trọng chất lượng câu trả lời và tìm kiếm trên các câu hỏi đánh giá tổng hợp
    • Tìm kiếm lai luôn hữu ích, nhưng không có một phương pháp nào luôn chiến thắng
    • Tìm kiếm ngữ nghĩa của Azure AI Search đủ hiệu quả khi kết hợp với độ tương đồng vector
    • Cần thử nghiệm nhiều phương pháp khác nhau
    • Những thứ sẽ thử tiếp theo:
      • RAPTOR
      • SelfRAG
      • Agentic RAG
      • Tinh chỉnh truy vấn (mở rộng và truy vấn con)
      • GraphRAG
    • Bài học rút ra:
      • Luôn nên dùng đường cơ sở và thí nghiệm để cố gắng bác bỏ giả thuyết không
      • Sử dụng ba loại câu hỏi/câu trả lời đánh giá: do chuyên gia viết, câu hỏi từ người dùng thực, và câu hỏi tổng hợp
  • Ý kiến thứ hai

    • Thích cách tận dụng prompt caching
    • Nhờ caching mà chi phí prompt giảm xuống còn 1/10
    • Việc tiết kiệm chi phí nhờ caching mở ra khả năng dùng nhiều mẹo khác nhau
    • Chia sẻ ghi chú về contextual retrieval và prompt caching
  • Ý kiến thứ ba

    • Cách tiếp cận mở rộng các chunk cơ bản bằng LLM để cải thiện kết quả RAG là khá phổ biến
    • Mở rộng truy vấn bằng HyDE không phải lúc nào cũng cải thiện
    • Điểm mới của Anthropic là đưa vào prompt caching
    • Prompt caching giúp giảm chi phí bằng cách cung cấp tài liệu dài làm ngữ cảnh
    • Rất hài lòng với API của Cohere
  • Ý kiến thứ tư

    • Sử dụng cách chia tài liệu thành các chunk dựa trên tiêu đề h1, h2, h3, rồi thêm header vào đầu mỗi chunk
    • Ví dụ:
      • Chunk cũ: "Liều thông thường cho người lớn là 1–2 viên nén hoặc viên nang 200mg, ngày 3 lần"
      • Chunk mới: "# Sốt ## Điều trị --- Liều thông thường cho người lớn là 1–2 viên nén hoặc viên nang 200mg, ngày 3 lần"
    • Cách này hoạt động tốt ngay cả khi không dùng LLM
  • Ý kiến thứ năm

    • Có quan điểm phản đối kỹ thuật này
    • Vector embedding có thể tập trung quá mức vào khối văn bản đầu tiên trước dấu ngắt dòng
    • Tìm kiếm IDF có khắc phục được phần nào nhưng chưa đủ
    • Có thể dùng "semantic boost" để dịch chuyển embedding về tiêu đề, phần tóm tắt của tài liệu, v.v.
    • Chia sẻ phần giải thích về "semantic boost" của API Trieve
  • Ý kiến thứ sáu

    • Dùng chiến lược "linked list" để các chunk có nhiều con trỏ tới các mục mà chúng tham chiếu
    • Giải thích theo cách mỗi bình luận trở thành một con trỏ tới bài đăng gốc
    • Chia sẻ ví dụ về kỹ thuật này
  • Ý kiến thứ bảy

    • Không đồng tình với nhận định rằng dùng 200k token sẽ cho câu trả lời tốt nhất trên tập dữ liệu nhỏ
    • Prompt càng lớn thì đầu ra càng thiếu nhất quán và càng khó tuân theo chỉ dẫn
    • Tò mò không biết người khác có trải nghiệm tương tự không và có cách nào để tránh việc này không
  • Ý kiến thứ tám

    • Gặp phải bài toán truy xuất quy tắc thay vì truy xuất tri thức bằng RAG
    • Đề xuất cách tiếp cận huấn luyện một bộ phân loại nhỏ để xác định một quy tắc cụ thể có thể áp dụng hay không
    • Ví dụ: xác định liệu một quy tắc cụ thể có áp dụng trong game multi-user dungeon hay không
    • Việc quyết định một quy tắc có áp dụng hay không là một bài toán trừu tượng và khó hơn
    • Đang tìm cách giải quyết vấn đề này
  • Ý kiến thứ chín

    • Nếu knowledge base nhỏ hơn 200.000 token (khoảng 500 trang)
    • Mong Anthropic công bố tokenizer của họ
  • Ý kiến thứ mười

    • Đang chờ ngày ngành AI quay trở lại với TF-IDF