Reconocimiento de entidad con nombre (NER) en Python con Spacy

Contenidos

El procesamiento del lenguaje natural se ocupa de los datos de texto. La cantidad de datos de texto generados en estos días es enorme. Y estos datos, si se utilizan correctamente, pueden traer muchos resultados fructíferos. Algunas de las aplicaciones de procesamiento del lenguaje natural más importantes son el análisis de texto, las partes del etiquetado de voz, el análisis de sentimientos y el reconocimiento de entidades nombradas.

26119ner1-9906021

La gran cantidad de datos de texto contiene una gran cantidad de información. Un aspecto importante del análisis de estos datos de texto es la identificación de Entidades Nombradas.

¿Qué es una entidad con nombre?

Una entidad nombrada es básicamente un objeto de la vida real que tiene una identificación adecuada y se puede denotar con un nombre propio. Las entidades nombradas pueden ser un lugar, una persona, una organización, un tiempo, un objeto o una entidad geográfica.

Por ejemplo, las entidades nombradas serían Roger Federer, ciudad de Honda, Samsung Galaxy S10. Las entidades nombradas suelen ser instancias de instancias de entidad. Por ejemplo, Roger Federer es una instancia de un jugador de tenis / persona, Honda City es una instancia de un automóvil y Samsung Galaxy S10 es una instancia de un teléfono móvil.

Reconocimiento de entidad nombrada:

El reconocimiento de entidades nombradas es el proceso de PNL que se ocupa de identificar y clasificar entidades nombradas. Se toma el texto sin formato y estructurado y las entidades nombradas se clasifican en personas, organizaciones, lugares, dinero, tiempo, etc. Básicamente, las entidades nombradas se identifican y segmentan en varias clases predefinidas.

Los sistemas NER se desarrollan con varios enfoques lingüísticos, así como con métodos estadísticos y de aprendizaje automático. NER tiene muchas aplicaciones para proyectos o propósitos comerciales.

El modelo NER primero identifica una entidad y luego la categoriza en la clase más adecuada. Algunos de los tipos comunes de Entidades Nombradas serán:

1. Organizaciones:

NASA, CERN, ISRO, etc.

2 lugares:

Mumbai, Nueva York, Kolkata.

3. Dinero:

Mil millones de dólares, 50 libras esterlinas.

4. Fecha:

15 de agosto de 2020

5. Persona:

Elon Musk, Richard Feynman, Subhas Chandra Bose.

Una cosa importante acerca de los modelos NER es que su capacidad para comprender las Entidades Nombradas depende de los datos en los que hayan sido entrenados. Hay muchas aplicaciones de NER.

NER se puede utilizar para la clasificación de contenido, se pueden recopilar las diversas Entidades Nombradas de un texto y, en función de esos datos, se pueden comprender los temas de contenido. En el ámbito académico y de la investigación, NER se puede utilizar para recuperar datos e información más rápidamente de una amplia variedad de información textual. NER ayuda mucho en el caso de la extracción de información de grandes conjuntos de datos de texto.

NER usando Spacy:

Spacy es una biblioteca de procesamiento de lenguaje natural de código abierto que se puede utilizar para varias tareas. Tiene métodos integrados para el reconocimiento de entidades nombradas. Spacy tiene un sistema de reconocimiento de entidades estadístico rápido.

Podemos usar spacy muy fácilmente para tareas NER. Aunque a menudo necesitamos entrenar nuestros propios datos para necesidades específicas de la empresa, el modelo de espacio en general funciona bien para todo tipo de datos de texto.

Comencemos con el código, primero importamos spacy y continuamos.

import spacy
from spacy import displacy

NER = spacy.load("en_core_web_sm")

Ahora, ingresamos nuestro texto de muestra que estaremos probando. El texto ha sido tomado de la página de Wikipedia de ISRO.

raw_text="The Indian Space Research Organisation or is the national space agency of India, headquartered in Bengaluru. It operates under Department of Space which is directly overseen by the Prime Minister of India while Chairman of ISRO acts as executive of DOS as well."
text1= NER(raw_text)

Ahora, imprimimos los datos sobre los NE que se encuentran en esta muestra de texto.

for word in text1.ents:
    print(word.text,word.label_)

La salida:

The Indian Space Research Organisation ORG
the national space agency ORG
India GPE
Bengaluru GPE
Department of Space ORG
India GPE
ISRO ORG
DOS ORG

Entonces, ahora podemos ver que se extraen todas las Entidades nombradas en este texto en particular. Si nos enfrentamos a algún problema con respecto al tipo de un NE en particular, podemos usar el siguiente método.

spacy.explain("ORG")

Producción: ‘Empresas, agencias, instituciones, etc.’

spacy.explain("GPE")

Producción: ‘Países, ciudades, estados’

Ahora, probamos una imagen interesante, que muestra los NE directamente en el texto.

displacy.render(text1,style="ent",jupyter=True)

Producción:

45514ner2-1751415

