Un algorithme de déduplication pour les bases et entrepôts de données

La page est créée Jean-Marc Descamps
 
CONTINUER À LIRE
Un algorithme de déduplication pour les
bases et entrepôts de données

Faouzi Boufarès*, Aïcha Ben Salem*,**, Sebastiao Correia**

Laboratoire LIPN - UMR 7030 – CNRS, Université Paris 13,
Av. J. B. Clement 93430 Villetaneuse France
*
  {boufares, bensalem}@lipn.univ-paris13.fr
Société Talend,
Av. Pagès 92150 Suresness France
**
   {abensalem, scorreia}@talend.com

RÉSUMÉ.    La déduplication des données est une étape très importante dans le processus
d'intégration de données hétérogènes. Elle assure une meilleure qualité pour les données
résultats. Ainsi, l'extraction de connaissances à partir de ces dernières sera plus
précise. Nous présentons dans cet article, un algorithme séquentiel pour l’élimination des
données similaires. Celui-ci est basé sur les fonctions Match et Merge que nous avons
définies. La fonction Match repose sur le calcul de distance de similarité en fonction du
type de données. Tandis que la fonction Merge utilise des règles logiques pour fusionner les
données. Nous évaluons expérimentalement différentes versions d’implémentation de notre
algorithme en utilisant un jeu de données généré aléatoirement.
ABSTRACT. Data deduplication is a very important step in the process of integration of
heterogeneous data. It ensures a better quality of data results. Thus, the extraction of
knowledge from these data is more accurate. We present in this paper, a sequential algorithm
to eliminate similar data. This algorithm is based on the Match and Merge functions that we
have defined. The match function is based on calculations of similarity distances depending
on the type of data. The Merge function uses logical rules. We experimentally
evaluate different versions of the implementation of our algorithm using a random generated
data.
MOTS-CLÉS : Qualité des données, Distance de similarité, Elimination des similaires,
Déduplication, Match, Merge.
KEYWORDS: Data Quality, Similarity Distance, Similar Data Elimination, Deduplication,
Match, Merge.
1. Introduction

     De nos jours les travaux sur l'extraction et la gestion de connaissance à partir de
gros volumes de données (contenus dans un entrepôt issu de sources hétérogènes et
distribuées), se basent principalement sur la recherche d'informations potentiellement
utiles et jusque-là inconnue. La qualité de l'information recueillie dépend de ces
données (Berti-Équille, 2006). Une bonne qualité des données stockées dans les
bases et entrepôts de données (BDs et EDs), est devenue une nécessité absolue dans
une organisation. Contrairement à ce que l’on peut penser, les données
rassemblées aujourd'hui dans les BDs et EDs, contiennent de nombreux problèmes
tels que les données similaires, les doublons, les valeurs aberrantes, les valeurs
nulles. Il s’ensuit une mauvaise qualité des données pour des fins décisionnelles
(Boufarès et al,, 2011). Les conséquences de la non-qualité des données peuvent être
très coûteuses. Par conséquent, il est important de nettoyer les données (éliminer les
doublons et les similaires) dans un délai raisonnable. Le problème de
l'élimination des données similaires est très difficile (Bilenko et al,, 2003), (Cohen et
al,, 2004). Il s'agit de vérifier la correspondance des données (Match) et ensuite de
les fusionner (Merge). Nous proposons dans ce papier un algorithme, inspiré de
(Benjalloun et al,, 2009), pour détecter, supprimer ces doublons et enrichir en
information les enregistrements restants. L'objectif de notre algorithme est de
dédoublonner les données provenant du processus d'intégration et de les enrichir afin
de fournir aux utilisateurs des données de bonne qualité et plus complètes.
    Ce papier sera présenté comme suit. Dans la deuxième section, nous présentons
le processus de comparaison et de fusion de données (les fonctions Match et Merge).
L’algorithme d'élimination des similaires ainsi que des mesures de performance entre
différentes versions d’implémentation seront présentés, dans les sections 3 et 4. Dans
les sections suivantes, un bref aperçu sur les travaux connexes ainsi que nos travaux
futurs sont abordés.

