Help us understand the problem. What is going on with this article?

[Python]自然言語処理で遊んでみた ~transformers~

自然言語処理の様々なツールがpythonで試せると聞いたので色々と遊んでみました。
アルゴリズムは全く見えませんが、ほんの数行で面白いことができるのは驚きです。

実行環境

Google ColabNotebook

やってみたこと

まずはtransformersをインストールし、必要なものを定義しておきます。
*transformersのソースはこちら

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")

今回は上の4つで遊んでみました。以下でそれぞれ見てみます。

sentiment-analysis

入力された文のポジティブ・ネガティブ度合いを出力してくれます。

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

すごい確率でネガティブ予想されています。

question-answering

質問文、状況説明文(この中に答えとなる単語がある)を与えると、答えを返してくれます。

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}

正しい答えが出ていますね。
(ただ、他にも色々試したところ誤りを返すこともままあったので、アルゴリズムにとって分かりやすい?文でないと上手くいかなさそうです。)

fill-mask

文の中に一箇所を入れたものを与えると、その空欄に当てはまりそうな単語を入れて返してくれます。

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}]
'''

どれも良さそうですね。
(時節柄、気が滅入りそうな例文ばかりですみません。。)

feature-extraction

入力した文の特徴を表すベクトルを返してくれます。
上の三つとは違って数値のみの戻り値ですが、これを使えば自作のモデルで文章を扱うのも簡単にできそうだな〜と思ったり。(いつか何かやってみたい)

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]
'''

上のような次元、値を持つリスト型を返してくれました。
それにしても、「風邪を引いた」という文一つを理解するのにこんなにデータを使うとは。。

以下ついでにもう一つ。

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]
'''

二番目の次元が変わりました。最後の次元の768というのは変わらないみたいです。

Tatsunotoshigo
pythonいじり始めて2年目という超初心者。 まだまだ勉強不足の身ですが、自分なりに面白そうなことを日々追いかけています。 自分のコーディングのモチベーション維持または備忘録の為に投稿しています。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした