Pilih Penganalisis yang Tepat untuk Kasus Penggunaan Anda

Panduan ini berfokus pada pengambilan keputusan praktis untuk pemilihan penganalisis. Untuk detail teknis mengenai komponen penganalisis dan cara menambahkan parameter penganalisis, lihat Ikhtisar Penganalisis.

Memahami penganalisis dalam 2 menit

Di Milvus, penganalisis memproses teks yang disimpan di bidang ini untuk membuatnya dapat dicari dengan fitur seperti pencarian teks lengkap (BM25), pencocokan frasa, atau pencocokan teks. Anggap saja sebagai pengolah teks yang mengubah konten mentah Anda menjadi token yang dapat dicari.

Penganalisis bekerja dalam pipa dua tahap yang sederhana:

Analyzer Workflow Alur Kerja Penganalisis

  1. Tokenisasi (wajib): Tahap awal ini menerapkan tokenizer untuk memecah string teks yang berkelanjutan menjadi unit-unit diskrit dan bermakna yang disebut token. Metode tokenisasi dapat sangat bervariasi, tergantung pada bahasa dan jenis konten.

  2. Penyaringan token (opsional): Setelah tokenisasi, filter diterapkan untuk memodifikasi, menghapus, atau menyaring token. Operasi ini dapat mencakup mengubah semua token menjadi huruf kecil, menghapus kata-kata umum yang tidak berarti (seperti stopwords), atau mengurangi kata-kata ke bentuk dasarnya (stemming).

Contoh:

Input: "Hello World!" 
       1. Tokenization → ["Hello", "World", "!"]
       2. Lowercase & Punctuation Filtering → ["hello", "world"]

Mengapa pilihan alat analisis penting

Memilih penganalisis yang salah dapat membuat dokumen yang relevan tidak dapat dicari atau mengembalikan hasil yang tidak relevan.

Tabel berikut ini merangkum masalah umum yang disebabkan oleh pemilihan alat analisis yang tidak tepat dan memberikan solusi yang dapat ditindaklanjuti untuk mendiagnosis masalah pencarian.

Masalah

Gejala

Contoh (Masukan & Keluaran)

Penyebab (Penganalisis Buruk)

Solusi (Penganalisis yang Baik)

Tokenisasi berlebihan

Kueri teks untuk istilah teknis, pengidentifikasi, atau URL gagal menemukan dokumen yang relevan.

  • "user_id"['user', 'id']

  • "C++"['c']

standard penganalisis

Gunakan sebuah whitespace tokenizer; gabungkan dengan sebuah alphanumonly filter.

Tokenisasi kurang

Pencarian komponen dari frasa multi-kata gagal mengembalikan dokumen yang berisi frasa lengkap.

"state-of-the-art"['state-of-the-art']

Penganalisis dengan whitespace tokenizer

Gunakan standard tokenizer untuk memisahkan tanda baca dan spasi; gunakan filter regex khusus.

Ketidakcocokan Bahasa

Hasil pencarian untuk bahasa tertentu tidak masuk akal atau tidak ada.

Teks bahasa Mandarin: "机器学习"['机器学习'] (satu token)

english Penganalisis

Gunakan penganalisis khusus bahasa, seperti chinese.

Pertanyaan pertama: Apakah Anda perlu memilih penganalisis?

Untuk banyak kasus penggunaan, Anda tidak perlu melakukan sesuatu yang khusus. Mari kita tentukan apakah Anda termasuk salah satunya.

Perilaku default: standard analyzer

Jika Anda tidak menentukan penganalisis ketika menggunakan fitur pengambilan teks seperti pencarian teks lengkap, Milvus secara otomatis menggunakan fitur standard analyzer.

Penganalisis standard:

  • Memisahkan teks berdasarkan spasi dan tanda baca

  • Mengubah semua token menjadi huruf kecil

  • Menghapus sekumpulan kata henti bahasa Inggris yang umum dan sebagian besar tanda baca

Contoh transformasi:

Input:  "The Milvus vector database is built for scale!"
Output: ['the', 'milvus', 'vector', 'database', 'is', 'built', 'scale']

Kriteria keputusan: Pemeriksaan cepat

Gunakan tabel ini untuk menentukan dengan cepat apakah penganalisis standard default memenuhi kebutuhan Anda. Jika tidak, Anda harus memilih jalur yang berbeda.

Konten Anda

Penganalisis Standar OK?

Mengapa

Apa yang Anda Butuhkan

Posting blog berbahasa Inggris

✅ Ya

Perilaku default sudah cukup.

