Identificatore di linguaCompatible with Milvus v2.5.15+

language_identifier è un tokenizzatore specializzato progettato per migliorare le capacità di ricerca del testo di Milvus automatizzando il processo di analisi della lingua. La sua funzione principale è quella di rilevare la lingua di un campo di testo e di applicare dinamicamente un analizzatore preconfigurato più adatto a quella lingua. Questa funzione è particolarmente preziosa per le applicazioni che gestiscono una varietà di lingue, in quanto elimina la necessità di assegnare manualmente la lingua per ogni ingresso.

Indirizzando in modo intelligente i dati di testo alla pipeline di elaborazione appropriata, language_identifier semplifica l'ingestione di dati multilingue e garantisce una tokenizzazione accurata per le successive operazioni di ricerca e recupero.

Flusso di lavoro per il rilevamento della lingua

language_identifier esegue una serie di passaggi per elaborare una stringa di testo, un flusso di lavoro che è fondamentale per gli utenti per capire come configurarlo correttamente.

Language Detection Workflow Flusso di lavoro per il rilevamento della lingua

  1. Ingresso: Il flusso di lavoro inizia con una stringa di testo come input.

  2. Rilevamento della lingua: Questa stringa viene prima passata a un motore di rilevamento della lingua, che cerca di identificare la lingua. Milvus supporta due motori: whatlang e lingua.

  3. Selezione dell'analizzatore:

    • Successo: Se la lingua viene rilevata con successo, il sistema verifica se il nome della lingua rilevata ha un analizzatore corrispondente configurato nel dizionario analyzers. Se viene trovata una corrispondenza, il sistema applica l'analizzatore specificato al testo in ingresso. Ad esempio, un testo rilevato come "mandarino" viene indirizzato a un tokenizzatore jieba.

    • Fallback: Se il rilevamento fallisce, o se una lingua viene rilevata con successo ma non è stato fornito un analizzatore specifico per essa, il sistema si affida a un analizzatore predefinito preconfigurato. Questo è un punto cruciale di chiarimento: l'analizzatore default è un ripiego sia per il fallimento del rilevamento che per l'assenza di un analizzatore corrispondente.

Dopo aver scelto l'analizzatore appropriato, il testo viene tokenizzato ed elaborato, completando il flusso di lavoro.

Motori di rilevamento linguistico disponibili

Milvus offre la possibilità di scegliere tra due motori di rilevamento delle lingue:

La scelta dipende dalle prestazioni specifiche e dai requisiti di precisione dell'applicazione.

Motore

Velocità

Precisione

Formato di uscita

Migliore per

whatlang

Veloce

Buono per la maggior parte delle lingue

Nomi delle lingue (ad esempio, "English", "Mandarin", "Japanese")

Riferimento: Colonna Lingua nella tabella delle lingue supportate

Applicazioni in tempo reale in cui la velocità è fondamentale

lingua

Più lento

Maggiore precisione, soprattutto per i testi brevi

Nomi in lingua inglese (ad esempio, "English", "Chinese", "Japanese")

Riferimento: Elenco delle lingue supportate

Applicazioni in cui la precisione è più importante della velocità

Una considerazione fondamentale è la convenzione di denominazione del motore. Entrambi i motori restituiscono nomi di lingue in inglese, ma utilizzano termini diversi per alcune lingue (ad esempio, whatlang restituisce Mandarin, mentre lingua restituisce Chinese). La chiave dell'analizzatore deve corrispondere esattamente al nome restituito dal motore di rilevamento scelto.

Configurazione

Per utilizzare correttamente il tokenizer language_identifier, è necessario eseguire i seguenti passaggi per definire e applicare la sua configurazione.

Passo 1: Scegliere le lingue e gli analizzatori

Il fulcro della configurazione di language_identifier consiste nell'adattare gli analizzatori alle lingue specifiche che si intende supportare. Il sistema funziona abbinando la lingua rilevata all'analizzatore corretto, quindi questa fase è fondamentale per un'elaborazione accurata del testo.

Di seguito è riportata una mappatura consigliata delle lingue con gli analizzatori Milvus adatti. Questa tabella funge da ponte tra l'output del motore di rilevamento della lingua e lo strumento migliore per il lavoro.

Lingua (output del rilevatore)

Analizzatore consigliato

Descrizione

English

type: english

Tokenizzazione dell'inglese standard con stemming e filtro delle stop-word.

Mandarin (via whatlang) o Chinese (via lingua)

