メインコンテンツまでスキップ
バージョン: User Guides (Cloud)

アナライザー概要

テキスト処理において、アナライザーは生のテキストを構造化された検索可能な形式に変換する重要なコンポーネントです。各アナライザーは通常、2つのコア要素から構成されます:トークナイザーフィルター。これらは一緒に、入力テキストをトークンに変換し、これらのトークンを洗練させて、効率的なインデックス作成と検索の準備を行います。

Zilliz Cloudでは、アナライザーはコレクション作成時にVARCHARフィールドをコレクションスキーマに追加する際に設定されます。アナライザーによって生成されたトークンは、キーワード一致用のインデックス構築に使用したり、全文検索用のスパース埋め込みに変換できます。詳細については、全文検索またはテキストマッチを参照してください。

📘注意

アナライザーの使用はパフォーマンスに影響を与える可能性があります:

  • 全文検索: 全文検索では、DataNodeQueryNodeチャンネルがトークナイズが完了するのを待つ必要があるため、データ消費がより遅くなります。その結果、 newly取り込まれたデータが検索可能になるまでに時間がかかります。

  • キーワードマッチ: キーワードマッチでは、インデックス作成はトークナイズが完了してインデックスを構築できるようになるまで遅くなります。

アナライザーの構造

Zilliz Cloudのアナライザーは、正確に1つのトークナイザー0個以上のフィルターで構成されています。

  • トークナイザー: トークナイザーは、入力テキストをトークンと呼ばれる離散単位に分解します。これらのトークンは、トークナイザーの種類に応じて単語や語句になります。

  • フィルター: フィルターは、トークンをさらに洗練するために適用され、たとえば小文字に変換したり、一般的な単語を削除したりできます。

📘注意

トークナイザーはUTF-8形式のみをサポートします。他の形式のサポートは将来のリリースで追加される予定です。

以下は、アナライザーがテキストを処理するワークフローを示しています。

Ke6jw8437hjR8hbZCvEcQtIIn1e

アナライザーの種類

Zilliz Cloudは、異なるテキスト処理ニーズを満たすために2種類のアナライザーを提供します:

  • 組み込みアナライザー: これらは一般的なテキスト処理作業をカバーするための事前定義された構成で、最小限のセットアップで済みます。組み込みアナライザーは、特殊な構成を必要としない一般的な検索に最適です。

  • カスタムアナライザー: より高度な要件向けに、カスタムアナライザーでは、トークナイザーと0個以上のフィルターを指定して独自の構成を定義できます。このレベルのカスタマイズは、テキスト処理の正確な制御が必要な特殊なケースで特に役立ちます。

📘注意
  • コレクション作成時にアナライザー構成を省略すると、Zilliz Cloudはすべてのテキスト処理にデフォルトでstandardアナライザーを使用します。詳細については、Standardを参照してください。

  • 最適な検索およびクエリのパフォーマンスを得るには、テキストデータの言語に合ったアナライザーを選択することをお勧めします。たとえば、standardアナライザーは多用途に使用できますが、中国語、日本語、韓国語などの独特な文法構造を持つ言語には最適ではない場合があります。このような場合は、chineseなどの言語固有のアナライザー、または特殊なトークナイザー(linderaicuなど)とフィルターを備えたカスタムアナライザーを使用することを強く推奨します。

組み込みアナライザー

Zilliz Cloudクラスタの組み込みアナライザーは、特定のトークナイザーとフィルターで事前構成されており、これらのコンポーネントを自分で定義する必要なくすぐに使用できます。各組み込みアナライザーは、事前設定されたトークナイザーとフィルターを含むテンプレートとして機能し、カスタマイズ用のオプションパラメーターが含まれます。

たとえば、standard組み込みアナライザーを使用するには、単にその名前standardtypeとして指定し、オプションでこのアナライザー種別固有の追加構成(stop_wordsなど)を含めます:

analyzer_params = {
"type": "standard", # 標準組み込みアナライザーを使用
"stop_words": ["a", "an", "for"] # トークナイズから除外する一般単語(ストップワード)のリストを定義
}

アナライザーの実行結果を確認するには、run_analyzerメソッドを使用します:

# 分析するサンプルテキスト
text = "An efficient system relies on a robust analyzer to correctly process text for various applications."

# アナライザーを実行
result = client.run_analyzer(
text,
analyzer_params
)

出力は以下のようになります:

['efficient', 'system', 'relies', 'on', 'robust', 'analyzer', 'to', 'correctly', 'process', 'text', 'various', 'applications']

