동의어
synonym 필터는 동의어 사전에 따라 토큰을 다시 작성하여 검색 중에 관련 용어가 일치하도록 합니다. 이 필터는 두 가지 작동 모드와 두 가지 사전 제공 방식을 지원합니다:
작동 모드 -
expand모드는 원본 토큰을 보존하고 추가 동의어를 함께 출력하며, 정규화 모드(expand: false)는 토큰을 표준 형식으로 다시 씁니다.사전 소스 - 작은 사전은
synonyms배열을 통해 필터 구성에 인라인할 수 있으며, 큰 사전은 파일 리소스로 저장하고synonyms_file을 통해 참조해야 합니다.
사전 형식
동의어 사전은 각 줄이 하나의 규칙을 정의하는 일반 텍스트 문서(또는 인라인 배열)입니다. 두 가지 규칙 형식이 지원됩니다.
매핑 규칙
fast, quick => speedy
왼쪽의 토큰(fast, quick)은 오른쪽의 토큰(speedy)으로 다시 작성합니다. 여러 대상을 사용할 수 있습니다:
small, little => tiny, compact
expand: true 를 사용하면 원래 토큰이 대상과 함께 유지됩니다:
fast를expand: true→fast로 입력합니다,speedyexpand: false→fast입력speedy
동등성 그룹
happy, joyful, cheerful
나열된 모든 토큰은 동등한 것으로 간주됩니다:
expand: true를 사용하면 그룹에 있는 토큰이 발생하면 그룹의 모든 토큰을 방출합니다. 입력happy→happy,joyful,cheerful.expand: false을 사용하면 그룹의 모든 토큰이 그룹의 첫 번째 토큰으로 다시 작성됩니다. 입력joyful→happy; 입력happy은 이미 첫 번째 토큰이며 변경되지 않습니다.
구성
synonym 필터는 사용자 정의 필터입니다. synonyms (인라인) 또는 synonyms_file (외부) 중 하나 이상과 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 필터는 다음 매개변수를 허용합니다.
파라미터 |
설명 |
기본값 |
|---|---|---|
|
규칙 문자열의 인라인 배열입니다. 각 문자열은 위에서 설명한 사전 형식을 사용합니다. 소규모 딕셔너리(최대 수십 개의 규칙)에 적합합니다. |
- |
|
동의어 규칙을 한 줄당 하나씩 저장하는 파일 리소스에 대한 참조입니다. 대규모 사전에 사용합니다. 아래의 외부 사전 파일을 참조하세요. |
- |
|
규칙 적용 방식을 제어하는 부울 플래그입니다. true는 원래 토큰을 보존하고 동의어를 함께 내보내고, false는 토큰을 표준 형식(매핑의 오른쪽 또는 등가 그룹의 첫 번째 토큰)으로 다시 씁니다. |
false |
synonyms, synonyms_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" )은 파일 리소스 관리하기를 참조하세요.
예제
분석기를 컬렉션 스키마에 적용하기 전에 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 으로 재작성됩니다.