Gunakan default (tidak perlu konfigurasi).

Dokumen berbahasa Mandarin

❌ Tidak

Kata-kata dalam bahasa Mandarin tidak memiliki spasi dan akan diperlakukan sebagai satu token.

Gunakan penganalisis bawaan chinese penganalisis bawaan.

Dokumentasi teknis

❌ Tidak

Tanda baca dihilangkan dari istilah seperti C++.

Buat penganalisis khusus dengan whitespace tokenizer dan alphanumonly filter.

Bahasa yang dipisahkan oleh spasi seperti teks bahasa Prancis/Spanyol

⚠️ Mungkin

Karakter beraksen (café vs. cafe) mungkin tidak cocok.

Penganalisis khusus dengan fitur asciifolding direkomendasikan untuk hasil yang lebih baik.

Bahasa multibahasa atau bahasa yang tidak dikenal

❌ Tidak

Penganalisis standard tidak memiliki logika khusus bahasa yang diperlukan untuk menangani set karakter dan aturan tokenisasi yang berbeda.

Gunakan penganalisis khusus dengan icu tokenizer untuk tokenisasi yang sadar unicode.

Atau, pertimbangkan untuk mengonfigurasi penganalisis multibahasa atau pengidentifikasi bahasa untuk penanganan konten multibahasa yang lebih tepat.

Jika penganalisis standard default tidak dapat memenuhi kebutuhan Anda, Anda perlu menerapkan penganalisis yang berbeda. Anda memiliki dua jalur:

Jalur A: Menggunakan penganalisis bawaan

Penganalisis bawaan adalah solusi yang sudah dikonfigurasi sebelumnya untuk bahasa yang umum. Penganalisis bawaan adalah cara termudah untuk memulai ketika penganalisis standar bawaan tidak cocok.

Penganalisis bawaan yang tersedia

Penganalisis

Dukungan Bahasa

Komponen

Catatan

standard

Sebagian besar bahasa yang dipisahkan oleh ruang (Inggris, Prancis, Jerman, Spanyol, dll.)

  • Tokenizer: standard

  • Penyaring: lowercase

Penganalisis tujuan umum untuk pemrosesan teks awal. Untuk skenario monolingual, penganalisis khusus bahasa (seperti english) memberikan kinerja yang lebih baik.

english

Didedikasikan untuk bahasa Inggris, yang menerapkan stemming dan penghilangan kata untuk pencocokan semantik bahasa Inggris yang lebih baik

  • Tokenizer: standard

  • Penyaring: lowercase, stemmer, stop

Direkomendasikan untuk konten hanya dalam bahasa Inggris melalui standard.

chinese

Bahasa Mandarin

  • Tokenizer: jieba

  • Penyaring: cnalphanumonly

Saat ini menggunakan kamus bahasa Mandarin Sederhana secara default.

Contoh implementasi

Untuk menggunakan penganalisis bawaan, cukup tentukan jenisnya di analyzer_params saat mendefinisikan skema bidang Anda.

# Using built-in English analyzer
analyzer_params = {
    "type": "english"
}

# Applying analyzer config to target VARCHAR field in your collection schema
schema.add_field(
    field_name='text',
    datatype=DataType.VARCHAR,
    max_length=200,
    enable_analyzer=True,
    analyzer_params=analyzer_params,
)

Untuk penggunaan terperinci, lihat Pencarian Teks Lengkap, Pencocokan Teks, atau Pencocokan Frasa.

Jalur B: Membuat penganalisis khusus

Jika opsi bawaan tidak memenuhi kebutuhan Anda, Anda dapat membuat penganalisis khusus dengan menggabungkan tokenizer dengan seperangkat filter. Hal ini memberikan Anda kendali penuh atas pipeline pemrosesan teks.

Langkah 1: Pilih tokenizer berdasarkan bahasa

Pilih tokenizer berdasarkan bahasa utama konten Anda:

Bahasa-bahasa Barat

Untuk bahasa yang dipisahkan oleh spasi, Anda memiliki opsi berikut:

Tokenizer

Bagaimana cara kerjanya

Paling cocok untuk

Contoh

standard

Memisahkan teks berdasarkan spasi dan tanda baca

Teks umum, tanda baca campuran

  • Masukan "Hello, world! Visit example.com"

  • Keluaran ['Hello', 'world', 'Visit', 'example', 'com']

whitespace

Memisahkan hanya pada karakter spasi

Konten yang telah diproses sebelumnya, teks yang diformat pengguna

  • Masukan "user_id = get_user_data()"

  • Keluaran ['user_id', '=', 'get_user_data()']