2. Le processus de comparaison et de fusion (Fonctions Match et Merge)

    L’élimination de données similaires nécessite le développement de deux
fonctions « Match » (Comparer) et « Merge » (fusionner) (Hernandez, 1998). La
fonction Match permet de définir si deux tuples dans une table sont similaires et la
fonction Merge génère un nouveau tuple en fusionnant les deux supposés similaires.
Différents algorithmes de calcul de distance de similarité existent dans la littérature
tels que ceux de Levenshtein, de Jaro-Winkler, de Jaccard (Berti-Équille, 2006). Ces
algorithmes sont utilisés dans le processus de comparaison.
    Introduisons à présent quelques notations. Une table T(A1....An) est interprétée
par l'ensemble [[T]] de tous les {A1....An}-tuples sur [[Dk]]k=1,n avec A={A1....An}
l’ensemble des attributs de T. [[Dk]] est l'ensemble de valeurs concrètes d'un tuple de
données tels que les chaînes de caractères alphanumériques (String), les numériques
(Number), les dates, les booléens (Boolean) ou encore des listes et des intervalles de
valeurs. [[T]] est l'ensemble des fonctions t : {A1....An} → ∪ [[Dk]] k=1,n, tel que
t(Ak) noté t.Ak est un élément de [[Dk]]. Chaque élément t de [[T]] est un tuple de la
table T et chaque t.Ak est une valeur de l'attribut dans t, que l’on notera aussi vk.
Définition 1 : Similarité entre valeurs (notée ≈) Pour un attribut Ak, on note t.Ak ≈
t'.Ak (ou v ≈ v'), ssi dk ≤ sk, avec dk la distance calculée de similarité et sk est le seuil
fixé par l’utilisateur (sk ∈ [0,1], sk∈ S, k=1..n). ■
Exemple 1: Adr1←t1.Adr et Adr2←t2.Adr ; Nom1←t1.Nom et Nom2←t2.Nom ;
Mail1←t1.Mail et Mail2←t2.Mail ; Tél1←t1.Tél et Tél 2←t2.Tél.
Les deux adresses suivantes Adr1 = "20 BOULEVARD CHAMPS ÉLYSÉES
PARIS" et Adr2= "20 BOULEVARD CHAMPS-ELYSÉES 75008 PARIS" sont
similaires, selon la méthode de Jaro-Winkler car la distance calculée d est de 0,051
inférieure à un seuil fixé s=0,2.
Définition 2 : Règle de similarité Une règle r de similarité est une conjonction de
similarités qui portent sur des attributs Ak (k=1,n) de l’ensemble A de la table T.
r=˄p=1.n (t.Ak ≈ t'.Ak) : r=(t.A1 ≈ t'.A1) ˄ (t.A2 ≈ t'.A2) ˄… ˄ (t.An ≈ t'.An) ■
Exemple 2 : Deux règles de similarités r1 et r2 : r1 = (Mail1 ≈ Mail2) ˄ (Tél1 ≈ Tél2)
r2 = (Nom1 ≈ Nom2) ˄ (Mail1 ≈ Mail2) ˄ (Adr1 ≈ Adr2).
Définition 3 : Similarité entre tuples Deux tuples t et t' sont similaires ssi la
disjonction de toutes les règles de similarité définies sur T est vraie. On note t ≈ t' ssi
˄j=1.q(rj) = vrai avec rj une règle de similarité définie sur les attributs de A.
t ≈ t' ssi r1 ˄ r2 ˄ ... ˄rk … ˄ rq    (q étant le nombre de règles de similarité) ■
Exemple 3 : Deux tuples t1 et t2 sont similaires ssi r1 ˄ r2 : t1 ≈ t2 ssi [(Nom1 ≈
Nom2) ˄ (Mail1 ≈ Mail2) ˄ (Adr1 ≈ Adr2)] [(Mail1 ≈ Mail2) ˄ (Tél1 ≈ Tél2)].

