0
0
Lập trình
TT

[LLM 101] Hướng dẫn cài đặt RAG với Hybrid Search, Cache Embedding và Mistral-AI

Đăng vào 3 tuần trước

• 3 phút đọc

Chủ đề:

LLM

RAG Là Gì?

RAG, hay Retrieval Augmented Generation, là một phương pháp tiên tiến trong lĩnh vực trí tuệ nhân tạo, kết hợp giữa truy xuất thông tin (Information Retrieval) và tạo ngôn ngữ tự nhiên (Natural Language Generation). Phương pháp này giúp nâng cao chất lượng văn bản được sinh ra, đặc biệt trong các nhiệm vụ ngôn ngữ phức tạp như trả lời câu hỏi, tóm tắt, và hoàn thành văn bản.

Mục tiêu của RAG là tăng cường độ chính xác trong quá trình sinh văn bản bằng cách truy xuất thông tin từ các nguồn bên ngoài. Điều này cho phép mô hình NLG tạo ra những phản hồi có tính liên quan và phù hợp hơn với ngữ cảnh. Bằng cách tích hợp thông tin từ quá trình truy xuất vào quá trình sinh văn bản, RAG nhằm nâng cao độ chính xác, mạch lạc và sự hữu ích của nội dung.

Các Kỹ Thuật Nâng Cao Trong RAG

Cache Embedding

Kỹ thuật Cache Embedding cho phép lưu trữ hoặc lưu tạm thời các embeddings, giúp tiết kiệm thời gian và tài nguyên tính toán. Sử dụng một CacheBackedEmbeddings, chúng ta có thể lưu trữ các embedding dưới dạng key-value. Nội dung văn bản sẽ được hash, và giá trị hash này được sử dụng làm key trong cache.

Để khởi tạo CacheBackedEmbeddings, chúng ta sử dụng hàm from_bytes_store, với các tham số như sau:

  • underlying_embedder: Embedder cho việc tạo embedding.
  • document_embedding_cache: Cache lưu trữ embeddings.
  • namespace: Tùy chọn để tránh trùng lặp với các cache khác.

Ví dụ về việc sử dụng hệ thống tệp cục bộ để lưu trữ embeddings:

python Copy
store = LocalFileStore("./cache/")

Điều này giúp tái tạo vector store nhanh chóng mà không cần tính toán lại embedding.

Hybrid Search kết hợp giữa tìm kiếm theo từ khóa và tìm kiếm theo vector. Phương pháp này sử dụng thuật toán BM25 cho việc tìm kiếm từ khóa, giúp xếp hạng và tính điểm sự phù hợp của tài liệu với một truy vấn cụ thể. Các điểm chính của BM25 bao gồm:

  • Term Frequency (TF): Tần suất xuất hiện của từ trong tài liệu.
  • Inverse Document Frequency (IDF): Mức độ quan trọng của một từ.
  • Trọng số BM25: Hỗn hợp giữa TF và IDF để tính điểm phù hợp.

Bên cạnh đó, tìm kiếm ngữ nghĩa giúp cải thiện độ chính xác bằng cách hiểu ngữ cảnh và ý nghĩa của truy vấn. Chúng ta sẽ sử dụng FAISS cho tìm kiếm ngữ nghĩa và BM25 cho tìm kiếm từ khóa để triển khai Hybrid Search thông qua EnsembleRetriever. Kỹ thuật này cho phép kết hợp kết quả từ nhiều bộ truy xuất khác nhau, tối ưu hóa hiệu suất truy xuất.

InMemory Caching

Kỹ thuật InMemory Caching sử dụng cho truy vấn của người dùng nếu phản hồi từ LLM Agent không khớp với truy vấn trước đó. Các thành phần trong phương pháp này bao gồm:

  • Embedder: Sử dụng mô hình embedding tổng quát.
  • Retrieval: Sử dụng FAISS Vectorstore.
  • Generation: Mô hình Mistral-7B-Instruct GPTQ.
  • Infrastructure: Google Colab với GPU A100.
  • Data: Tài liệu về Financial hoặc các định dạng khác.

Cài Đặt Môi Trường

Cài đặt các package cần thiết:

bash Copy
!pip install -q git+https://github.com/huggingface/transformers
!pip install -qU langchain Faiss-gpu tiktoken sentence-transformers
... (và các package khác)

Import các thư viện:

python Copy
import langchain
from langchain.embeddings import ...

Load dữ liệu:

python Copy
dir_loader = DirectoryLoader("/content/Data", glob="*.pdf", loader_cls=PyPDFLoader)
docs = dir_loader.load()

Tạo vectorstore:

python Copy
store = LocalFileStore("./cache/")
embed_model_id = 'BAAI/bge-small-en-v1.5'
core_embeddings_model = HuggingFaceEmbeddings(model_name=embed_model_id)
...

Nhận một đoạn văn theo query của người dùng:

python Copy
query = "Ho to save my excess money?"
docs_resp = vectorstore.similarity_search_by_vector(embedding_vector, k=5)

Kết Luận

Như đã trình bày, việc sử dụng Hybrid Search với EnsembleRetriever không chỉ cung cấp bối cảnh tốt hơn cho LLM mà còn tạo ra những câu trả lời chất lượng hơn. Việc lưu trữ câu trả lời và truy vấn đúng cách giảm thời gian suy luận và chi phí tính toán, đồng thời hỗ trợ tối ưu hóa quá trình khai thác thông tin từ dữ liệu bên ngoài.
source: viblo

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào