Ich habe gehört, dass verschiedene Tools für die Verarbeitung natürlicher Sprache mit Python ausprobiert werden können, also habe ich mit ihnen herumgespielt. Ich kann den Algorithmus überhaupt nicht sehen, aber es ist erstaunlich, dass Sie in nur wenigen Zeilen etwas Interessantes tun können.
Google ColabNotebook
Installieren Sie zunächst Transformatoren und definieren Sie, was Sie benötigen.
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")
Diesmal habe ich mit den oben genannten vier gespielt. Schauen wir uns jeden unten an.
sentiment-analysis Es gibt den positiven / negativen Grad des Eingabesatzes aus.
lang.py
sentiment_analysis("Because of the pandemic, I decided to refrain from going out.")
# => [{'label': 'NEGATIVE', 'score': 0.9692758917808533}]
Es wird erwartet, dass es mit großer Wahrscheinlichkeit negativ ist.
question-answering Wenn Sie einen Fragensatz und einen Situationserklärungssatz geben (es gibt ein zu beantwortendes Wort), wird die Antwort zurückgegeben.
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}
Sie haben die richtige Antwort. (Wenn ich jedoch verschiedene andere Dinge ausprobierte, gab es manchmal einen Fehler zurück, so dass der Algorithmus leicht zu verstehen ist. Es scheint, dass er nur funktioniert, wenn es sich um einen Satz handelt.)
fill-mask
Wenn Sie an einer Stelle einen Satz mit
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}]
'''
Alles sieht gut aus. (Es tut mir leid für all die Beispielsätze, die deprimierend erscheinen.)
feature-extraction Es wird ein Vektor zurückgegeben, der die Eigenschaften des eingegebenen Satzes darstellt. Im Gegensatz zu den obigen drei ist es ein Rückgabewert von nur numerischen Werten, aber ich dachte, dass es einfach wäre, Sätze mit meinem eigenen Modell zu behandeln, wenn ich dies verwenden würde. (Ich möchte eines Tages etwas tun)
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]
'''
Es wurde ein Listentyp mit den oben genannten Dimensionen und Werten zurückgegeben. Trotzdem, so viele Daten zu verwenden, um den einzelnen Satz "Ich habe mich erkältet" zu verstehen. ..
Noch etwas unten.
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]
'''
Die zweite Dimension hat sich geändert. Die letzte Dimension, 768, scheint sich nicht zu ändern.
Recommended Posts