輪読会「BERTによる自然言語処理入門」第2回

はじめに

てくますプロジェクトでは、てくますゼミと呼ばれる学習会を開催しています。

少人数であーだこーだ議論しながら、考える楽しさを分かち合うことを大切にしています。

現在は「BERTによる自然言語処理入門」という本を読み進めています。

今回は本書第2回の輪読会ということで、3章と4章を読み進めました!

本記事では、今回の勉強会で学んだことをざっくりと紹介していきます。

学習内容

Attentionとは

BERTは、Attentionという手法を用いています。

Attentionでは、文章中のある単語が入力として与えられたとき、別のどの単語に注目するべきかを調べます。これによって離れた位置の情報も適切に取り入れることができ、より深く文脈を捉えられるようになります。

注目すべき単語はベクトルの内積を使って調べます。内積が大きい=類似している単語=注目すべき単語ということです。

なお、注目すべき単語を探す処理はすべての入力に対して並列で考えることができます。並列処理が得意なGPUの能力を活かすことができるというのもAttentionのメリットです。

BERTの使い方

Huggingface社が提供しているライブラリTransformersを使うことで、BERTを利用できます。

BERTを用いた処理は、以下の2ステップに分かれています。

  1. トークナイザを用いて、文章をトークン化して、BERTに入力できる形にする
  2. 上で処理したデータをBERTに入力し、出力を得る

トークナイザ

‘明日はマシンラーニングの学習をしよう。’ という文章を考えましょう。

BERTの日本語モデルのトークナイザは、以下の流れで文章をBERTに入力できる形に変換します。

  1. MeCabを用いて文章を単語に分割する
    [‘明日’, ‘は’, ‘マシンラーニング’, ‘の’, ‘学習’, ‘を’, ‘しよ’, ‘う’, ‘。’]
  2. WordPiece(トークンの辞書)を用いて単語をトークンに分割する
    [‘明日’, ‘は’, ‘マシン’, ‘##ラー’, ‘##ニング’, ‘の’, ‘学習’, ‘を’, ‘しよ’, ‘う’, ‘。’]
  3. トークンを符号化する
    [2, 11475, 9, 4583, 422, 1581, 5, 4293, 11, 2132, 205, 8, 3]
    2は開始を表す特殊トークンのID、3は終了を表す特殊トークンのIDです。
  4. 数値配列をtorch.Tensorの型にする
    これにより、BERTに入力できる形となります。

BertModel

トークナイザで処理したデータをBERTに入力し、出力を得ましょう。BertModelを用いることで、入力されたトークンの分散表現を出力として得ることができます。

上の例において、1は文章数、32は文章のトークン数、768はトークンを分散表現したときのベクトルの次元です。

ちなみに、Transformersには個別の言語タスクに特化したモデルが用意されているため、それらの場合にBertModelを使うことは多くありません。

最後に

BERTによる自然言語処理入門、第2回の輪読会でした。BERTの基本的な使い方について学びました。

次回から様々な自然言語処理のタスクを行なっていきます。いよいよ実践編ですね。

では、また!

本シリーズの記事はこちら

各ゼミの第1回記事はこちら