最終更新日:
現在、「BERT」というモデルが自然言語処理の分野で幅広く使用されています。
しかし、BERTと聞いても何のことかよくわからないという人がほとんどなのではないでしょうか。
そこで本記事では、BERTとはなにか、BERTの仕組みや特徴、活用事例などを紹介していきます。
目次
BERTとは
BERTとは、Bidirectional Encoder Representations from Transformersを略したもので、「双方向Transformerによる汎用的な言語表現モデル」として、2018年10月11日にGoogleによって公開されました。
これは、「双方向Transformer」によって言語モデルを事前学習することで汎用性を獲得し、さらに転移学習させることで8個のベンチマークタスクで最先端の結果を達成しました。
つまり、一つの言語モデルを一度事前学習させるだけでさまざまなタスクに利用できるということです。
では、そのTransformerとは何なのか?ということが気になりますね。これは、「文章などのシーケンス(単語データの並び)から別の文章などのシーケンスを予測するニューラルネットアーキテクチャ」のことです。これが、従来から主に用いられてきたRNNやCNNによるアーキテクチャと比較して、機械翻訳といった言語理解タスクで高い精度を達しているのです。
BERTについて重要なことは、「双方向」によるTransformerであることです。従来モデルでは、「単方向」もしくは「浅い双方向」によるTransformerであったため、注目する各単語のその左(あるいは右)に存在する単語によってのみの文脈しか学習できませんでした。
一方で、BERTを用いると、注目する単語の前後両方の文脈について学習することができるのです。これが、Bidirectionalの意味するところになります。
また、もう一つの重要なこととして、多くの種類の自然言語処理タスクでとても容易に採用できるということがあります。論文の中では、言語理解の様々なタスクを備えた、以下4つのベンチマークセットを用いて精度が検証され、ほとんどタスク特有の変更を行わずに最先端の結果が得られました。
- SQuAD
- NER
- SWAG
- GLUE
さらに8つのベンチマークタスクによる結果を見比べても、全て最先端の精度を達成しています。
このような利点から、現在、自然言語処理タスクの中でBERTを用いた精度検証が広く行われています。そして、これら多くの結果において最先端の精度が見られることから、自然言語処理の分野において広く流行しているのです。
SEO性能の向上を図る自然言語処理
自然言語とは、私たちが普段話したり書いたりしている日本語や英語などの言語のことです。この言語は複雑で曖昧性を持つため、コンピュータが理解できるように処理する必要があります。これが自然言語処理です。
では、なぜ自然言語処理でSEOの性能が向上するのでしょうか。
SEOは検索エンジン最適化とも呼ばれ、Googleなどのポータルサイトでキーワードを検索した際、該当するサイトや記事を表示するために利用されています。
そのため、コンピュータはポータルサイトで検索されたキーワードの意味を理解する必要があります。したがって、自然言語処理の精度が向上することで、SEOの性能も上がることになるのです。
▼自然言語処理(NLP)について詳しくはこちら
BERTの仕組み
次に、BERTがどのような仕組みなのかを紹介します。
事前学習(Pre-Training)
事前学習とは、さまざまなタスクの応用を前提とした表現学習のことです。自然言語処理に応用する場合は、自然言語の特徴量を自動的に抽出し、学習させます。これによって、あるタスクを解くために必要な特徴が入力に出現していない場合でも、単語や文書同士の一般的な依存関係が事前に与えられていれば、それを補うことができます。つまり、事前学習はとても重要なタスクなのです。
こんなに素晴らしい技術なのであれば、中身はさぞ複雑なものであろうと考えられますが、、
実は、とてもシンプルな方法によって事前学習が行われています。
それが、「Masked Language Model」と「Next Sentence Prediction」と呼ばれる学習方法です。これら2つのタスクを同時に実行させて学習が行われます。
Masked Language Model
先に説明した通り、BERTは「双方向」という特徴があります。単純に考えても、単方向学習よりも双方学習の方がより優れた精度が期待できそうです。
ところが、双方向モデルは一般的な条件付き言語モデルでは学習できません。
一般的な条件付き言語モデルでは、
p(xn | x1, x2, …, xn-1)
のように、n-1番目までの情報から次のn番目の単語を予測するタスクです。これは、カンニングとなってしまわないように、現在の予測プロセスの中で次に予測するべき未来の単語情報を用いてはいけないという制約があります。よって、モデル自身は前後両方の文脈を考慮できず、前の文脈情報のみで次の推測をしなければならないのです。
そこで、モデル側ではなく、入力データ側を穴埋め問題にして制約をかける手法が取り入れられています。
これは、入力シーケンスの15%を確率的に[MASK]トークンで置き換えし、置き換える前のものを予測させるタスクです。そうして置き換えられた[MASK]トークンのうち、80%がマスク変換、10%がランダムな別のトークンに変換、10%をそのままのトークンにします。
- 15%中80%:マスクトークンに置き換え
my dog is hairy → my dog is [MASK]
- 15%中10%:ランダムに別のトークンに置き換え
my dog is hairy → my dog is apple
- 15%中10%:置き換えなし
my dog is hairy → my dog is hairy
こうすることで、前後の文脈を考慮したモデルで学習させることができるのです。
Next Sentence Prediction
続いて、ここでは2つの文章を与えて、それらが隣り合っているかいないかを2値判定します。
QAや自然言語推論では、2つの文章の関係性を理解させる必要があります。しかし、文章同士の関係性は単語の共起性から単語の発生確率をモデリングしている言語モデルのみでは捉えられない特徴量を含んでいます。そこで、隣り合った2つの文の予測問題から、文章単位での意味表現を獲得しているのです。
よって、単語をベクトル化して表現したモデルであるword2vecに対し、BERTは文章も考慮した、より広範的な言語表現モデルとして機能できるという利点があります。
処理の流れとしては、入力データとしてAとBの2つの文章を与え、BがAの後にくる実際の文章として正しいか(IsNext)、正しくないか(NotNext)を判定します。
これら二つの文章A, Bが与えられたとき、50%の確率で別の文章Bに置き換えられます。
A: [CLS] the man went to [MASK] store [SEP]
B: he bought a gallon [MASK] milk [SEP]
Label: IsNext
A: [CLS] the man went to [MASK] store [SEP]
B: he bought a gallon [MASK] milk [SEP]
Label: NotNext
これが、文章単位で意味表現を獲得できる仕組みです。
ただし、このような事前学習タスクの欠点としては、学習コストが高価であることが挙げられています。
BERTの特徴
では、BERTにはどのような特徴があるのでしょうか。主な特徴として、以下の3つが挙げられます。
①高精度な言語処理
まずは言語処理能力が高精度であるということです。
BERT以前にも言語処理モデルは存在していましたが、精度が低く、文脈を理解して予測することはできませんでした。
一方、BERTでは文章を双方向から学習することによって文脈を読めるようになったため、より精度の高い言語処理が可能になりました。
②高い汎用性
2つ目は汎用性が高いことです。
従来のタスク処理モデルは特定のタスクにのみ対応しています。しかし、BERTはモデルの構造を修正せず、様々なタスクに応用できます。さらに、既存のタスク処理モデルの前に接続する、つまり転移学習するだけで、自然言語処理の精度を向上させられます。
③少ない学習データで利用可能
3つ目は少ない学習データで利用できることです。
従来のモデルではデータを処理するためにはラベルが付与されている必要がありました。しかし、現在は自然言語処理のためにラベルが付与されたデータセットが少なく、手に入れることは困難だとされています。
その一方、BERTではラベルが付与されていないデータセットを処理できます。そのため、多くのデータの中からラベルが付与されたデータセットを探す必要がなく、データを探す際に用意する学習データを少なくできます。さらに、少ない学習データで利用できることからデータ不足を克服しました。
BERT導入の背景
導入の背景として主な理由は「検索クエリの多様化」と「音声検索の発達」の2つです。検索クエリとは、利用者がGoogleなどの検索エンジンを使って検索窓に入力した語句(単語、フレーズ、複合語など)のことを指します。
スマートフォンの普及により検索が容易になったことで検索クエリが多様化し、スマートスピーカーやAIアシスタントなどの技術が発達したことで、検索ワードがより口語文に近くなりました。
そのため、人間の言語をより正確に理解することがコンピューターに求められるようになったことがBERT導入の背景と言えるでしょう。
BERTにできること
BERTにできることを紹介します。
▶AI(人工知能)にできること一覧|AIの未来や仕事・活用事例を徹底解説>>
①文脈理解
GoogleではBERTが活用されるようになって、検索クエリの微妙なニュアンスや、文脈を理解する能力が大幅に上がりました。
以前の検索アルゴリズムはキーワードとの合致率を優先していたため、複数の意味を持つ単語が検索された場合、利用者が検索したいこととは関連性が低いコンテンツが多くヒットしてしまうことがありました。
しかし、BERTが導入されたことで、音声入力のように長文で複雑な検索でもより関連性の高いコンテンツを表示できるようになりました。
②転移学習 (Fine-Tuning)
転移学習とは、すでに学習済みのモデルを転用して、新たなモデルを生成する方法のことです。よって、他のデータから学習されたモデルを使うことができるため、少ないデータ・モデルで新たなモデルが生成可能であり、安価に学習できます。
この学習から様々に特化した自然言語タスクに高精度判断の適用が期待できます。
③データ不足の解消
BERTの特徴でも紹介したように、BERTはラベルが付与されていないデータセットを処理できます。
従来、自然言語処理を行うためにはラベルが付与されているデータセットが必要とされていました。しかし、このラベルが付与されているデータセットは数が少ないため入手難易度が高く、データセットにラベルを付与する場合には多くの時間と労力を必要とします。
一方BERTの場合、ラベルの付与されていないデータセットも処理でき、データセットを容易に準備することができます。それによってデータ不足の解消を実現しました。
BERTにおける日本語モデル
BERTはもともと英語モデルでしたが、現在では日本語モデルもいくつか作られています。
Google、rinna株式会社、NICT、株式会社ホットリンク、Laboro.AI、株式会社インフォマティクスなど、さまざまな会社などで開発されています。
BERT活用事例-4選
今では、さまざまな業界やサービスでBERTはさまざまな業界、場面で活躍しています。
ここでは、数多くの活用事例の中から4つの事例を紹介していきます。
①sAl FAQ builder
国内で初めてBERTを製品化した事例として、サイシードによるFAQデータ作成サービス「sAI FQA Builder」があります。
これは、企業内の様々なデータからAIが読み取れる形式のFAQデータを自動で作成するサービスです。
このサービスには、最もふさわしい回答を自動で提示するチャットボット「sAI Chat」と、自然文を理解する検索エンジン「sAI Search」が実装されています。各質問文に対して行われる、類似表現の拡張とキーワードを抽出する作業にBERTを活用させることで自動化が実現しました。これによって、AIの学習に必要なトレーニングデータを約80%削減、学習期間を約95%短縮させることができました。
②金融版BERT
「金融版BERT」とは、金融文書に特化したBERTです。NTT研究所が開発したNTT版BERTをもとに、NTTデータが収集した金融関連文書を学習させたモデルです。
このモデルは金融に関する文書の処理に非常に長けており、高精度な単語予測を実現させるなどで、今後の活躍が期待されています。
③サポートチャットボット
「サポートチャットボット」は株式会社ユーザーローカルが提供する自動応答システムです。
BERTを活用したことで、問い合わせ履歴をもとに質問に対する回答を構築できるようになったため、システムを稼働させるまでの時間などを削減することに成功しました。
▼チャットボットについて詳しくはこちら
④広告出稿
リスティング広告や媒体系広告など、さまざまな形式と価格帯の広告が存在する中、最も適切な広告媒体を決めることは困難だとされています。
しかし、BERTを搭載したAIを活用することで、最適な出稿パターンの予測や、予算配分の最適化などが可能になりました。
BERTをPythonで実装する方法
では、実際にBERTをPythonで実装するためにはどうすればいいのでしょうか。その方法を紹介します。
pytorchを使う
1つ目にpytorchのライブラリである”pytorch_pretrained_bert”を活用するという方法があります。
まず始めに配布されている学習済みモデルなどをpytorch-pretrained-BERTから読み込みます。モデルは黒橋・河原研究室の配布サイトからダウンロードし解凍します。BertModelのfrom_pretrained()で解凍先のパスを指定することで、モデルをロードすることができます。必要なファイルはpytorch_model.binとvocab.txtのみです。
なお、モデル配布ページではpytorch-pretrained-BERT内のtokenization.pyの特定行をコメントアウトするように指示されていますが、BertTokenizer()で引数をdo_basic_tokenize=Falseとすれば対応は不要です。
次に、与えられたテキストを分かち書きしてトークンに分割したのちに、対応するidに変換します。pytorch-pretrained-BERTは日本語の分かち書きに対応していないため、前者はJuman++によるトークナイザを自作し、後者はBertTokenizer()を利用します。
分かち書きしたトークン列は、英語のトークナイズに対応できるようにスペース区切りで結合し、最後にBertTokenizer()でid列に変換します。この際に、テキストの最初と最後に[CLS]および[SEP]トークンを付与します。また、学習済みモデルのmax_seq_lengthが128に設定されているため、トークン列の長さを調整しています。
例えば「我輩は猫である。」という文章は、以下のようにトークン化されid列に変換されます。ちなみに我輩という単語は辞書中に存在せずかつサブワードとしても分割できないことから、未知語としてid:1([UNK])に変換されています。
id列に変換したベクトルをBERTのモデルに入力し、それぞれの隠れ層から出力される特徴ベクトルを得ます。
最後に、BERTの隠れ層から得られた特徴ベクトルから文章埋め込みを計算します。BERTでは各入力のトークンに対応するhidden_size次元 (本モデルでは768次元) のベクトルが得られるため、それを文章埋め込みとしての固定次元のベクトルで表現する必要があります。
(出典:https://yag-ays.github.io/project/pytorch_bert_japanese/)
extract_features.pyを活用する
BERTのリポジトリで公開されている”bert/extract_features.py”を活用する方法もあります。
BERTはTransformerと言う機械翻訳モデルのエンコーダー部分を重ねたものになります。ベースモデルであれば12層なので、Transformerが12個重なります。Transformerの前段でトークンと文章とトークンの位置それぞれを埋め込み、その埋め込み表現がTransformerに入力されて、最終的にトークンそれぞれの言語表現(埋め込み表現)が出てくる感じです。
入力されるトークンの先頭は[CLS]という特殊なトークンで、このトークンに対応する言語表現が文章全体の言語表現に相当します。なので、今回の目的である文章の埋め込み表現を取得するときは、このトークン部分を参照することになります。
(出典:https://dev.classmethod.jp/articles/bert-text-embedding/)
従来モデルとの比較
BERT以外にも、事前学習の手法が異なる二つの従来のモデルとして以下のようなものがあります。
- ELMo(Feature basedアプローチ)
複数の文に対して、文同士の関係性を事前学習するアプローチを用いています。順方向と逆方向のLSTMを同時に学習できないことから、浅い双方向モデルです。
- OpenAI GPT(Fine tuningアプローチ)
トークン同士の関係性を事前学習するアプローチを用いています。left-to-right のTransformerを用いて、未来の単語の位置のみ予測できます。
OpenAI GPTがleft-to-right のみの取得だったのに対し、 right-to-leftの情報、つまり後の情報も取得できるように拡張したものがBERTです。
次の単語を予測するのではなく、ランダムにマスクされた単語について、周辺情報から予測するという事前学習を行なっています。これが従来のモデルとの大きな違いなのです。
BERTを理解したいなら読みたい4つの書籍&論文
BERTについてより詳しく理解したいという方に向けて、4つの書籍と論文を紹介していきます。
BERTによる自然言語処理入門: Transformersを使った実践プログラミング
この本では、前半で自然言語処理や機械学習について概説し、BERTによって実際にさまざまなタスクを解いていきます。データセットの処理から、ファインチューニング(BERTを特定の言語タスクに特化させるための学習)、性能の評価までの一連の流れを体験することで、BERTを自分で使えるようになることを目標としている1冊です。
価格:2,970円
▼購入はこちらから
作ってわかる! 自然言語処理AI〜BERT・GPT2・NLPプログラミング入門
Transformerの構造を理解するためにBERTとGPT2を一から実装し、またNLPプログラムを作成するために必要となる、Transformerを拡張して応用AIを作成する方法を紹介しています。
価格:3,762円
▼購入はこちらから
BERT/GPT-3/DALL-E 自然言語処理・画像処理・音声処理 人工知能プログラミング実践入門
現在注目を集めている「自然言語処理」「画像処理」「音声処理」の主要なフレームワークを取り上げ、実際にそれらの実力を試してみることができるように、インストールから各種設定、データセットの準備、学習・推論まで、ステップ・バイ・ステップで丁寧に解説しています。
価格:3,960円
▼購入はこちらから
▶【2021年版】AI関連のおすすめ本15冊をランキング形式でご紹介>>
BERTを用いた日本語係り受け解析の精度向上要因の分析 – 人工知能学会論文
この論文では、日本語係り受け解析にBERTを用いることで、既存手法と比較してどういった誤りが改善されるのかが調べられています。
東京理科大学の宇田川忠朋、久保大亮、松崎拓也によって書かれました。
▼読みたい方はこちらから
BERTの課題と今後
本記事でも紹介してきたように、BERTは従来のモデルと比べて多くのメリットを持ち、さまざまな場面で活用が広がっています。
その一方、課題もあります。その一つが、計算する際のパラメーターが多く、層が厚い「巨大なモデル」であるということです。このため学習に時間がかかり、大きなメモリ量が必要になるなどのデメリットが生じてしまいます。
この課題解決のため、BERTの軽量版であるALBERTが開発されました。
このように、BERTは課題もある一方、活用が広まり課題解決も進んでおり、今後の展開にも期待が集まっています。
▶AIは今後どういった進化を遂げるのか。そして私たちへの影響は?>>
おわりに
今回は、汎用言語表現モデル「BERT」について簡単に説明しました。
“自然言語処理×深層学習といえばBERT”というように、現在様々なタスクにBERTが活用されています。実際に、3月に行われた言語処理学会でも幅広い研究で使用され、従来スコアと比較して上回る精度を達成していました。
現在は、このBERTが中心となって活用されていますが、最近ではBIGBIRD(後にMT-DNNと呼ばれる)が出てきたりとより一層精度の良い新しい技術が発表されてきています。しかし、すべての自然言語推論を行うためには自然言語がもつ特性を考慮した学習を行う必要があるため、未だ難しいとされています。
言語の特性をニューラルの中で学習させることができれば、今よりも高精度なタスクを行えるようになるのではないかと感じました。
理系の大学院生として、自然言語に関する研究をしています。現在は、主に言葉の意味について興味があり、AINOWでは言語に関することを記事にしていきます。普段は美味しいものを食べたり写真を撮ったりすることが好きで東京の様々なところを散策中。