テクノロジー

自然言語処理で必須の存在である「BERT」とは!概要〜実装まで解説

自然言語処理で必須の存在である「BERT」とは!概要〜実装まで解説

ディープラーニング(深層学習)の勉強をしていると必ずといってよいほど出てくるBERT(バート)。

BERTってなんとなく大事な気がしますが、使い方は難しそうなイメージありますよね。BERTを使うとすごく性能が良いモデルを作れることは聞いたことがあるんだけど、どういう仕組みなの?どんなときに使うの?どうやって使うの? こんな疑問感じたこともあるかもしれません。

BERTは、ディープラーニングによる自然言語処理モデルで、最近の多くの自然言語処理技術に使われています。代表的なものとしては、Googleの検索エンジンなどにも使用されています。BERTは検索エンジンだけでなく、機械翻訳やチャットボットなど様々な自然言語処理で使用されています。この記事を通して、是非身につけましょう。

そこで今回は、BERTの概要から実装までをできるだけわかりやすくご紹介します。それではまず、BERTとは何かについての解説から始めましょう。

BERTとは

BERTのイメージ
BERTはBidirectional Encoder Representations from Transformersの略で、Transformerと呼ばれるディープラーニングのモデルが使われています。

TransformerはGoogleのAshish Vaswaniらが2017年に” Attention Is All You Need”という論文で発表されました。それまで、機械翻訳などの自然言語処理ではSeq2seqのようなRNN (Recurrent Neural Network)を用いたモデルが多く用いられてきました。そこでTransformerは再帰型のニューラルネットワークであるRNNを用いずに、Attentionと呼ばれるどこに注意を向けるか決める仕組みだけを使用して、Seq2seqよりも高い性能を達成しました。

BERTはこのTransformerを用いて作られた、自然言語処理の汎用的なモデルになります。BERTは文書分類や質問応答といった多くの自然言語処理のタスクで当時の最高性能(SOTA:state of the art)を達成し、大きな注目を集めました。

BERTの学習には大量のデータが必要になりますが、一度作成したモデルは文書分類や質問応答など様々なタスクに適用できるという利点があります。

BERTを学習させるための大量の学習データが手元になくても、学習済みの日本語モデルは、京都大学東北大学NICTで配布されていて、誰でもBERTを試せます。BERTの使い方を身につけて、自然言語処理タスクを精度アップさせましょう。

BERTの特徴

特徴のイメージ
続いてBERTの特徴について詳しく説明しましょう。

まず、BERTの学習では事前学習とファインチューニングの2段階で行われます。事前学習ではコーパスと呼ばれる大量の言語データを学習します。コーパスには正解ラベルを付与しておく必要はなく、教師なし学習として行います。京都大学、東北大学、NICTで配布しているモデルは、この事前学習済みのモデルとなります。

次のステップであるファインチューニングでは、事前学習済みのモデルを使用して自然言語処理タスクの学習を行います。ファインチューニングでは、学習データに正解ラベルを付与したものを使用します。教師あり学習となります。事前学習済みのモデルを使用することで、様々な種類の自然言語処理タスクに対応できることがBERTの特徴であり、汎用的と呼ばれる所以です。

また、BERTは事前学習を行うと、単語の埋め込み表現を得ることができます。埋め込み表現とは、単語の意味をベクトルで表現したもので、自然言語処理でよく使われる技術です。

一方、BERTは、1つの単語に対して複数のベクトルを持つことができます。例えば「弾む」という単語は「ボールが弾む」といった使い方もあれば、「心が弾む」といった使い方もしますよね。このように同じ単語でも意味が異なる場合は複数のベクトル表現を持つことができます。つまり、BERTは文脈に依存した埋め込み表現を得ることができるという特徴があります。

BERTの仕組み

仕組みのイメージ
次にBERTの仕組みについて、更に詳しく見ていきましょう。BERTの事前学習では、TransformerがMasked Language ModelとNext Sentence Predictionという2種類の手法で学習を進めます。

Masked Language Modelでは、入力する文の内、15%の単語の置き換えを行い、置き換えた単語を周りの文脈から推測するタスクを解きます。15%の内、80%は[MASK]という記号に置き換え、10%はランダムな別の単語に置き換えます。残りの10%は置き換えは行わず、そのままの単語とします。そうすると、Masked Language Modelによって、文脈に依存した埋め込み表現を得ることがわかりました。
Next Sentence Predictionでは、入力した2つの文が隣り合った文かどうかを推測するタスクを解きます。入力する2文の一方は50%の確率で他の文に置き換えを行います。Next Sentence Predictionにより、BERTは単語の埋め込み表現に加えて、文の表現についても学習を行っています。