REMARQUE. — Ces règles peuvent présenter toutefois des incohérences ou des
contradictions. L’étude de leur cohérence globale ou leur simplification ne fait pas
l’objet de cet article.

    La fonction Match compare deux tuples. L’étude de similarité porte sur les
attributs de l’ensemble A selon les règles de similarité. La fonction Similar(v1,v2, si)
prend en paramètre deux valeurs (v1←t1.Ai et v2←t2.Ai) et si un seuil fixé par
l’utilisateur pour Ai. Une méthode de calcul de distance de similarité est appliquée
telle que Jaro-Winkler. La distance trouvée di est comparée au seuil si.

    La fonction Merge traite deux tuples, supposés similaires. Elle retourne un
nouveau tuple t' qui apporte « plus » d’information à partir de chaque valeur (v)
résultant de la fusion: v:=Merge(expr, v1, v2) avec expr une règle métier permettant
de choisir la méthode de fusion de v1 et v2. Un enrichissement des données peut ainsi
être réalisé à la demande de l’utilisateur sur les attributs de l’ensemble A.
Une implémentation personnalisée de la fonction Merge permet d’associer deux
valeurs selon le type de données de l’attribut en question: (i) si l’attribut est du type
chaîne de caractères, expr présente la plus longue chaîne des deux, si celle-ci vérifie
un ensemble d’expressions régulières proposé pour l’utilisateur. La fusion d’une
chaîne quelconque avec une valeur nulle (NULL) donne la chaîne elle-même ; (ii) si
l’attribut est du type numérique, la fusion peut correspondre à des calculs demandés
par l’utilisateur tels que la somme, la moyenne, le minimum ou le maximum des
valeurs. Des transformations peuvent être réalisées telles que des conversions dues à
des changements d’unité. Les valeurs nulles sont considérées égales à 0 ; (iii) si
l’attribut est du type date, la fusion peut permettre de garder la plus récente des deux,
selon le choix de l’utilisateur, après avoir unifié les formats et vérifié leurs validités.

3. Elimination des similaires

    Le croisement de tous les tuples d’une table est le principe de base pour
l’élimination des données similaires. Il s’agit d’algorithme très coûteux pour de gros
volumes de données. L’idée est de réduire le nombre de comparaisons en fusionnant
les données qui concordent et de ne conserver que le tuple dominant pour les
prochaines comparaisons. L’originalité de notre travail consiste à faire
simultanément les comparaisons et les fusions. Nous avons développé précédemment
deux algorithmes inspirés de (Benjalloun et al,, 2009). Afin d’améliorer les
performances de nos précédents algorithmes, nous présentons dans ce qui suit, un
troisième algorithme dont le principe de fonctionnement est le suivant.
    Afin de réduire le nombre de comparaisons, l’algorithme (voir annexe) se base
sur la notion des attributs clés (« features ») pour éliminer des similaires. Cet
algorithme utilise, outre les ensembles I (ensemble de tuples départ) et I' (les tuples
résultats), deux ensembles de données Pf (positifs) et Nf (négatifs) pour garder trace
des valeurs des attributs clés déjà rencontrées, et enregistrer les comparaisons
redondantes positives et négatives. Pf sauvegarde toutes les valeurs précédemment
rencontrées de l’attribut clé d’élimination et lui associe l’identifiant de tuple auquel
il appartient. Le tuple t est soit le premier enregistrement pour lequel la valeur v est
apparue pour l’attribut clé fi, ou celui qui a été dérivé à partir d’une séquence de
fusions des tuples. Si ce tuple n’existe pas (la valeur v, de l’attribut clé, est vue pour
la première fois), Pfi(v) retourne Null. Cependant, il ne peut y avoir au plus qu’un
tuple associé à la valeur v d’un attribut fi. Dans le cas où plusieurs tuples sont
présents, ces derniers sont fusionnés dans le tuple renvoyé par Pfi(v).
     Nf est l’ensemble qui conserve les valeurs des attributs clés fi qui ont été
