Tesis de Agust N Capello
Tesis de Agust N Capello
Fı́sica y Computación
Sistema de recomendación
para textos legales
Tesis
que para obtener el tı́tulo de
presenta
i
Resumen
ii
Abstract
iii
Índice general
1. Introducción y Motivación 1
1.1. Descripción de los casos de uso . . . . . . . . . . . . . 2
2. Nociones Preliminares 3
2.1. Sistemas de recomendación . . . . . . . . . . . . . . . . 3
2.1.1. Clases de sistemas de recomendación . . . . . . 3
2.2. Medidas de semejanza textual . . . . . . . . . . . . . . 5
2.2.1. Tf-Idf . . . . . . . . . . . . . . . . . . . . . . . 5
2.2.2. Document Embeddings con Doc2Vec . . . . . . 7
2.3. Trabajo Relacionado . . . . . . . . . . . . . . . . . . . 12
2.3.1. Otros recomendadores de textos legales . . . . . 12
2.3.2. Recomendadores de código abierto . . . . . . . 14
2.4. Sobre el corpus . . . . . . . . . . . . . . . . . . . . . . 18
2.4.1. Fuente . . . . . . . . . . . . . . . . . . . . . . . 18
2.4.2. Estructura . . . . . . . . . . . . . . . . . . . . . 18
2.4.3. Estadı́sticas . . . . . . . . . . . . . . . . . . . . 20
iv
4. Implementación 30
4.1. Herramientas Utilizadas . . . . . . . . . . . . . . . . . 30
4.1.1. Vectorización de texto y cálculo de semejanzas . 30
4.1.2. Interfaz . . . . . . . . . . . . . . . . . . . . . . 31
4.1.3. Almacenamiento . . . . . . . . . . . . . . . . . 32
4.1.4. Preproceso de texto . . . . . . . . . . . . . . . . 32
4.1.5. Multithreading . . . . . . . . . . . . . . . . . . 33
4.1.6. Gráficas . . . . . . . . . . . . . . . . . . . . . . 33
4.1.7. Interactividad intérprete Python . . . . . . . . . 33
4.1.8. Otras . . . . . . . . . . . . . . . . . . . . . . . . 33
4.2. Hardware . . . . . . . . . . . . . . . . . . . . . . . . . 34
4.3. Módulos del sistema . . . . . . . . . . . . . . . . . . . 35
4.3.1. Scripts . . . . . . . . . . . . . . . . . . . . . . . 36
4.4. Creación de Corpus: scraping y preproceso . . . . . . . 37
4.5. Entrenamiento . . . . . . . . . . . . . . . . . . . . . . 38
4.5.1. Preproceso de texto . . . . . . . . . . . . . . . . 38
4.5.2. Bases de Datos . . . . . . . . . . . . . . . . . . 39
4.5.3. Modelos de vectorización . . . . . . . . . . . . . 42
4.6. Servidor Web . . . . . . . . . . . . . . . . . . . . . . . 45
5. Experimentos 51
5.1. Método de evaluación . . . . . . . . . . . . . . . . . . . 51
5.2. Análisis de Resultados . . . . . . . . . . . . . . . . . . 53
5.2.1. Normas relacionadas a normas . . . . . . . . . . 53
5.2.2. Normas relacionadas a textos libres . . . . . . . 54
5.2.3. Otros comentarios . . . . . . . . . . . . . . . . 55
v
Bibliografı́a 59
Apéndice 62
.1. Ejemplos . . . . . . . . . . . . . . . . . . . . . . . . . . 62
.1.1. Ejemplo de Ley . . . . . . . . . . . . . . . . . . 62
.1.2. Ejemplo de fragmento libre . . . . . . . . . . . 63
vi
Capı́tulo 1
Introducción y Motivación
1
2 CAPÍTULO 1. INTRODUCCIÓN Y MOTIVACIÓN
Nociones Preliminares
3
4 CAPÍTULO 2. NOCIONES PRELIMINARES
2.2.1. Tf-Idf
Del inglés Term frequency – Inverse document frequency Tf-Idf es
una medida numérica hallada a partir de un conjunto de documentos
D para un término t en un documento d ∈ D, que expresa cuán rele-
vante es t para el documento d en función del conjunto de documentos.
t puede consistir de una o más palabras consecutivas (n-grama) de d.
El valor tf-idf aumenta proporcionalmente al número de veces que
una palabra aparece en el documento, pero es compensada por la fre-
cuencia de la palabra en la colección de documentos, lo que permite
manejar el hecho de que algunas palabras son generalmente más co-
munes que otras.
Durante el texto llamamos “modelo”, con el mismo nombre, refi-
riendo al grupo de estas medidas calculadas y ordenadas a partir de los
6 CAPÍTULO 2. NOCIONES PRELIMINARES
Justificación matemática
Sea t un término en un documento d del conjunto de documentos
D. Tf-idf es el producto de dos medidas, frecuencia de término (tf )
y frecuencia inversa de documento (idf ). Existen varias maneras de
determinar el valor de ambas. En el caso de tf (t, d) es posible usar la
frecuencia bruta de t en d, aunque también es posible usar frecuencias
binarias, logarı́tmicas, normalizadas, etc. Ejemplificando la última:
f (t, d)
tf (t, d) =
max{f (t, d) : t ∈ d}
Donde el denominador es el máximo valor de frecuencia para un
término en el documento. De esta forma tf toma valores entre 0 y 1.
idf , por otro lado, es una medida que representa si el término es
común o no, en D. Una forma de calcularlo es de la siguiente manera:
|D|
idf(t, D) = log
1 + |{d ∈ D : t ∈ d}|
donde |X| representa la cardinalidad del conjunto X. Luego, la
medida tf-idf se calcula como:
PV-DM
Word2Vec consiste de una red neuronal con tres capas: una de
entrada (input), una oculta (o hidden layer) y una de salida (ouptut).
La idea de CBOW, es aprender representaciones de palabras que
puedan predecir una palabra dadas las palabras que la rodean. O
dicho de otro modo, de actuar como una memoria que recuerde qué es
lo faltante (en este caso una palabra) dado un determinado contexto
(conjunto de palabras).
PV-DBOW
El modelo de Distributed Bag of Words (DBOW) es ligeramen-
te distinto (o lo “opuesto”) al modelo PV-DM. El modelo DBOW
“ignora” las palabras de contexto en la entrada, pero obliga al mo-
delo a predecir palabras muestreadas aleatoriamente del documento
(dentro de la “ventana”), en la salida. Para el ejemplo anterior, di-
gamos que el modelo está aprendiendo a través de la predicción de 4
palabras muestreadas. Entonces, para aprender el vector de documen-
to, se muestrean 4 palabras de {the, cat, sat, on, the, mat}, como se
muestra en el diagrama 2.4, repitiendo este proceso un gran número
de veces análogamente al anterior proceso, para varias muestras en el
documento.
1
https://medium.com/scaleabout/a-gentle-introduction-to-doc2vec-
db3e8c0cce5e
12 CAPÍTULO 2. NOCIONES PRELIMINARES
2.4.1. Fuente
El corpus inicialmente se obtuvo realizando Web Scraping utili-
zando la herramienta Scrapy en Python para tal fin. Los scripts han
sido desarrollados por Cristian Cardellino [18] y posteriormente adap-
tados al proyecto. En esencia esta técnica consiste en un programa que
envı́a solicitudes http usando ciertos criterios, recibiendo la respuesta
http y extrayendo los datos recibidos. En nuestro caso, estos datos
consistirán del id de la norma y su texto, entre otros metadatos. De
esta forma, se han capturado todas las normas accesibles del buscador
de la página www.infoleg.gob.ar/.
2.4.2. Estructura
La estructura fundamental xml de cada norma está representada
en el siguiente diagrama.
Entre otros atributos encontrados en el xml:
- El atributo id de la etiqueta <law> es el id de la norma, análoga
al id de la misma en la plataforma Infoleg.
- law id de la etiqueta <link> es el id de la norma referida en el
texto (no todas las normas referidas en el texto están incluı́das).
- begin y end son enteros que representan posiciones en el texto.
2.4. SOBRE EL CORPUS 19
2.4.3. Estadı́sticas
Presentamos algunas estadı́sticas relevantes del corpus, que darán
noción sobre el tipo de texto tratado, con el fin de dar a conocer sus
principales caracterı́sticas y ası́ entender cómo afectará a la construc-
ción del motor y consideraciones a tener en cuenta en la etapa de
preproceso, aprendizaje del modelo, manipulación, etc.
3.1. Introducción
3.1.1. Primeras aproximaciones
Abordamos las primeras aproximaciones hacia el diseño y arqui-
tectura del sistema de recomendación de textos legales. Más adelante
daremos detalles sobre su interfaz e interacción con el usuario.
Como hemos descrito anteriormente, dependiendo del problema,
diferirá la elección de qué tipo de sistema de recomendación (cola-
borativo, por contenido) es utilizado para dar las recomendaciones.
Su arquitectura variará por ende, en base al mismo y los datos del
dominio.
En nuestro caso, el tipo del sistema de recomendación será de
content-based filtering y el tipo de los datos será texto. No abarcaremos
el caso del uso de datos de usuarios registrados en la plataforma (si
los hubiere), como por ejemplo sus intereses sobre ciertas normas,
historiales de búsqueda, tiempos de lectura, etc. propios de sistemas
hı́bridos o de collaborative filtering, aunque puede ser implementado a
futuro. Generalmente en los últimos, los tipos de datos de sus dominios
son más complejos de analizar por su contenido en sı́ (e.g. pelı́culas,
música, obras de arte, etc.) lo cual conlleva al uso de meta-datos y
22
3.1. INTRODUCCIÓN 23
3.2. Etapas
Ya analizadas las posibles decisiones de diseño y con intención de
clarificar los pasos ejecutados en el proyecto y guiar al lector duran-
te las distintas secciones, presentamos el flujo de datos dentro del
sistema que puede ser resumido en tres grandes etapas. Las mismas
representan la arquitectura final del proyecto.
A pesar de que no necesariamente cada etapa debe finalizar por
completo en tiempo de ejecución para que comience la siguiente, las
ordenamos por dependencia de datos:
A - Creación de Corpus
Implementación
30
4.1. HERRAMIENTAS UTILIZADAS 31
Gensim
Gensim es una plataforma de código abierto en Python para mode-
lado vectorial de textos y modelado temático. Está diseñada especı́ca-
mente para manejar grandes colecciones de textos, usando streaming
de datos y algoritmos incrementales eficientes.
Utilizamos la clase gensim.models.doc2vec.Doc2Vec [21] para
motores de vectorización del sistema, la cual implementa el algoritmo
Doc2Vec antes mencionado.
4.1.2. Interfaz
Dash by Plotly
Dash [24] es un framework de Python que permite construir inter-
faces web interactivas, principalmente para aplicaciones web analı́ti-
cas. Está construido sobre Plotly.js, React y Flask, y permite agregar
fácilmente dropdowns, formularios y gráficos ligados a la aplicación
de análisis, utilizando sólo código Python de base.
32 CAPÍTULO 4. IMPLEMENTACIÓN
4.1.3. Almacenamiento
SQLite3
pickle
nltk
4.1.5. Multithreading
joblib, threading
4.1.6. Gráficas
wordcloud, matplotlib
4.1.8. Otras
docopt: Para establecer la interfaz de scripts python en lı́nea de
comandos bash.
4.2. Hardware
Este proyecto se ha implementado sobre el hardware que provee el
Centro de Computación de Alto Desempeño (CCAD) de la Universi-
dad Nacional de Córdoba, tanto para pruebas como para despliegue.
JupiterAce
La computadora que ha sido dada como recurso primario para
realizar el proyecto. Entre otras especificaciones, posee un procesador
Intel(R) Xeon(R) CPU E5-2620 v3 @ 2.40GHz (12 núcleos) y 132GB
de memoria RAM. Accesible vı́a ssh. Fue necesaria pues se requirió
gran cantidad de memoria RAM y capacidad de cómputo para finali-
zar el entrenamiento de los modelos en tiempos adecuados, los cuales
no serı́an posibles en una computadora personal. Sin esta computado-
ra, el proyecto no hubiera sido posible de realizar.
Nabucodonosor
Ha sido utilizada junto a JupiterAce para similares tareas, por un
perı́odo menor de tiempo.
4.3. MÓDULOS DEL SISTEMA 35
4.3.1. Scripts
Programas python ejecutables por lı́nea de comandos. Debajo del
directorio project/recommenders/scripts/.
Entrenamiento
Script train.py el cual es utilizado para entrenar los motores de
recomendación. Uso en consola de comandos:
Estadı́sticas
Para obtener estadı́sticas sobre el corpus se utilizó el script stats.py.
Entre otras, obtiene palabras más mencionadas, tipos de normas y su
frecuencia y porcentaje sobre el corpus, normas más referenciadas,
volcando los datos a archivos .csv. Se crea un gráfico de nube de
palabras (wordcloud) con las palabras tokenizadas del corpus.
4.4. CREACIÓN DE CORPUS: SCRAPING Y PREPROCESO 37
Evaluación
Script eval.py para que el sistema de n recomendaciones para una
norma con id k usando el modelo de tipo m a partir de la base de datos
de recomendaciones ya construida.
1
servicios.infoleg.gob.ar/infolegInternet/verNorma.do?id=N
38 CAPÍTULO 4. IMPLEMENTACIÓN
4.5. Entrenamiento
En la presente sección detallamos implementación de los pasos
mencionados en la etapa de entrenamiento de los motores del sistema.
a) convertirlo a minúsculas
b) ignorarlo si está dentro del conjunto de palabras especı́ficas
a ignorar (no por ejemplo)
c) ignorarlo si es un stopword del castellano (artı́culos, pro-
nombres, preposiciones, etc.). (nltk.corpus.stopwords)
d) quitar caracteres no deseados como comillas ”, apóstrofe ’,
o el sı́mbolo o , usando expresiones regulares (re)
e) tratar selectivamente el caso que el token contenga alguna
sub-palabra que contenga los caracteres en el conjunto . -
\/ y el mismo esté rodeado por números
4.5. ENTRENAMIENTO 39
Recomendaciones generales/simples
Doc2Vec
Implementación por Gensim del método Doc2Vec [21].
La gran capacidad de esta librerı́a permitió hacer realidad la
tarea núcleo del proyecto, que vincula los cálculos matemáticos
internos para obtener el orden de las recomendaciones.
Se han usado los siguientes parámetros en el entrenamiento del
modelo:
Tf-Idf
Motor usando el vectorizador TF-IDF de Scikit-Learn [20]. He-
mos usado los parámetros:
Tf-Idf
• Se crea un motor Tf-Idf general (de todas las normas)
• Se crea un hilo para cada tipo de norma, cada uno entre-
na un modelo Tf-Idf con el vocabulario del vectorizador
general, y las normas de ése tipo
4.6. SERVIDOR WEB 45
Experimentos
51
52 CAPÍTULO 5. EXPERIMENTOS
tf-idf doc2vec
general por tipo general por tipo
evaluador 1 90 % 50.25 % 100 % 87.5 %
evaluador 2 86.11 49.16 % 94.44 % 71.66 %
promedio 88.05 % 49.71 % 97.22 % 79.58 %
tf-idf doc2vec
general por tipo general por tipo
evaluador 1 83.33 % 70.58 % 53.33 % 45.09 %
tf-idf doc2vec
general por tipo general por tipo
tiempo 1.28 horas 1.54 horas 2.28 horas 9.46 horas
Conclusiones y trabajo
futuro
6.1. Aportes
El resultado principal de esta tesis es un sistema de recomenda-
ción de textos legales basado en semejanza textual sobre el dominio
de la legislación argentina (base documental InfoLeg). Se desplegó el
sistema end-to-end, desde la recolección de datos a la interfaz gráfica
de usuario final.
A raı́z del proyecto, se comprendieron los fundamentos y funcio-
namiento de formas de representar documentos como vectores: Para-
graph Vector y Tf-Idf.
Se ha logrado implementar una solución adaptada al contenido,
la cual brinda recomendaciones para y de textos existentes en una
plataforma o inexistentes, lo cual tiene aplicación directa al portal
www.infoleg.gob.ar, como también adaptable a otra clase de textos,
y de gran utilidad para conjuntos de textos no tan estructurados, como
por ejemplo fallos judiciales, entre muchos otros.
Es de real interés tanto para estudiantes de Derecho como para
avanzados en la profesión por utilidades de aprendizaje, investiga-
56
6.2. TRABAJO FUTURO 57
59
60 BIBLIOGRAFÍA
.1. Ejemplos
.1.1. Ejemplo de Ley
HONORABLE CONGRESO DE LA NACION ARGEN-
TINA
CONMEMORACIONES
DIA NACIONAL DEL REMERO
15-oct-2003
Resumen:
DECLARASE DIA NACIONAL DEL REMERO EL 11 DE ABRIL
DE CADA AÑO.
Texto Completo:
CONMEMORACIONES
Ley 25.793
Declárase Dı́a Nacional del Remero el 11 de abril de cada año.
Sancionada: Octubre 15 de 2003.
Promulgada de Hecho: Noviembre 10 de 2003.
El Senado y Cámara de Diputados de la Nación Argentina reunidos
en Congreso, etc. sancionan con fuerza de Ley:
ARTICULO 1o — Declárase Dı́a Nacional del Remero el 11 de
abril de cada año, fecha conmemorativa del natalicio de don Alberto
Demiddi.
ARTICULO 2o — Comunı́quese al Poder Ejecutivo.
62
.1. EJEMPLOS 63