언어 식별자Compatible with Milvus v2.5.15+

language_identifier 은 언어 분석 프로세스를 자동화하여 Milvus의 텍스트 검색 기능을 향상시키기 위해 설계된 특수 토큰화 도구입니다. 주요 기능은 텍스트 필드의 언어를 감지한 다음 해당 언어에 가장 적합한 사전 구성된 분석기를 동적으로 적용하는 것입니다. 이는 입력별로 수동으로 언어를 할당할 필요가 없으므로 다양한 언어를 처리하는 애플리케이션에 특히 유용합니다.

language_identifier 은 텍스트 데이터를 적절한 처리 파이프라인으로 지능적으로 라우팅함으로써 다국어 데이터 수집을 간소화하고 후속 검색 및 검색 작업을 위한 정확한 토큰화를 보장합니다.

언어 감지 워크플로

language_identifier 에서는 텍스트 문자열을 처리하는 일련의 단계를 수행하며, 사용자가 이를 올바르게 구성하는 방법을 이해하는 데 중요한 워크플로우입니다.

Language Detection Workflow 언어 감지 워크플로

  1. 입력: 워크플로는 텍스트 문자열을 입력하는 것으로 시작됩니다.

  2. 언어 감지: 이 문자열은 먼저 언어 감지 엔진으로 전달되어 언어 식별을 시도합니다. Milvus는 whatlang과 링구아의 두 가지 엔진을 지원합니다.

  3. 분석기 선택:

    • 성공: 언어가 성공적으로 감지되면 시스템은 감지된 언어 이름에 analyzers 사전에 구성된 해당 분석기가 있는지 확인합니다. 일치하는 항목이 발견되면 시스템은 입력 텍스트에 지정된 분석기를 적용합니다. 예를 들어, 감지된 "만다린" 텍스트는 jieba 토큰화 도구로 라우팅됩니다.

    • 폴백: 감지에 실패하거나 언어가 성공적으로 감지되었지만 사용자가 특정 분석기를 제공하지 않은 경우 시스템은 사전 구성된 기본 분석기를 기본값으로 사용합니다. default 분석기는 탐지 실패와 일치하는 분석기가 없는 경우 모두에 대한 폴백입니다.

적절한 분석기를 선택하면 텍스트가 토큰화되고 처리되어 워크플로우가 완료됩니다.

사용 가능한 언어 감지 엔진

Milvus는 두 가지 언어 감지 엔진 중에서 선택할 수 있습니다:

애플리케이션의 특정 성능 및 정확도 요구 사항에 따라 선택이 달라집니다.

엔진

속도

정확도

출력 형식

최적 대상

whatlang

빠른

대부분의 언어에 적합

언어 이름(예: "English", "Mandarin", "Japanese")

참조: 지원 언어 표의 언어 열

속도가 중요한 실시간 애플리케이션

lingua

느림

특히 짧은 텍스트의 경우 더 높은 정밀도

영어 이름(예: "English", "Chinese", "Japanese")

참조: 지원 언어 목록

속도보다 정확성이 더 중요한 애플리케이션

중요한 고려 사항은 엔진의 명명 규칙입니다. 두 엔진 모두 언어 이름을 영어로 반환하지만 일부 언어에 대해서는 다른 용어를 사용합니다(예: whatlangMandarin 을 반환하고 linguaChinese 을 반환합니다). 분석기의 키는 선택한 탐지 엔진에서 반환한 이름과 정확히 일치해야 합니다.

구성

language_identifier 토큰 분석기를 올바르게 사용하려면 다음 단계를 수행하여 구성을 정의하고 적용해야 합니다.

1단계: 언어 및 분석기 선택하기

language_identifier 설정의 핵심은 지원하려는 특정 언어에 맞게 분석기를 조정하는 것입니다. 시스템은 감지된 언어를 올바른 분석기와 일치시켜 작동하므로 이 단계는 정확한 텍스트 처리를 위해 매우 중요합니다.

아래는 적합한 Milvus 분석기에 대한 권장 언어 매핑 표입니다. 이 표는 언어 감지 엔진의 출력과 작업에 가장 적합한 도구 사이의 다리 역할을 합니다.

언어(검출기 출력)

권장 분석기

설명

English

type: english

어간 및 중지 단어 필터링이 포함된 표준 영어 토큰화.

Mandarin (whatlang을 통해) 또는 Chinese (링구아를 통해)

tokenizer: jieba

공백으로 구분되지 않은 텍스트를 위한 중국어 단어 세분화.

Japanese

tokenizer: icu

일본어를 포함한 복잡한 스크립트를 위한 강력한 토큰화 도구.

French

type: standard, filter: ["lowercase", "asciifolding"]

프랑스어 악센트와 문자를 처리하는 사용자 지정 구성.

  • 일치하는 것이 핵심입니다: 분석기의 이름은 탐지 엔진의 언어 출력과 정확히 일치해야 합니다. 예를 들어 whatlang 을 사용하는 경우 중국어 텍스트의 키는 Mandarin 이어야 합니다.

  • 모범 사례: 위 표는 몇 가지 일반적인 언어에 대한 권장 구성을 제공하지만 전체 목록은 아닙니다. 분석기 선택에 대한 보다 포괄적인 가이드는 사용 사례에 적합한 분석기 선택하기를 참조하세요.

  • 분석기 출력: 탐지 엔진이 반환하는 언어 이름의 전체 목록은 Whatlang 지원 언어 표Lingua 지원 언어 목록을 참조하세요.

2단계: analyzer_params 정의하기

Milvus에서 language_identifier 토큰화기를 사용하려면 다음 주요 구성 요소가 포함된 사전을 만드세요:

필수 구성 요소:

  • analyzers config set - 모든 분석기 구성이 포함된 사전으로, 반드시 포함되어야 합니다:

    • default - 언어 감지에 실패하거나 일치하는 분석기를 찾을 수 없을 때 사용되는 대체 분석기.

    • 언어별 분석 기 - 각각 <analyzer_name>: <analyzer_config> 로 정의되며, 여기서:

      • analyzer_name 선택한 탐지 엔진의 출력과 일치합니다(예: "English", "Japanese").

      • analyzer_config 표준 분석기 매개변수 형식을 따릅니다( 분석기 개요 참조).

선택적 구성 요소:

  • identifier - 사용할 언어 탐지 엔진을 지정합니다(whatlang 또는 lingua). 지정하지 않으면 기본값은 whatlang 입니다.

  • mapping - 분석기에 대한 사용자 지정 별칭을 생성하여 탐지 엔진의 정확한 출력 형식 대신 설명적인 이름을 사용할 수 있습니다.

토큰화 도구는 먼저 입력 텍스트의 언어를 감지한 다음 구성에서 적절한 분석기를 선택하는 방식으로 작동합니다. 감지에 실패하거나 일치하는 분석기가 없는 경우 자동으로 default 분석기로 돌아갑니다.

분석기 이름은 선택한 언어 감지 엔진의 출력과 정확히 일치해야 합니다. 이 방법은 더 간단하고 잠재적인 혼동을 피할 수 있습니다.

whatlanglingua 모두 해당 문서에 표시된 대로 언어 이름을 사용하세요:

analyzer_params = {
    "tokenizer": {
        "type": "language_identifier",  # Must be `language_identifier`
        "identifier": "whatlang",  # or `lingua`
        "analyzers": {  # A set of analyzer configs
            "default": {
                "tokenizer": "standard"  # fallback if language detection fails
            },
            "English": {  # Analyzer name that matches whatlang output
                "type": "english"
            },
            "Mandarin": {  # Analyzer name that matches whatlang output
                "tokenizer": "jieba"
            }
        }
    }
}

대체 접근 방식: 매핑이 포함된 사용자 지정 이름

사용자 지정 분석기 이름을 사용하거나 기존 구성과의 호환성을 유지해야 하는 경우 mapping 매개 변수를 사용할 수 있습니다. 이렇게 하면 분석기에 대한 별칭이 생성되며 원래 탐지 엔진 이름과 사용자 지정 이름 모두 작동합니다.

analyzer_params = {
    "tokenizer": {
        "type": "language_identifier",
        "identifier": "lingua",
        "analyzers": {
            "default": {
                "tokenizer": "standard"
            },
            "english_analyzer": {  # Custom analyzer name
                "type": "english"
            },
            "chinese_analyzer": {  # Custom analyzer name
                "tokenizer": "jieba"
            }
        },
        "mapping": {
            "English": "english_analyzer",   # Maps detection output to custom name
            "Chinese": "chinese_analyzer"
        }
    }
}

analyzer_params 을 정의한 후 컬렉션 스키마를 정의할 때 VARCHAR 필드에 적용할 수 있습니다. 이렇게 하면 Milvus가 효율적인 토큰화 및 필터링을 위해 지정된 분석기를 사용하여 해당 필드의 텍스트를 처리할 수 있습니다. 자세한 내용은 사용 예시를 참조하세요.

예제

다음은 일반적인 시나리오에 바로 사용할 수 있는 몇 가지 구성입니다. 각 예제에는 구성 및 인증 코드가 모두 포함되어 있으므로 설정을 즉시 테스트할 수 있습니다.

영어 및 중국어 감지

from pymilvus import MilvusClient

# Configuration
analyzer_params = {
    "tokenizer": {
        "type": "language_identifier",
        "identifier": "whatlang",
        "analyzers": {
            "default": {"tokenizer": "standard"},
            "English": {"type": "english"},
            "Mandarin": {"tokenizer": "jieba"}
        }
    }
}

# Test the configuration
client = MilvusClient(
    uri="http://localhost:19530",
    token="root:Milvus"
)

# English text
result_en = client.run_analyzer("The Milvus vector database is built for scale!", analyzer_params)
print("English:", result_en)
# Output: 
# English: ['The', 'Milvus', 'vector', 'database', 'is', 'built', 'for', 'scale']

# Chinese text  
result_cn = client.run_analyzer("Milvus向量数据库专为大规模应用而设计", analyzer_params)
print("Chinese:", result_cn)
# Output: 
# Chinese: ['Milvus', '向量', '数据', '据库', '数据库', '专', '为', '大规', '规模', '大规模', '应用', '而', '设计']

악센트 정규화가 있는 유럽 언어

# Configuration for French, German, Spanish, etc.
analyzer_params = {
    "tokenizer": {
        "type": "language_identifier",
        "identifier": "lingua", 
        "analyzers": {
            "default": {"tokenizer": "standard"},
            "English": {"type": "english"},
            "French": {
                "tokenizer": "standard",
                "filter": ["lowercase", "asciifolding"]
            }
        }
    }
}

# Test with accented text
result_fr = client.run_analyzer("Café français très délicieux", analyzer_params)
print("French:", result_fr)
# Output: 
# French: ['cafe', 'francais', 'tres', 'delicieux']

사용 참고 사항

  • 필드당 단일 언어: 필드에서 하나의 동질적인 단일 텍스트 단위로 작동합니다. 영어 문장이 포함된 레코드와 프랑스어 문장이 포함된 레코드 등 서로 다른 데이터 레코드에서 서로 다른 언어를 처리하도록 설계되었습니다.

  • 혼합 언어 문자열이 없습니다: 여러 언어의 텍스트가 포함된 단일 문자열을 처리하도록 설계되지 않았습니다. 예를 들어 영어 문장과 따옴표로 묶인 일본어 구문이 모두 포함된 단일 VARCHAR 필드는 단일 언어로 처리됩니다.

  • 지배적 언어 처리: 혼합 언어 시나리오에서는 탐지 엔진이 지배적인 언어를 식별하고 해당 분석기가 전체 텍스트에 적용될 가능성이 높습니다. 이렇게 하면 포함된 외국어 텍스트에 대한 토큰화가 제대로 이루어지지 않거나 전혀 이루어지지 않을 수 있습니다.