同義詞
synonym 過濾器會根據同義詞字典重寫字詞,以便在搜尋時匹配相關的詞彙。它支援兩種運作模式和兩種提供字典的方式:
操作模式-
expand模式保留原始標記,並在其旁邊釋出其他同義詞;正規化模式 (expand: false) 將標記改寫為標準形式。詞典來源- 小型詞典可透過
synonyms陣列內嵌到篩選器配置中;大型詞典應儲存在檔案資源中,並透過synonyms_file引用。
辭典格式
同義詞辭典是純文字文件(或內嵌陣列),其中每一行定義一條規則。支援兩種規則形式。
映射規則
fast, quick => speedy
左側的標點 (fast,quick) 重寫為右側的標點 (speedy)。允許多個目標:
small, little => tiny, compact
使用expand: true 時,原始符號會與目標符號一起保留:
輸入
fast與expand: true→fast、speedy輸入
fast與expand: false→ 。speedy
等價群組
happy, joyful, cheerful
所有列出的標記都被視為等效:
有了
expand: true, 組中任何符號的任何出現都會發出組中的每個符號。輸入happy→happy,joyful,cheerful。使用
expand: false, 每一個出現的符號都會被改寫成該群組中的第一個符號。輸入joyful→happy; 輸入happy已經是第一個符號,不會改變。
設定
synonym 過濾器是自訂的過濾器。指定"type": "synonym" 以及synonyms (內嵌) 或synonyms_file (外部) 中的至少一個,再加上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,
}
],
}
synonym 過濾器接受下列參數。
參數 |
說明 |
預設值 |
|---|---|---|
|
規則字串的內嵌陣列。每個字串使用上述字典格式。適用於小型字典(最多數十條規則)。 |
- |
|
- |
|
|
true 會保留原始標記,並在其旁邊釋出同義詞;false 會將標記改寫為其標準形式 (映射的右側,或等同組的第一個標記)。 |
false |
您可以指定synonyms 、synonyms_file 或兩者。當兩者都出現時,篩選器會合併兩個來源。篩選器會對由 tokenizer 產生的 token 進行操作;因此,它必須與 tokenizer (例如標準tokenizer) 結合。
外部字典檔案
對於生產規模的詞典,請將檔案註冊為遠端檔案資源,並從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,
}],
}
請參閱管理檔案資源,以瞭解完整的工作流程 (上傳、註冊、列出、移除) 以及另一種"type": "local" 表格。
範例
在將分析器套用到集合模式之前,請使用run_analyzer 來驗證其行為。為了簡潔起見,以下範例使用內嵌synonyms 陣列;若要使用較大的字典,請以synonyms_file 取代。
expand: true - 保留原文,增加同義詞
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']]
fast 和happy 都會被保留;它們的同義詞會一併發出。
expand: false - 重寫為標準形式
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']]
映射規則將fast 重寫為speedy 。等同組保留happy 不變,因為它是該組的第一個符號;包含joyful 或cheerful 的輸入會被重寫為happy 。