Sử dụng LangChain để tạo hệ thống RAG (tiếp tục)
Bây giờ rằng chúng ta đã có tài liệu được tạo, chúng ta có thể khởi tạo các embeddings. Cho cái gì sẽ là cần thiết
để nhập khẩu một đôi thư viện:
+ CharacterTextSplitter: Chúng ta sẽ sử dụng thư viện này để nhóm thông tin thành các đoạn.
+ HuggingFaceEmbeddings hay SentenceTransformerEmbedding: Trong notebook, tôi đã sử dụng cả hai, và tôi không thấy
bất cứ khác biệt nào giữa chúng. Các thư viện này chịu trách nhiệm cho giành model cái sẽ thực thi embedding của
dữ liệu.
from langchain.text_splitter import CharacterTextSplitter
Không có cách thức đúng 100 % để chia các tài liệu thành các đoạn. Tráo đổi then chốt là giữa bối cảnh và sử dụng
ghi nhớ:
+ Các đoạn lớn hơn: Cung cấp model với nhiều bối cảnh hơn, tiềm tàng dẫn đến hiểu và các trả lời tốt hơn. Tuy nhiên,
chúng làm tăng kích cỡ của Vector Store của bạn, tiêu thụ nhiều ghi nhớ hơn.
+ Các đoạn nhỏ hơn: Giảm sử dụng ghi nhớ, nhưng có thể giới hạn hiểu bối cảnh của model nếu thông tin bị phân mảnh.
Như tôi đã nói trước đây, nó là cơ bản để tìm ra một cân bằng giữa kích cỡ bối canh và sử dụng ghi nhớ, không bao
giờ vượt quá kích cỡ bối cảnh, để tối ưu hóa hiệu suất của ứng dụng.
Tôi đã quyết định sử dụng một kích cỡ đoạn 250 kí tự với một overlap 10. Cái này có nghĩa rằng 10 kí tự cuối của
một đoạn sẽ là 10 kí tự đầu tiên của đoạn tiếp theo. Nó là một kích cỡ đoạn nhỏ, nhưng nó đủ hơn cho dạng thông
tin cái chúng ta đã có trong tập dữ liệu.
text_splitter = CharacterTextSplitter(chunk_size=250, chunk_overlap=10)
texts = text_splitter.split_documents(df_document)
Bây giờ, chúng ta có thể tạo text embeddings.
from langchain.embeddings.sentence_transformer import SentenceTransformerEmbeddings
embedding_function = SentenceTransformerEmbeddings(model_name=”all-
MiniLM-L6-v2″)
#from langchain.embeddings import HuggingFaceEmbeddings
#embedding_function = HuggingFaceEmbeddings(
# model_name=”sentence-transformers/all-MiniLM-L6-v2″
#)
