[Python] J'ai joué avec le traitement du langage naturel ~ transformers ~

J'ai entendu dire que divers outils de traitement du langage naturel pouvaient être essayés avec python, alors j'ai joué avec eux. Je ne vois pas du tout l'algorithme, mais c'est incroyable que vous puissiez faire quelque chose d'intéressant en quelques lignes.

Environnement d'exécution

Google ColabNotebook

Ce que j'ai essayé

Tout d'abord, installez des transformateurs et définissez ce dont vous avez besoin.

pip install transformers

lang.py


import torch
from transformers import pipeline
sentiment_analysis = pipeline('sentiment-analysis')
question_answering = pipeline('question-answering')
fill_mask = pipeline("fill-mask")
feature_extraction = pipeline("feature-extraction")

Cette fois, j'ai joué avec les quatre ci-dessus. Regardons chacun ci-dessous.

sentiment-analysis Il produit le degré positif / négatif de la phrase d'entrée.

lang.py


sentiment_analysis("Because of the pandemic, I decided to refrain from going out.")
# => [{'label': 'NEGATIVE', 'score': 0.9692758917808533}]

On s'attend à ce qu'il soit négatif avec une grande probabilité.

question-answering Si vous donnez une phrase de question et une phrase d'explication de situation (il y a un mot à répondre), la réponse sera retournée.

lang.py


question_answering({
    'question': 'What is the cause of the pandemic?',
    'context' : 'The coronavirus triggered an outbreak, and society was thrown into chaos.'
})
# => {'answer': 'coronavirus', 'end': 15, 'score': 0.6689822122523879, 'start': 4}