これは、アナライザーが入力テキストを正しくトークナイズし、ストップワード"a""an"、および"for"をフィルター処理して、残りの意味のあるトークンを返していることを示しています。

上記のstandard組み込みアナライザーの構成は、カスタムアナライザーを以下のようにパラメーター設定した場合と同等です。tokenizerfilterオプションが明示的に定義され、同様の機能を実現しています:

analyzer_params = {
"tokenizer": "standard",
"filter": [
"lowercase",
{
"type": "stop",
"stop_words": ["a", "an", "for"]
}
]
}

Zilliz Cloudは、以下の組み込みアナライザーを提供しており、それぞれ特定のテキスト処理ニーズに合わせて設計されています:

  • standard: 一般的なテキスト処理に適しており、標準的なトークナイズと小文字フィルタリングを適用。

  • english: 英語テキストに最適化されており、英語のストップワードをサポート。

  • chinese: 中国語テキスト処理に特化し、中国語の言語構造に適したトークナイズを含む。

カスタムアナライザー

高度なテキスト処理では、Zilliz Cloudのカスタムアナライザーにより、トークナイザーフィルターを指定することで、カスタマイズされたテキスト処理パイプラインを構築できます。このセットアップは、正確な制御が必要な特殊なケースに理想的です。

トークナイザー

トークナイザーはカスタムアナライザーに必須のコンポーネントであり、アナライザーのパイプラインを開始して入力テキストを離散単位またはトークンに分解します。トークナイズは、空白や句読点による分割などの特定のルールに従います。このプロセスにより、各単語や語句のより正確で独立した処理が可能になります。

たとえば、トークナイザーはテキスト"Vector Database Built for Scale"を個別のトークンに変換します:

["Vector", "Database", "Built", "for", "Scale"]

トークナイザーの指定例:

analyzer_params = {
"tokenizer": "whitespace",
}

フィルター

フィルターはトークナイザーが生成したトークンに対して、必要に応じて変換または洗練を行うオプションコンポーネントです。たとえば、lowercaseフィルターをトークン化された語句["Vector", "Database", "Built", "for", "Scale"]に適用すると、結果は以下のようになります:

["vector", "database", "built", "for", "scale"]

カスタムアナライザーのフィルターは、構成の必要に応じて組み込みまたはカスタムのいずれかです。

  • 組み込みフィルター: Zilliz Cloudによって事前構成され、最小限のセットアップで済みます。これらのフィルターは名前を指定するだけでそのまま使用できます。以下のフィルターは使用可能な組み込みフィルターです:

    • lowercase: テキストを小文字に変換し、大文字小文字を区別しないマッチングを保証。詳細については、Lowercaseを参照。

    • asciifolding: 非ASCII文字をASCII相当に変換し、多言語テキスト処理を簡素化。詳細については、ASCII foldingを参照。

    • alphanumonly: 他の文字を削除して英数字のみを保持。詳細については、Alphanumonlyを参照。

    • cnalphanumonly: 中国語文字、英語の文字、または数字以外の文字を含むトークンを削除。詳細については、Cnalphanumonlyを参照。

    • cncharonly: 非中国語文字を含むトークンを削除。詳細については、Cncharonlyを参照。

    組み込みフィルター使用例:

    analyzer_params = {
    "tokenizer": "standard", # 必須: トークナイザーを指定
    "filter": ["lowercase"], # オプション: テキストを小文字に変換する組み込みフィルター
    }
  • カスタムフィルター: カスタムフィルターにより特別な構成が可能になります。有効なフィルター種類(filter.type)を選択し、各フィルター種類に特定の設定を追加することで、カスタムフィルターを定義できます。カスタマイズをサポートするフィルター種類の例:

    • stop: ストップワードのリスト(例:"stop_words": ["of", "to"])を設定して指定された一般単語を削除。詳細については、Stopを参照。

    • length: 最大トークン長などの長さ基準に基づいてトークンを除外。詳細については、Lengthを参照。

    • stemmer: より柔軟なマッチングのために単語をルート形式に縮小。詳細については、Stemmerを参照。

    カスタムフィルター構成例:

    analyzer_params = {
    "tokenizer": "standard", # 必須: トークナイザーを指定
    "filter": [
    {
    "type": "stop", # フィルター種類として'stop'を指定
    "stop_words": ["of", "to"], # このフィルター種類のストップワードをカスタマイズ
    }
    ]
    }

使用例

