🚀 Coba Zilliz Cloud, Milvus yang sepenuhnya terkelola, secara gratis—rasakan performa 10x lebih cepat! Coba Sekarang>>

milvus-logo
LFAI
  • Home
  • Blog
  • Memperkenalkan Milvus 2.5: Pencarian Teks Lengkap, Pemfilteran Metadata yang Lebih Kuat, dan Peningkatan Kegunaan!

Memperkenalkan Milvus 2.5: Pencarian Teks Lengkap, Pemfilteran Metadata yang Lebih Kuat, dan Peningkatan Kegunaan!

  • Engineering
December 17, 2024
Ken Zhang, Stefan Webb, Jiang Chen

Gambaran Umum

Kami dengan senang hati mempersembahkan versi terbaru Milvus, 2.5, yang memperkenalkan kemampuan baru yang hebat: pencarian teks lengkap, yang juga dikenal sebagai pencarian leksikal atau kata kunci. Jika Anda baru mengenal pencarian, pencarian teks lengkap memungkinkan Anda untuk menemukan dokumen dengan mencari kata atau frasa tertentu di dalamnya, mirip dengan cara Anda mencari di Google. Hal ini melengkapi kemampuan pencarian semantik kami yang sudah ada, yang memahami makna di balik pencarian Anda, bukan hanya mencocokkan kata-kata yang tepat.

Kami menggunakan metrik BM25 standar industri untuk kemiripan dokumen, dan implementasi kami didasarkan pada vektor yang jarang, sehingga memungkinkan penyimpanan dan pencarian yang lebih efisien. Bagi mereka yang tidak terbiasa dengan istilah ini, vektor jarang adalah cara untuk merepresentasikan teks yang sebagian besar nilainya nol, sehingga sangat efisien untuk disimpan dan diproses-bayangkan sebuah spreadsheet yang sangat besar di mana hanya beberapa sel yang berisi angka, dan sisanya kosong. Pendekatan ini sangat cocok dengan filosofi produk Milvus di mana vektor adalah entitas pencarian inti.

Aspek tambahan yang perlu diperhatikan dari implementasi kami adalah kemampuan untuk memasukkan dan menanyakan teks secara langsung daripada meminta pengguna untuk mengubah teks secara manual menjadi vektor yang jarang. Hal ini membawa Milvus selangkah lebih dekat untuk memproses data yang tidak terstruktur secara penuh.

Namun ini baru permulaan. Dengan rilis 2.5, kami memperbarui peta jalan produk Milvus. Dalam iterasi produk Milvus di masa depan, fokus kami adalah mengembangkan kemampuan Milvus dalam empat arah utama:

  • Pemrosesan data tidak terstruktur yang efisien;
  • Kualitas dan efisiensi pencarian yang lebih baik;
  • Manajemen data yang lebih mudah;
  • Menurunkan biaya melalui kemajuan algoritmik dan desain

Tujuan kami adalah membangun infrastruktur data yang dapat menyimpan dan mengambil informasi secara efisien dan efektif di era AI.

Pencarian teks lengkap melalui Sparse-BM25

Meskipun pencarian semantik biasanya memiliki kesadaran kontekstual dan pemahaman maksud yang lebih baik, namun ketika pengguna perlu mencari kata benda, nomor seri, atau frasa yang benar-benar cocok, pencarian teks lengkap dengan pencocokan kata kunci sering kali memberikan hasil yang lebih akurat.

Untuk mengilustrasikan hal ini dengan sebuah contoh:

  • Pencarian semantik lebih baik jika Anda bertanya: "Temukan dokumen tentang solusi energi terbarukan"
  • Pencarian teks lengkap lebih baik jika Anda membutuhkan: "Temukan dokumen yang menyebutkan Tesla Model 3 2024"

Di versi kami sebelumnya (Milvus 2.4), pengguna harus melakukan pra-pemrosesan teks mereka menggunakan alat terpisah (modul BM25EmbeddingFunction ke PyMilvus) di mesin mereka sendiri sebelum mereka dapat mencarinya. Pendekatan ini memiliki beberapa keterbatasan: pendekatan ini tidak dapat menangani kumpulan data yang terus bertambah dengan baik, membutuhkan langkah-langkah penyiapan tambahan, dan membuat keseluruhan proses menjadi lebih rumit dari yang seharusnya. Bagi mereka yang berpikiran teknis, keterbatasan utamanya adalah bahwa pendekatan ini hanya dapat bekerja pada satu mesin; kosakata dan statistik korpus lainnya yang digunakan untuk penilaian BM25 tidak dapat diperbarui ketika korpus berubah; dan mengubah teks menjadi vektor di sisi klien kurang intuitif jika dibandingkan dengan teks secara langsung.