Bahasa-bahasa Asia Timur

Bahasa berbasis kamus memerlukan tokenizer khusus untuk segmentasi kata yang tepat:

Bahasa Mandarin

Tokenizer

Bagaimana cara kerjanya

Paling cocok untuk

Contoh

jieba

Segmentasi berbasis kamus bahasa Mandarin dengan algoritme cerdas

Direkomendasikan untuk konten berbahasa Mandarin - menggabungkan kamus dengan algoritme cerdas, yang dirancang khusus untuk bahasa Mandarin

  • Masukan "机器学习是人工智能的一个分支"

  • Keluaran: ['机器', '学习', '是', '人工', '智能', '人工智能', '的', '一个', '分支']

lindera

Analisis morfologi berbasis kamus murni dengan kamus bahasa Mandarin(cc-cedict)

Dibandingkan dengan jieba, memproses teks bahasa Mandarin dengan cara yang lebih umum

  • Masukan "机器学习算法"

  • Keluaran: ["机器", "学习", "算法"]

Bahasa Jepang dan Korea

Bahasa

Tokenizer

Opsi Kamus

Terbaik untuk

Contoh

Bahasa Jepang

lindera

ipadic (tujuan umum), ipadic-neologd (istilah modern), unidic (akademis)

Analisis morfologi dengan penanganan kata benda yang tepat

  • Masukan "東京都渋谷区"

  • Keluaran ["東京", "都", "渋谷", "区"]

Bahasa Korea

lindera

ko-dic

Analisis morfologi bahasa Korea

  • Masukan "안녕하세요"

  • Keluaran: ["안녕", "하", "세요"]

Bahasa multibahasa atau bahasa yang tidak dikenal

Untuk konten yang bahasanya tidak dapat diprediksi atau tercampur di dalam dokumen:

Tokenizer

Bagaimana cara kerjanya

Paling cocok untuk

Contoh

icu

Tokenisasi yang sadar Unicode (Komponen Internasional untuk Unicode)

Skrip campuran, bahasa yang tidak dikenal, atau ketika tokenisasi sederhana sudah cukup

  • Masukan "Hello 世界 مرحبا"

  • Keluaran: ['Hello', ' ', '世界', ' ', 'مرحبا']

Kapan menggunakan icu:

  • Bahasa campuran di mana identifikasi bahasa tidak praktis.

  • Anda tidak menginginkan biaya tambahan untuk penganalisis multi-bahasa atau pengidentifikasi bahasa.

  • Konten memiliki bahasa utama dengan sesekali kata-kata asing yang tidak banyak berkontribusi pada makna keseluruhan (misalnya, teks bahasa Inggris dengan nama merek sporadis atau istilah teknis dalam bahasa Jepang atau Prancis).

Pendekatan alternatif: Untuk penanganan yang lebih tepat terhadap konten multibahasa, pertimbangkan untuk menggunakan penganalisis multibahasa atau pengidentifikasi bahasa. Untuk detailnya, lihat Penganalisis Multi-bahasa atau Pengidentifikasi Bahasa.

Langkah 2: Menambahkan filter untuk ketepatan

Setelah memilih tokenizer, terapkan filter berdasarkan persyaratan pencarian spesifik dan karakteristik konten.

Filter yang umum digunakan

Filter ini penting untuk sebagian besar konfigurasi bahasa yang dipisahkan oleh ruang (Inggris, Prancis, Jerman, Spanyol, dll.) dan secara signifikan meningkatkan kualitas pencarian:

Filter

Bagaimana cara kerjanya

Kapan Digunakan

Contoh

lowercase

Mengubah semua token menjadi huruf kecil

Universal - berlaku untuk semua bahasa dengan perbedaan huruf besar/kecil

  • Masukan ["Apple", "iPhone"]

  • Keluaran: [['apple'], ['iphone']]

stemmer

Mengurangi kata-kata ke bentuk dasarnya

Bahasa dengan infleksi kata (Inggris, Prancis, Jerman, dll.)

Untuk bahasa Inggris:

  • Masukan ["running", "runs", "ran"]

  • Keluaran: [['run'], ['run'], ['ran']]

stop

Menghapus kata-kata umum yang tidak bermakna

Sebagian besar bahasa - terutama efektif untuk bahasa yang dipisahkan oleh spasi

  • Masukan ["the", "quick", "brown", "fox"]

  • Keluaran: [[], ['quick'], ['brown'], ['fox']]

