Venn

De Challenge4Cancer
Révision de 6 mai 2016 à 00:08 par Ozanne (discussion | contributions) (A protégé « Venn » ([Modifier=Autoriser uniquement les administrateurs] (infini) [Renommer=Autoriser uniquement les administrateurs] (infini)) [protection en cascade])

(diff) ← Version précédente | Voir la version courante (diff) | Version suivante → (diff)
Aller à : navigation, rechercher

Bienvenue sur le wiki du projet Venn!

Le projet

Cancer et pollution de l'air: une problématique d'actualité

En décembre 2015, la Conférence de Paris 2015 sur le Climat (COP 21) a rassemblé de nombreux dirigeants politiques et économiques, et a également mobilisé l'opinion publique sur la question des conséquences des changements climatiques. Ce même sujet constitue l'un des Objectifs de Développement Durable inscrits dans le programme officiel de l'ONU.

Plus généralement, la prise de conscience générale entre les facteurs liés à l'environnement et l'impact sur la santé des populations suscite beaucoup d'interrogations, en particulier dans le cas des cancers. Les conséquences sur la santé de facteurs tels que la pollution de l'air et de l'eau, ou les effets des changements climatiques, sont ainsi désormais au coeur des préoccupations de l'opinion publique, des décideurs, et des chercheurs.

Seulement, ces phénomènes sont très difficiles à comprendre, de par leur complexité physique, et à cause des multiples facteurs impliqués. Dans le cas particulier de la pollution de l'air, on peut dénombrer plusieurs éléments déclencheurs reconnus, parmi eux :

  • les émissions de gaz à effet de serre,
  • les émanations résultant de processus industriels,
  • les systèmes de chauffage domestique.

Les éléments nocifs à la santé issus de ces sources de pollution sont également nombreux: il peut s'agir de particules fines, de composés organiques volatils (COV), ou encore de gaz nocifs. De plus, l'exposition à ces éléments dangereux peut se faire en intérieur comme à l'extérieur. C'est pourquoi le fait d'associer cancer et pollution de l'air est un postulat complexe à expliquer et comprendre, mais dont les conséquences sont bel et bien visibles dans les faits comme dans les chiffres.

Pourquoi une méta-analyse ?

Pour le projet, l'approche initialement envisagée était relativement simple: utiliser les chiffres d'incidence et de mortalité fournis dans le dataset "Core" du challenge Epidemium, et croiser ces informations avec les autres datasets relatifs aux facteurs environnementaux disponibles sur le site data.epidemium.cc ou en open data sur Internet.

Cependant, cette approche soulève plusieurs questions:

  • Doit-on se concentrer sur un type de cancer en particulier (en l'occurence le cancer du poumon) ou doit-on considérer tous les types de cancer?
  • Sur quelle granularité géographique se placer? Peut-on garantir une disponibilité de tous les types de données pour une échelle géographique donnée?
  • Quels facteurs environnementaux considérer? Avant de se concentrer sur la pollution de l'air, l'idée était de se concentrer sur tous les éléments environnementaux (eau, air, changement climatique...) mais il est très vite apparu que le spectre de connaissances, d'information et de données à couvrir serait bien trop large.
Afin de prendre en considération les contraintes temporelles relatives au challenge Epidemium, il a donc fallu revoir l'approche à choisir. C'est à ce moment-là que l'alternative de la méta-analyse a été considérée, avec un constat simple:
Au lieu de chercher les réponses sans idées claires sur les questions, pourquoi ne pas chercher directement les questions ?
Ces fameuses questions ont déjà été posées par de nombreux experts, au travers des articles scientifiques qui constituent la littérature sur la recherche contre le cancer. De plus, parmi les datasets fournis par Epidemium, on peut trouver un ensemble de méta-données relatives à des articles traitant du cancer et recensés sur la base de données spécialisée PubMed.

C'est ainsi que l'objectif du projet a été fixé: construire une procédure d'extraction et d'analyse de données textuelles issues de ces méta-données afin de mettre en lumière les liens entre cancer et pollution de l'air mis en évidence par la recherche.

Collecte et traitement des données

Structure de la donnée brute

Sous sa forme brute, le dataset de départ se présente comme un ensemble de 2279 fichiers XML, chaque fichier regroupant les méta-données de 1000 articles de la base PubMed. Un aperçu de la structure des méta-données peut être visualisé grâce à l'outil CodeBeautify librement accessible en ligne. En bref, dans un fichier XML, chaque article est représenté par:

  • ses attributs bibliographiques classiques: titre, liste des auteurs, date de publication, journal...
  • le texte de son abstract,
  • l'affiliation (laboratoire d'origine) du premier auteur,
  • les mots-clés et meshwords associés,
  • différents identifiants (ID PubMed, ISSN, ESSN, NLMID...),
  • son accessibilité (publication ouverte ou à accès payant).

Comme toutes ces informations ne sont pas nécessairement pertinentes dans le cadre du projet, un premier tri a été effectué afin de ne garder que :

  • l'ID PubMed, identifiant numérique unique pour l'article,
  • le titre,
  • la date de publication,
  • le journal où l'article a été publié
  • les mots-clés,
  • les meshwords,
  • l'affiliation du premier auteur.

Stockage des données dans l'index Elasticsearch

La première étape du projet a consisté a télécharger tous les fichiers XML présents sur le site d'Epidemium, puis à les traiter afin de faire le tri dans les attributs de représentation des articles, avant de placer les données triées dans un système de stockage permettant un accès et une exploration rapides. Ici, c'est Elasticsearch qui est utilisé pour stocker les données.

A propos d'Elasticsearch

Elasticsearch est un projet open source qui se définit davantage comme un service de recherche que comme une base de données à proprement parler. Il combine l'utilisation de la librairie Java Apache Lucene (indexation et recherche de texte) et d'un format de sérialisation de données basé sur une structure de type JSON. En résumé, il permet de construire un moteur de recherche sur un jeu de données fourni par l'utilisateur. Dans la typologie d'Elasticsearch, un ensemble de données est regroupé au sein d'un index, qui lui-même peut être éclaté en plusieurs shards (i.e. la donnée est distribuée en plusieurs points de stockage, on parle d'architecture distribuée) répartis au sein d'un cluster.

L'avantage qu'il présente dans notre cas est d'offrir une interface simple et pratique pour explorer les méta-données et y faire des recherches grâce à un système supportant des requêtes complexes. En réponse à une requête POST du protocole HTTP, l'index renvoie un résultat au format JSON. Les résultats de la requête sont classés suivant un score de pertinence, comme sur un moteur de recherche.

Traitement et ingestion des données

Un premier script Python permet de télécharger l'intégralité des fichiers XML à traiter, puis un script supplémentaire assure le tri et l'insertion dans l'index Elasticsearch. La démarche a été faite à la fois en local et sur un serveur externe (nécessitant un identifiant à la connexion, envoyé sur demande).

Co

Construction d'un corpus réduit "cancer + pollution de l'air"

Même si un premier tri a été fait, le nombre de documents à traiter reste important (> 2.2 millions), il a donc fallu réduire ce nombre en sélectionnant un ensemble restreint d'articles pertinents par rapport au sujet du projet.

Extraction du lexique des termes les plus fréquents dans un document de référence

Comme il est impossible de chercher "à la main" les articles d'intérêt, une procédure automatique a été mise en place. Elle repose sur la construction d'un lexique des termes les plus fréquents rencontrés dans un monographe de 177 pages du Centre International de Recherche sur le Cancer (CIRC) intitulé "Air Pollution and Cancer" et librement accessible en ligne. Le document d'origine (PDF) a été transformé en fichier texte grâce à la librairie Java open source Apache PDFBox, ce fichier texte a ensuite été traité par un script Python afin de retourner les termes les plus fréquents.

Co

Requête dans Elasticsearch suivant le lexique CIRC

A partir de la liste des termes les plus fréquents, il est alors possible de lancer une requête sur Elasticsearch permettant de retourner les articles pertinents vis-à-vis de ce lexique. Une requête POST a donc été créée pour retourner les 3000 premiers résultats, qui constituent la forme finale du corpus réduit.

Lexical to ES

Topic modelling sur les abstracts du corpus réduit

Dans les caractéristiques du corpus réduit, les textes des abstracts constituent la meilleure source d'information sur le contenu des articles, les mots-clés n'étant pas souvent assez précis et les meshwords n'étant pas tout le temps disponibles. Il s'agit également d'un bon compromis par rapport à l'analyse du texte complet des articles, qui n'est pas non plus systématiquement disponible selon la politique de publication des articles en question (open access ou accès restreint). Afin d'analyser le contenu de ces abstracts l'utilisation de techniques appropriées aux données textuelles est donc nécessaire.

Le NLP en bref

Le traitement automatique du langage naturel, ou TALN (Natural Processing - NLP en anglais) est un domaine d'étude visant à interfacer le langage naturel (tel qu'utilisé par les individus) avec des programmes informatiques. Il s'agit d'un mode particulier d'interaction homme-machine dont les applications sont multiples, parmi les plus connues on compte :

Construire des topics avec l'algorithme LDA

Une façon d'analyser des données en ayant recours au NLP consiste à extraire de l'information sous forme de sujets d'intérêts (ou topics) à partir d'un corpus de documents. Plusieurs techniques existent pour cela, dont la méthode dite LDA.

L'algorithme Latent Dirichlet Allocation (LDA) est un modèle statistique qui permet, à partir de données observées (par exemple un corpus de documents), de construire des groupes non-observés, dits latents, à partir de règles de similarité entre les éléments observés. Il s'agit d'une méthode de machine learning dite "non-supervisée", car le modèle n'est pas entraîné à partir de labels déjà existants, contrairement à ce qui est fait dans le cadre supervisé.

Plus concrètement, dans le cadre du projet, le LDA permet de représenter un abstract (la donnée observée) comme étant une combinaison de différents topics (les groupes non-observés), le but du jeu étant de mettre en lumière ces topics par les mots qui les caractérisent le mieux. L'objectif final d'une telle démarche est ainsi d'extraire les différents axes de recherche sur lesquels sont focalisés les articles du corpus réduit.

Du texte brut aux topics

Il existe plusieurs implémentations de l'algorithme LDA, celle qui est utilisée dans le projet provient de la librarie Python open source gensim, qui regroupe de nombreuses fonctionnalités de traitement et d'analyse de données textuelles, et mettant l'accent sur les aspects de topic modelling. Cependant, quelque soit l'implémentation choisie, il est tout d'abord nécessaire de transformer le texte brut des abstracts en une version qui soit compréhensible par l'algorithme.

Du texte brut aux bag-of-words

L'idée de base de la transformation dite bag-of-words consiste, à partir d'un texte brut, à:

  1. recenser tous les mots présents et les regrouper au sein d'un dictionnaire,
  2. compter les occurences de chaque élément de ce dictionnaire dans le texte.

On peut ainsi étendre le concept à l'analyse d'un corpus de documents:

  • le dictionnaire recensera alors tous les mots présents dans l'ensemble des documents,
  • chaque document sera représenté par un vecteur de comptage des occurences de chaque mot.

Prenons un exemple simple et considérons un corpus de 2 documents, chaque document étant représenté par une courte phrase:

  • A = "La recherche contre le cancer évolue rapidement."
  • B = "Epidemium est un programme de recherche collaboratif contre le cancer."

On crée tout d'abord le dictionnaire sur le corpus, et on associe un identifiant numérique (clé) à chaque mot (valeur):

1:cancer, 2:collaboratif, 3:contre, 4:de, 5:Epidemium, 6:est, 7:évolue, 8:la, 9:le, 10:programme,11:rapidement,12:recherche, 13:un

Pour chaque document, on recense ensuite chaque occurence des termes du dictionnaire. Tous les termes doivent être pris en compte car les vecteurs représentant les documents doivent tous avoir la même taille, donc l'absence d'un mot sera illustré par l'affectation de la valeur 0 à son index:

  • A = [(1,1),(2,0),(3,1),(4,0),(5,0),(6,0),(7,1),(8,1),(9,1),(10,0),(11,1),(12,1),(13,0)]
  • B = [(1,1),(2,1),(3,1),(4,1),(5,1),(6,1),(7,0),(8,0),(9,1),(10,1),(11,0),(12,1),(13,1)]

On retrouve bien que dans le document A il y a 1 occurence de "cancer", 0 occurence de "collaboratif", 1 occurence de "contre", etc.

(Encore!) du pré-traitement

Plusieurs opérations de pré-traitement sont faites sur le texte brut avant la phase de transformation bag-of-words:

  1. la tokenization, autrement dit la transformation du texte (à l'origine vu comme une unique chaîne de caractères) en une liste de mots, ou tokens.
  2. la suppression des stop words, qui sont des termes n'apportant pas ou peu d'information, mais qui apparaissent souvent, comme "la", "le", "un", "de" dans l'exemple précédent.

Les opérations de pré-traitement et de transformation en bag-of-words ont ainsi été faites sur tous les abstracts du corpus réduit, le processus ayant été résumé dans un notebook Jupyter.

Co

Visualisation des topics fournis par le LDA

La seule information fournie par l'utilisateur à l'algorithme est le nombre de topics à faire ressortir du corpus. Le LDA est ensuite exécuté, et les résultats qu'il produit peuvent être visualisés de façon interactive grâce à la librairie Python pyldavis. Une version dynamique du résultat a ainsi été insérée dans un site de démonstration, et sert de référence pour les interprétations ci-après.

Résultats et interprétations

Dans chacun des topics construits par l'algorithme on retrouve les termes généraux de la thématique du projet: pollution, air, cancer. Sur les 50 topics, tous ne font pas immédiatement sens, mais plusieurs d'entre eux se révèlent particulièrement intéressants:

Topic Termes pertinents Interprétation
6 PAH, aromatic,pyrene, polycyclic, hydrocarbon... Impact des hydrocarbures aromatiques polycycliques (polycyclic aromatic hydrocarbons - PAH en anglais): il s'agit en effet d'une famille de composés chimiques à forte toxicité, dont plusieurs éléments ont été reconnus comme carcinogènes.
7 traffic, road, drivers, exposure, pm Plusieurs termes relatifs aux émissions dues au trafic routier: mise en avant du caractère toxique des émanations de gaz d'échappement et de particules fines. La présence des termes pancreatic et stroke permet également d'inférer sur les organes touchés.
12 fuel, biomass, cooking, household, coal, kitchen, stoves, wood L'utilisation de certains types de chauffage domestique peut être un facteur déclencheur du cancer.
15 smoke, secondhand, nicotine, workplace, pubs, restaurants, places Le tabagisme passif est considéré comme un facteur de pollution de l'air, et l'exposition des non-fumeurs à la fumée de tabac dans les endroits publics est tout aussi nocive que la consommation de cigarettes.
16 children, dust, home, infants, indoor, houses, building Les enfants sont une population à risque lorsqu'ils sont exposés à des polluants en intérieur.
24 tobacco, philip morris, smokefree Encore un topic sur le tabagisme, seulement ici il semble s'agir de l'aspect communication/publicité (termes advertising, retailers, corporate, media, encourage) ou alors de l'aspect prévention (termes smokefree, restrictions, law).

On remarque également l'apparition de topics hors-sujet, bien que pertinents: par exemple le topic 31 semble lié à la pollution de l'eau (termes water, swimming, pools, drinking). Cela est probablement dû à une généralisation excessive du moteur de recherche sur le terme "pollution" au moment de la construction du corpus réduit.

Intérêt de la démarche

Si certains faits évoqués par les topics précédemment cités peuvent apparaître comme connus voire évidents pour les spécialistes, la méthode utilisée durant le projet a permis de retrouver ces faits de façon automatisée et sans connaissance préalable du sujet.

Seulement, même avec une représentation simplifiée des résultats, il est difficile d'émettre des hypothèses dès lors que le vocabulaire des termes d'intérêt devient spécialisé. Il est encore plus difficile de valider rigoureusement ces hypothèses sans l'avis d'experts du domaine. C'est pourquoi l'échange avec le corps médical est essentiel: pour cela, un questionnaire a été mis en place sur le site de démonstration afin d'avoir des avis extérieurs sur la pertinence des topics. Plus généralement, une discussion avec des médecins/oncologues topic par topic serait un excellent moyen de valider la méthode ou de la corriger, en changeant les paramètres de l'algorithme ou en améliorant le pré-traitement du texte brut. C'est l'un des aspects essentiels du projet, et même si ce dialogue n'a pas pu être engagé avant la deadline du 5 mai, la question reste ouverte.

Lexical to ES
Plus généralement, une fois la méthode validée, elle permettrait notamment de :
  • proposer un système de classification automatique complémentaire des mots-clés et des meshwords,
  • dresser un panorama synthétique de l'état de la recherche sur la question du lien entre cancer et pollution de l'air.

Et après ?

De nombreuses améliorations sont potentiellement envisageables pour ce projet, car il soulève des questions intéressantes et n'exploite qu'une fraction des données disponibles. Ces pistes n'ont pas pu être explorées en détail durant le challenge faute de temps, mais constituent des pistes d'approfondissement pour la suite.

  • La démarche n'est pas propre à la problématique de la pollution de l'air mais peut très facilement être transposée à une autre question autour du cancer, il suffit de modifier les critères de construction du corpus réduit.
  • Il est également possible d'envisager l'application d'un algorithme à l'intégralité du corpus simplifié: cela reviendrait à analyser les 2,2 millions d'abstracts, et pourrait mettre en lumière des faits intéressants, car tout le dataset est exploité. Avec une telle quantité de données, on peut aussi changer d'algorithme, et appliquer par exemple word2vec, qui est un réseau de neurones à 2 couches permettant de reconstruire le contexte sémantique de chacun des mots du dictionnaire formé par le corpus simplifié.
  • Utiliser les autres méta-données: des travaux préliminaires ont été engagés pour analyser la répartition spatiale et temporelle des laboratoires ayant publié sur le cancer (grâce au tag d'affiliation dans les méta-données), et également pour détecter d'éventuelles zones géographiques ciblées par les études publiées (en cherchant les noms de lieux/pays dans le tag de titre des méta-données). Suivant les recommandations du Dr. Charles Ferté lors du point à mi-parcours, le fait de croiser ces points géographiques avec d'autres sources de données (incidence/mortalité, PIB, UDH, etc.) pourrait mettre en évidence des liens intéressants.

Générique de fin

Les membres du projet

Par ordre alphabétique et toutes contributions confondues:

  • Mathilde Berthelot (data scientist)
  • Clémence Couderc (ingénieure biomédical)
  • Savinien De Rivet (data journalist)
  • Vincent Grob (data scientist)
  • Sahir Javeed (interne en oncologie)
  • Harizo Rajaona (data scientist)
  • Hugo Robellaz (data scientist)
  • Clarisse Thibault (ingénieure chimiste)

Ressources, code, et données

  • La quasi-totalité du code autour du projet a été écrite en Python. Tous les fichiers et notebooks sont disponibles sur Github.
  • Les diagrammes du Wiki ont été créés sur draw.io.
  • Un DOCKERFILE est en cours d'écriture et sera uploadé sur la page Github du projet, afin de pouvoir monter un environnement de développement compatible avec les dépendances du projet via un conteneur Docker, et également pour assurer la reproductibilité des résultats présentés.