Los datos de los clientes suelen almacenarse como registros en los sistemas de gestión de relaciones con los clientes (CRM). Los datos que uno o más usuarios introducen manualmente en dichos sistemas con el tiempo dan lugar a la replicación de datos, la duplicación parcial o la duplicación difusa. Esto, a su vez, significa que ya no existe una única fuente de verdad para los clientes, contactos, cuentas, etc. Los procesos comerciales posteriores se vuelven cada vez más complejos y artificiales sin una correspondencia única entre un registro en un CRM y el cliente objetivo. Los métodos actuales para detectar y desduplicar registros utilizan técnicas tradicionales de procesamiento del lenguaje natural conocidas como coincidencia de entidades. Pero es posible utilizar los últimos avances en modelos de lenguaje de gran tamaño e inteligencia artificial generativa para mejorar enormemente la identificación y reparación de registros duplicados. En conjuntos de datos de referencia comunes, encontré una mejora en la precisión de las tasas de desduplicación de datos del 30 por ciento utilizando técnicas de procesamiento del lenguaje natural a casi el 60 por ciento utilizando mi método propuesto.
Quiero explicar la técnica aquí con la esperanza de que otros la encuentren útil y la utilicen para sus propias necesidades de deduplicación. Es útil para otros escenarios en los que desea identificar registros duplicados, no solo para los datos del Cliente. También escribí y publiqué un artículo de investigación sobre esto que puedes ver en Arxiv, si quieres saber más en profundidad:
La tarea de identificar registros duplicados a menudo se realiza mediante comparaciones de registros por pares y se denomina “Coincidencia de entidades” (EM). Los pasos típicos de este proceso serían:
- Preparación de datos
- Generación de candidatos
- Bloqueo
- Pareo
- Agrupación
Preparación de datos
La preparación de datos es la limpieza de los datos e implica aspectos como la eliminación de caracteres no ASCII, la capitalización y la tokenización del texto. Este es un paso importante y necesario para los algoritmos de comparación de NLP que se utilizan más adelante en el proceso y que no funcionan bien con mayúsculas y minúsculas o caracteres no ASCII.
Generación de candidatos
En el método EM habitual, produciríamos registros candidatos combinando todos los registros de la tabla consigo mismos para producir un producto cartesiano. Eliminarías todas las combinaciones que estén en fila consigo misma. Para muchos de los algoritmos de coincidencia de PNL, comparar la fila A con la fila B es equivalente a comparar la fila B con la fila A. En esos casos, puede salirse con la suya manteniendo solo uno de esos pares. Pero incluso después de esto, todavía te quedan muchos registros de candidatos. Para reducir este número se suele utilizar una técnica llamada “bloqueo”.
Bloqueo
La idea del bloqueo es eliminar aquellos registros que sabemos que no pueden ser duplicados entre sí porque tienen valores diferentes para la columna “bloqueada”. Por ejemplo, si estuviéramos considerando registros de clientes, una columna potencial para bloquear podría ser algo como “Ciudad”. Esto se debe a que sabemos que incluso si todos los demás detalles del registro son lo suficientemente similares, no pueden ser el mismo cliente si se encuentran en ciudades diferentes. Una vez que hemos generado nuestros registros candidatos, usamos el bloqueo para eliminar aquellos registros que tienen valores diferentes para la columna bloqueada.
Pareo
Después del bloqueo, ahora examinamos todos los registros candidatos y calculamos las métricas de valor de atributo tradicionales basadas en similitud de PNL con los campos de las dos filas. Usando estas métricas, podemos determinar si tenemos una posible coincidencia o no coincidencia.
Agrupamiento
Ahora que tenemos una lista de registros candidatos que coinciden, podemos agruparlos en grupos.
El método propuesto consta de varios pasos, pero lo más importante es que ya no es necesario realizar el paso de “Preparación de datos” o “Generación de candidatos” de los métodos tradicionales. Los nuevos pasos son:
- Crear oraciones de coincidencia
- Cree vectores de incrustación de esas oraciones coincidentes
- Agrupamiento
Crear oraciones coincidentes
Primero se crea una “Oración de coincidencia” concatenando los atributos que nos interesan y separándolos con espacios. Como ejemplo, supongamos que tenemos un registro de cliente que se ve así:
Crearíamos una “Match Sentence” concatenando con espacios los atributos nombre1, nombre2, nombre3, dirección y ciudad lo que nos daría lo siguiente:
“John Hartley Smith 20 Main Street Londres”
Crear vectores de incrustación
Una vez que se ha creado nuestra “Oración de coincidencia”, se codifica en un espacio vectorial utilizando el modelo de incrustación elegido. Esto se logra utilizando “Transformadores de oraciones”. La salida de esta codificación será un vector de punto flotante de dimensiones predefinidas. Estas dimensiones se relacionan con el modelo de incrustación que se utiliza. Utilicé el todo-mpnet-base-v2 modelo de incrustación que tiene un espacio vectorial de 768 dimensiones. Este vector de incrustación se añade luego al registro. Esto se hace para todos los registros.
Agrupación
Una vez calculados los vectores de incrustación para todos los registros, el siguiente paso es crear grupos de registros similares. Para ello, utilizo la técnica DBSCAN. DBSCAN funciona seleccionando primero un registro aleatorio y buscando registros cercanos a él mediante una métrica de distancia. Hay dos tipos diferentes de métricas de distancia que he comprobado que funcionan:
- Distancia normal L2
- Similitud del coseno
Para cada una de esas métricas, se elige un valor de épsilon como valor de umbral. Todos los registros que se encuentran dentro de la distancia de épsilon y que tienen el mismo valor para la columna “bloqueada” se agregan a este grupo. Una vez que se completa ese grupo, se selecciona otro registro aleatorio de los registros no visitados y se crea un grupo a su alrededor. Esto continúa hasta que se hayan visitado todos los registros.
Utilicé este enfoque para identificar registros duplicados con datos de clientes en mi trabajo. Se produjeron algunos partidos muy bonitos. Para ser más objetivo, también realicé algunos experimentos utilizando un conjunto de datos de referencia llamado “Musicbrainz 200K”. Produjo algunos resultados cuantificables que supusieron una mejora con respecto a las técnicas estándar de PNL.
Visualizando la agrupación
Produje un mapa de clúster vecino más cercano para el conjunto de datos Musicbrainz 200K que luego rendericé en 2D usando el algoritmo de reducción UMAP:
Recursos
He creado varios cuadernos que os ayudarán a probar el método vosotros mismos: