Skip to content

Calcular Matrices de Similitud

Adrian Marino edited this page Feb 1, 2023 · 6 revisions

Para realizar las recomendaciones por filtros colaborativos y basadas en contenido, es necesario pre-calcular las matrices de distancia entre usuario y entre items. Para esto se puede utilizar distintos modelos de machine learning. En este caso se opto por utilizar NMF(Neural Matrix Factorization), SVD(Singular Value Descomposition) y BERT(Bidirectional Encoder Representations from Transformers). El calculo de esta matrices necesita de una gran cantidad de uso de CPU/GPU, por esta estion se opto por separar todo los que refiere a entrenamiento y predicción en un nodo de procesamiento distinto al nodo donde corre la aplicación en cuestión. Este nodo de procesamiento corre una instancia de Airflow. Airflow permite correr procesos los cuales se pueden separar en un DAG(Grafo dirigido acíclico) de pasos. Para este trabajo no se separadon los Jobs o procesos en pasos, pero des algo que se espera hacer a futuro.

De esta forma, cada Job o proceso de generación de matrices es un proceso independiente el cual correr cada X tiempo en Airflow a modo de scheduler(clon). Por otro lado, es posible correr los procesos via shell.

Correr en shell(consola) Jobs para generación de matrices user-user/item-item

Step 1: Activar environment.

$ conda activate rec-sys
$ cd recsys

Step 2: Calcular matrices de distancia user-user e item-item utilizando las interacciones de los usuarios a través del modelo SVD.

$  python bin/svd_distance_matrix_job.py

Step 3: Calcular matrices de distancia user-user e item-item utilizando las interacciones de los usuarios a través del modelo NMF.

$  python bin/nmf_distance_matrix_job.py

Ambos jobs calcular matrices de distancia user-user/item-item en base a la matriz de rating predicha por cada model (SVD/NMF). Luego, realizan un upsert de estas matrices en la base de datos, insertando únicamente los N vecinos mas cercanos en ambos casos (user-user/item-item). Cada matriz esta versionada. Es decir, que cada ejecución de un job crear una nueva versión de la matrix. Finalmente, ambas matrices queda asociadas a una entidad en la base de datos que representa al modelo con el que fue predicha.

Step 4: Calcular matrices de distancia item-item utilizando el título y la descripción de los items con distintos modelos BERT pre entrenados.

$  python bin/all_minilm_l6_v2_bert_item_distance_matrix_job.py
$  python bin/all_minilm_l12_v2_bert_item_distance_matrix_job.py
$  python bin/all_mpnet_base_v2_bert_item_distance_matrix_job.py
$  python bin/multi_qa_mpnet_base_dot_v1_bert_item_distance_matrix_job.py

Clone this wiki locally