Milvus 2.5 menyederhanakan semuanya. Sekarang Anda dapat bekerja dengan teks Anda secara langsung:

  • Menyimpan dokumen teks asli Anda sebagaimana adanya
  • Mencari menggunakan kueri bahasa alami
  • Mendapatkan hasil kembali dalam bentuk yang dapat dibaca

Di balik layar, Milvus menangani semua konversi vektor yang rumit secara otomatis sehingga memudahkan Anda untuk bekerja dengan data teks. Inilah yang kami sebut sebagai pendekatan "Doc in, Doc out" - Anda bekerja dengan teks yang dapat dibaca, dan kami menangani sisanya.

Implementasi Teknis

Bagi mereka yang tertarik dengan detail teknis, Milvus 2.5 menambahkan kemampuan pencarian teks lengkap melalui implementasi Sparse-BM25 yang sudah ada di dalamnya, termasuk:

  • Tokenizer yang dibangun di atas tantivy: Milvus sekarang terintegrasi dengan ekosistem tantivy yang sedang berkembang
  • Kemampuan untuk mencerna dan mengambil dokumen mentah: Dukungan untuk konsumsi langsung dan kueri data teks
  • Penilaian relevansi BM25: Menginternalisasi penilaian BM25, diimplementasikan berdasarkan vektor yang jarang

Kami memilih untuk bekerja dengan ekosistem tantivy yang telah berkembang dengan baik dan membangun tokenizer teks Milvus di atas tantivy. Di masa depan, Milvus akan mendukung lebih banyak tokenizer dan mengekspos proses tokenisasi untuk membantu pengguna lebih memahami kualitas pengambilan. Kami juga akan mengeksplorasi tokenizer berbasis deep learning dan strategi stemmer untuk lebih mengoptimalkan kinerja pencarian teks lengkap. Di bawah ini adalah contoh kode untuk menggunakan dan mengonfigurasi tokenizer:

# Tokenizer configuration
schema.add_field(
    field_name='text',
    datatype=DataType.VARCHAR,
    max_length=65535,
    enable_analyzer=True, # Enable tokenizer on this column
    analyzer_params={"type": "english"},  # Configure tokenizer parameters, here we choose the english template, fine-grained configuration is also supported
    enable_match=True, # Build an inverted index for Text_Match
)

Setelah mengonfigurasi tokenizer dalam skema koleksi, pengguna dapat mendaftarkan fungsi teks ke bm25 melalui metode add_function. Ini akan berjalan secara internal di server Milvus. Semua aliran data selanjutnya seperti penambahan, penghapusan, modifikasi, dan kueri dapat diselesaikan dengan mengoperasikan string teks mentah, bukan representasi vektor. Lihat contoh kode di bawah ini untuk mengetahui cara memasukkan teks dan melakukan pencarian teks lengkap dengan API yang baru:

# Define the mapping relationship between raw text data and vectors on the schema
bm25_function = Function(
    name="text_bm25_emb",
    input_field_names=["text"], # Input text field
    output_field_names=["sparse"], # Internal mapping sparse vector field
    function_type=FunctionType.BM25, # Model for processing mapping relationship
)

schema.add_function(bm25_function)
...
# Support for raw text in/out
MilvusClient.insert('demo', [
    {'text': 'Artificial intelligence was founded as an academic discipline in 1956.'},
    {'text': 'Alan Turing was the first person to conduct substantial research in AI.'},
    {'text': 'Born in Maida Vale, London, Turing was raised in southern England.'},
])

MilvusClient.search(
    collection_name='demo',
    data=['Who started AI research?'],
    anns_field='sparse',
    limit=3
)

Kami telah mengadopsi implementasi penilaian relevansi BM25 yang merepresentasikan kueri dan dokumen sebagai vektor jarang, yang disebut Sparse-BM25. Hal ini membuka banyak pengoptimalan berdasarkan vektor jarang, seperti:

Milvus mencapai kemampuan pencarian hibrida melalui implementasi Sparse-BM25 yang canggih, yang mengintegrasikan pencarian teks lengkap ke dalam arsitektur basis data vektor. Dengan merepresentasikan frekuensi term sebagai vektor jarang alih-alih indeks terbalik tradisional, Sparse-BM25 memungkinkan pengoptimalan tingkat lanjut, seperti pengindeksan grafik, kuantisasi produk (PQ), dan kuantisasi skalar (SQ). Pengoptimalan ini meminimalkan penggunaan memori dan mempercepat kinerja pencarian. Mirip dengan pendekatan indeks terbalik, Milvus mendukung penggunaan teks mentah sebagai input dan menghasilkan vektor jarang secara internal. Hal ini membuatnya dapat bekerja dengan tokenizer apa pun dan memahami kata apa pun yang ditampilkan dalam korpus yang berubah secara dinamis.

Selain itu, pemangkasan berbasis heuristik membuang vektor jarang yang bernilai rendah, sehingga meningkatkan efisiensi tanpa mengorbankan akurasi. Tidak seperti pendekatan sebelumnya yang menggunakan vektor jarang, pendekatan ini dapat beradaptasi dengan korpus yang terus berkembang, bukan dengan keakuratan penilaian BM25.

  1. Membangun indeks grafik pada vektor jarang, yang berkinerja lebih baik daripada indeks terbalik pada kueri dengan teks yang panjang karena indeks terbalik membutuhkan lebih banyak langkah untuk menyelesaikan pencocokan token dalam kueri;
  2. Memanfaatkan teknik aproksimasi untuk mempercepat pencarian dengan dampak yang kecil terhadap kualitas pencarian, seperti kuantisasi vektor dan pemangkasan berbasis heuristik;
  3. Menyatukan antarmuka dan model data untuk melakukan pencarian semantik dan pencarian teks lengkap, sehingga meningkatkan pengalaman pengguna.
# Creating an index on the sparse column
index_params.add_index(
    field_name="sparse",
    index_type="AUTOINDEX",  # Default WAND index
    metric_type="BM25" # Configure relevance scoring through metric_type
)

# Configurable parameters at search time to speed up search
search_params = {
    'params': {'drop_ratio_search': 0.6}, # WAND search parameter configuration can speed up search
}

Singkatnya, Milvus 2.5 telah memperluas kemampuan pencariannya di luar pencarian semantik dengan memperkenalkan pencarian teks lengkap, sehingga memudahkan pengguna untuk membangun aplikasi AI yang berkualitas tinggi. Ini hanyalah langkah awal dalam bidang pencarian Sparse-BM25 dan kami mengantisipasi bahwa akan ada langkah-langkah pengoptimalan lebih lanjut yang akan dicoba di masa depan.

Filter Pencarian Pencocokan Teks

Fitur pencarian teks kedua yang dirilis dengan Milvus 2.5 adalah Pencocokan Teks, yang memungkinkan pengguna untuk memfilter pencarian ke entri yang berisi string teks tertentu. Fitur ini juga dibuat berdasarkan tokenisasi dan diaktifkan dengan enable_match=True.

Perlu dicatat bahwa dengan Text Match, pemrosesan teks kueri didasarkan pada logika OR setelah tokenisasi. Sebagai contoh, pada contoh di bawah ini, hasilnya akan mengembalikan semua dokumen (menggunakan bidang 'teks') yang mengandung 'vektor' atau 'database'.

filter = "TEXT_MATCH(text, 'vector database')"

Jika skenario Anda membutuhkan pencocokan 'vektor' dan 'database', maka Anda perlu menulis dua Pencocokan Teks yang terpisah dan melapisinya dengan AND untuk mencapai tujuan Anda.

filter = "TEXT_MATCH(text, 'vector') and TEXT_MATCH(text, 'database')"

Peningkatan Signifikan dalam Performa Pemfilteran Skalar

Penekanan kami pada kinerja pemfilteran skalar berasal dari penemuan kami bahwa kombinasi pengambilan vektor dan pemfilteran metadata dapat meningkatkan kinerja dan akurasi kueri secara signifikan dalam berbagai skenario. Skenario ini berkisar dari aplikasi pencarian gambar seperti identifikasi kasus sudut dalam pengemudian otonom hingga skenario RAG yang kompleks dalam basis pengetahuan perusahaan. Dengan demikian, ini sangat cocok bagi pengguna perusahaan untuk diimplementasikan dalam skenario aplikasi data berskala besar.

Dalam praktiknya, banyak faktor seperti seberapa banyak data yang Anda filter, bagaimana data Anda diatur, dan bagaimana Anda melakukan pencarian dapat memengaruhi kinerja. Untuk mengatasi hal ini, Milvus 2.5 memperkenalkan tiga jenis indeks baru - Indeks BitMap, Indeks Array Terbalik, dan Indeks Terbalik setelah melakukan tokenisasi pada bidang teks Varchar. Indeks-indeks baru ini dapat secara signifikan meningkatkan kinerja dalam kasus penggunaan di dunia nyata.