BERTはTransformerを用いて、Masked Language ModelとNext Sentence Predictionを行うことで、BERTの特徴である文脈理解を実現しました。

BERTを使用するには

使用方法のイメージ
それでは、具体的なBERTの使用方法についてみていきましょう。ここでは、日本語の事前学習モデルの一つである京都大学の事前学習モデルを例に取り上げます。

京都大学が公開している事前学習モデルにはBASEとLARGE、通常版とWhole Word Masking (WWM)版の種類があります。ファインチューニングをした際に、BASEよりもLARGE、通常版よりもWhole Word Masking (WWM)版の方が、精度が良い傾向があります。

ここでは、LARGE WWM版を使用することとします。京都大学のWebページよりJapanese_L-24_H-1024_A-16_E-30_BPE_WWM.zipをダウンロードしましょう。ダウンロードしたファイルを解凍するとpytorchで使用可能なモデルが含まれています。今回はpytorchで試します。

pythonプログラムで以下を実行することで事前学習モデルをロードできます。

>> import torch
>> from pytorch_pretrained_bert import BertTokenizer, BertModel
>> bert_model = BertModel.from_pretrained(“/path/to/Japanese_L-24_H-1024_A-16_E-30_BPE_WWM/”)
>> bert_tokenizer = BertTokenizer(“/path/to/Japanese_L-24_H-1024_A-16_E-30_BPE_WWM/vocab.txt”, do_lower_case=False, do_basic_tokenize=False)

続いて、事前学習済みモデルに文を入力する際は、日本語の分かち書きを行い、単語をidに変換します。日本語の分かち書きは京都大学が公開している日本語形態素解析システムJUMAN++などを使用すると良いでしょう。idへの変換はbert_tokenizer.convert_tokens_to_ids()を実行することにより可能です。

最後に、自分が目的とする自然言語処理タスクのファインチューニングを行うプログラムを作成すれば、BERTを使うことができます。

BERTを用いる注意点

注意点のイメージ
最後にBERTを用いる注意点をお伝えします。

BERTは非常に性能が高いモデルになりますが、事前学習を行うには、大量の学習データが必要で、高性能なマシンで何日も学習に時間がかかるという課題があります。

そこで、BERTも改良がおこなわれており、ALBERT(A Lite BERT)と呼ばれるBERTを軽量化したモデルも登場してきています。ALBERTは軽量化するためにパラメータの数を減らす工夫をしています。また、Next Sentence Predictionを改良してSentence Order Predictionという手法を用いています。しかしながら、ALBERT はBERTに比べて軽量化しているものの、大量の学習データや高性能なマシンは必要になるのが現状です。

BERTを使ってみようと思ったときに大量の学習データを高性能なマシンを用意するのはなかなか難しいですよね。このため、京都大学や東北大学、NICTなどが配布している事前学習済みのモデルを使って、ファインチューニングのみ行うという使い方がやりやすいでしょう。

まとめ
さて、今回はBERTについてご紹介しました。BERTについてお伝えした内容は以下です。

  1. BERTは、ディープラーニングによる自然言語処理モデルで、多くの自然言語処理技術に使われている
  2. BERTにはTransformerと呼ばれるディープラーニングのモデルが使われている
  3. BERTの学習では事前学習とファインチューニングの2段階で行われる
  4. BERTの日本語の事前学習済みモデルは京都大学、東北大学、NICTが配布している
  5. BERTの事前学習は、Masked Language ModelとNext Sentence Predictionという手法で行われる
  6. BERTの事前学習には、大量の学習データが必要で、高性能なマシンで何日も時間がかかる

BERTは自然言語処理を行う上で、必須の技術となっています。BERTの改良も行われてきており、ALBERなどの新しいモデルも出てきています。BERTは事前学習を行おうとすると非常に大変ですが、配布されている事前学習済みのモデルをうまく活用して、是非使いこなせるようになりましょう。

【お知らせ】

当メディア(AIZINE)を運営しているAI(人工知能)/DX(デジタルトランスフォーメーション)開発会社お多福ラボでは「福をふりまく」をミッションに、スピード、提案内容、価格、全てにおいて期待を上回り、徹底的な顧客志向で小規模から大規模ソリューションまで幅広く対応しています。

御社の悩みを強みに変える仕組みづくりのお手伝いを致しますので、ぜひご相談ください。

お多福ラボコーポレートサイトへのバナー

トップへ戻る
タイトルとURLをコピーしました