Qu'est-ce que le NLP (Natural Language Processing) ?

Qu’est-ce que le NLP (Natural Language Processing) ?

Les humains communiquent, transmettent leurs émotions, transmettent et échangent avec des mots. Cela nous est tellement naturel que nous n’avons même pas besoin de réfléchir pour traiter et comprendre les mots que nous disons et que nous entendons.

Qu'est-ce que le NLP (Natural Language Processing) ?

Tout ce que nous exprimons contient une quantité énorme d’information. La façon dont nous disons ou écrivons les choses donnent des informations très riches. Ainsi, on peut, en théorie, en extraire de l’information et prédire le comportement humain.

Mais, comment la machine nous comprend-elle ? Ne vous-êtes-vous jamais demandé comment faisaient, par exemple, votre téléphone portable ou votre ordinateur pour comprendre ce que vous lui disiez ?

Contrairement à nous, la machine communique via des données chiffrées et non des données textuelles. Ainsi, fondamentalement, une machine ne comprend pas le mot « pluie » par exemple. Pour réussir à le comprendre, il faut d’abord transformer cette donnée textuelle en donnée numérique. Pour ce faire, plusieurs approches sont possibles, nous en verrons certaines dans la suite.

Le Natural Language Processing (NLP) est un domaine des sciences de l’information qui permet à la machine de « comprendre l’homme ». Mais le NLP n’est pas restreint à cela, il inclut également la classification et compréhension de texte, la synthèse, la traduction et bien d’autres choses (bien que ces domaines peuvent être inscrit dans le domaine plus globale de la compréhension homme-machine).

Qu'est-ce que le NLP (Natural Language Processing) ?

Le NLP au service de l’interaction humains-machines

Afin de bien saisir les enjeux du NLP, il est nécessaire de comprendre son importance et son utilité. Après tout, pourquoi vouloir qu’une machine nous comprenne ? Bien que le concept soit fascinant, le réel intérêt repose sur les différentes utilités que l’on peut en tirer.

La première chose à laquelle on pense est le speech recognition (reconnaissance vocale en français). Ce type d’utilisation est de plus en plus répandu, avec par exemple Alexa de Amazon ou Siri d’Apple.

Ces interfaces intelligentes permettent de contrôler certaines fonctionnalités de notre maison (allumer/éteindre la lumière par exemple), nous suggérer le meilleur itinéraire pour aller d’un point A à un point B, nous indiquer les prévisions météorologiques, mais également « discuter » avec nous. Bien sûr, tout n’est pas forcément parfait (voir Personne n’aime parler à une IA), mais ce n’est que le début, et si, pour l’instant, on n’y voit que des applications mondaines, voir inutiles, il est très vraisemblable que la reconnaissance vocale soit cruciale dans le futur.

Un autre exemple classique d’utilisation du NLP, utilisé par Yahoo! et Google, est la détection de spam dans les mails. Ces algorithmes analysent les emails qui passent à travers leurs serveurs et signalent et arrêtent les spam avant même qu’ils atteignent votre boite mail. Pour ce faire, il est nécessaire de faire comprendre à la machine quels sont les mots, phrases, tournures de phrases qui sont synonymes de spam.

