nikkie-ftnextの日記

イベントレポートや読書メモを発信

イベントレポート | Pythonで自然言語処理ハンズオン #はんなりPython

はじめに

すごい、すごいよこれ。 nikkieです。

2/25(金)に、はんなりPythonさん開催の自然言語処理ハンズオンに参加しました。
初めてtransformersを触ったのですが、「学習済みのモデルって、いまやこんなに簡単に使えるのか!」と衝撃を受けました。
レポートを綴ります。

目次

イベントの概要

Pythonで自然言語処理ハンズオン - connpass

BERTを中心とした言語モデルを使いこなそう!というコンセプトで開催します。今回は、分散表現(Word2vec)からBERTによる感情分析までを行います。

自然言語処理の入門と位置づけており、入門者を対象とします。中級者以上の方には、手ごたえが感じられないかもしれないのでご注意ください。

実務で自然言語処理をやっている えぬえるぴ〜や(=NLPer)ですが、「BERTを使ったハンズオンって珍しい!」と興味を惹かれ、参加しました。

ハンズオンの資料

SlideShareからダウンロードすると、リンク先が参照できます

2部構成のハンズオン

  1. 理論編:自然言語処理の関連学問分野を知る本格的な講義!
  2. 実践編:入門ハンズオン

今回の時間配分としては、理論:実践=3:1くらいでした。
理論は私もキャッチアップ中1ですが、今回の私の興味は動くコードにあります。
そこで、入門ハンズオンに絞ってレポートします。

動作環境

Colabで全然やっていいと思うのですが、今回は訓練がなかったので、ローカルに環境構築して動かしました。
モデルが小さめというのもあり、推論はCPUでも動きました。

$ python3.9 -m venv venv --upgrade-deps
$ . venv/bin/activate
(venv) $ pip install transformers[ja] torch

入門ハンズオン

「BERTを使ってみる」ハンズオンです。
transformersを使って、日英それぞれで以下のタスクを解きます。

  • 感情分析("sentiment-analysis"
  • マスクした語を埋める("fill-mask"

タスクの解き方は共通です。
transformers.Pipelineを初期化し、対象の文を渡すだけ!2
Pipeline初期化時に、モデルとトークナイザも指定します。

>>> from transformers import pipeline
>>> nlp = pipeline("sentiment-analysis", model="daigo/bert-base-japanese-sentiment", tokenizer="daigo/bert-base-japanese-sentiment")
>>> print(nlp("この商品を買ってよかった。"))
[{'label': 'ポジティブ', 'score': 0.9898485541343689}]

ハンズオンで使ったモデル

英語文の感情分析

"sentiment-analysis"タスクでmodel引数、tokenizer引数を指定しない場合、デフォルトで使われるそうです(実行時に出力されたメッセージより)。

日本語文の感情分析

英文中のマスクした語埋め

"fill-mask"タスクのデフォルトはこちら。
tokenizer.mask_token"<mask>"なので、"I eat <mask> everyday""<mask>"部分を埋めるように処理するんですね。

日本語文中のマスクした語埋め

今回指定したトークナイザではtokenizer.mask_token"[MASK]"でした。

終わりに

transformersモデルの指定を変えるだけ自然言語処理のいろんなタスクが解けるんですね!
各タスク向けのモデルは有志が公開していて、手元の問題に合わせてモデルをダウンロードして使うだけという状況3になっているとは!

先日、音声認識音声合成のモデルを試したとき4にも感じましたが、必要なライブラリを選んで使うように、必要なモデルを探してダウンロードして使う時代になってるんですね。
そして中身をきちんと理解していなくても(=ブラックボックスでも)、それなりの結果が利用できる!

これってすごくないですか?

今回のハンズオンは3/18(金)に続くそうです。
次回も楽しみにしています。
登壇者のusagisanさん、運営・参加者の皆さま、ありがとうございました!

補足:合わせて読みたい

読んできた中から、このハンズオンで初めて自然言語処理に触れた方向けに、関連書籍を挙げておきます。
ハンズオン資料の参考文献に当たるのもありだと思います。

復習や予習によさそうなのが『BERTによる自然言語処理入門』5

私視点でBERTを使いこなしているように見える方から教えていただいたのですが、サンプルコード豊富で(BERT以後の)入門書として推していきたい一冊です(写経の時間を作りたい・・)。
またBERTに絞って、理論面の解説もあります(サブワードの解説とか分かりやすかった!)

サンプルコードはこちらで公開されています:https://github.com/stockmarkteam/bert-book

もう1冊。
今回のハンズオン、理論面が本格的でしたが、私が一歩目として読んだのはこちら(参考文献でも挙がっています)。

自然言語処理はいろいろなタスクがあり、前提知識が少ないタスクに当たるときはこの本まで立ち戻っています。


  1. 私の意見として、BERTがゲームチェンジャーすぎて、BERT以前の自然言語処理の内容はやや時代錯誤になってしまった部分もあるように感じています。

  2. インスタンス__call__メソッドで処理できるの、spaCyっぽいと思いました。参考:https://spacy.io/usage/spacy-101#annotations

  3. ただし、推論の精度が不十分であれば、教師ラベルを用意して訓練(fine-tuning)する必要もあると思います

  4. 声をPythonに聴かせて(後編:対処し、マイクの音声でも「変じゃないよ」) - nikkie-ftnextの日記

  5. 2月は自然言語処理関連の勉強会が多く、【初心者向け】Pythonで手軽に始める文章校正 - connpass で清原さんも挙げられていました