語言識別器Compatible with Milvus v2.5.15+
language_identifier 是一個專門的標記器,旨在通過自動化語言分析過程來增強 Milvus 的文本搜索能力。它的主要功能是偵測文字欄位的語言,然後動態套用最適合該語言的預先設定分析器。這對於處理多種語言的應用程式特別有價值,因為它省去了按輸入進行手動語言分配的需要。
透過智慧型地將文字資料路由至適當的處理管道,language_identifier 可簡化多語言資料的擷取,並確保後續搜尋與檢索作業的精確標記化。
語言偵測工作流程
language_identifier 會執行一系列步驟來處理文字串,這個工作流程對於使用者了解如何正確配置是非常重要的。
語言偵測工作流程
輸入:工作流程以文字串作為輸入開始。
語言偵測:首先將此字串傳送到語言偵測引擎,嘗試識別語言。Milvus 支援兩個引擎:Whatlang和lingua。
分析器選擇:
成功:如果成功偵測到語言,系統會檢查偵測到的語言名稱是否在您的
analyzers字典中設定了相對應的分析器。如果找到匹配,系統就會將指定的分析器套用到輸入的文字上。例如,偵測到的 "Mandarin "文字會被路由到jiebatokenizer。回退:如果檢測失敗,或成功檢測到某種語言,但您沒有提供特定的分析器,系統會預設為預先設定的預設分析器。這是需要澄清的關鍵點;
default分析器是偵測失敗或沒有匹配分析器時的備用分析器。
選擇適當的分析器之後,文字會被標記化並加以處理,完成工作流程。
可用的語言偵測引擎
Milvus 提供兩種語言偵測引擎供您選擇:
選擇取決於您應用程式的具體性能和準確性要求。
引擎 |
速度 |
精確度 |
輸出格式 |
最適合 |
|---|---|---|---|---|
|
快速 |
適合大多數語言 |
語言名稱 (例如 參考: 支援語言表中的語言列 |
速度極為重要的即時應用程式 |
|
較慢 |
精確度較高,尤其是短篇文字 |
英文名稱 (例如 參考: 支援的語言清單 |
精確度比速度更重要的應用程式 |
一個重要的考慮因素是引擎的命名慣例。雖然兩個引擎都會以英文傳回語言名稱,但它們對某些語言使用不同的術語 (例如whatlang 會傳回Mandarin ,而lingua 會傳回Chinese)。分析器的關鍵字必須完全符合所選偵測引擎所傳回的名稱。
設定
要正確使用language_identifier tokenizer,必須採取下列步驟來定義和套用其設定。
步驟 1:選擇語言和分析器
設定language_identifier 的核心是針對您計劃支援的特定語言量身打造您的分析器。系統的運作方式是將偵測到的語言與正確的分析器相匹配,因此這一步對於精確的文字處理是非常重要的。
以下是推薦的語言與合適的 Milvus 分析器的對應表。此表可作為語言偵測引擎輸出與最佳工具之間的橋梁。
語言 (偵測器輸出) |
推薦分析器 |
說明 |
|---|---|---|
|
|
標準英語標記化,含詞幹和停止詞過濾。 |
|
|
針對非空間分隔文字的中文分詞。 |
|
|
適用於複雜文字的強大標記器,包括日文。 |
|
|
可處理法語重音和字符的自訂配置。 |
匹配是關鍵:您的分析器名稱必須完全符合偵測引擎的語言輸出。例如,如果您使用
whatlang,則中文文本的關鍵必須是Mandarin。最佳實務:上表提供了幾種常見語言的建議配置,但並非詳盡無遺的清單。如需更全面的分析儀選擇指南,請參閱Choose the Right Analyzer for Your Use Case。
偵測器輸出:如需檢測引擎傳回的完整語言名稱清單,請參閱Whatlang 支援的語言表和Lingua 支援的語言清單。
步驟 2:定義 analyzer_params
要在 Milvus 中使用language_identifier tokenizer,請建立一個包含這些關鍵元件的字典:
必需的元件:
analyzersconfig set - 包含所有分析器配置的字典,其中必須包括:default- 當語言偵測失敗或找不到匹配的分析器時使用的後備分析器特定語言的分析器- 每個都定義為
<analyzer_name>: <analyzer_config>,其中:analyzer_name符合您選擇的偵測引擎輸出 (例如"English","Japanese")analyzer_config遵循標準分析器參數格式 (請參閱分析器概述)
可選元件:
identifier- 指定要使用的語言偵測引擎 (whatlang或lingua)。如果未指定,則預設為whatlangmapping- 為您的分析器建立自訂別名,允許您使用描述性名稱,而非偵測引擎的確切輸出格式
tokenizer 的工作方式是先偵測輸入文字的語言,然後從您的設定中選擇適當的分析器。如果檢測失敗或不存在匹配的分析器,它會自動返回到您的default 分析器。
建議使用:直接名稱匹配
您的分析器名稱應該與您選擇的語言偵測引擎輸出完全匹配。這種方法比較簡單,而且可以避免潛在的混淆。
對於whatlang 和lingua ,請使用各自文件中顯示的語言名稱:
whatlang 支援的語言(使用「語言」欄)
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欄位同時包含英文句子和引述的日文詞組,將被視為單一語言處理。主要語言處理:在混合語言的情況下,偵測引擎很可能會識別主要語言,並將相應的分析器套用至整個文字。這將導致內嵌外文的標記化效果不佳或根本沒有標記化。