tokenizer: jieba

Segmentazione delle parole cinesi per testi non delimitati da spazi.

Japanese

tokenizer: icu

Un robusto tokenizzatore per scritture complesse, tra cui il giapponese.

French

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

Una configurazione personalizzata che gestisce gli accenti e i caratteri francesi.

  • La corrispondenza è fondamentale: Il nome dell'analizzatore deve corrispondere esattamente all'output linguistico del motore di rilevamento. Ad esempio, se si utilizza whatlang, la chiave per il testo cinese deve essere Mandarin.

  • Migliori pratiche: La tabella precedente fornisce le configurazioni consigliate per alcune lingue comuni, ma non è un elenco esaustivo. Per una guida più completa sulla scelta degli analizzatori, consultare la sezione Scegliere l'analizzatore giusto per il tuo caso d'uso.

  • Output del rilevatore: Per un elenco completo dei nomi delle lingue restituiti dai motori di rilevamento, consultare la tabella delle lingue supportate da Whatlang e l'elenco delle lingue supportate da Lingua.

Passo 2: Definire i parametri dell'analizzatore

Per utilizzare il tokenizzatore language_identifier in Milvus, creare un dizionario contenente questi componenti chiave:

Componenti necessari:

  • analyzers config set - Un dizionario contenente tutte le configurazioni dell'analizzatore, che devono includere:

    • default - L'analizzatore di riserva usato quando il rilevamento della lingua fallisce o non viene trovato alcun analizzatore corrispondente.

    • Analizzatori specifici per la lingua - Ciascuno definito come <analyzer_name>: <analyzer_config>, dove:

      • analyzer_name corrisponde all'output del motore di rilevamento scelto (ad esempio, "English", "Japanese")

      • analyzer_config segue il formato standard dei parametri dell'analizzatore (vedere Panoramica dell'analizzatore)

Componenti opzionali:

  • identifier - Specifica quale motore di rilevamento della lingua utilizzare (whatlang o lingua). Se non specificato, l'impostazione predefinita è whatlang

  • mapping - Crea alias personalizzati per gli analizzatori, consentendo di usare nomi descrittivi invece del formato di output esatto del motore di rilevamento.

Il tokenizer funziona rilevando prima la lingua del testo in ingresso, quindi selezionando l'analizzatore appropriato dalla configurazione. Se il rilevamento fallisce o non esiste un analizzatore corrispondente, si passa automaticamente all'analizzatore default.

I nomi degli analizzatori devono corrispondere esattamente all'output del motore di rilevamento linguistico scelto. Questo approccio è più semplice ed evita potenziali confusioni.

Sia per whatlang che per lingua, utilizzare i nomi delle lingue come indicato nella rispettiva documentazione:

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

Approccio alternativo: Nomi personalizzati con mappatura

Se si preferisce usare nomi di analizzatori personalizzati o si vuole mantenere la compatibilità con le configurazioni esistenti, si può usare il parametro mapping. Questo crea degli alias per gli analizzatori: funzioneranno sia i nomi originali del motore di rilevamento che quelli personalizzati.

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

Dopo aver definito analyzer_params, è possibile applicarli a un campo VARCHAR quando si definisce uno schema di raccolta. Questo permette a Milvus di elaborare il testo in quel campo usando l'analizzatore specificato per una tokenizzazione e un filtraggio efficienti. Per i dettagli, si veda l'esempio di utilizzo.

Esempi

Ecco alcune configurazioni pronte all'uso per scenari comuni. Ogni esempio include sia la configurazione che il codice di verifica, in modo da poter testare immediatamente la configurazione.

Rilevamento di inglese e cinese

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

Lingue europee con normalizzazione dell'accento

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

Note d'uso

  • Lingua singola per campo: Opera su un campo come singola unità omogenea di testo. È progettato per gestire lingue diverse in diversi record di dati, ad esempio un record contenente una frase in inglese e il successivo contenente una frase in francese.

  • Non esistono stringhe in lingue miste: Non è progettato per gestire una singola stringa contenente testo in più lingue. Ad esempio, un singolo campo VARCHAR contenente una frase in inglese e una frase in giapponese quotata verrà elaborato come una singola lingua.

  • Elaborazione della lingua dominante: In scenari di lingua mista, il motore di rilevamento probabilmente identificherà la lingua dominante e l'analizzatore corrispondente verrà applicato all'intero testo. Il risultato sarà una tokenizzazione scarsa o assente per il testo straniero incorporato.