0 / 0
Torna alla versione inglese della documentazione

Rilevazione di entità con un dizionario personalizzato

Ultimo aggiornamento: 23 lug 2024
Rilevazione di entità con un dizionario personalizzato

Se si dispone di un insieme fisso di termini che si desidera rilevare, come un elenco di nomi di prodotti o di organizzazioni, è possibile creare un dizionario. Il matching dizionario è molto veloce e efficiente in termini di risorse.

I dizionari di elaborazione della lingua naturale Watson contengono funzionalità di matching avanzate che vanno oltre un semplice match di stringa, tra cui:

  • I termini dizionari possono consistere in un singolo token, ad esempio ruota, o più token, ad esempio volante.
  • Il termine dizionario corrispondente può essere sensibile al maiuscolo o al minuscolo. Con un match - sensibile al maiuscolo, è possibile garantire che gli acronimi, come ABS non corrispondo a termini nella lingua regolare, come abs che hanno un significato diverso.
  • È possibile specificare come consolidare le corrispondenze quando più voci di dizionario corrispondono allo stesso testo. Date le due voci dizionarie, Watson e Watson Elaborazione della lingua naturale, è possibile configurare quale voce deve corrispondere in "Mi piace Watson Natural Language Processing": solo Watson Natural Language Processing, in quanto contiene Watson, o entrambi.
  • È possibile specificare di abbinare il lemma invece di enumerare tutte le inflessioni. In questo modo, la voce del dizionario singolo mouse rileverà sia mouse che topi nel testo.
  • È possibile allegare un'etichetta ad ogni voce del dizionario, ad esempio Categoria Organizzazione per includere ulteriori metadati nel match.

Tutte queste funzionalità possono essere configurate, quindi è possibile scegliere l'opzione giusta per il caso di utilizzo.

Tipi di file dizionari

Watson Natural Language Processing supporta due tipi di file dizionari:

  • Elenco termini (terminati in .dict)

    Esempio di elenco a termine:

    Arthur
    Allen
    Albert
    Alexa
    
  • Tabella (chiusura in .csv)

    Esempio di tabella:

    "label", "entry"
    "ORGANIZATION", "NASA"
    "COUNTRY", "USA"
    "ACTOR", "Christian Bale"
    

È possibile utilizzare più dizionari durante la stessa estrazione. È inoltre possibile utilizzare entrambi i tipi contemporaneamente, ad esempio, eseguire un'estrazione singola con tre dizionari, un elenco a termine e due tabelle.

Creazione di file dizionari

Iniziare creando una directory di modulo all'interno del tuo notebook. Si tratta di una directory all'interno del file system del notebook che verrà utilizzato temporaneamente per memorizzare i tuoi file dizionari.

Per creare file dizionari nel tuo notebook:

  1. Creare una directory del modulo. Da notare che il nome della cartella del modulo non può contenere alcuna trattazione in quanto ciò causera ' errori.
    import os
    import watson_nlp
    module_folder = "NLP_Dict_Module_1"
    os.makedirs(module_folder, exist_ok=True)
    
  2. Creare file dizionari, e memorizzarli nella directory del modulo. È possibile leggere in un elenco esterno o in un file CSV oppure è possibile creare file dizionari come:
    # Create a term list dictionary
    term_file = "names.dict"
    with open(os.path.join(module_folder, term_file), 'w') as dictionary:
        dictionary.write('Bruce')
        dictionary.write('\n')
        dictionary.write('Peter')
        dictionary.write('\n')
    
    # Create a table dictionary
    table_file = 'Places.csv'
    with open(os.path.join(module_folder, table_file), 'w') as places:
        places.write("\"label\", \"entry\"")
        places.write("\n")
        places.write("\"SIGHT\", \"Times Square\"")
        places.write("\n")
        places.write("\"PLACE\", \"5th Avenue\"")
        places.write("\n")
    

Caricamento dei dizionari e configurazione delle opzioni corrispondenti

I dizionari possono essere caricati utilizzando i seguenti metodi helper.

  • Per caricare un singolo dizionario, utilizzare watson_nlp.toolkit.rule_utils.DictionaryConfig (<dictionary configuration>)
  • Per caricare più dizionari, utilizzare watson_nlp.toolkit.rule_utils.DictionaryConfig.load_all([<dictionary configuration>)])

Per ogni dizionario è necessario specificare una configurazione dizionario. La configurazione del dizionario è un dizionario Python , con i seguenti attributi:

Attributo Valore Descrizione Obbligatorio
name stringa Il nome del dizionario
source stringa Il percorso verso il dizionario, relativo a module_folder
dict_type file o tabella Che l'artefatto dizionario sia un elenco a termine (file) o una tabella di mappature (tabella) Num. Il file predefinito è file
consolidate ContainedWithin (Conserva la corrispondenza più lunga e deduplica) / NotContainedWithin (Mantieni la corrispondenza più breve e deduplica) / ContainsButNotEqual (Mantieni la corrispondenza più lunga ma mantieni le corrispondenze duplicate) / ExactMatch (Deduplica) / LeftToRight (Mantieni l'intervallo più lungo e non sovrapposto più a sinistra) Cosa fare con le partite di dizionario che si sovrappongono. Num. Il default è quello di non consolidare le corrispondenze.
case esatto / insensibile O corrisponde al caso esatto o ad essere insensibile al caso. Num. L'impostazione predefinita è esatta.
lemma true/false Abbi i termini nel dizionario con i lemmi dal testo. Il dizionario dovrebbe contenere solo forme di lemma. Ad esempio, aggiungere mouse nel dizionario per abbinare sia mouse che mice in testo. Non aggiungere mice nel dizionario. Per abbinare termini che consistono in più token in testo, separare i lemmi di quei termini nel dizionario da un carattere spaziale. Num. L'impostazione predefinita è False.
mappings.columns (colonne as attribute of mappature: {}) elenco [ stringa] Elenco delle intestazioni di colonna nello stesso ordine del presente nella tabella csv Sì se dict_type: table
mappings.entry (voce as attribute of mappature: {}) stringa Il nome dell'intestazione della colonna che contiene la stringa da abbinare al documento. Sì se dict_type: table
label stringa L'etichetta da allegare alle partite. N

Esempio di codice

# Load the dictionaries
dictionaries = watson_nlp.toolkit.rule_utils.DictionaryConfig.load_all([{
    'name': 'Names',
    'source': term_file,
    'case':'insensitive'
}, {
    'name': 'places_and_sights_mappings',
    'source': table_file,
    'dict_type': 'table',
    'mappings': {
        'columns': ['label', 'entry'],
        'entry': 'entry'
    }
}])

Formazione di un modello che contiene dizionari

Dopo aver caricato i dizionari, creare un modello di dizionario e formare il modello utilizzando il metodo RBR.train() . Nel metodo, specificare:

  • La directory del modulo
  • La lingua delle voci del dizionario
  • I dizionari da utilizzare

Esempio di codice

custom_dict_block = watson_nlp.resources.feature_extractor.RBR.train(module_folder,
language='en', dictionaries=dictionaries)

Applicazione del modello su nuovi dati

Dopo aver addestrato i dizionari, applicare il modello su nuovi dati utilizzando il metodo run() , come si utilizzerebbe su uno qualsiasi dei blocchi pre - formati esistenti.

Esempio di codice

custom_dict_block.run('Bruce is at Times Square')

Output dell'esempio di codice:

{(0, 5): ['Names'], (12, 24): ['SIGHT']}

Per mostrare le etichette o il nome del dizionario:

RBR_result = custom_dict_block.executor.get_raw_response('Bruce is at Times Square', language='en')
print(RBR_result)

Output che mostra le etichette:

{'annotations': {'View_Names': [{'label': 'Names', 'match': {'location': {'begin': 0, 'end': 5}, 'text': 'Bruce'}}], 'View_places_and_sights_mappings': [{'label': 'SIGHT', 'match': {'location': {'begin': 12, 'end': 24}, 'text': 'Times Square'}}]}, 'instrumentationInfo': {'annotator': {'version': '1.0', 'key': 'Text match extractor for NLP_Dict_Module_1'}, 'runningTimeMS': 3, 'documentSizeChars': 32, 'numAnnotationsTotal': 2, 'numAnnotationsPerType': [{'annotationType': 'View_Names', 'numAnnotations': 1}, {'annotationType': 'View_places_and_sights_mappings', 'numAnnotations': 1}], 'interrupted': False, 'success': True}}

Argomento principale: Creazione dei propri modelli