语言识别器Compatible with Milvus v2.5.15+

language_identifier 是一个专门的标记符号器,旨在通过自动语言分析过程来增强 Milvus 的文本搜索功能。它的主要功能是检测文本字段的语言,然后动态应用最适合该语言的预配置分析器。这对于处理多种语言的应用程序来说尤为重要,因为它消除了根据每次输入手动分配语言的需要。

通过智能地将文本数据路由到适当的处理管道,language_identifier 可简化多语言数据的摄取,并确保为后续搜索和检索操作提供准确的标记化。

语言检测工作流程

language_identifier 执行一系列步骤来处理文本字符串,这个工作流程对于用户了解如何正确配置至关重要。

Language Detection Workflow 语言检测工作流程

  1. 输入:工作流程以文本字符串作为输入开始。

  2. 语言检测:首先将该字符串传递给语言检测引擎,尝试识别语言。Milvus 支持两种引擎:Whatlanglingua

  3. 分析器选择:

    • 成功:如果语言检测成功,系统会检查检测到的语言名称是否在analyzers 字典中配置了相应的分析器。如果找到匹配,系统就会将指定的分析器应用于输入文本。例如,检测到的 "普通话 "文本将被路由到jieba 标记器。

    • 回退:如果检测失败,或者如果成功检测到一种语言,但您没有为其提供特定的分析器,系统会默认使用预先配置的默认分析器。这是需要说明的关键点;default 分析仪是检测失败和没有匹配分析仪时的后备选择。

选择合适的分析器后,文本将被标记化并处理,从而完成工作流程。

可用的语言检测引擎

Milvus 提供两种语言检测引擎供选择:

选择取决于您应用程序的具体性能和准确性要求。

引擎

速度

精确度

输出格式

最适合

whatlang

快速

适合大多数语言

语言名称(如"English","Mandarin","Japanese")

参考: 支持语言表中的语言栏

速度至关重要的实时应用

lingua

较慢

精度更高,尤其是短文本

英文名称(如"English","Chinese","Japanese")

参考: 支持的语言列表

精度比速度更重要的应用

一个重要的考虑因素是引擎的命名约定。虽然两个引擎都以英文返回语言名称,但它们对某些语言使用不同的术语(例如,whatlang 返回Mandarin ,而lingua 返回Chinese )。分析仪的关键字必须与所选检测引擎返回的名称完全匹配。

配置

要正确使用language_identifier 标记符号生成器,必须采取以下步骤来定义和应用其配置。

第 1 步:选择语言和分析器

设置language_identifier 的核心是根据计划支持的特定语言定制分析器。系统的工作原理是将检测到的语言与正确的分析器相匹配,因此这一步对于准确处理文本至关重要。

下面是推荐的语言与 Milvus 分析器的映射表。该表是连接语言检测引擎输出和最佳工具的桥梁。

语言(检测器输出)

推荐分析器

语言

English

type: english

标准英语标记化,带词干和停止词过滤。

Mandarin (通过 whatlang)或Chinese (通过 lingua)

tokenizer: jieba

针对非空间分隔文本的中文分词。

Japanese

tokenizer: icu

适用于复杂脚本(包括日文)的强大标记化器。

French

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

可处理法语重音和字符的自定义配置。

  • 匹配是关键:分析器的名称必须与检测引擎的语言输出完全匹配。例如,如果使用whatlang ,则中文文本的密钥必须是Mandarin

  • 最佳实践:上表提供了几种常见语言的推荐配置,但并非详尽无遗。有关选择分析仪的更全面指南,请参阅为您的用例选择正确的分析仪

  • 检测器输出:有关检测引擎返回的语言名称的完整列表,请参阅Whatlang 支持的语言表Lingua 支持的语言列表

第 2 步:定义分析器参数

要在 Milvus 中使用language_identifier 标记器,请创建一个包含这些关键组件的字典:

必备组件:

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

    • default - 语言检测失败或找不到匹配分析器时使用的后备分析器

    • 特定语言分析器- 每个分析器定义为<analyzer_name>: <analyzer_config> ,其中:

      • analyzer_name 与您选择的检测引擎输出相匹配(如"English","Japanese" )。

      • analyzer_config 遵循标准分析器参数格式(请参阅分析器概述)

可选组件:

  • identifier - 指定要使用的语言检测引擎(whatlanglingua )。如果未指定,默认为whatlang

  • mapping - 为您的分析器创建自定义别名,允许您使用描述性名称,而不是检测引擎的精确输出格式。

标记器的工作原理是首先检测输入文本的语言,然后从配置中选择合适的分析器。如果检测失败或没有匹配的分析器,它会自动返回到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 后,您可以在定义 Collections Schema 时将它们应用到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 字段将作为单一语言处理。

  • 主导语言处理:在混合语言情况下,检测引擎可能会识别主要语言,并将相应的分析器应用于整个文本。这将导致嵌入的外文文本标记化效果不佳或没有标记化。

想要更快、更简单、更好用的 Milvus SaaS服务 ?

Zilliz Cloud是基于Milvus的全托管向量数据库,拥有更高性能,更易扩展,以及卓越性价比

免费试用 Zilliz Cloud
反馈

此页对您是否有帮助?