Secara khusus:

  1. Indeks BitMap dapat digunakan untuk mempercepat pemfilteran tag (operator umum termasuk dalam, array_contains, dll.), dan cocok untuk skenario dengan data kategori bidang yang lebih sedikit (kardinalitas data). Prinsipnya adalah untuk menentukan apakah sebuah baris data memiliki nilai tertentu pada kolom, dengan 1 untuk ya dan 0 untuk tidak, dan kemudian memelihara daftar BitMap. Bagan berikut ini menunjukkan perbandingan uji kinerja yang kami lakukan berdasarkan skenario bisnis pelanggan. Dalam skenario ini, volume data adalah 500 juta, kategori data adalah 20, nilai yang berbeda memiliki proporsi distribusi yang berbeda (1%, 5%, 10%, 50%), dan kinerja di bawah jumlah pemfilteran yang berbeda juga bervariasi. Dengan pemfilteran 50%, kami dapat mencapai peningkatan kinerja 6,8 kali lipat melalui BitMap Index. Perlu dicatat bahwa dengan meningkatnya kardinalitas, dibandingkan dengan BitMap Index, Inverted Index akan menunjukkan kinerja yang lebih seimbang.

  1. Pencocokan Teks didasarkan pada Inverted Index setelah bidang teks diberi token. Kinerjanya jauh melebihi fungsi Pencocokan Wildcard (seperti +%) yang kami sediakan di 2.4. Menurut hasil pengujian internal kami, keunggulan Text Match sangat jelas, terutama dalam skenario kueri yang bersamaan, di mana ia dapat mencapai peningkatan QPS hingga 400 kali lipat.

Dalam hal pemrosesan data JSON, kami berencana untuk memperkenalkan di versi 2.5.x berikutnya, pembuatan indeks terbalik untuk kunci yang ditentukan pengguna dan perekaman informasi lokasi default untuk semua kunci untuk mempercepat penguraian. Kami berharap kedua hal ini dapat meningkatkan performa kueri JSON dan Dynamic Field secara signifikan. Kami berencana untuk menampilkan lebih banyak informasi dalam catatan rilis dan blog teknis di masa mendatang, jadi pantau terus!

Antarmuka Manajemen Baru

Mengelola database seharusnya tidak memerlukan gelar sarjana ilmu komputer, tetapi kami tahu bahwa administrator database membutuhkan alat bantu yang canggih. Itulah mengapa kami memperkenalkan Cluster Management WebUI, antarmuka berbasis web baru yang dapat diakses di alamat cluster Anda pada port 9091/webui. Alat bantu pengamatan ini menyediakan:

  • Dasbor pemantauan waktu nyata yang menampilkan metrik di seluruh cluster
  • Memori terperinci dan analitik kinerja per node
  • Informasi segmen dan pelacakan kueri lambat
  • Indikator kesehatan sistem dan status node
  • Alat pemecahan masalah yang mudah digunakan untuk masalah sistem yang kompleks

Meskipun antarmuka ini masih dalam versi beta, kami secara aktif mengembangkannya berdasarkan umpan balik pengguna dari administrator database. Pembaruan di masa mendatang akan mencakup diagnostik dengan bantuan AI, fitur manajemen yang lebih interaktif, dan kemampuan pengamatan klaster yang ditingkatkan.

Dokumentasi dan Pengalaman Pengembang

Kami telah merombak total dokumentasi dan pengalaman SDK/API kami untuk membuat Milvus lebih mudah diakses dengan tetap mempertahankan kedalaman bagi pengguna berpengalaman. Perbaikan tersebut meliputi:

  • Sistem dokumentasi yang telah direstrukturisasi dengan perkembangan yang lebih jelas dari konsep dasar hingga lanjutan
  • Tutorial interaktif dan contoh-contoh dunia nyata yang menampilkan implementasi praktis
  • Referensi API yang komprehensif dengan contoh kode praktis
  • Desain SDK yang lebih ramah pengguna yang menyederhanakan operasi umum
  • Panduan bergambar yang membuat konsep yang rumit menjadi lebih mudah dipahami
  • Asisten dokumentasi yang didukung AI (ASK AI) untuk jawaban cepat

SDK/API yang telah diperbarui berfokus pada peningkatan pengalaman pengembang melalui antarmuka yang lebih intuitif dan integrasi yang lebih baik dengan dokumentasi. Kami yakin Anda akan melihat peningkatan ini ketika bekerja dengan seri 2.5.x.

Namun, kami tahu bahwa dokumentasi dan pengembangan SDK adalah proses yang berkelanjutan. Kami akan terus mengoptimalkan struktur konten dan desain SDK berdasarkan umpan balik dari komunitas. Bergabunglah dengan saluran Discord kami untuk membagikan saran Anda dan membantu kami meningkatkannya lebih lanjut.

Ringkasan

Milvus 2.5 berisi 13 fitur baru dan beberapa pengoptimalan tingkat sistem, yang dikontribusikan tidak hanya oleh Zilliz tetapi juga komunitas sumber terbuka. Kami hanya membahas beberapa di antaranya dalam tulisan ini dan mendorong Anda untuk mengunjungi catatan rilis dan dokumen resmi kami untuk informasi lebih lanjut!

Like the article? Spread the word

Terus Baca