同义词

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:将标记改写为其规范形式(映射的右侧或等价组的第一个标记)。

您可以指定synonymssynonyms_file 或两者。当两者都出现时,过滤器会合并两个来源。该过滤器对标记符生成器产生的标记进行操作;因此必须与标准标记符等标记符生成器结合使用。

外部字典文件

对于生产规模的字典,将文件注册为远程文件资源,并从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" 表格,请参阅管理文件资源。

示例

在将分析器应用于 Collections Schema 之前,请使用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 SaaS服务 ?

Zilliz Cloud是基于Milvus的全托管向量数据库,拥有更高性能,更易扩展,以及卓越性价比

免费试用 Zilliz Cloud
反馈

此页对您是否有帮助?