0 / 0
Volver a la versión inglesa de la documentación
Detección de entidades con un diccionario personalizado
Última actualización: 29 jul 2024
Detección de entidades con un diccionario personalizado

Si tiene un conjunto fijo de términos que desea detectar, como una lista de nombres de productos u organizaciones, puede crear un diccionario. La coincidencia de diccionario es un proceso muy rápido y con un uso eficiente de los recursos.

Los diccionarios de Watson Natural Language Processing contienen prestaciones de coincidencia avanzadas que van más allá de una coincidencia de serie simple, lo que incluye:

  • Los términos del diccionario pueden constar de una sola señal, por ejemplo rueda, o varias señales, por ejemplo, cinturón de seguridad.
  • La coincidencia de términos de diccionario puede distinguir entre mayúsculas y minúsculas o no. Si se distingue entre mayúsculas y minúsculas, puede asegurarse de que los acrónimos, como ABS, no coincidan con términos del idioma normal, como abs que tienen un significado diferente.
  • Puede especificar cómo consolidar las coincidencias cuando varias entradas del diccionario coinciden con el mismo texto. Dadas las dos entradas de diccionario, Watson y Watson Natural Language Processing, puede configurar qué entrada debe coincidir en "I like Watson Natural Language Processing": sólo Watson Proceso de lenguaje natural, ya que contiene Watson, o ambos.
  • Puede especificar que coincida con el lema en lugar de enumerar todas las inflexiones. De este modo, la entrada del diccionario única ratón detectará tanto ratón como ratonera en el texto.
  • Puede adjuntar una etiqueta a cada entrada de diccionario, por ejemplo Categoría de organización para incluir metadatos adicionales en la coincidencia.

Todas estas prestaciones se pueden configurar, por lo que puede elegir la opción correcta para su caso de uso.

Tipos de archivos de diccionario

Watson Natural Language Processing da soporte a dos tipos de archivos de diccionario:

  • Lista de términos (finaliza en .dict)

    Ejemplo de una lista de términos:

    Arthur
    Allen
    Albert
    Alexa
    
  • Tabla (finaliza en .csv)

    Ejemplo de una tabla:

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

Puede utilizar varios diccionarios durante la misma extracción. También puede utilizar ambos tipos al mismo tiempo, por ejemplo, ejecutar una única extracción con tres diccionarios, una lista de términos y dos tablas.

Creación de archivos de diccionario

Empiece creando un directorio de módulos dentro del cuaderno. Se trata de un directorio dentro del sistema de archivos del cuaderno que se utilizará temporalmente para almacenar los archivos de diccionario.

Para crear archivos de diccionario en el cuaderno:

  1. Cree un directorio de módulo. Tenga en cuenta que el nombre de la carpeta del módulo no puede contener guiones, ya que esto causará errores.
    import os
    import watson_nlp
    module_folder = "NLP_Dict_Module_1"
    os.makedirs(module_folder, exist_ok=True)
    
  2. Cree archivos de diccionario y almacénelos en el directorio del módulo. Puede leer una lista externa o un archivo CSV, o puede crear archivos de diccionario como:
    # 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")
    

Carga de los diccionarios y configuración de opciones de coincidencia

Los diccionarios se pueden cargar utilizando los siguientes métodos de ayuda.

  • Para cargar un solo diccionario, utilice watson_nlp.toolkit.rule_utils.DictionaryConfig (<dictionary configuration>)
  • Para cargar varios diccionarios, utilice watson_nlp.toolkit.rule_utils.DictionaryConfig.load_all([<dictionary configuration>)])

Para cada diccionario, debe especificar una configuración de diccionario. La configuración del diccionario es un diccionario Python, con los atributos siguientes:

Atributo Valor Descripción Obligatorio
name serie El nombre del diccionario
source serie La vía de acceso al diccionario, relativa a module_folder
dict_type archivo o tabla Si el artefacto de diccionario es una lista de términos (archivo) o una tabla de correlaciones (tabla) Núm. El valor predeterminado es archivo
consolidate ContainedWithin (Mantener la coincidencia más larga y eliminar duplicados) / NotContainedWithin (Mantener la coincidencia más corta y eliminar duplicados) / ContainsButNotEqual (Mantener coincidencia más larga pero mantener coincidencias duplicadas) / ExactMatch (Eliminar duplicados) / LeftToRight (Mantener el intervalo de no solapamiento más largo del extremo izquierdo) Qué hacer con las coincidencias de diccionario que se solapan. Núm. El valor predeterminado es no consolidar las coincidencias.
case exacto / sin distinción entre mayúsculas y minúsculas La coincidencia debe ser exacta o bien no hacer distinción entre mayúsculas y minúsculas. Núm. El valor predeterminado es coincidencia exacta.
lemma True / False Coincidencia de los términos del diccionario con los lemas del texto. El diccionario debe contener sólo formas de lema. Por ejemplo, añada mouse en el diccionario para que coincida con mouse y mice en el texto. No añada mice en el diccionario. Para comparar términos que constan de varias señales en el texto, separe los lemas de dichos términos en el diccionario mediante un carácter de espacio. Núm. El valor predeterminado es false.
mappings.columns (columnas as attribute of correlaciones: {}) list [serie] Lista de cabeceras de columna en el mismo orden que en la tabla csv Sí, si dict_type: table
mappings.entry (entrada as attribute of correlaciones: {}) serie El nombre de la cabecera de columna que contiene la serie para que coincida con el documento. Sí, si dict_type: table
label serie La etiqueta que se va a adjuntar a las coincidencias. Nee

Ejemplo de código

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

Entrenamiento de un modelo que contiene diccionarios

Después de haber cargado los diccionarios, cree un modelo de diccionario y entrene el modelo utilizando el método RBR.train(). En el método, especifique:

  • El directorio del módulo
  • El idioma de las entradas del diccionario
  • Los diccionarios para utilizar

Ejemplo de código

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

Aplicación del modelo en datos nuevos

Después de haber entrenado los diccionarios, aplique el modelo en los datos nuevos utilizando el método run(), tal como se utilizaría en cualquiera de los bloques entrenados previamente existentes.

Ejemplo de código

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

Ejemplo de salida de código:

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

Para mostrar las etiquetas o el nombre del diccionario:

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

Salida que muestra las etiquetas:

{'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}}

Tema principal: Crear sus propios modelos

Búsqueda y respuesta de IA generativa
Estas respuestas las genera un modelo de lenguaje grande en watsonx.ai que se basa en el contenido de la documentación del producto. Más información