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.
Google ColabNotebook
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
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