Dejaré Kaggle Link al final, para que los lectores puedan probar el código por sí mismos. En cuanto a lo visual, las Entidades nombradas se mencionan correctamente en el texto, con colores contrastantes, lo que hace que la visualización de datos sea bastante fácil y simple. Hay otro tipo de visual, que explora el conjunto de datos completo como un todo. Consulte el enlace de Kaggle al final.

Intentemos las mismas tareas con algunas pruebas que contienen más entidades nombradas.

raw_text2 = ”La Mars Orbiter Mission (MOM), conocida informalmente como Mangalyaan, fue lanzada a la órbita terrestre el 5 de noviembre de 2013 por la Organización de Investigación Espacial de la India (ISRO) y entró en la órbita de Marte el 24 de septiembre de 2014. La India se convirtió así en el primer país para entrar en la órbita de Marte en su primer intento. Se completó a un costo récord de 74 millones de dólares «.

text2= NER(raw_text2)
for word in text2.ents:
    print(word.text,word.label_)

Producción:

The Mars Orbiter Mission PRODUCT
MOM ORG
Mangalyaan GPE
Earth LOC
5 November 2013 DATE
the Indian Space Research Organisation ORG
ISRO ORG
Mars LOC
24 September 2014 DATE
India GPE
first ORDINAL
Mars LOC
first ORDINAL
$74 million MONEY

Aquí, obtenemos más tipos de entidades con nombre. Identifiquemos de qué tipo son.

spacy.explain("PRODUCT")

Producción: ‘Objetos, vehículos, alimentos, etc. (no servicios)’

spacy.explain("LOC")

Producción: ‘Lugares no pertenecientes a la GPE, cadenas montañosas, masas de agua’

spacy.explain("DATE")

Producción: ‘Fechas o períodos absolutos o relativos’

spacy.explain("ORDINAL")

Producción: ‘“Primero”, “segundo”, etc.’

spacy.explain("MONEY")

Producción: ‘Valores monetarios, incluida la unidad’

Ahora, analizamos el texto como un todo en forma de visual.

displacy.render(text2,style="ent",jupyter=True)

Producción:

68260ner3-3209580

Aquí, las diversas Entidades Nombradas en colores contrastantes, por lo que comprendemos la naturaleza general del texto.

NER de un artículo de noticias

Extraeremos datos de un artículo de noticias y realizaremos una NER sobre los datos de texto recopilados a partir de allí.

Usaremos Beautiful Soup para propósitos de raspado web.

from bs4 import BeautifulSoup
import requests
import re

Ahora, usaremos la URL del artículo de noticias.

URL="https://www.zeebiz.com/markets/currency/news-cryptocurrency-news-today-june-12-bitcoin-dogecoin-shiba-inu-and-other-top-coins-prices-and-all-latest-updates-158490"
html_content = requests.get(URL).text
soup = BeautifulSoup(html_content, "lxml")

Ahora, obtenemos el contenido corporal.

body=soup.body.text

Ahora, usamos expresiones regulares para limpiar el texto.

body= body.replace('n', ' ')
body= body.replace('t', ' ')
body= body.replace('r', ' ')
body= body.replace('xa0', ' ')
body=re.sub(r'[^ws]', '', body)

Echemos ahora un vistazo al texto.

body[1000:1500]
'       View in App    Bitcoin was down by 6 and was trading at Rs 2728815 after hitting days high of Rs 2900208 Source Reuters        Reported By ZeeBiz WebTeam Written By Ravi Kant Kumar      Updated Sat Jun 12 20210646 pm   Patna ZeeBiz WebDesk    RELATED NEWS            Cryptocurrency Latest News Today June 14 Bitcoin leads crypto rally up over 12 after ELON MUSK TWEET Check Ethereum Polka Dot Dogecoin Shiba Inu and other top coins INR price World India updates             Bitcoin law is only'

Ahora, procedamos con el reconocimiento de entidades nombradas.

text3= NER(body)
displacy.render(text3,style="ent",jupyter=True)

Bueno, la forma visual es muy grande, pero hay algunas partes interesantes que quiero cubrir.

81153ner4-8773793

Ahora, llegando a algunas observaciones.

Bitcoin es supuestamente una ubicación geográfica. Patna es una organización. Dejando de lado algunos casos, la mayor parte del texto se ha clasificado correctamente en sus respectivas entidades nombradas. Por tanto, podemos entender que el reconocimiento de la entidad se ha realizado correctamente.

NER tiene muchos desafíos y muchos desarrollos aún por realizar. La implementación adecuada de NER sigue siendo un gran problema. Además de Spacy, otras plataformas de PNL incluyen PORTÓN y OpenNLP.

Para ver el código completo, consulte este enlace en Kaggle.

Entonces, podemos concluir que NER es una aplicación importante de PNL y tiene usos generalizados.

Sobre mí:

Prateek Majumder

Ciencia de datos y análisis | Especialista en marketing digital | SEO | Creación de contenido

Conéctate conmigo en Linkedin.

Gracias.

Los medios que se muestran en este artículo no son propiedad de DataPeaker y se utilizan a discreción del autor.

Suscribite a nuestro Newsletter

No te enviaremos correo SPAM. Lo odiamos tanto como tú.