Pencocokan Frasa dengan Slop di Milvus 2.6: Cara Meningkatkan Akurasi Pencarian Teks Lengkap Tingkat Frasa
Karena data yang tidak terstruktur terus meledak dan model AI semakin pintar, pencarian vektor telah menjadi lapisan pengambilan default untuk banyak sistem AI-RAG pipeline, pencarian AI, agen, mesin rekomendasi, dan banyak lagi. Vector search berfungsi karena ia menangkap makna: tidak hanya kata-kata yang diketik pengguna, tetapi juga maksud di balik kata-kata tersebut.
Namun, begitu aplikasi ini masuk ke tahap produksi, tim sering kali menemukan bahwa pemahaman semantik hanyalah salah satu sisi dari masalah pencarian. Banyak beban kerja yang juga bergantung pada aturan tekstual yang ketat-seperti mencocokkan terminologi yang tepat, menjaga urutan kata, atau mengidentifikasi frasa yang memiliki makna teknis, hukum, atau operasional.
Milvus 2.6 menghilangkan pemisahan tersebut dengan memperkenalkan pencarian teks lengkap secara langsung ke dalam basis data vektor. Dengan token dan indeks posisi yang dibangun ke dalam mesin inti, Milvus dapat menafsirkan maksud semantik kueri sambil menerapkan batasan kata kunci dan tingkat frasa yang tepat. Hasilnya adalah sebuah pipeline pengambilan yang terpadu di mana makna dan struktur saling memperkuat satu sama lain, bukannya berada dalam sistem yang terpisah.
Pencocokan Frasa adalah bagian penting dari kemampuan teks lengkap ini. Fitur ini mengidentifikasi urutan istilah yang muncul bersamaan dan secara berurutan - sangat penting untuk mendeteksi pola log, tanda tangan kesalahan, nama produk, dan teks apa pun yang susunan katanya menentukan makna. Dalam tulisan ini, kami akan menjelaskan cara kerja Phrase Match di Milvus, bagaimana slop menambahkan fleksibilitas yang diperlukan untuk teks dunia nyata, dan mengapa fitur-fitur ini membuat pencarian vektor-penuh-teks hibrida tidak hanya memungkinkan, tetapi juga praktis dalam satu basis data.
Apa itu Pencocokan Frasa?
Pencocokan Frasa adalah jenis kueri teks lengkap di Milvus yang berfokus pada struktur - khususnya, apakah urutan kata muncul dalam urutan yang sama di dalam dokumen. Ketika tidak ada fleksibilitas yang diizinkan, kueri berperilaku ketat: istilah harus muncul bersebelahan dan berurutan. Oleh karena itu, kueri seperti "pembelajaran mesin robotika" hanya cocok jika ketiga kata tersebut muncul sebagai frasa yang berkesinambungan.
Tantangannya adalah bahwa teks asli jarang berperilaku serapi ini. Bahasa alamiah menimbulkan gangguan: kata sifat tambahan menyelinap masuk, log menyusun ulang bidang, nama produk mendapatkan pengubah, dan penulis manusia tidak menulis dengan mempertimbangkan mesin kueri. Pencocokan frasa yang ketat dapat dengan mudah rusak-satu kata yang disisipkan, satu kata yang diulang, atau satu istilah yang ditukar dapat menyebabkan kesalahan. Dan di banyak sistem AI, terutama yang menghadapi produksi, kehilangan baris log yang relevan atau frasa pemicu aturan tidak dapat diterima.
Milvus 2.6 mengatasi gesekan ini dengan mekanisme sederhana: slop. Slop mendefinisikan jumlah ruang gerak yang diperbolehkan di antara istilah-istilah kueri. Alih-alih memperlakukan frasa sebagai sesuatu yang rapuh dan tidak fleksibel, slop memungkinkan Anda untuk memutuskan apakah satu kata tambahan dapat ditoleransi, atau dua kata, atau bahkan apakah susunan ulang sedikit masih dianggap sebagai kecocokan. Hal ini mengubah pencarian frasa dari tes lulus-gagal biner menjadi alat pencarian yang terkendali dan dapat disesuaikan.
Untuk mengetahui mengapa hal ini penting, bayangkan mencari log untuk semua varian dari kesalahan jaringan yang sudah dikenal, yaitu "koneksi direset oleh rekan." Dalam praktiknya, log Anda mungkin akan terlihat seperti ini:
connection reset by peer
connection fast reset by peer
connection was suddenly reset by the peer
peer reset connection by ...
peer unexpected connection reset happened
Sekilas, semua ini mewakili kejadian yang sama. Tetapi metode pengambilan yang umum mengalami kesulitan:
BM25 kesulitan dengan struktur.
Metode ini memandang kueri sebagai sekumpulan kata kunci, mengabaikan urutan kemunculannya. Selama "koneksi" dan "rekan" muncul di suatu tempat, BM25 dapat memberi peringkat tinggi pada dokumen - bahkan jika frasa tersebut terbalik atau tidak terkait dengan konsep yang sebenarnya Anda cari.
Pencarian vektor berjuang dengan kendala.
Penyematan unggul dalam menangkap makna dan hubungan semantik, tetapi tidak dapat menerapkan aturan seperti "kata-kata ini harus muncul dalam urutan ini." Anda mungkin mengambil pesan yang terkait secara semantik, tetapi masih kehilangan pola struktural yang tepat yang diperlukan untuk debugging atau kepatuhan.
Pencocokan Frasa mengisi celah di antara kedua pendekatan ini. Dengan menggunakan slop, Anda dapat menentukan dengan tepat berapa banyak variasi yang dapat diterima:
slop = 0- Persis sama (Semua istilah harus muncul berdekatan dan berurutan).slop = 1- Izinkan satu kata tambahan (Meliputi variasi bahasa alami yang umum dengan satu istilah yang disisipkan.)slop = 2- Izinkan beberapa kata yang disisipkan (Menangani frasa yang lebih deskriptif atau bertele-tele.)slop = 3- Memungkinkan pengurutan ulang (Mendukung frasa yang dibalik atau disusun secara longgar, yang sering kali merupakan kasus tersulit dalam teks dunia nyata.)
Alih-alih berharap algoritme penilaian "melakukannya dengan benar", Anda secara eksplisit menyatakan toleransi struktural yang dibutuhkan aplikasi Anda.
Bagaimana Pencocokan Frasa Bekerja di Milvus
Didukung oleh pustaka mesin pencari Tantivy, Pencocokan Frasa di Milvus diimplementasikan di atas indeks terbalik dengan informasi posisi. Alih-alih hanya memeriksa apakah istilah muncul dalam dokumen, Milvus memverifikasi bahwa istilah tersebut muncul dalam urutan yang benar dan dalam jarak yang dapat dikontrol.
Diagram di bawah ini mengilustrasikan prosesnya:
1. Tokenisasi Dokumen (dengan Posisi)
Ketika dokumen dimasukkan ke dalam Milvus, bidang teks diproses oleh penganalisis, yang membagi teks menjadi token (kata atau istilah) dan mencatat posisi setiap token di dalam dokumen. Sebagai contoh, doc_1 ditokenisasi sebagai: machine (pos=0), learning (pos=1), boosts (pos=2), efficiency (pos=3).
2. Pembuatan Indeks Terbalik
Selanjutnya, Milvus membangun indeks terbalik. Alih-alih memetakan dokumen ke isinya, indeks terbalik memetakan setiap token ke dokumen-dokumen di mana token tersebut muncul, bersama dengan semua posisi token tersebut yang tercatat di setiap dokumen.
3. Pencocokan Frasa
Ketika kueri frasa dijalankan, Milvus pertama-tama menggunakan indeks terbalik untuk mengidentifikasi dokumen yang berisi semua token kueri. Kemudian memvalidasi setiap kandidat dengan membandingkan posisi token untuk memastikan istilah muncul dalam urutan yang benar dan dalam jarak slop yang diizinkan. Hanya dokumen yang memenuhi kedua kondisi tersebut yang dikembalikan sebagai kecocokan.
Diagram di bawah ini merangkum cara kerja Pencocokan Frasa dari ujung ke ujung.
Cara Mengaktifkan Pencocokan Frasa di Milvus
Pencocokan Frasa bekerja pada bidang bertipe VARCHARyaitu tipe string di Milvus. Untuk menggunakannya, Anda harus mengonfigurasi skema koleksi Anda sehingga Milvus melakukan analisis teks dan menyimpan informasi posisi untuk bidang tersebut. Hal ini dilakukan dengan mengaktifkan dua parameter: enable_analyzer dan enable_match.
Mengatur enable_analyzer dan enable_match
Untuk mengaktifkan Pencocokan Frasa untuk bidang VARCHAR tertentu, setel kedua parameter ke True ketika mendefinisikan skema bidang. Bersama-sama, keduanya memberi tahu Milvus untuk:
memberitanda pada teks (melalui
enable_analyzer), danmembangun indeks terbalik dengan offset posisi (melalui
enable_match).
Pencocokan Frasa bergantung pada kedua langkah tersebut: penganalisis memecah teks menjadi token, dan indeks pencocokan menyimpan di mana token-token tersebut muncul, memungkinkan kueri berbasis frasa dan slop yang efisien.
Di bawah ini adalah contoh konfigurasi skema yang mengaktifkan Pencocokan Frasa pada bidang text:
from pymilvus import MilvusClient, DataType
schema = MilvusClient.create_schema(enable_dynamic_field=False)
schema.add_field(
field_name=“id”,
datatype=DataType.INT64,
is_primary=True,
auto_id=True
)
schema.add_field(
field_name=‘text’, # Name of the field
datatype=DataType.VARCHAR, # Field data type set as VARCHAR (string)
max_length=1000, # Maximum length of the string
enable_analyzer=True, # Enables text analysis (tokenization)
enable_match=True # Enables inverted indexing for phrase matching
)
schema.add_field(
field_name=“embeddings”,
datatype=DataType.FLOAT_VECTOR,
dim=5
)
Pencarian dengan Pencocokan Frasa: Bagaimana Slop Mempengaruhi Kumpulan Kandidat
Setelah Anda mengaktifkan pencocokan untuk bidang VARCHAR di skema koleksi Anda, Anda dapat melakukan pencocokan frasa menggunakan ekspresi PHRASE_MATCH.
Catatan: Ekspresi PHRASE_MATCH tidak peka huruf besar/kecil. Anda dapat menggunakan PHRASE_MATCH atau phrase_match.
Dalam operasi pencarian, Pencocokan Frasa biasanya diterapkan sebelum pemeringkatan kemiripan vektor. Pertama-tama, ia menyaring dokumen berdasarkan batasan tekstual eksplisit, mempersempit kumpulan kandidat. Dokumen yang tersisa kemudian diberi peringkat ulang menggunakan penyematan vektor.
Contoh di bawah ini menunjukkan bagaimana nilai slop yang berbeda mempengaruhi proses ini. Dengan menyesuaikan parameter slop, Anda dapat secara langsung mengontrol dokumen mana yang lolos dari filter frasa dan melanjutkan ke tahap pemeringkatan vektor.
Misalkan Anda memiliki koleksi bernama tech_articles yang berisi lima entitas berikut ini:
| doc_id | teks |
|---|---|
| 1 | Pembelajaran mesin meningkatkan efisiensi dalam analisis data berskala besar |
| 2 | Mempelajari pendekatan berbasis mesin sangat penting untuk kemajuan AI modern |
| 3 | Arsitektur mesin pembelajaran mendalam mengoptimalkan beban komputasi |
| 4 | Mesin dengan cepat meningkatkan kinerja model untuk pembelajaran yang berkelanjutan |
| 5 | Mempelajari algoritme mesin yang canggih memperluas kemampuan AI |
slop=1
Di sini, kami mengizinkan nilai 1. Filter diterapkan pada dokumen yang mengandung frasa "mesin pembelajaran" dengan sedikit fleksibilitas.
# Example: Filter documents containing "learning machine" with slop=1
filter_slop1 = "PHRASE_MATCH(text, 'learning machine', 1)"
result_slop1 = client.search(
collection_name=“tech_articles”,
anns_field=“embeddings”,
data=[query_vector],
filter=filter_slop1,
search_params={“params”: {“nprobe”: 10}},
limit=10,
output_fields=[“id”, “text”]
)
Mencocokkan hasil:
| doc_id | teks |
|---|---|
| 2 | Mempelajari pendekatan berbasis mesin sangat penting untuk kemajuan AI modern |
| 3 | Arsitektur mesin pembelajaran mendalam mengoptimalkan beban komputasi |
| 5 | Mempelajari algoritme mesin tingkat lanjut memperluas kemampuan AI |
slop=2
Contoh ini mengizinkan slop 2, yang berarti bahwa hingga dua token tambahan (atau istilah yang dibalik) diperbolehkan di antara kata "mesin" dan "pembelajaran".
# Example: Filter documents containing "machine learning" with slop=2
filter_slop2 = "PHRASE_MATCH(text, 'machine learning', 2)"
result_slop2 = client.search(
collection_name=“tech_articles”,
anns_field=“embeddings”, # Vector field name
data=[query_vector], # Query vector
filter=filter_slop2, # Filter expression
search_params={“params”: {“nprobe”: 10}},
limit=10, # Maximum results to return
output_fields=[“id”, “text”]
)
Mencocokkan hasil:
| doc_id | teks |
|---|---|
| 1 | Pembelajaran mesin meningkatkan efisiensi dalam analisis data berskala besar |
| 3 | Arsitektur mesin pembelajaran mendalam mengoptimalkan beban komputasi |
slop=3
Dalam contoh ini, slop 3 memberikan fleksibilitas yang lebih besar. Filter mencari "pembelajaran mesin" dengan hingga tiga posisi token yang diperbolehkan di antara kata-kata tersebut.
# Example: Filter documents containing "machine learning" with slop=3
filter_slop3 = "PHRASE_MATCH(text, 'machine learning', 3)"
result_slop2 = client.search(
collection_name=“tech_articles”,
anns_field=“embeddings”, # Vector field name
data=[query_vector], # Query vector
filter=filter_slop3, # Filter expression
search_params={“params”: {“nprobe”: 10}},
limit=10, # Maximum results to return
output_fields=[“id”, “text”]
)
Mencocokkan hasil:
| doc_id | teks |
|---|---|
| 1 | Pembelajaran mesin meningkatkan efisiensi dalam analisis data berskala besar |
| 2 | Mempelajari pendekatan berbasis mesin sangat penting untuk kemajuan AI modern |
| 3 | Arsitektur mesin pembelajaran mendalam mengoptimalkan beban komputasi |
| 5 | Mempelajari algoritme mesin tingkat lanjut memperluas kemampuan AI |
Kiat Cepat: Apa yang Perlu Anda Ketahui Sebelum Mengaktifkan Pencocokan Frasa di Milvus
Pencocokan Frasa menyediakan dukungan untuk pemfilteran tingkat frasa, tetapi mengaktifkannya melibatkan lebih dari sekadar konfigurasi waktu kueri. Akan sangat membantu jika Anda mengetahui pertimbangan terkait sebelum menerapkannya dalam pengaturan produksi.
Mengaktifkan Pencocokan Frasa pada suatu bidang akan menciptakan indeks terbalik, yang meningkatkan penggunaan penyimpanan. Biaya yang tepat tergantung pada faktor-faktor seperti panjang teks, jumlah token unik, dan konfigurasi penganalisis. Ketika bekerja dengan bidang teks yang besar atau data dengan kardinalitas tinggi, biaya tambahan ini harus dipertimbangkan di awal.
Konfigurasi penganalisis adalah pilihan desain penting lainnya. Setelah penganalisis didefinisikan dalam skema pengumpulan, penganalisis tidak dapat diubah. Beralih ke penganalisis yang berbeda nantinya memerlukan penghapusan koleksi yang ada dan membuatnya kembali dengan skema baru. Karena alasan ini, pemilihan penganalisis harus diperlakukan sebagai keputusan jangka panjang, bukan sebagai percobaan.
Perilaku Pencocokan Frasa terkait erat dengan bagaimana teks diberi tanda. Sebelum menerapkan penganalisis ke seluruh koleksi, disarankan untuk menggunakan metode
run_analyzeruntuk memeriksa keluaran tokenisasi dan mengonfirmasi bahwa itu sesuai dengan harapan Anda. Langkah ini dapat membantu menghindari ketidakcocokan yang tidak kentara dan hasil kueri yang tidak diharapkan di kemudian hari. Untuk informasi lebih lanjut, lihat Ikhtisar Penganalisis.
Kesimpulan
Pencocokan Frasa adalah jenis pencarian teks lengkap inti yang memungkinkan batasan tingkat frasa dan posisi di luar pencocokan kata kunci sederhana. Dengan beroperasi pada urutan token dan kedekatan, ini menyediakan cara yang dapat diprediksi dan tepat untuk memfilter dokumen berdasarkan bagaimana istilah sebenarnya muncul dalam teks.
Dalam sistem pencarian modern, Pencocokan Frasa biasanya diterapkan sebelum pemeringkatan berbasis vektor. Pertama-tama, fitur ini membatasi kumpulan kandidat pada dokumen yang secara eksplisit memenuhi frasa atau struktur yang diperlukan. Pencarian vektor kemudian digunakan untuk menentukan peringkat hasil ini berdasarkan relevansi semantik. Pola ini sangat efektif dalam skenario seperti analisis log, pencarian dokumentasi teknis, dan jalur pipa RAG, di mana batasan tekstual harus diterapkan sebelum kesamaan semantik dipertimbangkan.
Dengan diperkenalkannya parameter slop di Milvus 2.6, Pencocokan Frasa menjadi lebih toleran terhadap variasi bahasa alami dengan tetap mempertahankan perannya sebagai mekanisme pemfilteran teks lengkap. Hal ini membuat batasan tingkat frasa menjadi lebih mudah untuk diterapkan dalam alur kerja pengambilan produksi.
👉 Cobalah dengan skrip demo, dan jelajahi Milvus 2.6 untuk melihat bagaimana pengambilan frasa sesuai dengan tumpukan Anda.
Ada pertanyaan atau ingin mendalami fitur-fitur Milvus terbaru? Bergabunglah dengan saluran Discord kami atau ajukan pertanyaan di GitHub. Anda juga dapat memesan sesi tatap muka selama 20 menit untuk mendapatkan wawasan, panduan, dan jawaban atas pertanyaan Anda melalui Milvus Office Hours.
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word