comparées avec toutes les valeurs des attributs pour les tuples de I' et ne correspond
à aucun d'entre eux. On évite alors des comparaisons redondantes dont la fonction
Match aurait renvoyé une valeur négative. Si le tuple en cours de traitement par
l'algorithme, a une valeur v qui apparaît dans Nfi, cette valeur n'a pas besoin d'être
davantage comparée. Quand un nouveau tuple t est traité par l'algorithme, ce dernier
sauvegarde, tout d'abord dans Pfi toutes les valeurs de chaque nouvel attribut, puis
vérifie si l'une de ces valeurs est déjà parue dans un tuple différent (en vérifiant son
identifiant). Les paires de valeurs des attributs clés P(f,v) qui correspondent, sont
immédiatement dirigées vers le processus de la fusion des tuples, et ne sont jamais
comparées de nouveau, tandis que les autres paires qui ne correspondent pas sont
ajoutées à Nfi, et de cette façon on garantit qu’elles ne seront jamais comparées à
nouveau.
Exemple 4: Pour deux attributs Nom et Prénom, les structures P et N à gérer,
présentées dans le tableau 2, sont (PNom, PPrenom, NNom et NPrenom):
                                P                                         N
       Nom     RowIdN    OccN       Prenom   RowIdP   OccP     Nom     Prenom    RowIdT
      Le Bon   t1        4          Adam     t1       3      Le Bon   Adam      t1
      Le B.    t5        1          Adem     t5       1      Dupond   Jérémy    t2
      Dupond   t2        3          Jérémy   t2       2      …
      Dupont   t8        1          Jeremy   t8       1

                 Tableau 1. Echantillon de l’ensemble de données Pfi et Nfi

    Plusieurs versions de cet algorithme ont été développées selon les structures de P
et N. Ainsi P et N peuvent être aussi bien des listes gérées en mémoire vive que des
tables gérées par un SGBD. Il est aussi possible d’utiliser soit une table par attribut
clé, soit une table pour tous les attributs clés à la fois. Le partitionnement des tables
est alors appliqué pour gérer de gros volumes de données. Nous avons apporté
quelques modifications à la version donnée dans le papier (Benjalloun et al,, 2009)
afin de traiter différents cas de figure. Parmi ces modifications, lors de la fusion des
deux tuples (t, t’), les valeurs des attributs de t’ existent déjà dans les ensembles de
données Nf, il faut donc les mettre à jour de la même manière que ceux de Pf.
L’implémentation des différentes versions de notre algorithme est faite en JAVA en
utilisant des listes ou des tables sous SGBD Oracle 10g. Plusieurs versions existent
pour gérer de gros volumes de données. La complexité de cet algorithme réside dans
l’utilisation des deux ensembles Pf et Nf. Nous vérifions et comparons les taux
d’élimination pour chacun des algorithmes.

4. Mesure de performances de l’algorithme

    Les mesures de performance sont effectuées sur trois versions de notre
algorithme présenté en annexe, sur des données générées aléatoirement en utilisant
GenerateData1. Nous avons ainsi généré et inséré des doublons dans notre jeu de
test. Notre table de test CLIENT a la description SQL suivante :
« CREATE TABLE CLIENT (PRENOM varchar2(100), NOM varchar2(100), RUE varchar2(100), CP
varchar2(10), VILLE varchar2(50), DATNAIS Date, TEL varchar2(100) ) ; »

1
    http://www.generatedata.com/#generator
Les attributs Prenom, Nom, DatNais et Tel ont été choisis pour l’élimination des
similaires. Les algorithmes Jaro-winkler, Levenshtein et Jaccard ont été utilisés pour
le calcul de la distance de similarité. Un seuil a été fixé pour chacun des attributs
respectivement (0,2 ; 0,2 ; 0 ; 0,1). L’utilisateur peut demander l’enrichissement de
ses données afin d’éliminer, d’une part, d’éventuelles valeurs nulles, et d’autre part
de regrouper ou corriger certaines informations. Par exemple, dans la mesure où l’on
veut avoir plusieurs numéros de téléphone pour un même client, la définition de
l’attribut concerné (résultat de la fusion) devrait être suffisamment élargie, selon une
règle métier, pour mettre x valeurs (Tel varchar2(100) au lieu de Tel varchar2(10)). Deux
règles de similarité entre tuples ont été utilisées pour réaliser la fusion (Merge) :
Rules= r1 ˄ r2 où r1: d1 ≤ s1 ˄ d2 ≤ s2 ˄ d7 ≤ s7 ; r2: d2 ≤ s2 ˄ d6 ≤ s6
    Différentes mesures ont été effectuées sur des tables allant de 103 à 106 lignes.
Notre jeu de données contient 40% de similaires et de doublons. Les trois versions
testées sont respectivement Version 1 (P et N des listes JAVA), Version 2 (P et N
des tables Oracle) et Version 3 (P et N dans une même table). Les mesures de
performance (figure 1) montrent que la version de l’algorithme, qui utilise les listes
pour P et N, est plus performante que les deux autres (des limitations de mémoire à
prévoir pour un nombre plus grand de tuples). Tandis que la version que nous avons
voulu optimiser en regroupant les deux tables P et N n’améliore pas vraiment le
temps de réponse, et que la version avec deux tables P et N reste plus performante.

          Figure 1. Performances de l’algorithme selon ces trois versions

5. Travaux connexes

    Plusieurs travaux sur l'élimination des données similaires et des doublons existent
dans la littérature (Benjalloun, 2009), (Cohen, 2004), (Bilenko, 2003), (Hernandez,
1998). La fonction Match utilise des règles de décision portant sur les n attributs. Il
existe deux types de décision : (i) dichotomique (similaires ou non) –c’est notre cas;
ou (ii) trois réponses (similaires ou non et besoin de plus de révision) (Sarawagi,
2006). Aussi notre fonction Match est basée sur des valeurs d'attributs, tandis que
d'autres utilisent le concept de contexte (Köpcke, 2006). Plusieurs approches existent
pour fusionner différents tuples telles que celles basées sur les règles ou sur les
workflows ou encore les approches numériques. Concernant les approches basées sur
les règles, la fusion se fait selon une combinaison logique des conditions de
correspondance, alors que celles basées sur les workflows permettent des
combinaisons aléatoires (Köpcke, 2006).

6. Conclusion

    Actuellement, un grand nombre d’applications utilisent des données hétérogènes
et distribuées de qualité variable. Le besoin d'intégration de données et d'évaluation
de la qualité des données se fait de plus en plus ressentir. Afin de redonner
d’avantage de sens dans les données rassemblées, nous abordons la problématique
complexe de l’élimination de similaires dans les ED. En effet, le développement de
nouveaux outils pour traiter les données similaires nécessite l’approfondissement,
d’une part, des deux concepts de base Match & Merge, et d’autre part, le
développement d’autres algorithmes pour parcourir et comparer les données dans des
environnements séquentiels et parallèles. Les types de données traités dans notre
étude sont les types caractère, numérique, date et logique. La concordance des
données se fait selon des règles proposées par l’utilisateur. Notre algorithme,
séquentiel, réalise le Match & Merge parallèlement. Les performances sont à
améliorer pour les données volumineuses. Le choix des règles de similarité sera
automatisé. De nouvelles méthodes de calculs de distance de similarité pour des
types de données complexes sont à développer ainsi que l’automatisation du choix
entre elles. Tels sont les objectifs que nous nous fixons dans nos travaux futurs.

7. Bibliographie

Benjalloun, O., Garcia-Molina, H., Menestria, D., Su, Q., Whang, S.E., Widom, J., « Swoosh:
   A Generic Approach to Entity Resolution », The International Journal on Very Large
   Data Bases (VLDB '09), New York, USA, 2009, pp. 255-276.
Berti-Équille, L., « Qualité des données », Techniques de l’Ingénieur H3700, collection
   Technologies logicielles – Architecture des systèmes, France, 2006, pp. 1-19.
Bilenko, M., Mooney, R.J., « Adaptive Duplicate Detection Using Learnable String Similarity
    Measures », Proceedings of the Ninth ACM SIGKDD International Conference on
    Knowledge Discovery, and Data Mining, Washington DC, USA, 2003, pp. 39-48.
Boufarès, F., A. Ben-Salem, « Heterogeneous data-integration and data quality: Overview of
   conflicts », Sciences of Electronic, Technologies of Information and Telecommunications
   (SETIT’11), Sousse, Tunisie, 2011.
Cohen, W.W., Richman, J., « Iterative Record Linkage for Cleaning and Integration »,
   Proceedings of the 9th ACM SIGMOD workshop on Research issues in data mining and
   knowledge discovery (DMKD’04), Paris, France, 2004, pp. 11-18.
Hamdoun, S., Boufarès, F., « Un formalisme pour l'intégration de données hétérogènes »,
   6ème journées Francophones sur les entrepôts de données et l'Analyse en ligne
   (EDA'10), Djerba-Tunisie, 2010, pp. 107-119.
Hernandez, M.A., Stolfo, S.J., « Real-world Data is Dirty: Data Cleansing and The
   Merge/Purge Problem » Data Mining and Knowledge Discovery (DMKD’98), New York,
   USA, 1998, pp. 9-37.
Köpcke, H., Rahm, E., « Frameworks for entity matching: A comparison », Data Knowledge
   Engineering (DKE’09), 2009, pp. 197–210.
Sarawagi, S., Bhamidipaty, A., « Interactive Deduplication using Active Learning »,
    Proceedings The 8th ACM International Conference on Knowledge Discovery and Data
    Mining (SIGKDD’02), Alberta, Canada, 2002, pp. 269-278.

Annexe : Algorithme d’élimination de similaires
input : a set I of tuples,                           if buddy = null then /*If not look for Matches*/
output : a set Iprim of tuples, Iprim               for all (f, v) of currentTuple do
Pf ← empty hash table, for each feature f ,             if v ∉ Nf then/* if a value never made it to
Nf ← empty set, for each feature f                  Nf*/
SaveTuples ← a set of tuples, Iprim ← Ø,                for all t’ of Iprim do
currentTuple ← null                                         if Match (t,t’) then buddy ← t’
while I ≠ Ø or currentTuple ≠ null                          exitfor endif
     if currentTuple = null then                        endfor
             currentTuple ← a Tuple from I              if buddy ≠ null then exitfor endif
            remove currentTuple from I                  add v to Nf endif
     endif                                           endfor
     buddy←null                                      endif
     for all(f, v) of currentTuple do                if buddy = null then add currentTuple to Iprim
         if Pf(v) = null then                           currentTuple ← null
             Pf(v) ← currentTuple                   else
             SaveTuples ← (currentTuple, rowid)         t’’ ←Merge (currentTuple, buddy)
         endif                                          remove buddy from Iprim
      endfor                                            /*update P*/
      for all (f, v) of currentTuple do /*was any   for all (f, v) where Pf(v) ∈{currentTuple, buddy}
value previously encountered*/                      do Pf(v) ← t’’ endfor
          if     Pf(v) ≠ currentTuple then /*we         /*update N*/
compare the value and the rowid*/                   for all (f, v) where Nf(v) ∈ {currentTuple, buddy}
          buddy ← SaveTuples(Pf(v)); exitfor        do Nf(v) ← t’’ endfor
          endif                                         currentTuple ← t’’
       endfor                                        endif
                                                    endwhile
                                                    return Iprim
Vous pouvez aussi lire