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
- 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
- A continuación se muestra una lista y su significado de etiquetas de entidad espacial:
- 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()