"Los métodos para calcular la similaridad semántica entre dos oraciones son:\n",
"\n",
"- **avg_cosine**: el vector de una oración se obtiene haciendo la media (*average*) de los vectores de las palabras de esa oración. La similaridad entre dos vectores se calcula utilizando la similitud coseno.\n",
"- **avg_cosine**: el vector de una oración se obtiene haciendo la media (*average*) de los vectores de las palabras de esa oración. La similaridad entre dos vectores se calcula utilizando la similitud coseno.\n",
"- **wmd**: la similariad entre dos oraciones se calcula como el contrario de ladistancia *Word Mover's Distance* entre las mismas. El modelo *KeyedVectors* de *gensim* incorpora el cálculo de esta distancia."
# Comparativa de Word2Vec, GloVe y FastText para obtener la similaridad semántica entre pares de textos
## Pablo Valdunciel Sánchez
%% Cell type:markdown id: tags:
## 1. Modelos
%% Cell type:markdown id: tags:
Utilizamos el modelo *KeyedVectors* de la librería [*gesim*](https://radimrehurek.com/gensim/index.html) para cargar los vectores pre-entrenados de los diferentes modelos
%% Cell type:code id: tags:
``` python
fromgensim.modelsimportKeyedVectors
```
%% Cell type:markdown id: tags:
Cargamos los vectores pre-entrenados con modelos Word2Vec, GloVe y FastText. Los vectores pre-entrenados de cada modelo utilizados son:
-**FastText**: [rawl-300d-2M.vec.zip: 2 million word vectors trained on Common Crawl (600Btokens)](https://dl.fbaipublicfiles.com/fasttext/vectors-english/crawl-300d-2M-subword.zip)
En el caso de los vectores de GloVe, se ha utilizado la función [*gensim.scripts.glove2word2vec.glove2word2vec*](https://radimrehurek.com/gensim/scripts/glove2word2vec.html) para convertir el archivo al formato Word2Vec.
Haciendo uso de las funciones del módulo *load.py* cargamos los conjuntos de test de las tareas STS12, STS13, STS14, STS15 y STS16. Estas funciones llevan a cabo un preprocesamiento de las oraciones según los parámetros que se indiquen. Entre las posibilidades de preprocesamiento se encuentran:
-**lowercase**: hacer que todas las palabras estén en minúscula.
-**stop_words**: eliminar las palabras que no aportan casi significado semántico como determinantes, preprosiciones, etc.
-**punctuation**: elminar los símbolos de puntuación.
-**only_ascci**: eliminar las palabras que no estén formadas por caracteres ASCII.
-**lemmatization**: sustituir las palabras por su lexema.
El preprocesamiento del texto está implementado en la función *preprocess* en el módulo *utils.py*. La función *preprocess* hace uso de la librería [spaCy](https://spacy.io/) para llevar a cabo el preprocesamiento.
En este caso no se aplica ningún tipo de preprocesamiento.
%% Cell type:code id: tags:
``` python
PATH_DATASETS='./data/datasets/STS'
PATH_FREQUENCIES='./data/frequencies.tsv'
PREPROCESSING={'lowercase':False,
'stop_words':False,
'punctuation':False,
'only_ascii':False,
'lemmatization':False
}
```
%% Cell type:markdown id: tags:
Cargamos también las frecuencias de las palabras en el corpus par poder aplicar el SIF.
%% Cell type:code id: tags:
``` python
freqs=load_frequencies(PATH_FREQUENCIES)
```
%% Cell type:code id: tags:
``` python
sts12=load_sts_12(PATH_DATASETS,PREPROCESSING)
sts13=load_sts_13(PATH_DATASETS,PREPROCESSING)
sts14=load_sts_14(PATH_DATASETS,PREPROCESSING)
sts15=load_sts_15(PATH_DATASETS,PREPROCESSING)
sts16=load_sts_16(PATH_DATASETS,PREPROCESSING)
```
%% Output
***** TASK: STS12 *****
Preprocessing -MSRpar-
-MSRpar- preprocessed correctly
Preprocessing -MSRvid-
-MSRvid- preprocessed correctly
Preprocessing -SMTeuroparl-
-SMTeuroparl- preprocessed correctly
Preprocessing -surprise.OnWN-
-surprise.OnWN- preprocessed correctly
Preprocessing -surprise.SMTnews-
-surprise.SMTnews- preprocessed correctly
***** TASK: STS13 (-SMT) ***
Preprocessing -FNWN-
-FNWN- preprocessed correctly
Preprocessing -headlines-
-headlines- preprocessed correctly
Preprocessing -OnWN-
-OnWN- preprocessed correctly
***** TASK: STS14 *****
Preprocessing -deft-forum-
-deft-forum- preprocessed correctly
Preprocessing -deft-news-
-deft-news- preprocessed correctly
Preprocessing -headlines-
-headlines- preprocessed correctly
Preprocessing -images-
-images- preprocessed correctly
Preprocessing -OnWN-
-OnWN- preprocessed correctly
Preprocessing -tweet-news-
-tweet-news- preprocessed correctly
***** TASK: STS15 *****
Preprocessing -answers-forums-
-answers-forums- preprocessed correctly
Preprocessing -answers-students-
-answers-students- preprocessed correctly
Preprocessing -belief-
-belief- preprocessed correctly
Preprocessing -headlines-
-headlines- preprocessed correctly
Preprocessing -images-
-images- preprocessed correctly
***** TASK: STS16 *****
Preprocessing -answer-answer-
-answer-answer- preprocessed correctly
Preprocessing -headlines-
-headlines- preprocessed correctly
Preprocessing -plagiarism-
-plagiarism- preprocessed correctly
Preprocessing -postediting-
-postediting- preprocessed correctly
Preprocessing -question-question-
-question-question- preprocessed correctly
%% Cell type:markdown id: tags:
## 3. Métodos
%% Cell type:markdown id: tags:
Los métodos para calcular la similaridad semántica entre dos oraciones son:
-**avg_cosine**: el vector de una oración se obtiene haciendo la media (*average*) de los vectores de las palabras de esa oración. La similaridad entre dos vectores se calcula utilizando la similitud coseno.
-**avg_cosine**: el vector de una oración se obtiene haciendo la media (*average*) de los vectores de las palabras de esa oración. La similaridad entre dos vectores se calcula utilizando la similitud coseno.
-**wmd**: la similariad entre dos oraciones se calcula como el contrario de ladistancia *Word Mover's Distance* entre las mismas. El modelo *KeyedVectors* de *gensim* incorpora el cálculo de esta distancia.