同義語
synonym フィルタは、同義語辞書に従ってトークンを書き換え、検索時に関連する用語が一致するようにします。このフィルタは2つの動作モードと2つの辞書の提供方法をサポートしています:
expand正規化モード (expand: false) は、トークンを正規形に書き換えます。辞書ソース- 小さな辞書は、
synonyms配列を介してフィルタ構成にインライン化することができます。大きな辞書は、ファイルリソースとして格納し、synonyms_fileを介して参照する必要があります。
辞書の形式
同義語辞書はプレーンテキストの文書(またはインライン配列)で、各行が1つのルールを定義する。2つのルール形式がサポートされている。
マッピングルール
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 フィルタはカスタムフィルタです。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 フィルタは以下のパラメータを受け付けます。
パラメータ |
説明 |
デフォルト |
|---|---|---|
|
ルール文字列のインライン配列。各文字列は上記の辞書形式を使用する。小さな辞書(数十ルールまで)に適している。 |
- |
|
同義語規則を1行に1つずつ格納するファイル・リソースへの参照。より大きな辞書に使用する。以下の外部辞書ファイルを参照のこと。 |
- |
|
trueは元のトークンを保持し、それと一緒に同義語を出力します。falseはトークンを正規形 (マッピングの右辺、または同値群の最初のトークン)に書き換えます。 |
false |
synonyms 、synonyms_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']]
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 に書き換えたでしょう。