メインコンテンツまでスキップ

言語識別子

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

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

言語検出ワークフロー​

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

言語検出ワークフロー

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

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

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

    • 成功: 言語が正常に検出されると、システムは、検出された言語名に対応するアナライザーが analyzers ディクショナリに設定されているかどうかを確認します。一致するものが見つかった場合、システムは指定されたアナライザーを入力テキストに適用します。たとえば、検出された「Mandarin」テキストは jieba トークナイザーにルーティングされます。

    • フォールバック: 検出に失敗した場合、または言語の検出に成功しても特定のアナライザーが設定されていない場合、システムは事前設定済みの デフォルトアナライザー にフォールバックします。これは明確にしておくべき重要な点です。default アナライザーは、検出失敗と一致するアナライザーが存在しない場合の両方に対するフォールバックです。

適切なアナライザーが選択されると、テキストがトークン化されて処理され、ワークフローが完了します。

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

Zilliz Cloud では、2 つの言語検出エンジンから選択できます:

選択は、アプリケーションの特定のパフォーマンスおよび精度の要件によって異なります。

エンジン

速度

精度

出力形式

最適な用途

whatlang

高速

ほとんどの言語に対応

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

参照: サポートされている言語表の言語列

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

lingua

低速

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

英語の言語名(例: "English"、"Chinese"、"Japanese")

参照: サポートされている言語の一覧

速度よりも精度が重要なアプリケーション

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

設定​

language_identifier トークナイザーを正しく使用するには、その設定を定義および適用するために次のステップを実行する必要があります。

ステップ 1: 言語とアナライザーを選択する​

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

以下は、言語と適切な Zilliz Cloud アナライザーの推奨マッピングです。この表は、言語検出エンジンの出力と、その用途に最適なツールとの橋渡しをします。

言語(検出器の出力)

推奨アナライザー

説明

English

type: english

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

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

tokenizer: jieba

スペースで区切られていないテキスト向けの中国語の単語分割です。

Japanese

tokenizer: icu

日本語を含む複雑な文字体系に対応する堅牢なトークナイザーです。

French

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

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

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

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

  • 検出器の出力: 検出エンジンが返す言語名の完全なリストについては、Whatlang サポート言語表 および Lingua サポート言語一覧 を参照してください。

ステップ 2: analyzer_params を定義する​

Zilliz Cloud で language_identifier トークナイザーを使用するには、次の主要コンポーネントを含むディクショナリを作成します:

必須コンポーネント:

  • analyzers 設定セット – すべてのアナライザー設定を含むディクショナリで、次を含める必要があります:

    • default – 言語検出に失敗した場合、または一致するアナライザーが見つからない場合に使用されるフォールバックアナライザー

    • 言語固有のアナライザー – それぞれ <analyzer_name>: <analyzer_config> として定義され、次の条件を満たします:

      • analyzer_name は、選択した検出エンジンの出力と一致します(例: "English"、"Japanese")

      • analyzer_config は標準的なアナライザーパラメーター形式に従います(アナライザーの概要 を参照)

オプションコンポーネント:

  • identifier – 使用する言語検出エンジン(whatlang または lingua)を指定します。指定しない場合は whatlang がデフォルトになります

  • mapping – アナライザーのカスタムエイリアスを作成し、検出エンジンの正確な出力形式の代わりにわかりやすい名前を使用できるようにします

このトークナイザーは、まず入力テキストの言語を検出し、次に設定から適切なアナライザーを選択して動作します。検出に失敗した場合、または一致するアナライザーが存在しない場合は、自動的に default アナライザーにフォールバックします。

アナライザー名は、選択した言語検出エンジンの出力と完全に一致する必要があります。この方法はよりシンプルで、混乱の可能性を回避できます。

whatlang と lingua の両方について、それぞれのドキュメントに記載されている言語名を使用します:

python
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 を使用したカスタム名​

カスタムアナライザー名を使用する場合、または既存の設定との互換性を維持する必要がある場合は、mapping パラメーターを使用できます。これによりアナライザーのエイリアスが作成され、元の検出エンジン名とカスタム名の両方が機能します。

python
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 フィールドに適用できます。これにより、Zilliz Cloud は指定されたアナライザーを使用してそのフィールドのテキストを処理し、効率的なトークン化とフィルタリングを実行できます。詳細は、使用例 を参照してください。

例​

一般的なシナリオ向けのすぐに使用できる設定をいくつか紹介します。各例には設定と検証コードの両方が含まれているため、セットアップをすぐにテストできます。

英語と中国語の検出​

python
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="YOUR_CLUSTER_ENDPOINT",
token="YOUR_CLUSTER_TOKEN"
)

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

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

アクセント正規化を使用するヨーロッパ言語​

python
from pymilvus import MilvusClient

# 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
client = MilvusClient(
uri="YOUR_CLUSTER_ENDPOINT",
token="YOUR_CLUSTER_TOKEN"
)

result_fr = client.run_analyzer("Café français très délicieux", analyzer_params)
print("French:", result_fr)

想定される出力​

上記のヨーロッパ言語の例では、次のトークンが順に生成されます。SDK のレスポンスオブジェクトと出力形式は言語によって異なります。REST レスポンスでは、これらのトークンは data.results[].tokens[].token に含まれます。英語と中国語の検出例のトークンシーケンスは、検出器が各入力に対して選択するアナライザーによって異なるため、ここでは再現していません。

plaintext
French: ['cafe', 'francais', 'tres', 'delicieux']

使用上の注意​

  • フィールドごとに単一言語: フィールドを単一の均質なテキスト単位として処理します。異なるデータレコード間で異なる言語を扱えるように設計されており、たとえば、あるレコードには英語の文が含まれ、次のレコードにはフランス語の文が含まれる場合があります。

  • 混合言語の文字列には非対応: 複数の言語のテキストを含む単一の文字列を処理するようには設計されて いません。たとえば、英語の文と引用された日本語のフレーズの両方を含む単一の VARCHAR フィールドは、単一言語として処理されます。

  • 支配的な言語の処理: 混合言語のシナリオでは、検出エンジンはおそらく支配的な言語を識別し、対応するアナライザーがテキスト全体に適用されます。その結果、埋め込まれた外国語のテキストは十分にトークン化されないか、まったくトークン化されなくなります。