Encore plus impressionnant que les deux précédents exemples, le NLP est même utilisé afin de prédire si une personne est malade ou non (maladie cardiovasculaire, dépression, schizophrénie) à partir des dossiers médicaux et du discours du patient lui-même (voir https://www.thenewsminute.com/article/tech-giants-india-join-ai-bandwagon-focus-healthcare-93833 pour plus d’informations) !

Il serait très réducteur de dire que cette liste de trois champs d’application exhaustive : le NLP représente aujourd’hui une très grande partie de l’IA, ses champs d’application sont riches et cruciaux. Mais comment faire pour transformer des données textuelles que l’on envoie à la machine en donnée numérique ? Cette étape de transformation s’appelle embeddings. Il y a plusieurs approches différentes, nous allons ici en citer deux.

L’approche NLP classique : Tf-IDF (term frequency-inverse document frequency)

Cette approche est l’une des plus anciennes et des plus simples. Etant donné un corpus composé de plusieurs documents (Di)i , on calcule, pour chaque mot distinct w les matrices suivantes :

Qu'est-ce que le NLP (Natural Language Processing) ?
Qu'est-ce que le NLP (Natural Language Processing) ?

La première matrice TF représente tout simplement la fréquence brute de chaque mot dans chaque document. Il en existe plusieurs variantes, comme par exemple considérer log(1+TF(i,w)) en lieu et place de TF(i,w). Cela n’a pas vraiment d’importance tant qu’on saisit le concept général.

La deuxième matrice, IDF, représente la fréquence inverse de document (inverse document frequency), elle mesure l’importance d’un mot dans l’ensemble du corpus. Elle vise à donner un poids plus important aux termes les moins fréquents, car ils sont considérés comme plus discriminants.

Qu'est-ce que le NLP (Natural Language Processing) ?

La matrice finale (TF-IDF) est la matrice qui nous intéresse, les deux autres étant des matrices intermédiaire pour l’obtenir. Cette matrice a autant de colonnes qu’il y a de mots (distincts et) différents dans le corpus, et autant de lignes qu’il y a de documents. Chaque coefficient (i,w) correspond à l’importance (en terme de fréquence) du mot w dans le document D: c’est ce qu’on appelle son « score TF-IDF ». Les mots qui interviennent trop souvent dans trop de documents différents auront un score faible, alors que les mots qui ont une importance dans le document auront un grand score.

Qu'est-ce que le NLP (Natural Language Processing) ?
Un exemple d’une partie d’une matrice TF-IDF en pratique (réalisé pour un projet scolaire)

Cette approche a l’avantage d’être simple et de bien fonctionner pour les cas simples. Son plus gros défaut est paradoxalement son avantage : c’est une approche trop simpliste qui ne prend pas en compte la sémantique. Le contexte d’un mot dans la phrase n’est pas pris en compte alors que c’est un point crucial en NLP complexe. L’approche suivante, word2vec, est plus moderne et remédie à ce problème.

Word2vec

L’approche word2vec est une méthode d’embedding qui prend en compte la sémantique et le contexte de chaque mot dans la phrase pour le vectoriser (i.e. le transformer en vecteur). En réalité, c’est un abus de langage de parler de l’approche word2vec puisqu’il existe plusieurs variantes. Nous allons présenter ici la méthode dites « Skip-gram ». Les autres variantes reposent sur le même système mais diffèrent dans certains points moins importants.

La représentation word2vec est faite de telle sorte que deux mots qui aient un sens proche soient également proches en termes de distance vectorielle (par exemple, « chat » sera plus proche de « chien » que de « maison »). Cet algorithme fonctionne sur le principe de distributional semantics (linguistique distributionnelle) qui se base sur l’idée que nous pouvons comprendre le sens d’un mot en regardant le contexte dans lequel il a l’habitude d’apparaitre dans des contextes similaires.

Par exemple, le mot « roi » et « prince » ont plus de chance d’apparaitre ensemble que le mot « roi » et « laverie ». Ainsi, pour connaitre la représentation vectorielle d’un mot, il suffit d’apprendre le contexte dans lequel il a tendance à apparaître.

La première étape est de choisir la dimension de la représentation vectorielle (plus elle est élevée plus on est précis, mais plus le modèle est complexe). Notons d cette valeur. Pour chaque phrase du corpus, on parcourt chacun de ses mots ; considérons le mot à la position t, wt, qui sera alors notre mot central (noté c pour context) avec son contexte (noté o, pour outside).

On définit le contexte d’un mot comme suit : on définit une fenêtre de taille m (paramètre que l’on choisit comme on le veut : plus on le prend élevé plus le modèle est susceptible d’être précis, mais plus il est complexe) ce qui signifie que les mots de la position t-m à t+m constituent le contexte de notre mot. Il faut alors maximiser la probabilité d’observer o selon qu’on ait c (et vice-versa). Nous allons noter la probabilité d’observer le mot t+j en connaissant le mot t :  P (wt+j | wt).

Qu'est-ce que le NLP (Natural Language Processing) ?

Ainsi, sous l’hypothèse que les observations sont indépendantes, il faut maximiser la vraisemblance suivante :

Qu'est-ce que le NLP (Natural Language Processing) ?

où T représente le nombre total de mots et theta l’ensemble des paramètres du modèles (grosso modo la représentation vectorielle de chaque mots). A chaque mot w on associe deux vecteurs : uw pour le cas où w est considéré comme un mot de contexte et vw pour le cas où w est considéré comme un mot central. Le paramètre theta est donc de la forme :

Qu'est-ce que le NLP (Natural Language Processing) ?

Une maximisation de la vraisemblance L(theta) conduit donc à trouver la « meilleure » représentation vectorielles de chaque mots.

Cette approche se révèle très efficace mais elle présente le problème de devoir considérer un nombre très élevé de paramètres ( 2 x la dimension x le nombre de mots, ce qui peut atteindre des centaines de milliers voire plus) et donc engendré un coût de calcul très élevé. En pratique, on utilise des modèles qui ont été pré-entrainés par Google sur des millions (voire des milliards) de données et cela fonctionne très bien.

Il n’est cependant pas nécessaire de comprendre toute la théorie pour pouvoir utiliser word2vec (et heureusement !) et nous avons nous même volontairement omis certains détails techniques moins importants dans cet article afin qu’il reste accessible à tout le monde.

Si vous êtes intéressés par le fait d’implémenter ces modèles en pratique, faites-le nous savoir, on ne manquera pas de vous écrire un tutoriel dans votre revue préférée… 😉