この例では、以下の要素を含むコレクションスキーマを作成します:

  • 埋め込み用のベクトルフィールド。

  • テキスト処理用の2つのVARCHARフィールド:

    • 一方のフィールドは組み込みアナライザーを使用。

    • もう一方のフィールドはカスタムアナライザーを使用。

これらの構成をコレクションに組み込む前に、run_analyzerメソッドを使用して各アナライザーを検証します。

ステップ1: MilvusClientを初期化し、スキーマを作成

まず、Milvusクライアントを設定して新しいスキーマを作成します。

from pymilvus import MilvusClient, DataType

# Milvusクライアントを設定
client = MilvusClient(
uri="YOUR_CLUSTER_ENDPOINT"
token="YOUR_CLUSTER_TOKEN"
)

# 新しいスキーマを作成
schema = client.create_schema(auto_id=True, enable_dynamic_field=False)

ステップ2: アナライザー構成を定義および検証

  1. 組み込みアナライザーenglishの構成と検証

    • 構成:組み込み英語アナライザーのアナライザー パラメーターを定義。

    • 検証run_analyzerを使用して、構成が期待されるトークナイズを生成するかを確認。

    # 英語テキスト処理用の組み込みアナライザー構成
    analyzer_params_built_in = {
    "type": "english"
    }
    # 組み込みアナライザー構成の検証
    sample_text = "Milvus simplifies text analysis for search."
    result = client.run_analyzer(sample_text, analyzer_params_built_in)
    print("Built-in analyzer output:", result)

    # 期待する出力:
    # Built-in analyzer output: ['milvus', 'simplifi', 'text', 'analysi', 'search']
  2. カスタムアナライザーの構成と検証

    • 構成:標準トークナイザーとカスタムフィルターを含むカスタムアナライザー構成。

    • 検証run_analyzerを使用して、カスタム構成が意図した通りにテキスト処理を行うことを確認。

    # 標準トークナイザーとカスタムフィルターを含むカスタムアナライザー構成
    analyzer_params_custom = {
    "tokenizer": "standard",
    "filter": [
    "lowercase", # 組み込みフィルター: トークンを小文字に変換
    {
    "type": "length", # カスタムフィルター: トークン長を制限
    "max": 40
    },
    {
    "type": "stop", # カスタムフィルター: 指定されたストップワードを削除
    "stop_words": ["of", "for"]
    }
    ]
    }

    # カスタムアナライザー構成を検証
    sample_text = "Milvus provides flexible, customizable analyzers for robust text processing."
    result = client.run_analyzer(sample_text, analyzer_params_custom)
    print("Custom analyzer output:", result)

    # 期待する出力:
    # Custom analyzer output: ['milvus', 'provides', 'flexible', 'customizable', 'analyzers', 'robust', 'text', 'processing']

ステップ3: スキーマフィールドにアナライザーを追加

アナライザー構成を検証したので、スキーマフィールドに追加します:

# 組み込みアナライザー構成を使用するVARCHARフィールド'title_en'を追加
schema.add_field(
field_name='title_en',
datatype=DataType.VARCHAR,
max_length=1000,
enable_analyzer=True,
analyzer_params=analyzer_params_built_in,
enable_match=True,
)

# カスタムアナライザー構成を使用するVARCHARフィールド'title'を追加
schema.add_field(
field_name='title',
datatype=DataType.VARCHAR,
max_length=1000,
enable_analyzer=True,
analyzer_params=analyzer_params_custom,
enable_match=True,
)

# 埋め込み用のベクトルフィールドを追加
schema.add_field(field_name="embedding", datatype=DataType.FLOAT_VECTOR, dim=3)

# 主キー用フィールドを追加
schema.add_field(field_name="id", datatype=DataType.INT64, is_primary=True)

ステップ4: インデックスパラメーターを準備し、コレクションを作成

# ベクトルフィールドのインデックスパラメーターを設定
index_params = client.prepare_index_params()
index_params.add_index(field_name="embedding", metric_type="COSINE", index_type="AUTOINDEX")

# 定義されたスキーマとインデックスパラメーターでコレクションを作成
client.create_collection(
collection_name="my_collection",
schema=schema,
index_params=index_params
)

Zilliz Cloudコンソールでの使用例

Zilliz Cloudコンソールを使用して上記の操作を実行することもできます。詳細については、以下のデモを再生してください。

次のステップ

アナライザーを構成する際には、以下のベストプラクティス記事を読むことを推奨します。使用事例に最も適した構成を決定できます:

アナライザーを構成した後は、Zilliz Cloudが提供するテキスト検索機能と統合できます。詳細については: