Lợi nhuận:
- Triển khai tìm kiếm kết hợp kết hợp lựa chọn top-k và tìm kiếm ngữ nghĩa và từ khóa
- Tăng độ chính xác của tìm kiếm đầu tiên bằng cách xếp hạng lại
- Làm cho các câu hỏi khó dễ tìm kiếm hơn bằng các kỹ thuật như chuyển đổi truy vấn và HyDE
Bạn đã băm nhỏ các tài liệu một cách đẹp mắt và đưa chúng vào cơ sở dữ liệu vectơ. Bây giờ công việc thực sự là tìm kiếm những phần phù hợp khi người dùng đặt câu hỏi. Điều này được gọi là truy xuất và là xương sống của chất lượng RAG. Hãy nhớ cụm từ “Chất lượng truy xuất = chất lượng RAG”; Đơn vị này chính xác là nghệ thuật nâng cao chất lượng đó. Chúng tôi sẽ đề cập đến các kỹ thuật thực tế từ lựa chọn top-k đến tìm kiếm kết hợp, từ sắp xếp lại đến chuyển đổi truy vấn.
Top-k: Chúng tôi sẽ mang theo bao nhiêu món?
Cài đặt cơ bản nhất: có bao nhiêu phần (k) được trả về từ tìm kiếm. Nếu bạn mang ít hơn (k=1) thì có nguy cơ cao bị thiếu mảnh ghép chính xác; Nếu bạn thêm quá nhiều (k=20), nó sẽ gây nhiễu cho mô hình và chi phí mã thông báo sẽ tăng lên.
Phân biệt hai khái niệm. Nhớ lại: tỷ lệ mảnh đúng nằm trong số những mảnh được lấy ra. Độ chính xác: tốc độ mà những gì được truy xuất có liên quan. Tăng k làm tăng khả năng thu hồi nhưng giảm độ chính xác. Mục đích là để cân bằng cả hai.
top-k
tác động
tình huống thích hợp
1-3
Độ chính xác cao, nguy cơ bỏ sót
Những câu hỏi đơn giản, chỉ có một câu trả lời
4-8
Cân bằng; hầu hết các kịch bản
RAG tổng công ty
10-20
Thu hồi cao hơn, tiếng ồn tăng
Với việc xếp hạng lại (bên dưới)
Mẹo: Mẫu phổ biến và mạnh mẽ: tìm nạp rộng (k=20), sau đó thu hẹp bằng cách sắp xếp lại (4 trên cùng). Bằng cách này, bạn sẽ không bỏ lỡ bất cứ điều gì và cung cấp bối cảnh rõ ràng cho mô hình.
Tìm kiếm kết hợp: Sức mạnh của hai tìm kiếm
Tìm kiếm ngữ nghĩa (vectơ) nắm bắt được ý nghĩa nhưng bỏ sót một số thứ: mã sản phẩm đầy đủ ("XR-4471"), chữ viết tắt hiếm gặp, tên riêng, số phiên bản. Đối với những tác vụ đối sánh chính xác này, tìm kiếm từ khóa truyền thống—đặc biệt là thuật toán cổ điển có tên BM25—là rất tốt.
Tìm kiếm kết hợp kết hợp cả hai: cả tìm kiếm ngữ nghĩa và từ khóa đều hoạt động, kết hợp các kết quả. Vì vậy, trong câu hỏi như “Thời gian bảo hành của
Việc hợp nhất thường được thực hiện với RRF (Kết hợp xếp hạng đối ứng): bài hát cao hơn trong cả hai danh sách sẽ được tiến hành.
# Truy xuất kết hợp (khái niệm)sem = vector_search(question, k=20) # Meankey = bm25_search(question, k=20) # fullwordresult = rrf_merge(sem, key)[:8] # hợp nhất cả hai, top 8
Xếp hạng lại: Đèo thứ hai và thông minh hơn
Cuộc gọi đầu tiên có thể nhanh chóng nhưng thô lỗ. Việc xếp hạng lại sẽ chấm điểm các ứng viên được trả về trong lần tìm kiếm đầu tiên bằng một mô hình mạnh mẽ hơn (thường là bộ mã hóa chéo - một mô hình đọc câu hỏi và đoạn văn cùng nhau và chấm điểm mức độ liên quan) và di chuyển những câu hỏi phù hợp nhất lên đầu.
Logic là thế này: lần tìm kiếm đầu tiên chỉ định một số lượng lớn ứng viên để thu hồi (20 ứng viên), người xếp hạng lại chọn 4 ứng viên tốt nhất để đảm bảo độ chính xác. Cách tiếp cận hai giai đoạn này chính xác hơn nhiều so với tìm kiếm một giai đoạn. Nó gây ra một số chậm trễ và xử lý bổ sung; Lợi ích là sự gia tăng đáng kể về chất lượng.
# Truy xuất hai giai đoạn (khái niệm)ứng viên = hybrid_search(câu hỏi, k=20) # rộng, quickscore = reranker.score(câu hỏi, ứng viên) # điểm phù hợp cho từng bối cảnh ứng viên = được xếp hạng.rank()[:4] # top 4
Chuyển đổi truy vấn
Đôi khi vấn đề không nằm ở việc tìm kiếm mà nằm ở chính câu hỏi. Nếu người dùng hỏi “còn những người làm việc từ xa thì sao?” ', điều này không thể được tìm kiếm một mình (không rõ điều gì dành cho những người lao động ở xa). Dưới đây là các kỹ thuật chuyển đổi truy vấn:
- Viết lại: Sử dụng lịch sử cuộc trò chuyện để đặt câu hỏi độc lập: "Người lao động ở xa được hưởng chế độ nghỉ phép hàng năm là gì?"
- Nhiều truy vấn: Tạo 3 cách diễn đạt khác nhau của cùng một câu hỏi, tìm kiếm với tất cả các cách diễn đạt đó, kết hợp các kết quả. Những từ khác nhau tìm thấy những phần khác nhau.
- HyDE (Nhúng tài liệu giả thuyết): Trước tiên hãy in "câu trả lời có thể có" cho mô hình, sau đó nhúng và tìm kiếm câu trả lời tưởng tượng đó. Câu trả lời tưởng tượng đôi khi được cho là tốt hơn vì nó gần với văn bản thực tế hơn bằng lời nói.
# Biến thể nhiều truy vấn (khái niệm) = model.uret("Thể hiện câu hỏi này theo 3 cách khác nhau: " + question)tum_sonuc = []for v trong các biến thể: all_sonuc += vector_intermediate(v, k=6)context = Single_and_order(tum_result)[:6]
Truy xuất yếu / Truy xuất mạnh
Yếu (giai đoạn đơn, chỉ ngữ nghĩa, hằng số k=3):
result = vector_search(question, k=3)# Vấn đề: thiếu mã sản phẩm, không thể nhập đúng phần 3 ở những câu hỏi khó.
Mạnh mẽ (kết hợp + widek + xếp hạng lại + nhiều truy vấn nếu cần):
ứng cử viên = hybrid_search(rewrite(câu hỏi, quá khứ), k=20)context = reranker.score(câu hỏi, ứng viên).first(4)# Cả hai kết quả khớp chính xác và ý nghĩa đều được ghi lại; Nó đi đến 4 mô hình tốt nhất.
Ba hộp nhỏ
Trường hợp 1 - Mã sản phẩm bị thoát. Một tìm kiếm ngữ nghĩa thuần túy trong nhóm hỗ trợ không thể tìm thấy nguyên văn "RTX-9080" trong câu hỏi "lỗi trình điều khiển RTX-9080"; Anh ấy đã mang đến những sản phẩm khác có tên tương tự. Khi tìm kiếm kết hợp được thêm vào, việc khớp mã chính xác đã xảy ra và tỷ lệ trả về các bài viết đúng đã tăng từ 58% lên 92%.
Trường hợp 2 - Sự khác biệt về xếp hạng lại. Một trợ lý pháp lý đang làm việc với k=5 nhưng phần lớn thời gian kết quả đúng là 7-10. Anh ấy đang ở trong hàng ngũ. Khi k=20 + sắp xếp lại được áp dụng, tỷ lệ bài viết đúng vào top 3 tăng từ 61% lên 94%; Độ trễ chỉ tăng 300ms - một sự thỏa hiệp có thể chấp nhận được.
Trường hợp 3 - Câu hỏi tiếp theo không có ngữ cảnh. Trong trợ lý nhân sự, người dùng hỏi “những người làm việc bán thời gian thì sao?” Khi tôi hỏi thì hệ thống đưa ra những phần không liên quan. Bằng cách viết lại câu truy vấn (kéo bối cảnh "nghỉ hàng năm" trước đây và thêm "Nhân viên bán thời gian được nghỉ phép hàng năm"), tỷ lệ trả lời đúng đã tăng từ 40% lên 86%.
Những lỗi thường gặp
- Chỉ dựa vào tìm kiếm ngữ nghĩa: Bỏ sót mã sản phẩm, chữ viết tắt, tên riêng; Thêm lai.
- Giữ k quá nhỏ: Mảnh đúng không thể vào danh sách; làm cho nó rộng và thu hẹp nó bằng cách xếp hạng lại.
- Không bao giờ nghĩ đến việc xếp hạng lại: Tìm kiếm đầu tiên là thô lỗ; Thẻ thông minh thứ hai cải thiện đáng kể chất lượng.
- Tìm kiếm các câu hỏi tiếp theo như sau: Một câu hỏi không có ngữ cảnh sẽ tìm kiếm những điều vô nghĩa; viết lại.
- Tăng k một cách mù quáng (không xếp hạng lại): Mô hình chứa đầy tiếng ồn, phản hồi bị bóp méo và chi phí tăng lên.
Hãy cẩn thận: Mỗi kỹ thuật đều làm tăng thêm chi phí và độ trễ. Nhiều truy vấn có nghĩa là tìm kiếm 3 lần, xếp hạng lại có nghĩa là gọi mô hình bổ sung. Bắt đầu với sự kết hợp đơn giản + k hợp lý trước; Đo lường và bổ sung các kỹ thuật nặng khi thực sự cần thiết. Thêm mà không cần đo.
Tóm lại
- Top-k là sự cân bằng giữa thu hồi và độ chính xác; Nói chung 4-8 là một khởi đầu tốt.
- Tìm kiếm kết hợp kết hợp tìm kiếm ngữ nghĩa với tìm kiếm từ khóa (BM25); Phục hồi các trận đấu chính xác.
- Việc xếp hạng lại sẽ chấm điểm lại các ứng viên từ tìm kiếm ban đầu rộng rãi bằng một mô hình mạnh mẽ và chọn ra những ứng viên tốt nhất.
- Chuyển đổi truy vấn (viết lại, đa truy vấn, HyDE) làm cho các câu hỏi khó và không có ngữ cảnh có thể tìm kiếm được.
- Mẫu mạnh: tìm nạp rộng → hợp nhất với kết hợp → thu hẹp với xếp hạng lại; nhưng hãy thêm từng kỹ thuật bằng cách đo lường nó.
Nhiệm vụ ứng dụng
Chuẩn bị 6 câu hỏi khó với dữ liệu từ các bài trước: ít nhất 2 câu yêu cầu khớp chính xác (mã sản phẩm, chữ viết tắt, ngày tháng), 2 câu ngữ nghĩa (cùng chủ đề nhưng khác từ), 2 câu hỏi tiếp theo không có ngữ cảnh. (1) Trước tiên, hãy coi mỗi câu hỏi như một tìm kiếm ngữ nghĩa thuần túy và đánh dấu thủ công những phần nào sẽ xuất hiện. (2) Đánh giá lại các câu hỏi tương tự có thêm phép lai và xếp hạng lại. (3) Viết lại các câu hỏi tiếp theo mà không có ngữ cảnh. Lưu ý dưới dạng bảng kỹ thuật nào tạo ra sự khác biệt trong loại câu hỏi nào.
danh sách kiểm tra
- [ ] Tôi biết top-k là sự cân bằng có độ chính xác thu hồi và phạm vi khởi đầu hợp lý.
- [ ] Tôi có thể giải thích tại sao tìm kiếm kết hợp lại khôi phục các kết quả khớp chính xác.
- [ ] Tôi có thể áp dụng logic hai bước để sắp xếp lại (rộng → thu hẹp thông minh).
- [ ] Tôi nhận thấy cần phải viết lại các câu hỏi tiếp theo mà không chú ý đến ngữ cảnh.
- [ ] Tôi xác nhận rằng tôi đã thêm các kỹ thuật nặng bằng cách đo lường chứ không phải bằng cách đo lường.