言語識別子
language_identifierは、言語分析プロセスを自動化することでZilliz Cloudのテキスト検索機能を強化するように設計された特殊なトークナイザーです。その主な機能は、テキストフィールドの言語を検出し、その後その言語に最も適した事前設定されたアナライザーを動的に適用することです。これは特にさまざまな言語を扱うアプリケーションに価値があり、入力ごとに手動で言語を割り当てる必要性を排除します。
適切な処理パイプラインにテキストデータをインテリジェントにルーティングすることにより、language_identifierは多言語データの取り込みを合理化し、その後の検索および検索操作のための正確なトークン化を保証します。
言語検出ワークフロー
language_identifierは、テキスト文字列を処理するために一連の手順を実行します。このワークフローは、ユーザーがこれを正しく構成する方法を理解するために重要です。

-
入力: ワークフローは、入力としてテキスト文字列から始まります。
-
言語検出: この文字列は最初に言語検出エンジンに渡され、言語を識別しようとします。Zilliz Cloudは2つのエンジンをサポートしています:whatlangおよびlingua。
-
アナライザー選択:
-
成功: 言語が正常に検出された場合、システムは検出された言語名に対応するアナライザーが
analyzers辞書内に構成されているかどうかを確認します。一致が見つかった場合、システムは指定されたアナライザーを入力テキストに適用します。たとえば、検出された"Mandarin"テキストはjiebaトークナイザーにルーティングされます。 -
フォールバック: 検出が失敗した場合、または言語が正常に検出されたがその特定のアナライザーを提供していない場合、システムは事前設定されたdefaultアナライザーにデフォルトで戻ります。これは明確にする重要な点です。
defaultアナライザーは検出失敗と一致するアナライザーの不在の両方に対するフォールバックです。
-
適切なアナライザーが選択されると、テキストはトークン化されて処理され、ワークフローが完了します。
利用可能な言語検出エンジン
Zilliz Cloudは2つの言語検出エンジンの間で選択を提供します:
選択は、アプリケーションの特定のパフォーマンスおよび精度要件に依存します。
エンジン | 速度 | 精度 | 出力形式 | 最適な用途 |
|---|---|---|---|---|
| 高速 | 多くの言語において良好 | 言語名(例: | 速度が重要なリアルタイムアプリケーション |
| 遅い | より高い精度、特に短いテキストのため | 英語の言語名(例: | 速度よりも精度が重要なアプリケーション |
重要な検討事項はエンジンの命名規則です。両方のエンジンが英語の言語名を返すにしても、いくつかの言語には異なる用語を使用します(例:whatlangはMandarinを返しますが、linguaはChineseを返します)。アナライザーのキーは、選択した検出エンジンが返す名前と完全に一致する必要があります。
構成
language_identifierトークナイザーを正しく使用するには、以下の手順を実行して構成を定義および適用する必要があります。
ステップ1: 言語とアナライザーを選択
language_identifierの設定の核心は、サポートする特定の言語に合わせてアナライザーを調整することです。このシステムは、検出された言語と正しいアナライザーを一致させることで動作するため、このステップはテキスト処理の正確性に不可欠です。
以下は、言語と適切なZilliz Cloudアナライザーの推奨マッピングです。この表は、言語検出エンジンの出力と最適なツールの間の橋渡しをします。
言語(検出器の出力) | 推奨アナライザー | 説明 |
|---|---|---|
|
| ステミングとストップワードフィルタリング付きの標準的な英語トークン化。 |
|
| スペースで区切られていない中国語テキストのための中国語語彙分割。 |
|
| 日本語を含む複雑なスクリプトのための堅牢なトークナイザー。 |
|
| フランス語のアクセントと文字を処理するカスタム構成。 |
一致が重要:アナライザーの名前は検出エンジンの言語出力と完全に一致する必要があります。たとえば、
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の両方で、それぞれのドキュメントに示されている言語名を使用してください:
-
whatlangサポート言語(「Language」列を使用)
analyzer_params = {
"tokenizer": {
"type": "language_identifier", # `language_identifier`でなければなりません
"identifier": "whatlang", # または `lingua`
"analyzers": { # アナライザー構成のセット
"default": {
"tokenizer": "standard" # 言語検出が失敗した場合のフォールバック
},
"English": { # whatlang出力と一致するアナライザー名
"type": "english"
},
"Mandarin": { # whatlang出力と一致するアナライザー名
"tokenizer": "jieba"
}
}
}
}
代替アプローチ:マッピングによるカスタム名
カスタムアナライザー名を使用することを好む場合や、既存の構成との互換性を維持する必要がある場合は、mappingパラメータを使用できます。これによりアナライザーのエイリアスが作成され、元の検出エンジン名とカスタム名の両方が機能します。
analyzer_params = {
"tokenizer": {
"type": "language_identifier",
"identifier": "lingua",
"analyzers": {
"default": {
"tokenizer": "standard"
},
"english_analyzer": { # カスタムアナライザー名
"type": "english"
},
"chinese_analyzer": { # カスタムアナライザー名
"tokenizer": "jieba"
}
},
"mapping": {
"English": "english_analyzer", # 検出出力をカスタム名にマッピング
"Chinese": "chinese_analyzer"
}
}
}
analyzer_paramsを定義した後、コレクションスキーマを定義する際にVARCHARフィールドに適用できます。これにより、Zilliz Cloudは、指定されたアナライザーを使用してそのフィールド内のテキストを効率的にトークン化およびフィルタリング処理できます。詳細については、使用例を参照してください。
例
一般的なシナリオのためのすぐに使用できる構成をいくつか紹介します。各例には構成と検証コードが含まれており、すぐにセットアップをテストできます。
英語と中国語の検出
from pymilvus import MilvusClient
# 構成
analyzer_params = {
"tokenizer": {
"type": "language_identifier",
"identifier": "whatlang",
"analyzers": {
"default": {"tokenizer": "standard"},
"English": {"type": "english"},
"Mandarin": {"tokenizer": "jieba"}
}
}
}
# 構成をテスト
client = MilvusClient(
uri="YOUR_CLUSTER_ENDPOINT",
token="YOUR_CLUSTER_TOKEN"
)
# 英語テキスト
result_en = client.run_analyzer("The Milvus vector database is built for scale!", analyzer_params)
print("English:", result_en)
# 出力:
# English: ['The', 'Milvus', 'vector', 'database', 'is', 'built', 'for', 'scale']
# 中国語テキスト
result_cn = client.run_analyzer("Milvus向量数据库专为大规模应用而设计", analyzer_params)
print("Chinese:", result_cn)
# 出力:
# Chinese: ['Milvus', '向量', '数据', '据库', '数据库', '专', '为', '大规', '规模', '大规模', '应用', '而', '设计']
アクセント正規化付きのヨーロッパ言語
# フランス語、ドイツ語、スペイン語など用の構成
analyzer_params = {
"tokenizer": {
"type": "language_identifier",
"identifier": "lingua",
"analyzers": {
"default": {"tokenizer": "standard"},
"English": {"type": "english"},
"French": {
"tokenizer": "standard",
"filter": ["lowercase", "asciifolding"]
}
}
}
}
# アクセント付きテキストでテスト
result_fr = client.run_analyzer("Café français très délicieux", analyzer_params)
print("French:", result_fr)
# 出力:
# French: ['cafe', 'francais', 'tres', 'delicieux']
使用上の注意
-
フィールドあたり単一言語: 1つの均質なテキスト単位としてフィールドを操作します。これは異なるデータレコード間で異なる言語を処理するように設計されています。たとえば、あるレコードに英語の文が含まれていて、次のレコードにフランス語の文が含まれている場合などです。
-
混合言語文字列なし: 1つの文字列に複数の言語のテキストを含める処理は設計されていません。たとえば、1つの
VARCHARフィールドに英語の文と引用された日本語のフレーズの両方が含まれている場合、1つの言語として処理されます。 -
支配的な言語処理: 混合言語シナリオでは、検出エンジンはおそらく支配的な言語を識別し、対応するアナライザーがテキスト全体に適用されます。これにより、埋め込まれた外国語のトークン化が不適切またはできない結果となります。