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

language_identifier 是一個專門的標記器,旨在通過自動化語言分析過程來增強 Milvus 的文本搜索能力。它的主要功能是偵測文字欄位的語言,然後動態套用最適合該語言的預先設定分析器。這對於處理多種語言的應用程式特別有價值,因為它省去了按輸入進行手動語言分配的需要。

透過智慧型地將文字資料路由至適當的處理管道,language_identifier 可簡化多語言資料的擷取,並確保後續搜尋與檢索作業的精確標記化。

語言偵測工作流程

language_identifier 會執行一系列步驟來處理文字串,這個工作流程對於使用者了解如何正確配置是非常重要的。

Language Detection Workflow 語言偵測工作流程

  1. 輸入:工作流程以文字串作為輸入開始。

  2. 語言偵測:首先將此字串傳送到語言偵測引擎,嘗試識別語言。Milvus 支援兩個引擎:Whatlanglingua

  3. 分析器選擇:

    • 成功:如果成功偵測到語言,系統會檢查偵測到的語言名稱是否在您的analyzers 字典中設定了相對應的分析器。如果找到匹配,系統就會將指定的分析器套用到輸入的文字上。例如,偵測到的 "Mandarin "文字會被路由到jieba tokenizer。

    • 回退:如果檢測失敗,或成功檢測到某種語言,但您沒有提供特定的分析器,系統會預設為預先設定的預設分析器。這是需要澄清的關鍵點;default 分析器是偵測失敗或沒有匹配分析器時的備用分析器。

選擇適當的分析器之後,文字會被標記化並加以處理,完成工作流程。

可用的語言偵測引擎

Milvus 提供兩種語言偵測引擎供您選擇:

選擇取決於您應用程式的具體性能和準確性要求。

引擎

速度

精確度

輸出格式

最適合

whatlang

快速

適合大多數語言

語言名稱 (例如"English","Mandarin","Japanese")

參考: 支援語言表中的語言列

速度極為重要的即時應用程式

lingua

較慢

精確度較高,尤其是短篇文字

英文名稱 (例如"English","Chinese","Japanese")

參考: 支援的語言清單

精確度比速度更重要的應用程式

一個重要的考慮因素是引擎的命名慣例。雖然兩個引擎都會以英文傳回語言名稱,但它們對某些語言使用不同的術語 (例如whatlang 會傳回Mandarin ,而lingua 會傳回Chinese)。分析器的關鍵字必須完全符合所選偵測引擎所傳回的名稱。

設定

要正確使用language_identifier tokenizer,必須採取下列步驟來定義和套用其設定。

步驟 1:選擇語言和分析器

設定language_identifier 的核心是針對您計劃支援的特定語言量身打造您的分析器。系統的運作方式是將偵測到的語言與正確的分析器相匹配,因此這一步對於精確的文字處理是非常重要的。

以下是推薦的語言與合適的 Milvus 分析器的對應表。此表可作為語言偵測引擎輸出與最佳工具之間的橋梁。

語言 (偵測器輸出)

推薦分析器

說明

English

type: english

標準英語標記化,含詞幹和停止詞過濾。

Mandarin (via whatlang) 或Chinese (via lingua)

tokenizer: jieba

針對非空間分隔文字的中文分詞。

Japanese

tokenizer: icu

適用於複雜文字的強大標記器,包括日文。

French

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

可處理法語重音和字符的自訂配置。

  • 匹配是關鍵:您的分析器名稱必須完全符合偵測引擎的語言輸出。例如,如果您使用whatlang ,則中文文本的關鍵必須是Mandarin

  • 最佳實務:上表提供了幾種常見語言的建議配置,但並非詳盡無遺的清單。如需更全面的分析儀選擇指南,請參閱Choose the Right Analyzer for Your Use Case

  • 偵測器輸出:如需檢測引擎傳回的完整語言名稱清單,請參閱Whatlang 支援的語言表Lingua 支援的語言清單

步驟 2:定義 analyzer_params

要在 Milvus 中使用language_identifier tokenizer,請建立一個包含這些關鍵元件的字典:

必需的元件:

  • analyzers config set - 包含所有分析器配置的字典,其中必須包括:

    • default - 當語言偵測失敗或找不到匹配的分析器時使用的後備分析器

    • 特定語言的分析器- 每個都定義為<analyzer_name>: <analyzer_config> ,其中:

      • analyzer_name 符合您選擇的偵測引擎輸出 (例如"English","Japanese")

      • analyzer_config 遵循標準分析器參數格式 (請參閱分析器概述)

可選元件:

  • identifier - 指定要使用的語言偵測引擎 (whatlanglingua)。如果未指定,則預設為whatlang

  • mapping - 為您的分析器建立自訂別名,允許您使用描述性名稱,而非偵測引擎的確切輸出格式

tokenizer 的工作方式是先偵測輸入文字的語言,然後從您的設定中選擇適當的分析器。如果檢測失敗或不存在匹配的分析器,它會自動返回到您的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 欄位同時包含英文句子和引述的日文詞組,將被視為單一語言處理。

  • 主要語言處理:在混合語言的情況下,偵測引擎很可能會識別主要語言,並將相應的分析器套用至整個文字。這將導致內嵌外文的標記化效果不佳或根本沒有標記化。