PNL avec l'API Google Cloud Natural Language
Publié: 2022-03-11Le traitement automatique du langage naturel (TAL), qui est la combinaison de l'apprentissage automatique et de la linguistique, est devenu l'un des sujets les plus étudiés dans le domaine de l'intelligence artificielle. Au cours des dernières années, de nombreuses nouvelles étapes ont été franchies, la plus récente étant le modèle GPT-2 d'OpenAI, qui est capable de produire des articles réalistes et cohérents sur n'importe quel sujet à partir d'une courte entrée.
Cet intérêt est motivé par les nombreuses applications commerciales qui ont été mises sur le marché ces dernières années. Nous parlons à nos assistants à domicile qui utilisent la PNL pour transcrire les données audio et comprendre nos questions et commandes. De plus en plus d'entreprises transfèrent une grande partie de l'effort de communication client vers des chatbots automatisés. Les marchés en ligne l'utilisent pour identifier les fausses critiques, les entreprises de médias s'appuient sur la PNL pour rédiger des articles de presse, les sociétés de recrutement associent les CV aux postes, les géants des médias sociaux filtrent automatiquement les contenus haineux et les cabinets juridiques utilisent la PNL pour analyser les contrats.
La formation et le déploiement de modèles d'apprentissage automatique pour des tâches comme celles-ci ont été un processus complexe dans le passé, qui nécessitait une équipe d'experts et une infrastructure coûteuse. Mais la forte demande pour de telles applications a poussé les grands fournisseurs de services informatiques à développer des services liés à la PNL, ce qui réduit considérablement la charge de travail et les coûts d'infrastructure. Le coût moyen des services cloud baisse depuis des années et cette tendance devrait se poursuivre.
Les produits que je vais présenter dans cet article font partie de Google Cloud Services et s'appellent "Google Natural Language API" et "Google AutoML Natural Language".
API Google Natural Language
L'API Google Natural Language est une interface facile à utiliser vers un ensemble de puissants modèles NLP qui ont été pré-formés par Google pour effectuer diverses tâches. Comme ces modèles ont été formés sur des corpus de documents extrêmement volumineux, leurs performances sont généralement assez bonnes tant qu'ils sont utilisés sur des ensembles de données qui n'utilisent pas un langage très idiosyncrasique.
Le plus grand avantage de l'utilisation de ces modèles pré-formés via l'API est qu'aucun ensemble de données de formation n'est nécessaire. L'API permet à l'utilisateur de commencer immédiatement à faire des prédictions, ce qui peut être très utile dans des situations où peu de données étiquetées sont disponibles.
L'API Natural Language comprend cinq services différents :
- Analyse syntaxique
- Analyse des sentiments
- Analyse d'entité
- Analyse du sentiment de l'entité
- Classement du texte
Analyse syntaxique
Pour un texte donné, l'analyse syntaxique de Google renverra une répartition de tous les mots avec un riche ensemble d'informations linguistiques pour chaque jeton. Les informations peuvent être divisées en deux parties :
Partie du discours : Cette partie contient des informations sur la morphologie de chaque jeton. Pour chaque mot, une analyse fine est renvoyée contenant son type (nom, verbe, etc.), son sexe, sa casse grammaticale, son temps, son humeur grammaticale, sa voix grammaticale, et bien plus encore.
Par exemple, pour la phrase d'entrée "Un ordinateur m'a battu une fois aux échecs, mais ce n'était pas le cas pour moi au kickboxing." (Emo Philips) l'analyse des parties du discours est :
UNE | tag: DET |
'l'ordinateur' | tag : NOM numéro : SINGULIER |
'une fois que' | balise : ADV |
'battre' | tag: VERBE MODE: INDICATIF TEMPS: PASSÉ |
'moi' | tag : PRON cas : ACCUSATIF nombre : SINGULIER personne : PREMIER |
à | balise : ADP |
'échecs' | tag : NOM numéro : SINGULIER |
',' | tag: PUNCT |
'mais' | tag: CONJ |
'ce' | tag : PRON cas : NOMINATIF genre : NEUTRE numéro : SINGULIER personne : TROISIÈME |
'a été' | tag : VERBE mode : INDICATIF nombre : SINGULIER personne : TROISIÈME TEMPS : PASSÉ |
'non' | tag: DET |
'rencontre' | tag : NOM numéro : SINGULIER |
'pour' | balise : ADP |
'donner un coup' | tag : NOM numéro : SINGULIER |
'boxe' | tag : NOM numéro : SINGULIER |
'.' | tag: PUNCT |
Arbres de dépendance : La deuxième partie du retour s'appelle un arbre de dépendance, qui décrit la structure syntaxique de chaque phrase. Le diagramme suivant d'une célèbre citation de Kennedy montre un tel arbre de dépendance. Pour chaque mot, les flèches indiquent quels mots sont modifiés par celui-ci.
Les bibliothèques Python couramment utilisées nltk et spaCy contiennent des fonctionnalités similaires. La qualité de l'analyse est constamment élevée dans les trois options, mais l'API Google Natural Language est plus facile à utiliser. L'analyse ci-dessus peut être obtenue avec très peu de lignes de code (voir exemple plus bas). Cependant, alors que spaCy et nltk sont open-source et donc gratuits, l'utilisation de l'API Google Natural Language coûte de l'argent après un certain nombre de requêtes gratuites (voir section coût).
Outre l'anglais, l'analyse syntaxique prend en charge dix langues supplémentaires : chinois (simplifié), chinois (traditionnel), français, allemand, italien, japonais, coréen, portugais, russe et espagnol .
Analyse des sentiments
Le service d'analyse de syntaxe est principalement utilisé au début de son pipeline pour créer des fonctionnalités qui sont ensuite introduites dans des modèles d'apprentissage automatique. Au contraire, le service d'analyse des sentiments peut être utilisé dès la sortie de la boîte.
L'analyse des sentiments de Google fournira l'opinion émotionnelle dominante dans un texte fourni. L'API renvoie deux valeurs : Le "score" décrit l'inclinaison émotionnelle du texte de -1 (négatif) à +1 (positif), 0 étant neutre.
La "magnitude" mesure la force de l'émotion.
Regardons quelques exemples :
Phrase d'entrée | Résultats des sentiments | Interprétation |
Le train pour Londres part à quatre heures | Note : 0,0 Ampleur : 0,0 | Une déclaration complètement neutre, qui ne contient aucune émotion du tout. |
Ce billet de blog est bien. | Note : 0,7 Ampleur : 0,7 | Un sentiment positif, mais pas exprimé très fortement. |
Ce billet de blog est bien. C'était très utile. L'auteur est incroyable. | Note : 0,7 Ampleur : 2,3 | Le même sentiment, mais exprimé beaucoup plus fort. |
Ce billet de blog est très bien. Cet auteur est généralement un écrivain horrible, mais ici, il a eu de la chance. | Note : 0,0 Ampleur : 1,6 | L'ampleur nous montre qu'il y a des émotions exprimées dans ce texte, mais le sentiment montre qu'elles sont mitigées et pas clairement positives ou négatives. |
Le modèle d'analyse des sentiments de Google est formé sur un très grand ensemble de données. Malheureusement, aucune information sur sa structure détaillée n'est disponible. J'étais curieux de connaître ses performances dans le monde réel, alors je l'ai testé sur une partie du Large Movie Review Dataset, qui a été créé par des scientifiques de l'Université de Stanford en 2011.
J'ai sélectionné au hasard 500 critiques de films positives et 500 négatives à partir de l'ensemble de test et comparé le sentiment prédit à l'étiquette de critique réelle. La matrice de confusion ressemblait à ceci :
Sentiment positif | Sentiment négatif | |
Bonne critique | 470 | 30 |
Mauvaise critique | 29 | 471 |
Comme le montre le tableau, le modèle a raison environ 94 % du temps pour les bonnes et les mauvaises critiques de films. Ce n'est pas une mauvaise performance pour une solution prête à l'emploi sans aucun ajustement au problème donné.
Remarque : L'analyse des sentiments est disponible pour les mêmes langues que l'analyse syntaxique, à l'exception du russe.
Analyse d'entité
L'analyse d'entité est le processus de détection d'entités connues telles que des personnalités publiques ou des points de repère à partir d'un texte donné. La détection d'entités est très utile pour toutes sortes de tâches de classification et de modélisation de sujets.
L'API Google Natural Language fournit des informations de base sur chaque entité détectée et fournit même un lien vers l'article Wikipedia correspondant s'il existe. De plus, un score de saillance est calculé. Ce score pour une entité fournit des informations sur l'importance ou la centralité de cette entité pour l'ensemble du texte du document. Les scores plus proches de 0 sont moins saillants, tandis que les scores plus proches de 1,0 sont très saillants.
Lorsque nous envoyons une requête à l'API avec cette phrase d'exemple : "Robert DeNiro a parlé à Martin Scorsese à Hollywood la veille de Noël en décembre 2011." Nous recevons le résultat suivant :
Entité détectée | Informations Complémentaires |
Robert de niro | type : PERSON saillance : 0.5869118 wikipedia_url : https://en.wikipedia.org/wiki/Robert_De_Niro |
Hollywood | type : LOCATION saillance : 0.17918482 wikipedia_url : https://en.wikipedia.org/wiki/Hollywood |
Martin Scorsese | type : LOCATION saillance : 0.17712952 wikipedia_url : https://en.wikipedia.org/wiki/Martin_Scorsese |
réveillon de Noël | type : PERSON saillance : 0.056773853 wikipedia_url : https://en.wikipedia.org/wiki/Christmas |
décembre 2011 | type : DATE Année : 2011 Mois : 12 saillance : 0.0 wikipedia_url : - |
2011 | type : NOMBRE saillance : 0.0 wikipedia_url : - |
Comme vous pouvez le voir, toutes les entités sont identifiées et classées correctement, sauf que 2011 apparaît deux fois. En plus du champ dans l'exemple de sortie, l'API d'analyse d'entité détectera également les organisations, les œuvres d'art, les biens de consommation, les numéros de téléphone, les adresses et les prix.
Analyse du sentiment de l'entité
S'il existe des modèles de détection d'entités et d'analyse des sentiments, il est naturel d'aller plus loin et de les combiner pour détecter les émotions dominantes envers les différentes entités dans un texte.
Alors que l'API d'analyse des sentiments trouve tous les affichages d'émotion dans le document et les agrège, l'analyse des sentiments d'entité essaie de trouver les dépendances entre les différentes parties du document et les entités identifiées, puis attribue les émotions dans ces segments de texte aux entités respectives.
Par exemple le texte opiniâtre : « L'auteur est un horrible écrivain. Le lecteur est très intelligent par contre. conduit aux résultats :
Entité | Sentiment |
auteur | Pertinence : 0,8773350715637207 Sentiment : ampleur : 1,899999976158142 score : -0,8999999761581421 |
lecteur | Saillance : 0,08653714507818222 Sentiment : ampleur : 0,8999999761581421 score : 0,8999999761581421 |
L'analyse des sentiments d'entité ne fonctionne jusqu'à présent que pour l'anglais, le japonais et l'espagnol.
Classement du texte
Enfin, l'API de langage naturel de Google est livrée avec un modèle de classification de texte plug-and-play.
Le modèle est formé pour classer les documents d'entrée dans un large ensemble de catégories. Les catégories sont structurées de manière hiérarchique, par exemple la catégorie « Loisirs et loisirs » comporte plusieurs sous-catégories, dont l'une serait « Loisirs et loisirs/Plein air » qui elle-même a des sous-catégories comme « Loisirs et loisirs/Plein air/Pêche ».
Voici un exemple de texte d'une publicité pour un appareil photo Nikon :
« Le grand capteur au format DX de 24,2 mégapixels du D3500 capture des photos et des vidéos Full HD riches en détails, même lorsque vous filmez dans des conditions de faible éclairage. Combiné à la puissance de rendu de votre objectif NIKKOR, vous pouvez commencer à créer des portraits artistiques avec un flou d'arrière-plan fluide. Avec facilité."

L'API Google renvoie le résultat :
Catégorie | Confiance |
Arts et divertissement/Arts visuels et design/Arts photographiques et numériques | 0,95 |
Loisirs & Loisirs | 0,94 |
Informatique et électronique/Électronique grand public/Appareil photo et équipement photo | 0,85 |
Ces trois catégories ont du sens, même si nous classerions intuitivement la troisième entrée plus haut que la seconde. Cependant, il faut tenir compte du fait que ce segment d'entrée n'est qu'une petite partie du document publicitaire complet de la caméra et que les performances du modèle de classification s'améliorent avec la longueur du texte.
Après l'avoir essayé avec de nombreux documents, j'ai trouvé les résultats du modèle de classification significatifs dans la plupart des cas. Pourtant, comme tous les autres modèles de l'API Google Natural Language, le classificateur se présente comme une solution de boîte noire qui ne peut pas être modifiée ni même affinée par l'utilisateur de l'API. En particulier dans le cas de la classification de texte, la grande majorité des entreprises auront leurs propres catégories de texte qui diffèrent des catégories du modèle Google et, par conséquent, le service de classification de texte de l'API Natural Language peut ne pas être applicable à la majorité des utilisateurs.
Une autre limitation du modèle de classification est qu'il ne fonctionne que pour les textes en anglais.
Comment utiliser l'API de langage naturel
Le principal avantage de l'API Google Natural Language est sa facilité d'utilisation. Aucune compétence en apprentissage automatique n'est requise et presque aucune compétence en codage. Sur le site Web de Google Cloud, vous pouvez trouver des extraits de code pour appeler l'API dans de nombreuses langues.
Par exemple, le code Python pour appeler l'API d'analyse des sentiments est aussi court que :
from google.cloud import language_v1 from google.cloud.language_v1 import enums import six def sample_analyze_sentiment(content): client = language_v1.LanguageServiceClient() if isinstance(content, six.binary_type): content = content.decode('utf-8') type_ = enums.Document.Type.PLAIN_TEXT document = {'type': type_, 'content': content} response = client.analyze_sentiment(document) sentiment = response.document_sentiment print('Score: {}'.format(sentiment.score)) print('Magnitude: {}'.format(sentiment.magnitude))
Les autres fonctionnalités de l'API sont appelées de la même manière, simplement en client.analyze_sentiment
par la fonction appropriée.
Coût global de l'API Google Natural Language
Google facture ses utilisateurs à la demande pour tous les services de l'API Natural Language. Cela présente l'avantage qu'il n'y a pas de coûts fixes pour les serveurs de déploiement. L'inconvénient est qu'il peut devenir coûteux pour les très grands ensembles de données.
Ce tableau présente les tarifs (pour 1 000 requêtes) en fonction du nombre de requêtes mensuelles :
Si un document comporte plus de 1 000 caractères, il compte comme plusieurs demandes. Par exemple, si vous souhaitez analyser le sentiment de 10 000 documents contenant chacun 1 500 caractères, 20 000 requêtes vous seront facturées. Comme les 5 000 premiers sont gratuits, le coût total s'élèverait à 15 $. L'analyse d'un million de documents de même taille coûterait 1 995 $.
Pratique, mais inflexible
L'API Google Natural Language est une option très pratique pour des solutions rapides et prêtes à l'emploi. Très peu de connaissances techniques et aucune compréhension des modèles d'apprentissage automatique sous-jacents ne sont requises.
Le principal inconvénient est sa rigidité et le manque d'accès aux modèles. Les modèles ne peuvent pas être réglés sur une tâche ou un ensemble de données spécifique.
Dans un environnement réel, la plupart des tâches nécessiteront probablement une solution plus personnalisée que ce que les fonctions standardisées de l'API Natural Language peuvent fournir.
Pour ce scénario, Google AutoML Natural Language est plus approprié.
Langage naturel Google AutoML
Si l'API Natural Language n'est pas suffisamment flexible pour vos besoins professionnels, AutoML Natural Language est peut-être le bon service. AutoML est un nouveau service Google Cloud (encore en version bêta) qui permet à l'utilisateur de créer des modèles d'apprentissage automatique personnalisés. Contrairement à l'API Natural Language, les modèles AutoML seront formés sur les données de l'utilisateur et s'adapteront donc à une tâche spécifique.
Les modèles d'apprentissage automatique personnalisés pour classer le contenu sont utiles lorsque les catégories prédéfinies disponibles à partir de l'API Natural Language sont trop génériques ou ne s'appliquent pas à votre cas d'utilisation ou à votre domaine de connaissances spécifique.
Le service AutoML demande un peu plus d'efforts à l'utilisateur, principalement parce que vous devez fournir un ensemble de données pour entraîner le modèle. Cependant, la formation et l'évaluation des modèles sont entièrement automatisées et aucune connaissance en apprentissage automatique n'est requise. L'ensemble du processus peut être effectué sans écrire de code en utilisant la console Google Cloud. Bien entendu, si vous souhaitez automatiser ces étapes, tous les langages de programmation courants sont pris en charge.
Que peut-on faire avec Google AutoML Natural Language ?
Le service AutoML couvre trois cas d'utilisation. Tous ces cas d'utilisation prennent uniquement en charge la langue anglaise pour le moment.
1. Classification de texte AutoML
Alors que le classificateur de texte de l'API Natural Language est pré-entraîné et dispose donc d'un ensemble fixe de catégories de texte, la classification de texte AutoML crée des modèles de machine learning personnalisés, avec les catégories que vous fournissez dans votre ensemble de données d'entraînement.
2. Analyse des sentiments AutoML
Comme nous l'avons vu, l'analyse des sentiments de l'API Natural Language fonctionne très bien dans les cas d'utilisation généraux comme les critiques de films. Étant donné que le modèle de sentiment est formé sur un corpus très général, les performances peuvent se détériorer pour les documents qui utilisent beaucoup de langage spécifique à un domaine. Dans ces situations, l'analyse des sentiments AutoML vous permet d'entraîner un modèle de sentiment personnalisé pour votre domaine.
3. Extraction d'entités AutoML
Dans de nombreux contextes commerciaux, il existe des entités spécifiques à un domaine (contrats juridiques, documents médicaux) que l'API Natural Language ne sera pas en mesure d'identifier. Si vous disposez d'un ensemble de données dans lequel les entités sont marquées, vous pouvez entraîner un extracteur d'entité de modèle personnalisé avec AutoML. Si l'ensemble de données est suffisamment volumineux, le modèle d'extraction d'entité formé pourra également détecter des entités inédites.
Comment utiliser le langage naturel AutoML
L'utilisation des trois AutoML est un processus en quatre étapes et est très similaire pour les trois méthodologies :
Préparation du jeu de données
L'ensemble de données doit être dans un format spécifique (CSV ou JSON) et doit être stocké dans un bucket de stockage. Pour les modèles de classification et de sentiment, les ensembles de données ne contiennent que deux colonnes, le texte et l'étiquette. Pour le modèle d'extraction d'entités, le jeu de données a besoin du texte et des emplacements de toutes les entités dans le texte.Formation de modèle
La formation du modèle est complètement automatique. Si aucune autre instruction n'est donnée, AutoML divisera automatiquement l'ensemble d'apprentissage en ensembles d'apprentissage, de test et de validation. Cette répartition peut également être décidée par l'utilisateur, mais c'est le seul moyen d'influencer la formation du modèle. Le reste de la formation est entièrement automatisé à la manière d'une boîte noire.Évaluation
Une fois la formation terminée, AutoML affichera les scores de précision et de rappel ainsi qu'une matrice de confusion. Malheureusement, il n'y a absolument aucune information sur le modèle lui-même, ce qui rend difficile l'identification des raisons des modèles peu performants.Prédiction
Une fois que vous êtes satisfait des performances du modèle, celui-ci peut être facilement déployé en quelques clics. Le processus de déploiement ne prend que quelques minutes.
Performances du modèle AutoML
Le processus de formation est assez lent, probablement parce que les modèles sous-jacents sont très volumineux. J'ai formé une petite tâche de classification de test avec 15 000 échantillons et 10 catégories et la formation a duré plusieurs heures. Un exemple concret avec un ensemble de données beaucoup plus volumineux m'a pris plusieurs jours.
Bien que Google n'ait publié aucun détail sur les modèles utilisés, je suppose que le modèle BERT de Google est utilisé avec de petites adaptations pour chaque tâche. Le réglage fin de grands modèles comme BERT est un processus coûteux en calcul, en particulier lorsque de nombreuses validations croisées sont effectuées.
J'ai testé le modèle de classification AutoML dans un exemple concret par rapport à un modèle que j'ai développé moi-même, qui était basé sur BERT. Étonnamment, le modèle AutoML s'est comporté bien moins bien que mon propre modèle, lorsqu'il a été formé sur les mêmes données. AutoML a atteint une précision de 84 %, tandis que mon modèle a atteint 89 %.
Cela signifie que même si l'utilisation d'AutoML peut être très pratique, pour les tâches critiques en termes de performances, il est logique d'investir du temps et de développer le modèle vous-même.
Tarification AutoML
La tarification d'AutoML pour les prédictions avec 5 USD pour 1 000 enregistrements de texte est nettement plus élevée que celle de l'API Natural Language. De plus, pour la formation du modèle, AutoML facture 3 $ de l'heure. Bien que cela soit négligeable au début, pour les cas d'utilisation qui nécessitent un recyclage fréquent, cela peut représenter une quantité substantielle, en particulier parce que la formation semble être assez lente.
Prenons le même exemple que pour l'API Natural Language :
Vous voulez analyser le sentiment de 10 000 documents, qui ont 1 500 caractères chacun, vous serez donc facturé 20 000 requêtes. Disons que la formation du modèle prend 20 heures, ce qui coûte 48 $. La prédiction ne vous coûterait rien, car les 30 000 premières requêtes sont gratuites. Pour les petits ensembles de données comme celui-ci, AutoML est très économique.
Cependant, si votre ensemble de données est plus grand et que vous devez prédire le sentiment d'un million de la même taille, cela coûterait 9 850 $, ce qui est assez cher. Pour de grands ensembles de données comme celui-ci, il est logique de développer votre propre modèle et de le déployer vous-même sans utiliser AutoML.
API Google Natural Language et AutoML Natural Language
Google AutoML Natural Language est beaucoup plus puissant que l'API Natural Language, car il permet à l'utilisateur de former des modèles personnalisés pour son ensemble de données et son domaine spécifiques.
Il est aussi facile à utiliser et ne nécessite pas de connaissances en apprentissage automatique. Les deux inconvénients sont les coûts plus élevés et la nécessité de fournir un ensemble de données de haute qualité qui doit entraîner des modèles performants.
La version bêta d'AutoML ne prend en charge que trois tâches NLP pour le moment (classification, analyse des sentiments, extraction d'entités) et ne prend en charge que les documents en anglais. Lorsque ce service sera entièrement publié, je m'attends à ce que d'autres langues et tâches NLP soient ajoutées au fil du temps.