Vous avez la bonne réponse. (Cependant, lorsque j'ai essayé diverses autres choses, cela retournait parfois une erreur, donc il est facile pour l'algorithme de comprendre? Il semble que cela ne fonctionnera pas à moins qu'il ne s'agisse d'une phrase.)

fill-mask Si vous donnez une phrase avec à un endroit, il renverra un mot qui semble être applicable dans le blanc.

lang.py


fill_mask("I have to be in bed all day today because I get <mask>.")
'''
 => [{'score': 0.2714517414569855,
  'sequence': '<s> I have to be in bed all day today because I get tired.</s>',
  'token': 7428},
 {'score': 0.19346608221530914,
  'sequence': '<s> I have to be in bed all day today because I get sick.</s>',
  'token': 4736},
 {'score': 0.07417058944702148,
  'sequence': '<s> I have to be in bed all day today because I get headaches.</s>',
  'token': 20816},
 {'score': 0.05399525910615921,
  'sequence': '<s> I have to be in bed all day today because I get insomnia.</s>',
  'token': 37197},
 {'score': 0.05070624500513077,
  'sequence': '<s> I have to be in bed all day today because I get sleepy.</s>',
  'token': 33782}]
'''

Tout semble bon. (Je suis désolé pour toutes les phrases d'exemple qui semblent déprimantes.)

feature-extraction Il renvoie un vecteur qui représente les caractéristiques de la phrase saisie. Contrairement aux trois ci-dessus, il s'agit d'une valeur de retour composée uniquement de valeurs numériques, mais je pensais qu'il serait facile de gérer des phrases avec mon propre modèle si j'utilisais cela. (Je veux faire quelque chose un jour)

lang.py


array = feature_extraction("I catch a cold.")

import numpy as np
np.array(array).shape
# => (1, 7, 768)

array[0][0][:10]
'''
 => [0.3683673143386841,
 0.008590285666286945,
 0.04184938594698906,
 -0.08078824728727341,
 -0.20844608545303345,
 -0.03908906877040863,
 0.19680079817771912,
 -0.12569604814052582,
 0.010193285532295704,
 -1.1207540035247803]
'''

Il a renvoyé un type de liste avec les dimensions et valeurs ci-dessus. Même ainsi, en utilisant autant de données pour comprendre la phrase unique "J'ai attrapé un rhume". ..

Encore une chose ci-dessous.

lang.py


array = feature_extraction("I catch a cold and I am sleepy.")

import numpy as np
np.array(array).shape
# => (1, 11, 768)

array[0][0][:10]
'''
 => [0.3068505525588989,
 0.026863660663366318,
 0.17733855545520782,
 0.03574731573462486,
 -0.12478257715702057,
 -0.22214828431606293,
 0.2502932548522949,
 -0.17025449872016907,
 -0.09574677795171738,
 -0.9091089963912964]
'''

La deuxième dimension a changé. La dernière dimension, 768, ne semble pas changer.

Recommended Posts

[Python] J'ai joué avec le traitement du langage naturel ~ transformers ~
J'ai essayé le traitement du langage naturel avec des transformateurs.
Python: traitement du langage naturel
3. Traitement du langage naturel par Python 2-1. Réseau de co-occurrence
3. Traitement du langage naturel par Python 1-1. Word N-gram
100 coups de traitement du langage avec Python 2015
Créer un environnement pour le traitement du langage naturel avec Python
Étudiez le traitement du langage naturel avec Kikagaku
100 traitements de langage avec Python
[Traitement du langage naturel] Prétraitement avec le japonais
100 traitements de langage avec Python (chapitre 3)
J'ai joué avec PyQt5 et Python3
100 traitements de langage avec Python (chapitre 2, partie 2)
J'ai essayé un langage fonctionnel avec Python
100 traitements de langage avec Python (chapitre 2, partie 1)
Dockerfile avec les bibliothèques nécessaires pour le traitement du langage naturel avec python
Démarrer avec Python avec 100 coups sur le traitement du langage
J'ai joué avec wordcloud!
RNN_LSTM2 Traitement du langage naturel
Python: apprentissage profond du traitement du langage naturel: principes de base
Traitement d'image avec Python
J'écrirai une explication détaillée à mort en résolvant 100 traitements de langage naturel Knock 2020 avec Python
Profitons du traitement du langage naturel à l'aide de l'API COTOHA
3. Traitement du langage naturel avec Python 1-2. Comment créer un corpus: Aozora Bunko
J'ai essayé d'extraire des expressions uniques avec la bibliothèque de traitement du langage naturel GiNZA
[Python] [Traitement du langage naturel] J'ai essayé le Deep Learning ❷ fait de toutes pièces en japonais ①
3. Traitement du langage naturel par Python 3-1. Important outil d'extraction de mots Analyse TF-IDF [définition originale]
[Chapitre 5] Introduction à Python avec 100 coups de traitement du langage
[Chapitre 3] Introduction à Python avec 100 coups de traitement du langage
[Chapitre 2] Introduction à Python avec 100 coups de traitement du langage
[Chapitre 4] Introduction à Python avec 100 coups de traitement du langage
Traitement d'image avec Python (partie 2)
J'ai essayé fp-growth avec python
J'ai essayé de gratter avec Python
"Traitement Apple" avec OpenCV3 + Python3
J'ai fait un blackjack avec du python!
Traitement du signal acoustique avec Python
100 Language Processing Knock Chapitre 1 (Python)
100 Language Processing Knock Chapitre 2 (Python)
Traitement d'image avec Python (partie 1)
Traitement du langage naturel 1 Analyse morphologique
Traitement du langage naturel 3 Continuité des mots
Traitement d'image avec Python (3)
J'ai essayé 100 traitements linguistiques Knock 2020
J'ai essayé gRPC avec Python
Python: représentation vectorielle en langage naturel
J'ai essayé de gratter avec du python
J'ai fait un blackjack avec Python.
J'ai créé wordcloud avec Python.
Traitement du langage naturel 2 similitude de mots
[Python] Traitement d'image avec scicit-image
J'ai essayé de classer M. Hanyu et M. Hanyu avec le traitement du langage naturel × classificateur Naive Bayes
[Pratique] Créez une application Watson avec Python! # 3 [Classification du langage naturel]
La première intelligence artificielle. Je voulais essayer le traitement du langage naturel, donc je vais essayer l'analyse morphologique en utilisant MeCab avec python3.
[Python] Essayez de classer les boutiques de ramen par traitement du langage naturel