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:
- 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)
- 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 | Sì |
source |
stringa | Il percorso verso il dizionario, relativo a module_folder |
Sì |
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