Bỏ qua tới nội dung chính
Quay lại tin tức

Embeddings không phải là phép màu: Các chế độ lỗi có thể dự đoán được của truy xuất RAG

Towards Data Science· angela shi· 30/5/2026general

Trí tuệ Tài liệu Doanh nghiệp [Tập 1 Số 2] Tại sao tìm kiếm vector, vốn xử lý từ đồng nghĩa và diễn giải, lại thất bại một cách thầm lặng với phủ định, định danh chính xác và các từ viết tắt của công ty bạn, và nên sử dụng gì khi điều đó xảy ra. Bài viết Embeddings Aren’t Magic: The Predictable Failure Modes of RAG Retrieval (Nhúng không phải là phép thuật: Các chế độ lỗi có thể dự đoán được của truy xuất RAG) xuất hiện lần đầu trên Towards Data Science.

Ứng dụng LLM Embeddings không phải là phép màu: Các chế độ lỗi có thể dự đoán được của RAG Retrieval Enterprise Document Intelligence [Tập 1 #2] Tại sao cùng một tìm kiếm vector xử lý các từ đồng nghĩa và diễn giải lại âm thầm thất bại với phủ định, định danh chính xác và các từ viết tắt của công ty bạn, và nên sử dụng gì khi điều đó xảy ra. angela shi Ngày 30/5/2026 44 phút đọc Chia sẻ Hình ảnh của Rushikesh Gaikwad qua Unsplash Hai cảnh, cả hai đều quen thuộc. Cảnh 1: Một hệ thống RAG trên vài trăm trang tài liệu chính sách được đưa vào hoạt động cho một nhóm nhỏ. Điều đầu tiên gây ấn tượng với mọi người: nó xử lý được các cách diễn giải khác nhau. Ai đó hỏi “làm thế nào để tôi hủy?”, tài liệu không bao giờ sử dụng từ hủy, nó sử dụng quy trình chấm dứt, và hệ thống vẫn tìm thấy. Một người dùng khác hỏi bằng tiếng Pháp trong khi chính sách bằng tiếng Anh, và trang đúng vẫn được trả về. Một lỗi chính tả ở đây, một cách viết phiên âm ở đó, không thành vấn đề. Sau vài ngày, nhóm thực sự ấn tượng. Điều gần nhất mà RAG có thể coi là phép màu đang ở trước mắt họ, và không cần bất kỳ bảng từ đồng nghĩa được mã hóa thủ công nào để làm cho nó hoạt động. Cảnh 2: Cùng một hệ thống, hai tuần sau. Người dùng hỏi “quy tắc về làm thêm giờ của nhà thầu là gì?” Hệ thống trả lời “Tôi không thể tìm thấy thông tin đó.” Người dùng, người tình cờ là chuyên gia kinh doanh đã viết một nửa cuốn sổ tay này, cau mày, mở tệp PDF, gõ “lao động không phải nhân viên” vào Ctrl-F, và tìm thấy đoạn văn chính xác trong ba giây. Từ khóa đúng không phải là “làm thêm giờ”. Đó là thuật ngữ mà tài liệu thực sự sử dụng. Chuyên gia biết điều đó; embedding thì không. Khá nhanh chóng, nhiều trường hợp tương tự xuất hiện. Phủ định bị lỗi. Các số tham chiếu hợp đồng chính xác bị lỗi. Một mã sản phẩm nội bộ trả về cấp độ sai. Không có cách nào khắc phục được bằng cách thay đổi nhà cung cấp embedding. Quan điểm của loạt bài này, được nêu rõ ngay từ đầu: hầu hết các cải thiện độ tin cậy của doanh nghiệp đến từ việc lọc mạnh mẽ ở thượng nguồn (từ khóa chuyên gia, cấu trúc tài liệu), chứ không phải từ một reranker được xếp chồng lên trên việc truy xuất yếu kém. Ngăn xếp cổ điển xếp hạng các lớp theo chi phí: tính tương đồng embedding rẻ ở dưới cùng, một reranker cross-encoder tùy chọn ở giữa, LLM hoàn thành cuộc trò chuyện ở trên cùng. Không có cái nào là phép màu; mỗi cái đều có những cách hỏng hóc cụ thể. Bài viết này là một phần của loạt bài Enterprise Document Intelligence Tập 1 rộng lớn hơn, xây dựng RAG doanh nghiệp từng bước từ một đường ống cơ bản đến kiến trúc quy mô corpus. 1. Những gì embeddings làm được Trước những thất bại, những gì embeddings thực sự gây ấn tượng. Những thất bại chỉ có ý nghĩa khi đối chiếu. Một embedding biến một đoạn văn bản thành một vector. Các văn bản có các thuật ngữ tương tự sẽ nằm gần nhau trong không gian vector. Một embedding là một danh sách các số nắm bắt ý nghĩa của một đoạn văn bản: một danh sách dài hơn có thể mang nhiều sắc thái hơn. Embeddings đã được cải thiện qua mỗi thế hệ. Mọi trường hợp dưới đây đều chạy trên cùng bốn mô hình, từ yếu nhất đến mạnh nhất: GloVe-avg (2014): vector từ 300 chiều trung bình. Không có ngữ cảnh hóa. Bị ảnh hưởng nặng nề bởi sự trùng lặp token theo nghĩa đen. Apache 2.0, được khai báo trên thẻ mô hình HuggingFace. all-MiniLM-L6-v2 (2021): bộ mã hóa câu ngữ cảnh mã nguồn mở nhỏ, 22 triệu tham số, 384 chiều. Apache 2.0, được khai báo trên thẻ mô hình HuggingFace. text-embedding-ada-002 (OpenAI 2022): 1536 chiều. Độc quyền; được điều chỉnh bởi Điều khoản sử dụng của OpenAI. text-embedding-3-large (OpenAI 2024): 3072 chiều. Độc quyền; được điều chỉnh bởi Điều khoản sử dụng của OpenAI. Mỗi mô hình được tải chỉ với một dòng lệnh. Hai mô hình cục bộ đến từ sentence-transformers (trọng số HuggingFace được tải xuống đĩa trong lần gọi đầu tiên); hai mô hình OpenAI được gọi thông qua API client. Cả bốn mô hình đều có cùng cấu trúc gọi, trả về một vector. from sentence_transformers import SentenceTransformer from openai import OpenAI # Các mô hình cục bộ: trọng số được tải xuống từ HuggingFace, chạy trong tiến trình. glove = SentenceTransformer("average_word_embeddings_glove.6B.300d") # 2014, 300 chiều minilm = SentenceTransformer("all-MiniLM-L6-v2") # 2021, 384 chiều # Các mô hình OpenAI: được gọi thông qua API. client = OpenAI() def openai_embed(text: str, model: str) -> list[float]: return client.embeddings.create(input=text, model=model).data[0].embedding # Cả bốn mô hình đều có cùng cấu trúc gọi; mỗi mô hình trả về một vector với số chiều riêng. v_glove = glove.encode("policy renewal") v_minilm = minilm.encode("policy renewal") v_ada = openai_embed("policy renewal", "text-embedding-ada-002") # 2022, 1536 chiều v_large = openai_embed("policy renewal", "text-embedding-3-large") # 2024, 3072 chiều Mỗi mô hình tồn tại trong không gian vector riêng với phân bố cosine riêng, do đó các điểm số thô giữa các cột không thể so sánh trực tiếp. Điều có ý nghĩa là sự phân tách trong một cột: liệu mục tiêu có vượt trội so với các yếu tố gây nhiễu hay không, và vượt trội bao nhiêu? Việc quan sát khoảng cách mở rộng theo gradient là bằng chứng thực nghiệm cho thấy các embedding thực sự đã được cải thiện. Nguyên tắc cơ bản mà mọi bảng so sánh dưới đây sử dụng là như nhau: nhúng truy vấn và từng ứng viên bằng bốn mô hình, tính điểm bằng độ tương đồng cosine, trả về một hàng cho mỗi ứng viên: def _cos(u, v): """Độ tương đồng Cosine: tích vô hướng của hai vector, được chuẩn hóa bằng độ dài của chúng.""" return float(np.dot(u, v) / (np.linalg.norm(u) * np.linalg.norm(v))) def compare_models(query, candidates, target=None): qg = glove.encode(query) qm = minilm.encode(query) qa = openai_embed(query, "text-embedding-ada-002") ql = openai_embed(query, "text-embedding-3-large") rows = [] for c in candidates: rows.append({ "candidate": c, "GloVe-avg": _cos(qg, glove.encode(c)), "MiniLM": _cos(qm, minilm.encode(c)), "ada-002": _cos(qa, openai_embed(c, "text-embedding-ada-002")), "3-large": _cos(ql, openai_embed(c, "text-embedding-3-large")), }) return pd.DataFrame(rows).set_index("candidate") 1.1 Sự gần gũi về mặt khái niệm "car" (xe hơi) khớp với các đoạn văn về "vehicles" (phương tiện), "automobiles" (ô tô), "motor vehicles" (xe cơ giới). "fire damage" (thiệt hại do hỏa hoạn) tìm thấy các đoạn văn về "smoke damage" (thiệt hại do khói) và "scorching" (cháy xém). "manager approval" (phê duyệt của quản lý) khớp với một điều khoản về "executive approval" (phê duyệt của điều hành). Mô hình nắm bắt trường ngữ nghĩa, không chỉ các từ bề mặt. Đây là điều làm cho các embedding trở nên mạnh mẽ: người dùng không cần phải đoán từ vựng của tài liệu.

Nguồn tin: Towards Data Science — Tác giả: angela shi. Bản dịch tiếng Việt do AI thực hiện, có thể có sai sót.