El reconocimiento de entidades nombradas (Named Entity Recognition o NER) trata de detectar posibles entidades nombradas y, posteriormente, clasificarlas entre un conjunto de categorías predefinidas. Algunos ejemplos de entidades nombradas son los nombres de personas, lugares, cantidades, empresas…
El reconocimiento de entidades nombradas sirve para, independientemente del contexto, hacer un reconocimiento de entidades específicas. Por ejemplo, podemos decir que determinada palabra es una organización, una ciudad, una persona, etc. Es decir, independientemente del contexto, se puedan identificar esas entidades.
¿Qué son las entidades nombradas?
Según definió el filósofo y lógico Saul Kripke, las entidades nombradas son (o, al menos, deberían ser) todas aquellas entidades para las cuales existe uno designador rígido o, incluso, más de uno. Es decir, dicha palabra o expresión se refiere a la misma cosa/entidad con independencia del contexto.
En el caso de KeepCoding, por poner un ejemplo, la entidad nombrada debería ser organization, haciendo referencia a que la academia es una organización.
Dependiendo del tipo de lenguaje que tengamos cargado con el modelo específico, podrá funcionar mejor o peor el etiquetado de las palabras dentro del texto relacionado.
El rendimiento de las entidades nombradas o NER varía mucho en función del idioma en el que han sido entrenadas. El rendimiento que se comienza a obtener (debido, principalmente, al uso de modelos de embeddings contextuales) supera al de un ser humano.
Ejemplo de entidades nombradas
Veamos un ejemplo de las entidades nombradas en contexto. Si utilizamos la funcionalidad de spaCy, denominada displaCy, cargamos el texto directamente sobre el módulo de nlp_es, que es el módulo que hemos cargado con el módulo de español. Aquí obtenemos el documento que vamos a ir viendo.
#Reconocimiento de NER o entidades nombradas
doc_ner_1 = nlp_es ('Jim compró 300 acciones de Acme Corp. en 2006')
displacy.render (doc_ner_1, style = 'ent', jupyter = True, options = {'distance': 100})
Jim PER compró 300 acciones de Acme Corp PER en 2006
Vemos que la palabra “Jim” se reconoce gramaticalmente como una persona (PER) y que a Acme Corp también la reconoce como PER, lo que en este caso es erróneo y no corresponde directamente a la categoría de este conjunto de palabras (en este caso sería organization).
Así, con spacy también podemos ver las representaciones. Si nos fijamos bien, la función es la misma, la de render, solo que lo que más cambia es el parámetro de style. Entonces, dependerá de lo que queramos ver en ese documento procesado por spaCy: si queremos ver las relaciones de dependencia, ponemos “dep”; si queremos ver el ner de ese documento, podemos poner “ent” y nos sale esa representación.
#Reconocimiento de NER o entidades nombradas
doc_ner_2 = nlp_es ('Jim bought 300 shares of Acme Corp. in 2006')
displacy.render (doc_ner_2, style = 'ent', jupyter = True, options = {'distance': 100})
Jim PERSON bought 300 CARDINAL shares of Acme Corp. ORG in 2006 DATE
Sin embargo, si utilizamos la misma frase, pero en inglés, ejecutamos y vemos que se obtiene un resultado completamente distinto. Esto es porque el modelo que está entrenado en inglés como lengua es mucho más preciso que el entrenado en español.
Veamos otro ejemplo de entidades nombradas en inglés:
#Reconocimiento de NER o entidades nombradas
doc_ner_2 = nlp_es ('I heard that Paris Hilton stayed at the Hilton in Paris')
displacy.render (doc_ner_2, style = 'ent', jupyter = True, options = {'distance': 100})
I heard that Paris Hilton PERSON stayed at the Hilton FAC in Paris GPE
Aquí vemos que el modelo incluso hace la distinción entre el Hilton de apellido y el Hilton de hotel y que París lo cataloga como ubicación.
#Reconocimiento de NER o entidades nombradas
print (' {0 : 10} {1 : 10}'.format ('Token', 'Entity Label'))
for entity in doc_ner_1.ents:
print (' {0 : 10} {1 : 10}'.format (entity.text, entity.label_)')
Token Entity Label
Jim PER
Acme Corp PER
#Reconocimiento de NER o entidades nombradas
print (' {0 : 10} {1 : 10}'.format ('Token', 'Entity Label'))
for entity in doc_ner_2.ents:
print (' {0 : 10} {1 : 10}'.format (entity.text, entity.label_)')
Token Entity Label
París Hilton PERSON
Hilton FAC
Paris GPE
¿Quieres seguir avanzando?
Para poder acceder a las opciones laborales del Big Data, una de las áreas en el mundo laboral mejor pagadas y con mayor demanda, tenemos para ti el Big Data, Inteligencia Artificial & Machine Learning Full Stack Bootcamp. Con esta formación intensiva e íntegra podrás adquirir todos los conocimientos, tanto teóricos como prácticos, que necesitas para conseguir tu trabajo ideal en pocos meses. ¡No sigas esperando para impulsar tu carrera y solicita ahora mismo más información!