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

Phân tích văn bản cho tìm kiếm kết hợp: Tokenization, Stopwords & Accent Folding

Weaviate Blog· 14/5/2026opensource

Tìm kiếm kết hợp trong cơ sở dữ liệu vectơ có hai nửa: độ tương tự của vectơ cho ý nghĩa, BM25 cho mã thông báo chính xác. Nửa vectơ thu hút mọi sự chú ý. Một nửa BM25 và mã thông báo cung cấp cho nó, lặng lẽ thất bại khi máy phân tích sai và không có mức độ điều chỉnh nhúng nào sẽ giúp bạn cứu được. Bỏ sai ký tự, tách một từ không nên tách, BM25 chẳng có gì hữu ích để so sánh. Phía từ khóa trở nên ồn ào và kéo theo chất lượng tìm kiếm đi xuống. Điều đó nghe có vẻ khó khăn cho đến khi bạn gửi một danh mục đa ngôn ngữ. Đột nhiên "café crème" không mang lại lợi ích gì cho cửa hàng thương mại điện tử Pháp

Tìm kiếm kết hợp trong cơ sở dữ liệu vectơ có hai nửa: độ tương tự của vectơ cho ý nghĩa, BM25 cho mã thông báo chính xác. Nửa vectơ thu hút mọi sự chú ý. Một nửa BM25 và mã thông báo cung cấp cho nó, lặng lẽ thất bại khi máy phân tích sai và không có mức độ điều chỉnh nhúng nào sẽ giúp bạn cứu được. Bỏ sai ký tự, tách một từ không nên tách, BM25 chẳng có gì hữu ích để so sánh. Phía từ khóa trở nên ồn ào và kéo theo chất lượng tìm kiếm đi xuống. Điều đó nghe có vẻ khó khăn cho đến khi bạn gửi một danh mục đa ngôn ngữ. Đột nhiên "café crème" không mang lại kết quả gì cho một cửa hàng thương mại điện tử ở Pháp, nhóm Ba Lan không thể tìm thấy "Łódź" và quy trình RAG của đại lý hỗ trợ của bạn bỏ sót mọi truy vấn sử dụng từ có dấu. Tokenizer đã ở đó suốt thời gian qua. Không ai có thể thấy nó đang làm gì. Weaviate v1.37 đã biến mã thông báo trở thành một phần cơ sở dữ liệu thân thiện với nhiều ngôn ngữ và có thể quan sát được. Bài đăng này sẽ giúp cải thiện chất lượng tìm kiếm của bạn và bao gồm các chủ đề sau: Tìm kiếm kết hợp 101 - Cách thu hồi hình dạng mã thông báo trong tìm kiếm kết hợp Phương pháp mã thông báo - Chọn mã thông báo phù hợp cho dữ liệu của bạn Gấp giọng để tìm kiếm đa ngôn ngữ Từ khóa cho mỗi thuộc tính - Từ khóa cho mỗi ngôn ngữ mà không cần lập chỉ mục lại Điểm cuối tokenize - Xác minh kết quả bằng một lệnh gọi API Tìm kiếm kết hợp 101​ Tìm kiếm kết hợp kết hợp hai tín hiệu: độ tương tự vectơ (ngữ nghĩa, dựa trên ý nghĩa) và tính điểm từ khóa BM25 (khớp chính xác, từ vựng). Cả hai được hợp nhất tại thời điểm truy vấn, do đó, một truy vấn như "ra mắt sản phẩm vào tháng 4 năm 2026" sẽ khôi phục cả các tin bài có liên quan (vectơ) và ngày đề cập chính xác (từ khóa). BM25 không hoạt động trên văn bản. Nó hoạt động trên các mã thông báo, các đơn vị riêng biệt mà máy phân tích tạo ra khi mỗi tài liệu được lập chỉ mục. Đây là khái niệm mã thông báo giống như bạn đã thấy trong NLP, nhưng các vấn đề khác nhau: không có lớp mô hình nào có thể dán lên một mã thông báo sai. Nếu mã thông báo của bạn bỏ dấu câu trong "v1.37", viết thường từ "USA" thành "usa" hoặc bị coi là ngây thơ và ngây thơ như các mã thông báo khác, BM25 không thể phục hồi. Một nửa từ khóa trong số điểm kết hợp của bạn sẽ trở nên ồn ào và sự kết hợp của bạn đang tự chiến đấu. Đây là lý do tại sao một mô hình nhúng tuyệt vời dựa trên một mã thông báo bất cẩn thường thua tìm kiếm vectơ thuần túy. Vì vậy, BM25 và tìm kiếm ngữ nghĩa không thực sự là một câu hỏi. Chúng trả lời những thứ khác nhau và tìm kiếm kết hợp được cho là sẽ kết hợp chúng. Câu hỏi thực sự là liệu token của bạn có làm cho BM25 hữu ích hay không. Mã thông báo là điểm vào của chỉ mục đảo ngược và nó đặt mức trần cho việc thu hồi từ khóa. Cho dù bạn đang xây dựng tìm kiếm kết hợp cho RAG, tìm kiếm từ khóa cổ điển hay danh mục đa ngôn ngữ, bộ phân tích là bộ phận quyết định BM25 có thể ghi điểm gì. Nếu bạn là người mới làm quen với cơ chế truy xuất kết hợp, bài đăng trước đây của chúng tôi về kết hợp tìm kiếm kết hợp sẽ hướng dẫn cách tính điểm. Bài đăng này tập trung vào máy phân tích cung cấp dữ liệu cho nó. Các phương pháp token hóa Weaviate trình bày bốn phương pháp mã thông báo có mục đích chung bao gồm phần lớn các trường hợp sử dụng sản xuất: Phương phápChọn điều này khi…Đầu ra mã thông báo ví dụ cho "User_42 - café"wordBài viết, mô tả, tên, Câu hỏi thường gặp (mặc định)người dùng, 42, café thường Mã nhận dạng mã, địa chỉ email, hàm băm IDsuser_42, -, caféwhitespaceTừ viết tắt, tên thực thể phân biệt chữ hoa chữ thườngUser_42, -, caféfield Mã nhận dạng khớp chính xác (URL, UUID)User_42 - café (một mã thông báo) Từ tokenizer là sự tha thứ. Nó viết thường, loại bỏ hầu hết các dấu câu và thường làm điều đúng đắn cho văn xuôi. Ba chuỗi còn lại bảo toàn nhiều chuỗi gốc hơn, điều này quan trọng khi các ký hiệu có ý nghĩa (_, -, :) mang thông tin. Nếu bạn không chắc chắn, từ tokenizer có lẽ là lựa chọn phù hợp. Ba cách còn lại trông linh hoạt hơn trên giấy tờ, nhưng lý do trung thực duy nhất để tiếp cận chúng là bạn đã chạy một truy vấn thực và thấy kết quả sai. Việc chọn trả trước chữ thường hoặc khoảng trắng vì chúng "giữ lại nhiều hơn" có xu hướng khóa các mã thông báo mà bạn không thực sự muốn và bạn sẽ phát hiện ra nhiều tháng sau khi truy vấn đi ngang. Bạn đặt phương thức cho mỗi thuộc tính, không phải cho mỗi bộ sưu tập. Điều quan trọng là: các ứng dụng thực sự kết hợp văn xuôi, mã nhận dạng và mã trong một bộ sưu tập duy nhất. nhập khẩu dệt từ weaviate.classes.config nhập Thuộc tính, Kiểu dữ liệu, Mã thông báo, Định cấu hình client = weaviate.connect_to_local() tkn_options = [ Token hóa.WORD, Mã thông báo.LOWERCASE, Mã thông báo.WHITESPACE, Mã thông báo.FIELD, ] thuộc tính = [ Tài sản( name=f"text_{tokenization.replace('.', '_')}", data_type=DataType.TEXT, mã thông báo=mã thông báo, ) để mã hóa trong tkn_options ] client.collections.create( name="TokenizationDemo", thuộc tính=thuộc tính, vector_config=Cấu hình.Vectors.self_provided(), ) Đối với các ngôn ngữ không được phân cách bằng khoảng trắng, Weaviate cũng gửi các mã thông báo dành riêng cho ngôn ngữ được chọn tham gia thông qua các biến môi trường: gse (tiếng Nhật), gse_ch (tiếng Trung), kagome_ja (hình thái tiếng Nhật) và kagome_kr (tiếng Hàn). Trình mã thông báo trigram cũng được tích hợp sẵn (luôn có sẵn, không có cờ env) và tạo ra n-gram gồm 3 ký tự để khớp chuỗi con và mờ — tiện dụng khi bạn cần thu hồi một phần mã thông báo qua các mã định danh ngắn. Đối với nội dung tiếng Nhật, tiếng Hàn hoặc tiếng Trung, hãy trỏ thuộc tính vào mã thông báo ngôn ngữ thích hợp: Tài sản( tên="mô tả_ja", data_type=DataType.TEXT, tokenization=Mã thông báo.KAGOME_JA, ) Gấp giọng để tìm kiếm đa ngôn ngữ​ Lỗi mã thông báo đau đớn nhất trong quá trình sản xuất là giọng không khớp. Người dùng gõ quán cà phê. Quán cà phê lưu trữ tài liệu. BM25 nhìn thấy hai mã thông báo khác nhau, không trả về kết quả nào và điểm kết hợp của bạn sẽ giảm xuống bất kỳ giá trị nào mà tìm kiếm vectơ đưa ra. Để khớp các ký tự có dấu trong tìm kiếm, hãy bật tính năng gấp dấu trên thuộc tính. Cách khắc phục là một dòng lược đồ. Ví dụ bên dưới thiết lập ba thuộc tính cạnh nhau: text_default làm đường cơ sở được mở ra, text_folded với cách gấp ASCII đầy đủ và text_folded_keep_e hiển thị cách loại trừ một ký tự cụ thể (é) khỏi việc gấp: nhập khẩu dệt từ weaviate.classes.config nhập Thuộc tính, Kiểu dữ liệu, Mã thông báo, Định cấu hình client = weaviate.connect_to_local() khách hàng.colle

Nguồn tin: Weaviate Blog. Bản dịch tiếng Việt do AI thực hiện, có thể có sai sót.