言語識別子Compatible with Milvus v2.5.15+

language_identifier は、言語解析プロセスを自動化することで、Milvusのテキスト検索機能を強化するために設計された専用のトークナイザーです。主な機能は、テキストフィールドの言語を検出し、その言語に最適な設定済みの解析器を動的に適用することです。これは、入力ごとに手動で言語を割り当てる必要がなくなるため、さまざまな言語を扱うアプリケーションで特に有用です。

テキストデータを適切な処理パイプラインにインテリジェントにルーティングすることで、language_identifier は、多言語データの取り込みを合理化し、その後の検索および取得操作のための正確なトークン化を保証します。

言語検出ワークフロー

language_identifier は、テキスト文字列を処理するために一連のステップを実行します。このワークフローは、ユーザーが正しく設定する方法を理解する上で非常に重要です。

Language Detection Workflow 言語検出ワークフロー

  1. 入力:ワークフローは、テキスト文字列を入力として開始する。

  2. 言語検出:この文字列はまず言語検出エンジンに渡され、言語の特定を試みる。milvusはwhatlangと linguaの2つのエンジンをサポートしています。

  3. アナライザーの選択:

    • 成功:言語の検出に成功すると、検出された言語名に対応するアナライザがanalyzers 辞書に設定されているかどうかがチェックされます。一致するアナライザが見つかると、指定したアナライザが入力テキストに適用されます。たとえば、"Mandarin" というテキストが検出されると、jieba のトークナイザにルーティングされます。

    • フォールバック:検出が失敗した場合、または検出には成功したが特定のアナライザが指定されていない場合、システムは事前に設定されたデフォルトのアナライザにデフォルト設定します。default アナライザーは、検出に失敗した場合にも、一致するアナライザーがない場合にも使用できます。

適切な解析器が選択されると、テキストがトークン化されて処理され、ワークフローが完了します。

利用可能な言語検出エンジン

Milvusは2つの言語検出エンジンから選択することができます:

お客様のアプリケーションのパフォーマンスと精度の要件に応じてお選びいただけます。

エンジン

速度

精度

出力形式

最適

whatlang

速い

ほとんどの言語に対応

言語名 (例:"English","Mandarin","Japanese")

参照 対応言語表の言語欄

速度が重要なリアルタイム・アプリケーション

lingua

遅い

特に短いテキストでは高精度

英語名 (例:"English","Chinese","Japanese")

参照: サポート言語リスト

速度よりも精度が重視される用途

重要な考慮点は、エンジンの命名規則です。どちらのエンジンも英語の言語名を返しますが、一部の言語では異なる用語を使用します(たとえば、whatlangMandarin を返し、linguaChinese を返します)。アナライザのキーは、選択した検出エンジンが返す名前と完全に一致する必要があります。

構成

language_identifier トークナイザを正しく使用するには、次の手順で設定を定義し、適用する必要があります。

ステップ 1: 言語とアナライザの選択

language_identifier の設定の核心は、サポートする予定の特定の言語に合わせてアナライザを調整することです。システムは、検出された言語と正しいアナライザをマッチングさせることで動作するため、このステップは正確なテキスト処理を行うために非常に重要です。

以下は、推奨される言語とMilvusアナライザーの対応表です。この表は言語検出エンジンの出力と最適なツールとの橋渡しをします。

言語(検出出力)

推奨アナライザー

説明

English

type: english

ステミングとストップワードフィルタリングを含む標準的な英語のトークン化。

Mandarin (whatlang 経由) またはChinese (lingua 経由)

tokenizer: jieba

非スペース区切りのテキストに対する中国語の単語分割。

Japanese

tokenizer: icu

日本語を含む複雑なスクリプト用のロバストなトークナイザー。

French

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

フランス語のアクセントや文字を処理するカスタム設定。

  • マッチングが鍵です:アナライザーの名前は、検出エンジンの言語出力と完全に一致する必要があります。たとえば、whatlang を使用する場合、中国語テキストのキーはMandarin にする必要があります。

  • ベスト・プラクティス:上の表は、いくつかの一般的な言語に対する推奨設定を示していますが、網羅的なリストではあ りません。アナライザーの選択に関するより包括的なガイドについては、「ユースケースに適したアナライザーを選択する」を参照してください。

  • 検出器の出力:検出エンジンが返す言語名の完全なリストは、Whatlangサポート言語テーブルと Linguaサポート言語リストを参照してください。

ステップ2: analyzer_paramsの定義

Milvusでlanguage_identifier トークナイザーを使用するには、以下の主要コンポーネントを含む辞書を作成してください:

必須コンポーネント

  • analyzers config セット - すべての解析器設定を含む辞書:

    • 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']

使用上の注意

  • フィールドごとに単一言語:フィールドを1つの均質なテキスト単位として操作します。あるレコードには英語の文章が含まれ、次のレコードにはフランス語の文章が含まれるなど、異なるデータレコード間で異なる言語を扱うように設計されています。

  • 言語が混在した文字列は扱えない:複数の言語のテキストを含む単一の文字列を扱うようには設計されていない。たとえば、英語の文章と引用符で囲まれた日本語のフレーズの両方を含むVARCHAR フィールドは、1 つの言語として処理されます。

  • 優勢言語処理:言語が混在するシナリオでは、検出エンジンが優勢な言語を識別し、対応するアナライザがテキスト全体に適用される可能性が高い。その結果、埋め込まれた外国語テキストのトークン化がうまくいかないか、まったく行われないことになります。