同義語

synonym フィルタは、同義語辞書に従ってトークンを書き換え、検索時に関連する用語が一致するようにします。このフィルタは2つの動作モードと2つの辞書の提供方法をサポートしています:

  • expand 正規化モード (expand: false) は、トークンを正規形に書き換えます。

  • 辞書ソース- 小さな辞書は、synonyms 配列を介してフィルタ構成にインライン化することができます。大きな辞書は、ファイルリソースとして格納し、synonyms_file を介して参照する必要があります。

辞書の形式

同義語辞書はプレーンテキストの文書(またはインライン配列)で、各行が1つのルールを定義する。2つのルール形式がサポートされている。

マッピングルール

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 フィルタはカスタムフィルタです。synonyms (インライン) またはsynonyms_file (外部) の少なくとも1つとexpand フラグとともに"type": "synonym" を指定します。

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

同義語規則を1行に1つずつ格納するファイル・リソースへの参照。より大きな辞書に使用する。以下の外部辞書ファイルを参照のこと。

-

expand

trueは元のトークンを保持し、それと一緒に同義語を出力します。falseはトークンを正規形 (マッピングの右辺、または同値群の最初のトークン)に書き換えます。

false

synonymssynonyms_file 、またはその両方を指定できます。両方指定すると、フィルタは 2 つのソースをマージします。したがって、標準トークナイザなどのトークナイザと組み合わせる必要があります。

外部辞書ファイル

プロダクション・サイズの辞書の場合は、そのファイルをリモート・ファイル・リソースとして登録し、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']]

このマッピングルールは、fastspeedy に書き換えます。同値グループは、happy がグループの最初のトークンであるため、 を変更せずに残します。joyful またはcheerful を含む入力は、happy に書き換えたでしょう。

Try Managed Milvus for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started
フィードバック

このページは役に立ちましたか ?