Identificador de idiomaCompatible with Milvus v2.5.15+

O language_identifier é um tokenizador especializado concebido para melhorar as capacidades de pesquisa de texto do Milvus, automatizando o processo de análise linguística. A sua principal função é detetar o idioma de um campo de texto e, em seguida, aplicar dinamicamente um analisador pré-configurado que seja mais adequado para esse idioma. Isto é particularmente valioso para as aplicações que lidam com uma variedade de idiomas, uma vez que elimina a necessidade de atribuição manual de idioma numa base por entrada.

Ao encaminhar de forma inteligente os dados de texto para o pipeline de processamento adequado, o language_identifier simplifica a ingestão de dados multilingues e garante uma tokenização precisa para operações de pesquisa e recuperação subsequentes.

Fluxo de trabalho de deteção de idiomas

O language_identifier executa uma série de passos para processar uma cadeia de texto, um fluxo de trabalho que é fundamental para que os utilizadores compreendam como configurá-lo corretamente.

Language Detection Workflow Fluxo de trabalho de deteção de idioma

  1. Entrada: O fluxo de trabalho começa com uma cadeia de texto como entrada.

  2. Deteção de idioma: Esta cadeia é primeiro passada para um motor de deteção de língua, que tenta identificar a língua. O Milvus suporta dois motores: whatlang e lingua.

  3. Seleção do analisador:

    • Sucesso: Se o idioma for detectado com sucesso, o sistema verifica se o nome do idioma detectado tem um analisador correspondente configurado no seu dicionário analyzers. Se for encontrada uma correspondência, o sistema aplica o analisador especificado ao texto de entrada. Por exemplo, um texto "Mandarim" detectado seria encaminhado para um tokenizador jieba.

    • Recuo: Se a deteção falhar, ou se um idioma for detectado com sucesso mas não tiver fornecido um analisador específico para o mesmo, o sistema utiliza por defeito um analisador predefinido pré-configurado. Este é um ponto crucial de esclarecimento; o analisador default é uma alternativa tanto para a falha de deteção como para a ausência de um analisador correspondente.

Depois de selecionado o analisador adequado, o texto é marcado e processado, completando o fluxo de trabalho.

Motores de deteção de idiomas disponíveis

O Milvus oferece uma escolha entre dois motores de deteção de idiomas:

A seleção depende dos requisitos específicos de desempenho e precisão da sua aplicação.

Motor

Velocidade

Precisão

Formato de saída

Melhor para

whatlang

Rápido

Bom para a maioria dos idiomas

Nomes de línguas (por exemplo, "English", "Mandarin", "Japanese")

Referência: Coluna Idioma na tabela de idiomas suportados

Aplicações em tempo real em que a velocidade é crítica

lingua

Mais lento

Maior precisão, especialmente para textos curtos

Nomes em inglês (por exemplo, "English", "Chinese", "Japanese")

Referência: Lista de línguas suportadas

Aplicações em que a precisão é mais importante do que a velocidade

Uma consideração crítica é a convenção de nomes do motor. Embora ambos os mecanismos retornem nomes de idiomas em inglês, eles usam termos diferentes para alguns idiomas (por exemplo, whatlang retorna Mandarin, enquanto lingua retorna Chinese). A chave do analisador deve corresponder exatamente ao nome apresentado pelo motor de deteção escolhido.

Configuração

Para usar corretamente o tokenizador language_identifier, as etapas a seguir devem ser seguidas para definir e aplicar sua configuração.

Etapa 1: Escolha seus idiomas e analisadores

O núcleo da configuração do language_identifier é adaptar seus analisadores aos idiomas específicos que você planeja suportar. O sistema funciona fazendo corresponder a língua detectada ao analisador correto, pelo que este passo é crucial para um processamento de texto preciso.

Abaixo está um mapeamento recomendado de idiomas para analisadores Milvus adequados. Esta tabela serve de ponte entre a saída do motor de deteção de línguas e a melhor ferramenta para o trabalho.

Língua (saída do detetor)

Analisador recomendado

Descrição

English

type: english

Tokenização de inglês padrão com filtragem de palavras-chave e palavras de paragem.

Mandarin (via whatlang) ou Chinese (via lingua)

tokenizer: jieba

Segmentação de palavras em chinês para texto não delimitado por espaço.

Japanese

