Bert : l’analyse du langage

Bert And Ernie Sesamstrasse
Kapa65 / Pixabay

BERT (Bidirectional Encoders Representations from Transformers) est un réseau de neurones (ou plutôt une famille de transformers) qui a largement surclassé tout ce qui a précédé compréhension de texte.

BERT , du nom de la marionnette qui laisse entrevoir la culture des développeurs, a participé au bigbang de fin 2019 dans l’analyse automatique du langage avec ELMO (un autre monstre de la même série) et GPT-2. Jusqu’ici, les logiciels de traitement du langage humain cherchaient péniblement des règles. D’où la célèbre citation de Frederick Jelinek:

Chaque fois que je vire un linguiste mon logiciel de reconnaissance du langage s’améliore.

F.Jelinek

Cette remarque un peu raide correspond bien au changement de paradigme. Les réseaux de neurones apprennent par l’exemple, comme les enfants apprennent une langue. Ils n’apprennent la grammaire que bien plus tard.

La startup Hugging Face a mis en ligne une librairie « à l’état de l’art » (transformers) regroupant de nombreux modèles préentrainés dans des langues variés. Dans le même temps la langue française, parente pauvre des langues informatisées, a été implémentée sous BERT (c’est à dire avec le même algorithme) par l’INRIA et Facebook AI. Le résultat, dont le nom « camemBERT » est un puissant trait d’esprit d’informaticien (gageons qu’on échappera sans doute pas à dagoBERT, petitroBERT et autres éclairs de génie) , a appris de plus de 130 Go de textes dans notre langue.

Transformers est fourni avec un module « pipeline » très facile d’emploi qui implémente différentes activités. Nous allons ici nous intéresser à une activité particulièrement fascinante: la lecture et la compréhension de texte puis la réponse à des questions à propos de ce qui est écrit. Tous ces exemples peuvent être testés sur Google Colab en commençant par installer transformers par !pip install transformers . Par exemple:

from __future__ import print_function
import ipywidgets as widgets
from transformers import pipeline
nlp_qa = pipeline('question-answering')
c="the cat is silky and cute"
q="how is the cat?"
print(nlp_qa(context=c, question=q))
q="who is cute?"
print(nlp_qa(context=c,question=q))

{'score': 0.795428329575742, 'start': 11, 'end': 24, 'answer': 'silky and cute'}
{'score': 0.6673998311582636, 'start': 0, 'end': 7, 'answer': 'the cat'}

Ici en Anglais, BERT peut répondre à des questions sur le chat à partir d’une phrase de contexte simple.

Cette exemple n’est pas très intéressant mais si on fait lire à BERT le Grand Meaulnes d’Alain Fournier puis que l’on pose la question « qui est silencieux? » avec le code ci-après

from <strong>future</strong> import print_function<br>
import ipywidgets as widgets<br>
from transformers import pipeline<br>
import requests<br>
txt=requests.get("http://www.gutenberg.org/cache/epub/5781/pg5781.txt").text
nlp = pipeline('question-answering', model='fmikaelian/camembert-base-squad', tokenizer='fmikaelian/camembert-base-squad')
nlp(context=txt, question="qui est silencieux?",topk=10)

[{'answer': 'Meaulnes',
   'end': 288398,
   'score': 0.9610349569521226,
   'start': 288390},
  {'answer': 'Meaulnes,',
   'end': 366174,
   'score': 0.9586802668733583,
   'start': 366165},
  {'answer': 'Meaulnes',
   'end': 211573,
   'score': 0.9420086507666952,
   'start': 211565},
  {'answer': 'M. de Galais,',
   'end': 349716,
   'score': 0.9355778772901999,
   'start': 349703},
  {'answer': 'M. Seurel,',
   'end': 228904,
   'score': 0.9348246004304883,
   'start': 228894},
  {'answer': 'Yvonne de Galais,',
   'end': 324318,
   'score': 0.9254506473969926,
   'start': 324301},
  {'answer': 'Yvonne de Galais,',
   'end': 351098,
   'score': 0.9192528256912738,
   'start': 351081},
  {'answer': 'M. Seurel',
   'end': 27933,
   'score': 0.9190977907712607,
   'start': 27924},
  {'answer': 'ma mère',
   'end': 144617,
   'score': 0.9115561606829203,
   'start': 144609},
  {'answer': 'ma mère',
   'end': 144617,
   'score': 0.8999003700360859,
   'start': 144609}]

on obtient des réponses à notre question. Certes, la réponse arrive au bout de 8 minutes. Mais c’est tout de même plus rapide que de lire le livre.

Si on demande « Qui est la mère? » BERT va répondre « Millie ». Ou bien « Quand cela se passe-t-il? » il répondra « dimanche de novembre 189… »

A quoi cela sert-il ?

Cela peut paraître vain mais si vous avez des milliers de textes à lire et de questions à poser BERT va vous changer la vie. Le réseau de neurones camemBERT est la première description de la langue française qui n’est pas écrite dans une langue humaine et qui pourtant permet d’interagir, de produire et surtout de comprendre du texte dans interlocuteur humain. 2019 est l’année d’une révolution dans notre compréhension du langage. La suite va être passionnante.

Télécharger cet article au format PDF ou ePub

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.