Estás leyendo la publicación: Una guía para el reconocimiento explicable de entidades nombradas
El reconocimiento de entidades nombradas (NER) es una de las partes cruciales de cualquier proyecto de NLP. Podemos ver varios ejemplos de implementación de NER, pero cuando se trata de comprender cómo funcionó el proceso de NER en segundo plano o cómo se comporta el proceso con los datos, necesita más explicación. En este artículo, intentaremos hacer que el reconocimiento de entidades nombradas sea explicable e interpretable, lo que ayudará a comprender su concepto de trabajo. Los puntos principales que se tratarán en este artículo se enumeran a continuación.
Tabla de contenido
- ¿Qué es el reconocimiento de entidad nombrada (NER)?
- Extrayendo datos de Kaggle
- Cargando datos
- Preprocesamiento de datos
- modelado NER
- Explicando la predicción
Comencemos por comprender primero el reconocimiento de la entidad nombrada.
¿Qué es el reconocimiento de entidad nombrada (NER)?
En uno de nuestros artículos, hemos discutido que las entidades con nombre son la palabra en cualquier dato de texto que son objetos que existen en el mundo real. Algunos de los ejemplos de estos objetos del mundo real son los nombres de cualquier persona, lugar o cosa. Estos objetos tienen su propia identidad en cualquier dato de texto. Por ejemplo, Narendra Singh Modi, Mumbai, tanque de agua Plasto, etc. Esta entidad nombrada tiene su propia clase, ya que Narendra Modi es el nombre de una persona. El reconocimiento de entidades nombradas (NER) se puede considerar como un proceso de hacer que una máquina reconozca los objetos con su clase y otras especificaciones. También con esta información sobre el reconocimiento de entidades nombradas, hemos discutido cómo podemos implementar NER usando bibliotecas spaCy y NLTK.
Hablando de las aplicaciones de NER, encontramos que podemos utilizar el proceso en el resumen de información de los documentos, la optimización del algoritmo de los motores de búsqueda, la identificación de diferentes subpartes biomédicas y las recomendaciones de contenido.
Con este artículo, nuestro objetivo es hacer que el proceso de implementación de NER sea más explicable. Para este propósito, utilizaremos las bibliotecas Keras y lime. Además, discutiremos cómo podemos extraer datos de Kaggle en el entorno de Google Colab. Comencemos por extraer datos
Extrayendo datos de Kaggle
Para extraer los datos de Kaggle, debemos tener una cuenta en el sitio web de Kaggle. Para crear una cuenta utilizamos este enlace. Después de crear una cuenta, debemos ir a la página de la cuenta. Por ejemplo, la dirección de la página de mi cuenta es
https://www.kaggle.com/yugeshvermaaim/cuenta
Donde yugeshvermaaim es mi nombre de cuenta. Después de llegar a la página de la cuenta, debemos desplazarnos hacia abajo en la página hasta la sección API.
En esta sección, debemos hacer clic en el botón Crear nuevo token API. Este botón es el encargado de proporcionarnos un archivo JSON llamado kaggle.json. Después de extraer este archivo, debemos cargarlo en el entorno de Google Colab. Podemos encontrar un acceso directo para cargar un archivo en la sección izquierda del cuaderno de Google Collab.
El primer botón en este panel es para cargar un archivo mediante el cual debemos cargar el archivo kaggle.json. Después de cargar el archivo JSON, podemos usar el siguiente comando para instalar Kaggle en el entorno.
! pip instalar kaggle
Después de la instalación, debemos crear un directorio. Usando el siguiente comando podemos hacerlo:
! mkdir ~/.kaggle
Usando el siguiente comando, podemos copiar kaggle.json en el directorio creado anteriormente como,
! cp kaggle.json ~/.kaggle/
Se requiere el código dado a continuación para dar permiso para la asignación de archivos.
! chmod 600 ~/.kaggle/kaggle.json
Ahora, en la implementación de NER, estamos usando un ner_datasset de datos de Kaggle que se puede encontrar en este enlace. Estos datos incluyen un corpus anotado para el reconocimiento de entidades nombradas y se pueden utilizar para la clasificación de entidades.
Para extraer estos datos, debemos copiar el comando API, que se puede recopilar en los paneles de tres puntos en el lado derecho del panel del nuevo portátil.
Para nuestros datos, tiene el siguiente comando API:
Descarga de conjuntos de datos de kaggle -d abhinavwalia95/entity-annotated-corpus
Este comando se puede ejecutar en Google Colab.
!Descarga de conjuntos de datos Kaggle -d abhinavwalia95/entity-annotated-corpus
Producción:
Este archivo recopilado es un archivo zip que se puede descomprimir con el siguiente comando.
! descomprimir entidad-anotado-corpus
Producción:
En lo anterior, podemos realizar cambios de acuerdo a nuestro interés en extraer archivos del Kaggle. Después de esta extracción de datos, estamos listos para implementar NER. Comencemos cargando los datos.
Cargando datos
importar pandas como datos pd = pd.read_csv(“ner_dataset.csv”, encoding=”latin1″).fillna(method=”ffill”)
Comprobando los datos
datos.head()
Producción:
datos.describe()
Producción:
En la descripción anterior, podemos encontrar que hay 47959 oraciones y 35178 palabras únicas en las oraciones donde están disponibles 42 partes del discurso y 17 categorías de objetos o etiquetas.
La imagen de arriba es un ejemplo de la oración 4 del conjunto de datos. Para que funcione, he definido una función que puede sumar todas las palabras para hacer una oración según su número. Los lectores interesados pueden encontrar la función aquí.
Revisemos las etiquetas de estas palabras:
imprimir (etiquetas[3])
Producción:
Preprocesamiento de datos
En esta sección, comenzaremos con la construcción de un vocabulario de algunas 10000 palabras comunes. La siguiente imagen es una muestra del vocabulario.
print(vocabulario) len(vocabulario)
Producción:
El segundo paso de esta sección será rellenar la secuencia a una longitud común.
imprimir (palabra2idx) imprimir (etiqueta2idx)
Producción:
Después de hacer la secuencia de pads de longitud común, estamos listos para dividir nuestros datos.
from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.1, shuffle=False)
Después de estos pasos de preprocesamiento de datos, estamos listos para el modelado NER.
modelado NER
En el modelado NER, hemos usado un modelo LSTM bidireccional con 0.1 abandonos recurrentes y en la compilación, he usado la propagación de raíz cuadrática media como optimizador. Para ajustar el modelo hemos utilizado 5 épocas. El código completo para el procedimiento se puede encontrar aquí.
Usando el siguiente código podemos entrenar nuestra red.
history = model.fit(X_train, y_train.reshape(*y_train.shape, 1), batch_size=32, epochs=5, validation_split=0.1, detallado=1)
Después de entrenar el modelo, estamos listos para explicar las predicciones.
Explicando la predicción
Como se discutió anteriormente, vamos a hacer que el proceso NER sea más explicable usando la biblioteca LIME. Esta biblioteca es una biblioteca de código abierto para hacer que la inteligencia artificial y el aprendizaje automático sean más explicables. Antes de pasar a explicar el NER, debemos instalar esta biblioteca. También podemos usar la biblioteca eli5 para usar la función construida en la biblioteca lime. La instalación se puede realizar utilizando las siguientes líneas de códigos.
!pip instalar cal
Producción:
!pip instalar eli5
Producción:
Después de la instalación, estamos listos para explicar la predicción del modelo NER. Para explicar el NER usando LIME, debemos hacer que nuestro problema sea un problema de clasificación multiclase.
Echemos un vistazo a la muestra número 100 de nuestros datos de texto.
índice = 99 etiqueta = etiquetas[index]
texto = oraciones[index]
imprimir(texto) imprimir() imprimir(” “.join([f”{t} ({l})” for t, l in zip(text.split(), label)]))
Producción:
Comencemos explicando la predicción del modelo NER. Para ello, hemos definido una clase llamada NERExplainerGenerator en la que hemos definido una función llamada get_predict_function que proporcionará las predicciones a las funciones de la biblioteca LIME TextExplainer.
Del ejemplo anterior, usaremos la sexta palabra y generaremos la función de predicción respectiva. Usando el módulo MaskExplainer de LIME podemos inicializar una muestra para el algoritmo LIME.
from eli5.lime.samplers import MaskingTextSampler word_index = 6 predict_func = Explainer_generator.get_predict_function(word_index=word_index) sampler = MaskingTextSampler(reemplazo=”UNK”, max_replace=0.7, token_pattern=Ninguno, bow=False)
Impresión de la muestra utilizando el muestreador.
muestras, similitud = sampler.sample_near(text, n_samples=6) print(muestras)
Producción:
Inicializando el módulo TextExplainer de LIME para explicar la predicción.
from eli5.lime import TextExplainer te = TextExplainer( sampler=sampler, position_dependent=True, random_state=42 ) te.fit(text, predict_func)
Después de instalarlo, estamos listos para usar el TestExplainer.
te.explain_prediction( target_names=list(explainer_generator.idx2tag.values()), top_targets=4 )
Producción:
En el resultado anterior, podemos ver que hemos hecho que el modelado NER sea más explicable. En el resultado, podemos ver que la palabra India está fuertemente resaltada, lo que significa que hay una mayor probabilidad de que India sea el nombre de cualquier objeto y el conjunto de datos posee India a menudo como el nombre de un país.
Ultimas palabras
En este artículo, hemos discutido cómo podemos realizar el reconocimiento de entidades nombradas usando la biblioteca Keras y cómo podemos usar la biblioteca LIME para que sea más explicable. Llegamos a saber cómo funciona el reconocimiento de entidades nombradas y cómo se comporta con los datos.
Referencias: