Identificador lingüísticoCompatible with Milvus v2.5.15+

language_identifier es un tokenizador especializado diseñado para mejorar las capacidades de búsqueda de texto de Milvus automatizando el proceso de análisis del idioma. Su función principal es detectar el idioma de un campo de texto y, a continuación, aplicar dinámicamente un analizador preconfigurado que sea el más adecuado para ese idioma. Esto es especialmente valioso para las aplicaciones que manejan varios idiomas, ya que elimina la necesidad de asignar manualmente un idioma a cada entrada.

Al dirigir de forma inteligente los datos de texto al proceso de procesamiento adecuado, language_identifier agiliza la entrada de datos multilingües y garantiza una tokenización precisa para las posteriores operaciones de búsqueda y recuperación.

Flujo de trabajo de detección de idiomas

language_identifier realiza una serie de pasos para procesar una cadena de texto, un flujo de trabajo que es fundamental para que los usuarios comprendan cómo configurarlo correctamente.

Language Detection Workflow Flujo de trabajo de detección de idioma

  1. Entrada: El flujo de trabajo comienza con una cadena de texto como entrada.

  2. Detección del idioma: Esta cadena se pasa primero a un motor de detección de idioma, que intenta identificar el idioma. Milvus admite dos motores: whatlang y lingua.

  3. Selección del analizador:

    • Éxito: Si el idioma se detecta correctamente, el sistema comprueba si el nombre del idioma detectado tiene un analizador correspondiente configurado en su diccionario analyzers. Si se encuentra una coincidencia, el sistema aplica el analizador especificado al texto de entrada. Por ejemplo, un texto "mandarín" detectado se enviaría a un tokenizador jieba.

    • Fallback: Si la detección falla, o si se detecta correctamente un idioma pero no se ha proporcionado un analizador específico para él, el sistema utiliza por defecto un analizador preconfigurado. Este es un punto crucial de aclaración; el analizador default es una alternativa tanto para el fallo de detección como para la ausencia de un analizador adecuado.

Una vez elegido el analizador adecuado, el texto se tokeniza y se procesa, completando así el flujo de trabajo.

Motores de detección de idiomas disponibles

Milvus permite elegir entre dos motores de detección de idiomas:

La selección depende de los requisitos específicos de rendimiento y precisión de su aplicación.

Motor

Velocidad

Precisión

Formato de salida

Lo mejor para

whatlang

Rápido

Bueno para la mayoría de los idiomas

Nombres de idiomas (por ejemplo, "English", "Mandarin", "Japanese")

Referencia: Columna de idiomas en la tabla de idiomas admitidos

Aplicaciones en tiempo real donde la velocidad es crítica

lingua

Más lento

Mayor precisión, especialmente para textos cortos

Nombres en inglés (por ejemplo, "English", "Chinese", "Japanese")

Referencia: Lista de idiomas admitidos

Aplicaciones en las que la precisión es más importante que la velocidad

Una consideración crítica es la convención de nomenclatura del motor. Aunque ambos motores devuelven nombres de idiomas en inglés, utilizan términos diferentes para algunos idiomas (por ejemplo, whatlang devuelve Mandarin, mientras que lingua devuelve Chinese). La clave del analizador debe coincidir exactamente con el nombre devuelto por el motor de detección elegido.

Configuración

Para utilizar correctamente el tokenizador language_identifier, es necesario seguir los siguientes pasos para definir y aplicar su configuración.

Paso 1: Elija sus idiomas y analizadores

El núcleo de la configuración de language_identifier consiste en adaptar sus analizadores a los idiomas específicos que tiene previsto admitir. El sistema funciona emparejando el idioma detectado con el analizador correcto, por lo que este paso es crucial para un procesamiento de texto preciso.

A continuación se recomienda la asignación de idiomas a los analizadores Milvus adecuados. Esta tabla sirve de puente entre la salida del motor de detección de idiomas y la mejor herramienta para el trabajo.

Idioma (salida del detector)

Analizador recomendado

Descripción

English

type: english

Tokenización del inglés estándar con stemming y filtrado de palabras vacías.

Mandarin (vía whatlang) o Chinese (vía lingua)

tokenizer: jieba

Segmentación de palabras chinas para texto no delimitado por espacios.

Japanese

tokenizer: icu

Un tokenizador robusto para alfabetos complejos, incluido el japonés.

French

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

Configuración personalizada para acentos y caracteres franceses.

  • La concordancia es clave: El nombre de su analizador debe coincidir exactamente con el idioma de salida del motor de detección. Por ejemplo, si utiliza whatlang, la clave para el texto chino debe ser Mandarin.

  • Mejores prácticas: La tabla anterior proporciona configuraciones recomendadas para algunos idiomas comunes, pero no es una lista exhaustiva. Para obtener una guía más completa sobre la elección de analizadores, consulte Elija el analizador adecuado para su caso de uso.

  • Salida del detector: Para obtener una lista completa de los nombres de los idiomas devueltos por los motores de detección, consulte la tabla de idiomas compatibles con Whatlang y la lista de idiomas compatibles con Lingua.

Paso 2: Definir analyzer_params

Para utilizar el tokenizador language_identifier en Milvus, cree un diccionario que contenga estos componentes clave:

Componentes obligatorios:

  • analyzers config set - Un diccionario que contiene todas las configuraciones del analizador, que deben incluir:

    • default - El analizador de reserva utilizado cuando falla la detección del idioma o no se encuentra ningún analizador coincidente.

    • Analizadores específicos de idioma - Cada uno definido como <analyzer_name>: <analyzer_config>, donde:

      • analyzer_name coincide con la salida del motor de detección elegido (por ejemplo, "English", "Japanese")

      • analyzer_config sigue el formato estándar de los parámetros del analizador (véase Descripción general del analizador)

Componentes opcionales:

  • identifier - Especifica qué motor de detección de idiomas se va a utilizar (whatlang o lingua). Si no se especifica, el valor predeterminado es whatlang

  • mapping - Crea alias personalizados para sus analizadores, lo que le permite utilizar nombres descriptivos en lugar del formato de salida exacto del motor de detección.

El tokenizador funciona detectando primero el idioma del texto de entrada y, a continuación, seleccionando el analizador adecuado de su configuración. Si la detección falla o no existe ningún analizador que coincida, automáticamente vuelve a su analizador default.

Los nombres de los analizadores deben coincidir exactamente con la salida del motor de detección de idiomas elegido. Este método es más sencillo y evita posibles confusiones.

Tanto para whatlang como para lingua, utilice los nombres de idioma que aparecen en sus respectivas documentaciones:

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

Enfoque alternativo: Nombres personalizados con mapeo

Si prefiere utilizar nombres de analizadores personalizados o necesita mantener la compatibilidad con configuraciones existentes, puede utilizar el parámetro mapping. De este modo, se crean alias para los analizadores, y funcionarán tanto los nombres originales del motor de detección como los nombres personalizados.

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

Después de definir analyzer_params, puede aplicarlos a un campo VARCHAR cuando defina un esquema de colección. Esto permite a Milvus procesar el texto de ese campo utilizando el analizador especificado para una tokenización y filtrado eficientes. Para más detalles, consulte Ejemplo de uso.

Ejemplos

Aquí hay algunas configuraciones listas para usar en escenarios comunes. Cada ejemplo incluye tanto la configuración como el código de verificación para que pueda probar la configuración inmediatamente.

Detección de inglés y chino

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 europeos con normalización 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 uso

  • Un solo idioma por campo: Opera sobre un campo como una unidad de texto única y homogénea. Está diseñado para manejar diferentes idiomas en diferentes registros de datos, como por ejemplo un registro que contenga una frase en inglés y el siguiente una frase en francés.

  • No admite cadenas de texto en varios idiomas: No está diseñado para manejar una única cadena que contenga texto de varias lenguas. Por ejemplo, un único campo VARCHAR que contenga tanto una frase en inglés como una frase entrecomillada en japonés se procesará como una única lengua.

  • Procesamiento de la lengua dominante: En los casos de mezcla de idiomas, es probable que el motor de detección identifique el idioma dominante y aplique el analizador correspondiente a todo el texto. El resultado será una tokenización deficiente o nula del texto extranjero incrustado.