Update README.md
Browse files
README.md
CHANGED
@@ -8,3 +8,42 @@ pipeline_tag: fill-mask
|
|
8 |
tags:
|
9 |
- code
|
10 |
---
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8 |
tags:
|
9 |
- code
|
10 |
---
|
11 |
+
Introducción
|
12 |
+
El objetivo del presente trabajo es generar un modelo para identificar la similitud semántica entre dos oraciones (o Semantic Textual Similarity: “STS”), es decir, medir qué tan parecidos son dos documentos. Dicho modelo será a través de una red neuronal siamesa, que implica usar la misma red, con idénticos parámetros, para procesar la premisa y la hipótesis.
|
13 |
+
“La tarea STS está motivada por la observación de que modelar con precisión la similitud de significado de las oraciones es un problema fundamental de comprensión del lenguaje relevante para numerosas aplicaciones, incluyendo: traducción automática (MT), resumen, generación, pregunta respuesta (QA), calificación de respuestas cortas, semántica, sistemas de búsqueda, diálogo y conversación.” (Cera Et al, 2017, p. 1).
|
14 |
+
|
15 |
+
Datos
|
16 |
+
El dataset elegido fue XNLI en español. El mismo contiene los campos de 'premise', 'hypothesis' y 'label’, donde los dos primeros campos son oraciones o cadenas de texto mientras que el tercero es la similitud semántica entre ambas con la siguiente codificación: 'entailment': 0, 'neutral': 1, 'contradiction': 2
|
17 |
+
El mismo está compuesto por tres dataset:
|
18 |
+
TRAINING, con 392.702 datos;
|
19 |
+
TEST, con 5.010 datos;
|
20 |
+
VALIDATION, con 2.490 datos.
|
21 |
+
|
22 |
+
Además se utiliza un vocabulario en español que contiene alrededor de 31.000 palabras, incluyendo los siguientes caracteres especiales: "[MASK]", "[PAD]", "[EOS]","[UNK]","[CLS]","[SEP]" que se encuentran en las primeras posiciones del vocabulario.
|
23 |
+
Dicho vocabulario surge del modelo de Huggigface cuyo model_name es "dccuchile/bert-base-spanish-wwm-uncased".
|
24 |
+
|
25 |
+
|
26 |
+
Método
|
27 |
+
|
28 |
+
Tokenización
|
29 |
+
En primer lugar importamos AutoTokenizer y obtenemos el tokenizador del modelo definido anteriormente. El mismo, al tokenizar adicionalmente de convertir los tokens o palabras en su ID del vocabulario, le incorpora al inicio el id del carácter especial “CLS” y al final el “SEP”.
|
30 |
+
Además fijamos como parámetro la longitud máxima del modelo (tokenizer.model_max_length) esto genera que corte las premisas y las hipotesis si son mas largas y que las complete con padding si son mas cortas hasta completar la longitud deseada (con “PAD”)..
|
31 |
+
Notamos que este tokenizador contiene funciones como las del itos y el stoi ya generadas.
|
32 |
+
|
33 |
+
Procedemos a tokenizar el dataset a utilizando la función map, tanto para la premisa como la hipótesis.
|
34 |
+
|
35 |
+
|
36 |
+
Armado de Batches
|
37 |
+
Con la tokenizacion realizada procedemos a separar los Batches, para lo cual usamos el dataloader de torch.
|
38 |
+
El resultado serán batches de tamaño 32 para el dataset de train, y 16 tanto para el de validación como para el de test. Sus dimensiones son el tamaño de cada batch x la cantidad de elementos. En el caso de la premisa y la hipótesis la cantidad de elementos será el largo utilizado para la tokenización mientras que en el caso del label, al ser único, la dimension será del tamaño del batch x 1.
|
39 |
+
Asimismo incorporamos a los batches el attention_mask de la premisa y de la hipótesis.
|
40 |
+
|
41 |
+
|
42 |
+
|
43 |
+
Modelo base
|
44 |
+
BERT es una red pre-entrenada de transformadores (...). El input de BERT consiste en las dos oraciones separadas por un token especial [SEP]. (...) yla salida se pasa a una función de regresión simple para derivar la etiqueta final. (Reimers and Gurevich, 2019, p. 2).
|
45 |
+
Sobre este modelo base, se realizó el finetuning de nuestra red, basándonos en el siguiente diagrama (Reimers and Gurevich, 2019, p. 3).:
|
46 |
+
|
47 |
+
Es decir que lo que haremos será pasar la premisa y la hipótesis por una BERT, obteniendo luego un pooler output para cada una de ellas (“u” y “v”). Luego se concatenan, junto con el módulo de la diferencia, y ese resultado es pasado por la capa lineal obteniendo 3 resultados, que serán las probabilidades asociadas a cada label.
|
48 |
+
Se procedió a entrenar la red con el dataset de train, utilizando como función de pérdida la entropía cruzada, y luego se procedió a validar el modelo. Los resultados se exponen en la próxima sección.
|
49 |
+
|