Untuk bahasa Asia Timur (Cina, Jepang, Korea, dll.), fokuslah pada penyaringan khusus bahasa. Bahasa-bahasa ini biasanya menggunakan pendekatan yang berbeda untuk pemrosesan teks dan mungkin tidak mendapatkan manfaat yang signifikan dari stemming.

Filter normalisasi teks

Filter ini menstandarkan variasi teks untuk meningkatkan konsistensi pencocokan:

Filter

Bagaimana cara kerjanya

Kapan Digunakan

Contoh

asciifolding

Mengonversi karakter beraksen ke karakter yang setara dengan ASCII

Konten internasional, konten buatan pengguna

  • Masukan ["café", "naïve", "résumé"]

  • Keluaran [['cafe'], ['naive'], ['resume']]

Pemfilteran token

Mengontrol token mana yang dipertahankan berdasarkan konten atau panjang karakter:

Menyaring

Bagaimana cara kerjanya

Kapan Digunakan

Contoh

removepunct

Menghapus token tanda baca yang berdiri sendiri

Keluaran bersih dari jieba, lindera, icu tokenizers, yang akan mengembalikan tanda baca sebagai token tunggal

  • Masukan ["Hello", "!", "world"]

  • Keluaran: [['Hello'], ['world']]

alphanumonly

Simpan hanya huruf dan angka

Konten teknis, pemrosesan teks yang bersih

  • Masukan ["user123", "test@email.com"]

  • Keluaran [['user123'], ['test', 'email', 'com']]

length

Menghapus token di luar rentang panjang yang ditentukan

Menyaring noise (token yang terlalu panjang)

  • Masukan ["a", "very", "extraordinarily"]

  • Keluaran: [['a'], ['very'], []] (jika maks = 10)

regex

Pemfilteran berbasis pola khusus

Persyaratan token khusus domain

  • Masukan ["test123", "prod456"]

  • Keluaran: [[], ['prod456']] (jika expr="^prod")

Penyaring khusus bahasa

Filter ini menangani karakteristik bahasa tertentu:

Filter

Bahasa

Bagaimana cara kerjanya

Contoh

decompounder

Bahasa Jerman

Memisahkan kata majemuk menjadi komponen yang dapat dicari

  • Masukan ["dampfschifffahrt"]

  • Keluaran [['dampf', 'schiff', 'fahrt']]

cnalphanumonly

Bahasa Mandarin

Menyimpan karakter bahasa Mandarin + alfanumerik

  • Masukan ["Hello", "世界", "123", "!@#"]

  • Keluaran [['Hello'], ['世界'], ['123'], []]

cncharonly

Bahasa Mandarin

Hanya menyimpan karakter bahasa Mandarin

  • Masukan ["Hello", "世界", "123"]

  • Keluaran [[], ['世界'], []]

Langkah 3: Gabungkan dan terapkan

Untuk membuat penganalisis khusus, Anda menentukan tokenizer dan daftar filter dalam kamus analyzer_params. Filter-filter diterapkan sesuai dengan urutan yang tercantum.

# Example: A custom analyzer for technical content
analyzer_params = {
    "tokenizer": "whitespace",
    "filter": ["lowercase", "alphanumonly"]
}

# Applying analyzer config to target VARCHAR field in your collection schema
schema.add_field(
    field_name='text',
    datatype=DataType.VARCHAR,
    max_length=200,
    enable_analyzer=True,
    analyzer_params=analyzer_params,
)

Akhir: Uji dengan run_analyzer

Selalu validasi konfigurasi Anda sebelum menerapkannya ke koleksi:

# Sample text to analyze
sample_text = "The Milvus vector database is built for scale!"

# Run analyzer with the defined configuration
result = client.run_analyzer(sample_text, analyzer_params)
print("Analyzer output:", result)

Masalah umum yang harus diperiksa:

  • Tokenisasi berlebihan: Istilah teknis yang dibagi secara tidak benar

  • Tokenisasi kurang: Frasa tidak dipisahkan dengan benar

  • Token yang hilang: Istilah-istilah penting yang disaring

Untuk penggunaan terperinci, lihat run_analyzer.

Bagian ini menyediakan konfigurasi tokenizer dan filter yang direkomendasikan untuk kasus penggunaan umum ketika bekerja dengan penganalisis di Milvus. Pilih kombinasi yang paling sesuai dengan jenis konten dan persyaratan pencarian Anda.

Sebelum menerapkan penganalisis ke koleksi Anda, kami sarankan Anda menggunakan run_analyzer untuk menguji dan memvalidasi kinerja analisis teks.

Bahasa dengan tanda aksen (Prancis, Spanyol, Jerman, dll.)