tokenizer: icu

Um tokenizador robusto para scripts complexos, incluindo japonês.

French

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

Uma configuração personalizada que lida com acentos e caracteres franceses.

  • A correspondência é fundamental: O nome do seu analisador deve corresponder exatamente ao idioma de saída do motor de deteção. Por exemplo, se estiver a utilizar whatlang, a chave para o texto chinês deve ser Mandarin.

  • Práticas recomendadas: A tabela acima fornece as configurações recomendadas para alguns idiomas comuns, mas não é uma lista exaustiva. Para obter um guia mais abrangente sobre a escolha de analisadores, consulte Escolha o analisador certo para o seu caso de uso.

  • Saída do detetor: Para obter uma lista completa de nomes de idiomas retornados pelos mecanismos de deteção, consulte a tabela de idiomas suportados pelo Whatlang e a lista de idiomas suportados pelo Lingua.

Etapa 2: Definir analyzer_params

Para usar o tokenizador language_identifier no Milvus, crie um dicionário que contenha estes componentes-chave:

Componentes necessários:

  • analyzers config set - Um dicionário que contém todas as configurações do analisador, que devem incluir:

    • default - O analisador de recurso utilizado quando a deteção de idioma falha ou não é encontrado nenhum analisador correspondente

    • Analisadores de idiomas específicos - Cada um definido como <analyzer_name>: <analyzer_config>, onde:

      • analyzer_name corresponde à saída do motor de deteção escolhido (por exemplo, "English", "Japanese")

      • analyzer_config segue o formato padrão dos parâmetros do analisador (ver Visão geral do analisador)

Componentes opcionais:

  • identifier - Especifica o motor de deteção de línguas a utilizar (whatlang ou lingua). A predefinição é whatlang se não for especificado

  • mapping - Cria aliases personalizados para seus analisadores, permitindo que você use nomes descritivos em vez do formato de saída exato do mecanismo de deteção

O tokenizador funciona detectando primeiro o idioma do texto de entrada e, em seguida, selecionando o analisador apropriado da sua configuração. Se a deteção falhar ou se não existir um analisador correspondente, ele volta automaticamente para o analisador default.

Os nomes dos seus analisadores devem corresponder exatamente ao resultado do motor de deteção de idiomas escolhido. Esta abordagem é mais simples e evita potenciais confusões.

Tanto para whatlang como para lingua, utilize os nomes das línguas tal como são mostrados na respectiva documentação:

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"
            }
        }
    }
}

Abordagem alternativa: Nomes personalizados com mapeamento

Se preferir utilizar nomes de analisadores personalizados ou precisar de manter a compatibilidade com as configurações existentes, pode utilizar o parâmetro mapping. Isto cria aliases para os seus analisadores - tanto os nomes originais do motor de deteção como os seus nomes personalizados funcionarão.

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"
        }
    }
}

Depois de definir analyzer_params, pode aplicá-los a um campo VARCHAR ao definir um esquema de coleção. Isso permite que o Milvus processe o texto nesse campo usando o analisador especificado para tokenização e filtragem eficientes. Para mais pormenores, consulte Exemplo de utilização.

Exemplos de utilização

Aqui estão algumas configurações prontas para uso em cenários comuns. Cada exemplo inclui a configuração e o código de verificação para que possa testar a configuração imediatamente.

Deteção de inglês e chinês

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', '向量', '数据', '据库', '数据库', '专', '为', '大规', '规模', '大规模', '应用', '而', '设计']

Idiomas europeus com normalização de acentos

# 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']

Notas de utilização

  • Idioma único por campo: Funciona num campo como uma unidade de texto única e homogénea. Foi concebido para lidar com diferentes línguas em diferentes registos de dados, como por exemplo, um registo que contenha uma frase em inglês e o seguinte que contenha uma frase em francês.

  • Não há cadeias de línguas mistas: Não foi concebido para tratar uma única cadeia que contenha texto de várias línguas. Por exemplo, um único campo VARCHAR que contenha uma frase em inglês e uma frase em japonês entre aspas será processado como um único idioma.

  • Processamento da língua dominante: Em cenários de línguas mistas, o motor de deteção irá provavelmente identificar a língua dominante e o analisador correspondente será aplicado a todo o texto. Isto resultará numa fraca ou nenhuma tokenização do texto estrangeiro incorporado.