Sinonim
Filter synonym menulis ulang token menurut kamus sinonim, sehingga istilah yang terkait dapat dicocokkan selama pencarian. Filter ini mendukung dua mode operasi dan dua cara untuk memasok kamus:
Modeoperasi - mode
expandmempertahankan token asli dan mengeluarkan sinonim tambahan di sampingnya; mode normalisasi (expand: false) menulis ulang token ke bentuk kanonik.Sumber kamus - kamus kecil dapat dimasukkan ke dalam konfigurasi filter melalui larik
synonyms; kamus besar harus disimpan sebagai sumber daya file dan direferensikan melaluisynonyms_file.
Format kamus
Kamus sinonim adalah dokumen teks biasa (atau larik sebaris) yang setiap barisnya mendefinisikan satu aturan. Ada dua bentuk aturan yang didukung.
Aturan pemetaan
fast, quick => speedy
Token di sebelah kiri (fast, quick) ditulis ulang ke token di sebelah kanan (speedy). Beberapa target diperbolehkan:
small, little => tiny, compact
Dengan expand: true, token asli disimpan di samping target:
Masukkan
fastdenganexpand: true→fast,speedyMasukkan
fastdenganexpand: false→speedy
Kelompok kesetaraan
happy, joyful, cheerful
Semua token yang terdaftar dianggap setara:
Dengan
expand: true, setiap kemunculan token apa pun dalam grup memancarkan setiap token dalam grup. Masukanhappy→happy,joyful,cheerful.Dengan
expand: false, setiap kemunculan ditulis ulang ke token pertama dalam grup. Masukanjoyful→happy; masukanhappysudah menjadi token pertama dan tidak berubah.
Konfigurasi
Filter synonym adalah filter khusus. Tentukan "type": "synonym" bersama dengan setidaknya salah satu dari synonyms (sebaris) atau synonyms_file (eksternal), ditambah bendera expand.
analyzer_params = {
"tokenizer": "standard",
"filter": [
{
"type": "synonym",
"synonyms": [ # inline rules (optional)
"fast, quick => speedy",
"happy, joyful, cheerful",
],
"synonyms_file": { # external rules (optional)
"type": "remote",
"resource_name": "en_synonyms",
"file_name": "synonyms.txt",
},
"expand": True,
}
],
}
Filter synonym menerima parameter berikut ini.
Parameter |
Deskripsi |
Default |
|---|---|---|
|
Larik sebaris string aturan. Setiap string menggunakan format kamus yang dijelaskan di atas. Cocok untuk kamus kecil (hingga beberapa lusin aturan). |
- |
|
Referensi ke sumber daya file yang menyimpan aturan sinonim, satu per baris. Digunakan untuk kamus yang lebih besar. Lihat File kamus eksternal di bawah ini. |
- |
|
Bendera boolean yang mengontrol bagaimana aturan berlaku. true mempertahankan token asli dan mengeluarkan sinonim di sampingnya; false menulis ulang token ke bentuk kanoniknya (sisi kanan pemetaan, atau token pertama dari grup ekuivalensi). |
false |
Anda dapat menentukan synonyms, synonyms_file, atau keduanya. Jika keduanya ada, filter akan menggabungkan kedua sumber tersebut. Filter beroperasi pada token yang dihasilkan oleh tokenizer; oleh karena itu, filter ini harus digabungkan dengan tokenizer seperti tokenizer standar.
File kamus eksternal
Untuk kamus berukuran produksi, daftarkan file sebagai sumber daya file jarak jauh dan rujuk dari synonyms_file.
from pymilvus import MilvusClient
client = MilvusClient(uri="http://localhost:19530")
# Register the file once, then reference it from any analyzer that needs it.
client.add_file_resource(
name="en_synonyms",
path="file/synonyms.txt", # full S3 object key, including rootPath
)
analyzer_params = {
"tokenizer": "standard",
"filter": [{
"type": "synonym",
"synonyms_file": {
"type": "remote",
"resource_name": "en_synonyms",
"file_name": "synonyms.txt",
},
"expand": True,
}],
}
Lihat Mengelola Sumber Daya File untuk alur kerja lengkap (unggah, daftarkan, daftar, hapus) dan untuk formulir alternatif "type": "local".
Contoh
Sebelum menerapkan penganalisis ke skema koleksi, verifikasi perilakunya dengan run_analyzer. Contoh-contoh berikut ini menggunakan larik synonyms sebaris untuk mempersingkat; ganti dengan synonyms_file untuk kamus yang lebih besar.
expand: true - Pertahankan yang asli, tambahkan sinonim
from pymilvus import MilvusClient
client = MilvusClient(uri="http://localhost:19530")
analyzer_params = {
"tokenizer": "standard",
"filter": [{
"type": "synonym",
"synonyms": [
"fast, quick => speedy",
"happy, joyful, cheerful",
],
"expand": True,
}],
}
print(client.run_analyzer(["a fast car"], analyzer_params))
# → [['a', 'fast', 'speedy', 'car']]
print(client.run_analyzer(["i am happy today"], analyzer_params))
# → [['i', 'am', 'happy', 'joyful', 'cheerful', 'today']]
Baik fast dan happy dipertahankan; sinonimnya dipancarkan di sampingnya.
expand: false - menulis ulang ke bentuk kanonik
analyzer_params_norm = {
"tokenizer": "standard",
"filter": [{
"type": "synonym",
"synonyms": [
"fast, quick => speedy",
"happy, joyful, cheerful",
],
"expand": False,
}],
}
print(client.run_analyzer(["a fast car"], analyzer_params_norm))
# → [['a', 'speedy', 'car']]
print(client.run_analyzer(["i am happy today"], analyzer_params_norm))
# → [['i', 'am', 'happy', 'today']]
Aturan pemetaan menulis ulang fast menjadi speedy. Kelompok ekuivalensi membiarkan happy tidak berubah karena ini adalah token pertama dari kelompok tersebut; masukan yang berisi joyful atau cheerful akan ditulis ulang menjadi happy.