Gunakan tokenizer standard dengan konversi huruf kecil, stemming khusus bahasa, dan penghilangan kata henti. Konfigurasi ini juga dapat digunakan untuk bahasa-bahasa Eropa lainnya dengan memodifikasi parameter language dan stop_words.

# French example
analyzer_params = {
    "tokenizer": "standard",
    "filter": [
        "lowercase", 
        "asciifolding",  # Handle accent marks
        {
            "type": "stemmer",
            "language": "french"
        },
        {
            "type": "stop",
            "stop_words": ["_french_"]
        }
    ]
}

# For other languages, modify the language parameter:
# "language": "spanish" for Spanish
# "language": "german" for German
# "stop_words": ["_spanish_"] or ["_german_"] accordingly

Konten bahasa Inggris

Untuk pemrosesan teks bahasa Inggris dengan pemfilteran komprehensif. Anda juga dapat menggunakan fitur english penganalisis bawaan:

analyzer_params = {
    "tokenizer": "standard",
    "filter": [
        "lowercase",
        {
            "type": "stemmer",
            "language": "english"
        },
        {
            "type": "stop",
            "stop_words": ["_english_"]
        }
    ]
}

# Equivalent built-in shortcut:
analyzer_params = {
    "type": "english"
}

Konten bahasa Mandarin

Gunakan tokenizer jieba dan terapkan filter karakter untuk mempertahankan hanya karakter bahasa Mandarin, huruf Latin, dan angka.

analyzer_params = {
    "tokenizer": "jieba",
    "filter": ["cnalphanumonly"]
}

# Equivalent built-in shortcut:
analyzer_params = {
    "type": "chinese"
}

Untuk bahasa Mandarin Sederhana, cnalphanumonly menghapus semua token kecuali karakter Mandarin, teks alfanumerik, dan angka. Hal ini untuk mencegah tanda baca mempengaruhi kualitas pencarian.

Konten bahasa Jepang

Gunakan tokenizer lindera dengan kamus dan filter bahasa Jepang untuk membersihkan tanda baca dan mengontrol panjang token:

analyzer_params = {
    "tokenizer": {
        "type": "lindera",
        "dict": "ipadic"  # Options: ipadic, ipadic-neologd, unidic
    },
    "filter": [
        "removepunct",  # Remove standalone punctuation
        {
            "type": "length",
            "min": 1,
            "max": 20
        }
    ]
}

Konten Korea

Mirip dengan bahasa Jepang, menggunakan lindera tokenizer dengan kamus bahasa Korea:

analyzer_params = {
    "tokenizer": {
        "type": "lindera",
        "dict": "ko-dic"
    },
    "filter": [
        "removepunct",
        {
            "type": "length",
            "min": 1,
            "max": 20
        }
    ]
}

Konten campuran atau multibahasa

Ketika bekerja dengan konten yang menggunakan beberapa bahasa atau menggunakan skrip yang tidak dapat diprediksi, mulailah dengan penganalisis icu. Penganalisis yang sadar Unicode ini menangani skrip dan simbol campuran secara efektif.

Konfigurasi multibahasa dasar (tanpa stemming):

analyzer_params = {
    "tokenizer": "icu",
    "filter": ["lowercase", "asciifolding"]
}

Pemrosesan multibahasa tingkat lanjut:

Untuk kontrol yang lebih baik atas perilaku token di berbagai bahasa:

Mengintegrasikan dengan fitur pengambilan teks

Setelah memilih penganalisis Anda, Anda dapat mengintegrasikannya dengan fitur pengambilan teks yang disediakan oleh Milvus.

  • Pencarian teks lengkap

    Penganalisis secara langsung memengaruhi pencarian teks lengkap berbasis BM25 melalui pembuatan vektor yang jarang. Gunakan penganalisis yang sama untuk pengindeksan dan kueri untuk memastikan tokenisasi yang konsisten. Penganalisis khusus bahasa umumnya memberikan penilaian BM25 yang lebih baik daripada yang umum. Untuk detail implementasi, lihat Pencarian Teks Lengkap.

  • Pencocokan teks

    Operasi pencocokan teks melakukan pencocokan token yang tepat antara kueri dan konten yang diindeks berdasarkan keluaran penganalisis Anda. Untuk detail implementasi, lihat Pencocokan Teks.

  • Pencocokan frasa

    Pencocokan frasa memerlukan tokenisasi yang konsisten di seluruh ekspresi multi-kata untuk mempertahankan batasan dan makna frasa. Untuk detail implementasi, lihat Pencocokan Frasa.