同義詞

synonym 過濾器會根據同義詞字典重寫字詞,以便在搜尋時匹配相關的詞彙。它支援兩種運作模式和兩種提供字典的方式:

  • 操作模式-expand 模式保留原始標記,並在其旁邊釋出其他同義詞;正規化模式 (expand: false) 將標記改寫為標準形式。

  • 詞典來源- 小型詞典可透過synonyms 陣列內嵌到篩選器配置中;大型詞典應儲存在檔案資源中,並透過synonyms_file 引用。

辭典格式

同義詞辭典是純文字文件(或內嵌陣列),其中每一行定義一條規則。支援兩種規則形式。

映射規則

fast, quick => speedy

左側的標點 (fast,quick) 重寫為右側的標點 (speedy)。允許多個目標:

small, little => tiny, compact

使用expand: true 時,原始符號會與目標符號一起保留:

  • 輸入fastexpand: truefastspeedy

  • 輸入fastexpand: false → 。speedy

等價群組

happy, joyful, cheerful

所有列出的標記都被視為等效:

  • 有了expand: true, 組中任何符號的任何出現都會發出組中的每個符號。輸入happyhappy,joyful,cheerful

  • 使用expand: false, 每一個出現的符號都會被改寫成該群組中的第一個符號。輸入joyfulhappy; 輸入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 過濾器接受下列參數。

參數

說明

預設值

synonyms

規則字串的內嵌陣列。每個字串使用上述字典格式。適用於小型字典(最多數十條規則)。

-

synonyms_file

對儲存同義字規則的檔案資源的參照,每行一個。適用於較大的字典。請參閱下面的外部字典檔案

-

expand

true 會保留原始標記,並在其旁邊釋出同義詞;false 會將標記改寫為其標準形式 (映射的右側,或等同組的第一個標記)。

false

您可以指定synonymssynonyms_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']]

fasthappy 都會被保留;它們的同義詞會一併發出。

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 不變,因為它是該組的第一個符號;包含joyfulcheerful 的輸入會被重寫為happy

免費嘗試托管的 Milvus

Zilliz Cloud 無縫接入,由 Milvus 提供動力,速度提升 10 倍。

開始使用
反饋

這個頁面有幫助嗎?