Reconocimiento de entidad nombrada

El reconocimiento de entidades nombradas (NER) es una de las tareas de preprocesamiento de datos más importantes. Implica la identificación de información clave en el texto y la clasificación en un conjunto de categorías predefinidas. Una entidad es básicamente aquello de lo que se habla o se hace referencia constantemente en el texto.

NER es la forma de PNL.

En esencia, la PNL es solo un proceso de dos pasos, a continuación se muestran los dos pasos involucrados:

  • Detectar las entidades del texto
  • Clasificándolos en diferentes categorías.

Algunas de las categorías que son la arquitectura más importante en NER tales que:

  • Persona
  • Organización
  • lugar/ ubicación

Otras tareas comunes incluyen la clasificación de lo siguiente:

  • fecha y hora.
  • expresión
  • Medida numérica (dinero, porcentaje, peso, etc.)
  • Dirección de correo electrónico

Ambigüedad en NE

  • Para una persona, la definición de categoría es intuitivamente bastante clara, pero para las computadoras, existe cierta ambigüedad en la clasificación. Veamos un ejemplo ambiguo:
    • Inglaterra (Organización) ganó la copa del mundo de 2019 frente a La copa del mundo de 2019 se llevó a cabo en Inglaterra (Ubicación).
    • Washington (Ubicación) es la capital de los EE. UU. vs El primer presidente de los EE. UU. fue Washington (Persona) .

Métodos de NER

  • Una forma es entrenar el modelo para la clasificación de clases múltiples utilizando diferentes algoritmos de aprendizaje automático, pero requiere mucho etiquetado. Además de etiquetar el modelo, también se requiere una comprensión profunda del contexto para lidiar con la ambigüedad de las oraciones. Esto lo convierte en una tarea desafiante para el aprendizaje automático simple /
  • Otra forma es ese campo aleatorio condicional que implementan tanto NLP Speech Tagger como NLTK. Es un modelo probabilístico que se puede utilizar para modelar datos secuenciales como palabras. El CRF puede capturar una comprensión profunda del contexto de la oración. En este modelo, la entrada {\text{X}} =  \left \{ \vec{x}_{1} ,\vec{x}_{2} ,\vec{x}_{3}, \ldots,\vec{x}_{T}   \right \}

{\text{p}}\left( {{\text{y|}}{\mathbf{x}}} \right) = \frac{1}{{z\left( \vec{x} \right)}}\mathop \prod \limits_{t = 1}^{T} { \exp }\left\{ {\mathop \sum \limits_{k = 1}^{k} \omega_{k} f_{k} \left( {y_{t} ,y_{t - 1} ,\vec{x}_{t} } \right)} \right\}

  • NER basado en aprendizaje profundo: incrustación de palabras
  • En esta implementación, realizaremos el reconocimiento de entidades con nombre utilizando dos marcos diferentes: Spacy y NLTK. Este código se puede ejecutar en colab, sin embargo, con fines de visualización. Recomiendo el ambiente local. Podemos instalar los siguientes frameworks usando pip install
  • Primero, realizamos el reconocimiento de Entidad Nombrada utilizando Spacy.

Python3

# command to run before code
! pip install spacy
! pip install nltk
! python -m spacy download en_core_web_sm
  
# imports and load spacy english language package
import spacy
from spacy import displacy
from spacy import tokenizer
nlp = spacy.load('en_core_web_sm')
  
#Load the text and process it
# I copied the text from python wiki
text =("Python is an interpreted, high-level and general-purpose programming language 
       "Pythons design philosophy emphasizes code readability with" 
       "its notable use of significant indentation."
       "Its language constructs and object-oriented approach aim to"
       "help programmers write clear and"
       "logical code for small and large-scale projects")
# text2 = # copy the paragraphs from  https://www.python.org/doc/essays/ 
doc = nlp(text)
#doc2 = nlp(text2)
sentences = list(doc.sents)
print(sentences)
# tokenization
for token in doc:
    print(token.text)
# print entities
ents = [(e.text, e.start_char, e.end_char, e.label_) for e in doc.ents]
print(ents)
# now we use displaycy function on doc2
displacy.render(doc, style='ent', jupyter=True)
[Python is an interpreted, high-level and general-purpose programming language.,
 Pythons design philosophy emphasizes code readability with its notable use of significant indentation.,
 Its language constructs and object-oriented approachaim to help programmers write clear, logical code for small and large-scale projects]
 # tokens
 Python
is
an
interpreted
,
high
-
level
and
general
-
purpose
programming
language
.
Pythons
design
philosophy
emphasizes
code
readability
with
its
notable
use
of
significant
indentation
.
Its
language
constructs
and
object
-
oriented
approachaim
to
help
programmers
write
clear
,
logical
code
for
small
and
large
-
scale
projects
# named entity
[('Python', 0, 6, 'ORG')]

#here ORG stands for Organization

Etiquetas de entidad espaciosas en doc2

  • A continuación se muestra una lista y su significado de etiquetas de entidad espacial:

Etiquetas de reconocimiento de entidad nombrada Spacy

  • Ahora realizamos la tarea de reconocimiento de entidades nombradas en NLTK.

Python3

# import modules and download packages
import nltk
nltk.download('words')
nltk.download('punkt')
nltk.download('maxent_ne_chunker')
nltk.download('averaged_perceptron_tagger')
nltk.download('state_union')
from nltk.corpus import state_union
from nltk.tokenize import PunktSentenceTokenizer
  
# process the text and print Named entities
# tokenization
train_text = state_union.raw()
  
sample_text = state_union.raw("2006-GWBush.txt")
custom_sent_tokenizer = PunktSentenceTokenizer(train_text)
tokenized = custom_sent_tokenizer.tokenize(sample_text)
# function 
def get_named _entity():
    try:
        for i in tokenized:
            words = nltk.word_tokenize(i)
            tagged = nltk.pos_tag(words)
            namedEnt = nltk.ne_chunk(tagged, binary=False)
            namedEnt.draw()
    except:
        pass
get_named_entity()

Una oración Ejemplo de NER

Publicación traducida automáticamente

Artículo escrito por pawangfg y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *