Menu

NLP: Comprendre le Troll dans le Texte

Avatar jb

Rédigé par Julien Buret - Innovation - #NLP #big data #botRédigé par Julien Buret

PARTAGES

voyages-sncf.com_nlp_header.png

Voyages-sncf.com utilise le "Natural Language Processing" dans plusieurs de ses applications, comme la voice command dans son appli, le bot de recherche de petits prix utilisé sur Twitter et maintenant sur Messenger pour la pose d’option. Mais de quoi s’agit-il et comment ça fonctionne ? Décryptage de cette techno mise en place par l’équipe innovation !

L'été 2016 n'a pas été chaud qu'au niveau température. Plusieurs annonces importantes ont eu lieu ces derniers mois autour du traitement automatique du langage, souvent résumé par l'acronyme "NLP" de l'anglais "Natural Language Processing" (non! ne fuyez pas tout de suite!) .

Tous les grands du web, que ce soit par exemple Google, Facebook , IBM ou Microsoft annoncent dans un bel ensemble la mise à disposition de nouveaux services ou outils permettant d'analyser le langage naturel.

 

Le Pourquoi du Comment

Je vous sens un peu perdu dans un désert aride. Petite remise en contexte.
 

Du côté de la communication homme-machine, le dernier progrès majeur date d'il y a presque 10 ans avec l'arrivée du smartphone. Son écran tactile a rendu plus intuitif les interfaces utilisateurs. Progrès appréciable, mais encore insuffisant : c'est toujours à l'utilisateur de comprendre comment fonctionne son application (plus ou moins intuitive) de réservation de billet de train ! Idéalement, l'utilisateur devrait juste avoir à exprimer son besoin avec ses mots à lui (par exemple pour réserver un train « Je veux aller à Marseille tôt demain matin pour moins de 30€. Je reviens dimanche soir ») et laisser ensuite l'application se débrouiller pour répondre correctement à sa demande.

 

Mais pour quelle raison étrange personne à l'heure actuelle ne propose-t-il un service fiable de ce type? La première étape pour atteindre cet objectif consiste bien sûr à d’abord comprendre la phrase prononcée par l'utilisateur.

 

Et c'est ici que les difficultés commencent...    

En français comme dans les autres langues, il y a des centaines de manières différentes d'exprimer la même demande, souvent avec de subtiles nuances. Même pour une opération aussi simple en apparence que la compréhension d'une date, le problème est complexe. Des expressions telles que « vendredi en 8 », « le lendemain du 22 », « 12 jours plus tard » peuvent vouloir dire la même chose !

 

Cependant, les progrès récents autour du NLP permettent aujourd'hui d'atteindre un niveau d'erreur qui commence à être « acceptable ». C'est ainsi que nous avons pu mettre à votre disposition il y a déjà plus d'un an des services expérimentaux comme la commande vocale sur notre appli V. et plus tard le bot #petitsprix sur Twitter ou le Prototype de réservation sur Amazon Echo .

 

Petite introduction au NLP

L'analyse d'une phrase se décompose très schématiquement en quatre étapes1) Identifier dans quel langage est prononcée la phrase (étape optionnelle)

Dans certains contextes, vous êtes assuré de la langue utilisée. Dans d'autres il est préférable d'identifier le langage avant analyse, car les modèles statistiques utilisés ensuite sont construits séparément pour chaque langage. Pour nos prototypes, nous utilisons la librairie open-source « shuyo » qui utilise une classification naïve bayésienne , mais bien d'autres existent.

 

2) Identifier l'intention exprimée

Quand vous construisez votre nouvelle-application-qui-va-faire-le-café, vous prévoyez de répondre à plusieurs intentions exprimées par l'utilisateur. Par exemple :

                - « préparer un café »

                - « réserver un billet de train »

                - « échanger un billet de train »

Pour cela il est nécessaire de qualifier un certain nombre de phrases types en indiquant à chaque fois le sens correspondant. Il ne reste plus ensuite qu'à utiliser des outils comme OpenNLP ou Stanford NLP pour déterminer la probabilité la plus élevée. Un grand nombre d'algorithmes sont disponibles pour cela, citons par exemple « Maxent ». Naturellement, plus le nombre de phrases classifiées est important, plus élevée est la précision.

 

3) Isoler les entités

L'intention de la phrase étant maintenant déterminée, reste à en comprendre son sens. Pour cela, d'autres modèles statistiques sont construits pour déterminer les « entités » de la phrase. Il s'agit des groupes de mots présentant un sens qui nous intéresse. Par exemple :

 


Ici, « demain », « tôt demain matin », et « dimanche soir » sont des entités de type « date ». « Marseille » est une localité. « moins de 30€ » représente le prix maximum attendu et « reviens » indique qu'un retour est souhaité. Il est parfois nécessaire d'ajouter pour un même type la notion de rôle. Ici, « demain » et « tôt demain matint » correspondent à la date aller. « dimanche soir » correspond à la date retour.

 

Les modèles statistiques utilisés pour isoler les entités et définir leurs types ainsi qu'éventuellement leurs rôles sont construits par des outils et des algorithmes similaires à ceux de l'étape 2.

 

4) Valoriser les entités

Une fois les entités identifiées, reste à en extraire le sens. Suivant le type de l'entité, cela peut constituer une étape complexe du processus. En voici deux exemples :

        - Pour les dates, la librairie Duckling est utilisée dans nos prototypes. Reste encore à :

                 - Réunifier les dates séparées (dans notre exemple « demain » et « tôt demain matin »)

                 - Prendre en compte le contexte - si dans une première phrase l'utilisateur indique la date « demain » et précise un peu plus tard dans une deuxième phrase l'heure, il ne faut pas comprendre l'heure d'aujourd'hui mais bien celle de demain.

 

        - Pour les localités, le processus est le suivant :

                  - Un premier algorithme « fuzzy » est appliqué sur un ensemble de localités prédéfinies, afin de supporter les erreurs de frappe. En ce moment nous utilisons un mix deun mix de Levenshtein, de Soundex amélioré et de Needleman–Wunsch  pondéré.

 

             - Si nous ne trouvons pas la localité correspondante, nous utilisons ensuite un outil interne (nommé « Géo ») pour tenter de géolocaliser le point recherché. La localité ou la gare la plus proche est ensuite retournée quand applicable.

 

Et il était une fois...

Bien sûr, tout ceci ne constitue que le début de l'histoire. 

Car pour reprendre l'exemple du « Paris-Marseille », l'intention réelle de l'utilisateur ressemble sans-doute davantage à « Je voudrais aller nager dans les Calanques ce week-end », le moyen de transport n'étant qu'un moyen.

 

Comprendre le sens de la phrase est un défi déjà difficile à relever, y répondre correctement en est un autre, encore plus ardu. Et en ces matières, si les progrès algorithmiques récents (comme le « deep learning ») sont cruciaux, ils nécessitent pour fonctionner de manière optimale une quantité astronomique de données (que l'on range en général sous l'appellation « Big Data »). C'est une des raisons de l'arrivée de tous ces nouveaux services en provenance de Google et de ses compétiteurs : collecter des données et améliorer leur propre service !

 

A sa modeste échelle, Voyages-sncf.com avec sa branche technologique Voyages-sncf Technologies - qui possède une réelle expertise dans les technologies « Big Data »  – souhaite lui aussi améliorer en permanence les services pour faciliter les voyages de ses utilisateurs.

 

Pour nous aider, n'hésitez pas à tester nos différents prototypes et à nous dire ce que vous en pensez ! Si vous avez réussi à terminer la lecture cet article, nous cherchons des testeurs comme vous ! :)