Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Semana 02
• TEMA03
2.
EJERCICIOS CON R
3.
TEMA 02
Procesamiento del lenguaje
natural
✓ Término genérico que abarca todo aquello que permite a las máquinas
procesar el lenguaje humano tanto en forma escrita, verbal, o visual.
Datos estructurados
Representación numérica adecuada
enguaje Natural
Procesamiento del Lenguaje Natural
Comprensión de la información
Pico de expectativas
lanzamiento sobredimensionadas Abismo de desilusión Rampa de consolidación Meseta de productividad
Pre-procesado texto:
• Segmentación en frases
• Segmentación en tokens Sistemas/Algoritmos basados en:
OCR • Eliminar palabras comunes • reglas
(stopwords) • datos (aprendizaje automático)
• Lematización/Stemming ✓ Espacios semánticos
• Análisis morfológico ✓ Modelos de lenguaje
voz a texto • Etiquetado gramatical(Part-
Of-Speech tagging)
Descripción
de imagen
SPACY (https://spacy.io/) toolkit en Python con el estado del arte en técnicas de procesamiento del lenguaje natural
Demos:
https://spacy.io/universe
Introducción a la Inteligencia Artificial: Procesamiento del Lenguaje Natural
Procesamiento del Lenguaje Natural
Pero, ¿cómo representamos los tokens/palabras en una máquina?
La máquina trabaja con números, …..
…. luego debemos trasformar las palabras a números
Opción 1.
Utilizamos un código numérico, p.e. las numeramos de forma correlativa
netflix 1
encontrar 2
juego 3 ¿tiene algún significado el valor numérico?
calamar 4
nuevo 5
fenómeno 6
mundial 7
ni 8 ¿Podemos calcular la proximidad semántica?, ¿tiene sentido?
siquiera 9
propio 10
plataforma 11
contar 12
¿cómo lo construimos?
Semántica distribucional
D1 D2 D3 … DN
P1 30 0 40 80 ….. dotar un presupuesto de la eurozona para invertir en los países….
P2 23 12 0 0
… palabras contexto izquierdo palabra central palabras contexto derecho
PM 0 67 80 4
Sótano
Pasillo
Patio Ejemplo interactivo
Ático
Salón
Balcón
…
Fútbol
Béisbol
Rugby
Baloncesto
La proximidad semántica entre Tenis
unidades lingüísticas se representa Balonmano
por la proximidad en el espacio Esquí
….
Reina
Mujer -volar+navegar =
Hombre
- taza + caja =
- caja + taza =
https://huggingface.co/
https://openai.com/
https://beta.openai.com/examples
Cada libro tiene un identificador único y se proporciona en varios formatos. Nosotros vamos a crear un corpus de ejemplo con cuatro libros en
formato texto: Five of Maxwell's Papers by James Clerk Maxwell (4908), Relativity: the Special and General Theory by Albert Einstein (5001),
Insectivorous Plants by Charles Darwin (5765), Opticks by Isaac Newton (33504).
Para ello el paquete gutenbergr de R incorpora la función gutenberg_download(), que podemos ejecutar así:
library(gutenbergr)
books <- gutenberg_download(c(4908 ,5001, 5765, 33504),
meta_fields = "author")
Al igual que ocurría anteriormente, si algún paquete no está instalado puedes instalarlo con el siguiente comando:
install.packages("gutenbergr")
2.3. Obtener un corpus
• Este comando nos devuelve un data frame con las líneas de texto de cada libro, tal como muestra la figura 2.
• El paquete tidytext incorpora la función unnest_token() que nos permite descomponer en tokens (en este caso, palabras) las líneas de texto. El
paquete dplyr incorpora la función count() que nos permite contar cuántas palabras hay de cada tipo agrupadas por autor. Podemos ejecutar este
conteo con los siguientes comandos:
library(tidytext)
library(dplyr)
unnest_tokens(word,text) %>%
count(author,word,sort=TRUE)
2.3. Obtener un corpus
• La figura 3 muestra el resultado de hacer esta descomposición en palabras y la
TF−IDF (𝑡,𝑑,𝐷)=𝑇𝐹(𝑡,𝑑)∗𝐼𝐷𝐹(𝑡,𝐷)
• El índice TF (Term Frequency) mide la ocurrencia de un término en un documento. En la figura 3 vemos el número de veces que ocurre un término en cada documento n(t, d).
Dado que cada documento tiene una longitud distinta, el índice TF calcula el ratio entre el número de veces que aparece el término en el documento n(t, d) y el número de
palabras totales que tiene el documento n(d), es decir:
• El índice IDF (Inverse Document Frequency) mide lo importante que es un término t. Los términos que más veces aparecen en el corpus reciben una puntuación más baja. La
fórmula exacta de cálculo de este índice es:
• Donde n(D) es el número de documentos del corpus, y n(t,D) el número de documentos del corpus donde aparece el término t.
• Cabe observar que en ningún momento hemos eliminado las palabras vacías. Una de las ventajas de usar el índice TF-IDF es que el índice IDF reduce especialmente la puntuación
de las palabras vacías.
2.5. Cálculo del índice TF-IDF con R
• En esta sección vamos a calcular el índice TF-IDF de las palabras contadas en la figura 3. La
función bind_tf_idf() del paquete tidytext nos permite calcular este índice. La función recibe un
data frame de términos y genera los nuevos campos tf, idf, y tf_idf con estos valores calculados
para cada término.
rated_words <- words %>%
bind_tf_idf(word,author,n) %>%
arrange(desc(tf_idf))
• Después podemos usar la función top_n() combinada con group_by() para elegir los quince
términos de cada autor con mayor puntuación en el campo tf_idf:
top_words <- rated_words %>%
group_by(author) %>%
top_n(15,tf_idf) %>%
ungroup() %>%
arrange(author,desc(tf_idf))
2.6. Visualización de las palabras características
• Podemos usar la función ggplot() del paquete ggplot2
para generar la visualización de las palabras
características de cada documento:
library(ggplot2)
top_words %>%
mutate(word=reorder(word,tf_idf)) %>%
ggplot(aes(word,tf_idf,fill="author")) +
geom_col(show.legend = FALSE) +
coord_flip()
• Preprocesador:
• Proceso de macros.
• Inclusión de archivos.
• Preprocesadores racionales y extensiones a los lenguajes.
• Ensambladores. Dependiendo del compilador, mientras que algunos generan código ensamblador
que será necesario traducir a código máquina, otros directamente generan código máquina.
• Análisis sintáctico. Su función es determinar que la sintaxis del código fuente es la especificada en el propio
compilador.
• Análisis semántico. Es el encargado de asegurar que lo escrito en el código fuente tiene sentido semántico. Por
ejemplo, que los tipos de los elementos son los adecuados para las operaciones indicadas.
• Si una cadena de entrada supera las fases de análisis ya no se realizan más comprobaciones, pues se
comienza la etapa de traducción. Esto quiere decir que todos los errores lógicos de la cadena de entrada
se deben detectar en estas tres fases de análisis.
3.5. Proceso de síntesis
• Una vez comprobado que el código de usuario es correcto, se
comienza el proceso de síntesis cuyo objetivo es generar un cambio
de representación de la cadena de entrada proporcionada. Al igual
que el proceso de análisis, la etapa de síntesis se divide en diferentes
fases:
• Generación de código intermedio. Se centra en crear una representación
intermedia previa al código objeto final. Al introducir esta fase se logra un
nivel de independencia adicional entre el compilador y la arquitectura
subyacente.
• Optimización de código intermedio. Trata de mejorar el código intermedio, de
manera que se produzca un mejor código destino. Por lo general, la mejora
significa más rapidez, pero pueden lograrse otros objetivos, como un código
más corto o un código de destino que consuma menos recursos.
• Generador de código. Consiste en generar el código objeto, que puede ser
código ensamblador (requiere un ensamblado) o código máquina final.
Introducción
¿Qué es un compilador (traductor)?
• Programa que lee un programa (fuente) en un lenguaje ascii y lo traduce a un programa EQUIVALENTE en otro
lenguaje (objeto)
• Además:
• da mensajes de error
• lleva a cabo determinadas “correcciones” (recuperación de errores)
• puede optimizar el código generado
• “independencia” de la máquina
• No siempre el lenguaje objeto tiene que ser de “bajo nivel” (traductor)
• editores/formateadores de texto
• nroff, troff, eqn, tbl, pic de UNIX,TeX
• lenguajes de consulta
• SQL, shells
– La ejecución es interactiva.
– Se compila una vez, se ejecuta n veces – Se traduce cada vez que se ejecuta.
– Permite interaccionar más con el
– El proceso de compilación tiene una
código en tiempo de ejecución.
visión global de todo el programa, por
– Necesita menos memoria
lo cual la gestión de errores es más
eficiente.
• sustituciones de macros
• eliminación de comentarios
• inclusión de ficheros
• Segunda fase
• es la parte fundamental (y siempre presente)
• consta de:
• analizador léxico
• analizador sintáctico
• generador de código
• Tercera fase
• no siempre presente
• realiza optimizaciones (algunas) sobre el código (intermedio) generado
• Cuarta fase:
• traduce el código intermedio (optimizado) a
• ensamblador
• binario
Programa Fuente
Análisis Léxico
Análisis Sintáctico
Manejo de la Manejo de
Análisis Semántico Errores
Tabla de Símbolos
Generación de Código Intermedio
Optimización de Código
Generación de Código
Programa Objeto
Las partes principales
• La primera fase (front end) es la encargada de analizar el programa fuente
– Fase de Análisis.
• El puente de unión entre las dos fases era un lenguaje intermedio que se
designó con el nombre de UNCOL (UNiversal Computer Oriented
Language).
El analizador léxico
• Lo realiza un “scanner”
• también “tokenizer”
• El scanner recorre los caracteres de entrada (el fuente) hasta reconocer un “token”
• ejemplos: while,if,==,>=,ancho,...
• sustituir macros
• listar el fuente
• O “parser”
• Objetivo: agrupar los tokens suministrados por el scanner para reconocer “frases”
• ¿Cómo lo hace?
• producciones
El analizador sintáctico
• Ejemplo:
• supongamos sintaxis asignación como:
• y debemos analizar
El analizador sintáctico
• tipo
• valor
• ....
Generación de Código Intermedio
• “desenrrollado” de bucles
• ....
GENERACION DE CODIGO
2) A veces un error provoca una avalancha de muchos errores que se solucionan con
el primero
RA 1
Actividad 1
RA 2
Test
Actividad 2
RA 3
muchas gracias
Esta nueva plantilla se ajusta al nuevo logo de la fundación