データサイエンティストのひよこ成長日記 Vol.2 ー 企画職としてBERTの説明を頑張ってみる ー


みなさん、こんにちは!デジタルテクノロジー統括部に入社して二年目の長谷川智彦です。データサイエンス未経験の新卒がどのように成長していくのかをつづっている「データサイエンティストのひよこ成長日記」、今回は自分の学んだことのアウトプット記事として、AI分野で話題になったBERTに関して書いていきます!
 
 

Hello, BERT!

未経験からAIの分野に足を踏み入れると、おそらく初めは統計学から始め、機械学習なるものを知り、深層学習(ディープラーニング)に出会って、ニューラルネットワーク(NN)と仲良くなります(NNに関しては前の記事を参考にしてください)。
 
NNを理解すると、画像分野によく使用されるCNN(畳込みニューラルネットワーク)やテキスト、時系列データ分野でよく使われるRNN(再帰ニューラルネットワーク)を理解することができ始め、画像や文章、時系列データも扱えるようになるのでデータ分析が楽しくなってくる(初めて聞く名前が多い方は画像やテキスト用のAIがあるんだなと認識していただければ大丈夫です)。
 
そうして、どんどん学んでいく中でおそらく途中で出会うのが「BERT」。2018年にGoogle社が開発し、その後も様々な研究で引用され、自然言語処理の分野において話題を呼んだモデル
今後データサイエンスを仕事にしていくにしても、企画職として業務のデジタル化やAIを活用したサービスを生み出すにしても、理解しておいた方がアイデアや手法の幅が広がるため、今回は自分自身の理解も兼ねて勉強し、記事でアウトプットしようと思います!
 
ただ、BERTの解説記事自体はすでにネットに多く存在します。どれも僕が書くよりも正確、かつ、わかりやすく書かれているので数式や理論の含めて学ぶのなら正直そちらの方がいいですし、似たような記事を書いても仕方ないなと個人としても思ってしまいます。
 
ですので、少し視点を変えて、今回はBERTを使うとするならどんなことができそうか?といった企画の視点を入れつつ記事を書いていこうと思います。記事としては
・BERTに関してのざっくりとした説明
・BERTを業務に活用するならどんなことができそうか
・(個人的に)企画職として意識しているAIの視点

といった構成で書いていきます!


What is BERT?

さて、そもそもBERTとは何かについて簡単に書こうと思います
BERTとはそもそも何か?ざっくりいうと、"ニューラル言語モデルの1つで、文脈をとらえた分散表現(ベクトルや行列)を得ることができます。"
学生の時の僕だとおそらくこの時点で思考停止していた気がします。この記事はデータサイエンス未経験の学生をターゲットに置いているのでここのところを噛み砕いて書いていきます(逆にデータサイエンティスト専門の方はつまらなく感じるかもしれませんがご了承ください)。
 
まず、僕たちの普段の生活では、言語は欠かせないものとなっています。会話をするにしろ、文章を読むにしろ言語を使わない生活はないと思います。そして、こういった会話内容や文章などのテキストには、感情や事象などの様々な重要な情報が詰め込まれているため、データサイエンスの分野でもこの言語(自然言語)を解析したいというニーズがあります。この自然言語を解析することを自然言語処理(Natural Language Processing:NLP)と言います。
 
ただ、「私はデータ分析が好きです。」といった文章をそのままの形ではコンピュータは計算できません。今までの記事だと、数値のデータをテーブルの形式にして活用してきたと思うのですが、自然言語処理の分野においては単語や文章などを解析にかけるために、これらを解析にかけやすい形、つまり、ベクトルや行列といった数値に変換して計算をコンピュータにさせます。この単語や文章から、その単語や文章特有の意味を抽出してきたベクトルあるいは行列形式の特徴量を分散表現といいます(どうやって行列などに変換するのかが気になる方はWord2Vecなどを調べてみてください)。
 
こういった自然言語を扱えるAIモデルをニューラル言語モデルというのですが、BERTもこのうちの1つで、同様に分散表現というものを得ることができます。
 
この分散表現が得れると何がいいのかというと、言語を行列あるいはベクトルの形式の数値として変換できるので、その数値を元に”近さ”を計算できます。言語における近さとは意味が似ているかといった感じだととらえていただけるといいかなと思います(実際はコサイン類似度(sim(x,y)=xy/|x||y|)などが使って計算します)。

 

BERTは何が違うのか?

BERTとこれまでのモデルの何が違うのかについて、要約をすると以下のことがあげられます。
〈BERTの特徴〉
・BERTはTransformerのEncoderを使ったモデルで、色々なタスクに応用ができるようになっている
・Attention機構のおかげで文章の中の離れた位置にある単語との関連性を保ったまま、文の単語を並列で同時処理ができるようになった(これはTransformerの特徴ではあります)
・並列で計算できるので計算がRNNの時と比較して早くなった(これもTransformerの特徴)
・ファインチューニングを行うことで少量の計算で多くのタスクに合わせられる
・双方向に文を学習させたことやMLM(=Masked Language Modeling)、NSP(=Next Sentence Prediction)の事前学習により、飛躍的に精度が向上した。また、文脈を分散表現に反映できるようになった


専門性をとりさらって書くと(本当はこういうのは良くないのですが)、
・文章が絡んだいろんな課題に使えるよ
・文章を頭から順番に計算せずにまとめて処理できるから計算が早いよ、でも離れた単語の意味を捉えられる仕組みがあるよ
・先に色々覚えさせているから、あとはちょっと教えると、自分たちが使いたいようにカスタマイズしやすいよ
・今まで単語レベルしか意味が取れてなかったけど、文章の意味も数値に込められるようになったよ
といった感じかと思います。
 
とはいえ、流石に説明を省きすぎなので簡単にだけ説明をさせてもらいます。まずは、
・BERTはTransformerのEncoderを使ったモデルで、色々なタスクに応用ができるようになっている
・Attention機構のおかげで文章の中の離れた位置にある単語との関連性を保ったまま、文の単語を並列で同時処理ができるようになった(これはTransformerの特徴ではあります)
・並列で計算できるので計算がRNNの時と比較して早くなった(これもTransformerの特徴)
の部分から。
 
いきなり、「Transformer」と出てきました。僕は初めてこの名前を聞いたとき、かの有名な自動車が変身する映画しか頭に出てませんでした。
これは自然言語処理のモデルの中でも機械翻訳の分野で登場したAIモデルで(Transformerも、画像データでも使えるViTが登場したりとさまざまな研究で注目されてます)、BERTはこのTransformerというモデルの一部をベースにしています(BERTはBidirectional Encoder Representations from Transformersの頭文字を取っている名前で、名前の中にTransformerとあります)。
 
ただ、Transformerのことを正確に書くと記事の範囲では到底収まらないので今回は割愛して、代わりにエンコーダー-デコーダーモデルの簡単な説明をさせていただきます。
 
自然言語のタスクを解く際には2つの層が欠かせなくなってきます(中間層は割愛)。
それがテキストを入力して分散表現に変える入力層(エンコーダー)と分散表現を受け取り、確率計算を行って予測などを行う出力層( デコーダー)です。
例えば、日本語から英語の機械翻訳を行うときは日本語をエンコーダーに入力し、英語がデコーダーから出てきます。(下記のイメージ図参照)
 

上手に示したようにTransformerもエンコーダーとデコーダーで構成されており、BERTはこのエンコーダーの部分で自然言語をベクトルなどの分散表現に変えてくれるのが特徴です。
 
これまで、こういった機械翻訳ではRNNというAIモデルを重ねることで行っていました。RNNは簡単にいうと前から順に意味を次に伝えながら学習できるAIモデルといったものです。
ただ、意味をどんどん伝えるといっても初めの方の情報は忘れてしまうので、後の方の単語には前半の単語の意味があまり伝わってないということが起きていました。
 
それに対して、TransformerやBERTは文章の単語を丸っと同時に学習するので前から順番に聞く必要がなく早く計算ができるようになりました。
 
しかし、そうなると単語の順番や離れた単語同士の意味関係はどうするのだ?という問題が実は出てきます。感覚的に言えば、今現在僕の記事を読んでくれている方はこの部分の単語や文章だけでなく、その前の単語や文章の意味関係を把握しながら読んでいると思います。シンプルに言えばその意味関係が取れなくなってしまいます。
 
そこに対してAttention機構というアルゴリズムが活躍します。ほんとざっくりいうとある単語と、自分含めた他の単語との関係を全て計算してしまい、関係が深い単語に注目する(重みをおく)仕組みです(ここも詳細はネットの記事に託します。Scaled Dot-Product AttentionがBERTでは使われています。ここのクエリ:Q、キー:K、バリュー:VがTransformerの機構上把握しておいた方がいいポイントです)。

 
BERTも構造の中ではこのAttention機構が絡むところとそれをまとめるところが交互に現れてきます。
 
では次に、
・ファインチューニングを行うことで少量の計算で多くのタスクに合わせられる
・双方向に文を学習することとMLM(=Masked Language Modeling)、NSP(=Next Sentence Prediction)の事前学習により、飛躍的に精度が向上した。また、文脈の分散表現を得れるようになった
のところに関してもざっくりと説明します。
 
ここで出てくる事前学習とファインチューニングに関してですが、BERTのようなモデルを作る際には大量のデータで大量のパターンを覚えさせる必要があります。ここで使うデータは特に答えは必要ないのでとにかく大量の文章データを用意して覚え込ませます。これを事前学習と言い、Google社がすでに大量のテキストを使って学習させたモデルを公開してくれています(日本語版も東北大学の研究室が作成してくれています。こういった取り組みはほんとに素晴らしいです)。また、Hugging FaceのTransformersライブラリではすでに日本版のBERTのライブラリがそろっているのですぐにBERTを活用することもできます(URL:https://huggingface.co/)。
 
ファインチューニングとは事前学習したAIモデルに答えのあるデータを追加で学習させることで、応用したいタスクに特化させることができます。比較的少量のデータでこれはできるので計算量を少なく抑えられるのが特徴です。BERTはエンコーダー部分なので、後半をタスクに合わせて変えますが、逆に言えば後半部分を色々と変えられるので多くの場面に活用できるということです(個人的なイメージですが、BERTがゲーム機本体でゲームカセットを変えることで色々なゲームが遊べるのと似ているなと感じてます)。
 

また、BERTは単語だけではなく、文脈を含んだ分散表現を得ることができるのですがこれはMLMNSPというタスクで学習させているためになります。
簡単にいうとMLMは文章の単語を隠した([MASK]で隠した)文章をタスクとして大量に学習させ、周囲の単語からその隠した部分の単語が何かを予測できるように学習させます。NSPは2つの文章を2つ目の文章が1つ目の文章と意味的に連続しているかどうかに関するタスクを学習させます。学習させた文章の中には繋がりがあるものとないものが混ざっているので、BERTはどういった文章同士が意味的に繋がっているかを学習することができます。
これらのタスクを大量に覚え込ませることでBERTは文脈を考慮した分散表現を得れるようになりました。また、文章の分散表現も得ることができます。


 
文章の分散表現が得れるとは、つまり、単語同士の意味の近さだけでなく文章同士の内容が近いかを数値的に計算ができるようになったということになります。人でもこの文章とこの文章は内容が近いなと判断できると思うのでうすが AIでもそれに近しいことができるようになってくることを示唆してくれています。
 
 

BERTでどんなことができるのか

さて、BERTに関しての感覚的な説明を書かせていただきました。ここではBERTを使ってどのようなことができるようになるかを考えていきます。
 
BERTを使ってできるタスクには次のようなものがあります。
〈BERTでできること〉
・文章の穴埋め(空白部分に入る単語の予測)
・固有表現抽出
・文章の分類
・感情分析(ポジネガ分析)
・類似文章の検索
・文章校正
・文章要約(BERTSUM)
など
 
文章の穴埋めはわかりやすいと思いますが、次の固有表現抽出が何かというと、例えばパーソルキャリアなどの会社名はそのもの固有の名前になります。こういった固有名詞などの表現を見つけるタスクを固有表現抽出と言います。
 
また、BERTは文章の分散表現を得れるので、それを元に文章がどのタイプの文章に分けられるのか、または、ポジティブな表現なのか、ネガティブな表現なのかを分類することもできてきます。
文章要約などになると、BERTだけでは厳しいのでTransformerのデコーダーを後半にくっつけて、入力した文章の重要な文章だけを選んだり(抽出型要約)、要約した文章を生成したり(抽象型要約)することもできます。
 
 
それでは、ここから視点を変えて、BERTができることを把握した上で実際のビジネスにおいてどのように活用できるか?を考えてみます。実際に企画をしていくとなるとモデルの理論を追求していくよりも、そのモデルをどのように使えばビジネス的に価値を埋めそうかを検討していくのが大事です。
 
 
例えば、会話内容を文字起こしできて、その会話内容がポジティブなのかネガティブなのかをすぐに判断できるのであれば、採用の面談やキャリアカウンセリングでとった会話内容から、相手が今どんな感情を抱いているかを画面に可視化するといったことに挑戦したり、
 
類似した文章を探せるのであれば、社内の議事録から似たような内容の議事録が残っていないかを検索できれば、同じような失敗を事前に防いだり、似たような取り組みを参考にしたりできます。
 
他にも、文章校正を使って、議事録や入力内容の誤字を修正してくれれば議事録の作成時間の短縮やこういった記事の内容確認の時間を短縮できたりすることにもつながりかもしれません(内容の確認作業は様々なところで活用できます)。
実際に書籍にあったコードを参考に自分でもBERTの文章校正モデルを動かしてみました結果は以下の通りで、漢字の誤字をうまく直してくれています(とはいえ、すべてを直してくれるわけではありませんでした)。

 
これらのように、働くに関することでも、テキストはあちらこちらに転がっているのでさまざまな応用ができそうです(実際にできるかや精度の問題が本当はあるのですが一旦無視したアイデアを出しています)。
 
 

個人的に企画職として意識しているAIの視点

さて、ちらっとBERTができることからこんなことができるのではないか?といったアイデアを2-3個出しました。
長谷川は現在、データ分析/データサイエンス:企画:その他=5:4:1くらいの比率で行っているので、データ分析をしつつ、企画も考えたりするのですが、その際には上記のような企画を検討したりもします。
 
とはいえ、新しいモデルの理論を理解しきるには時間がかかります。正直、最新のモデルを丁寧に把握するだけの時間はあまり取れていません。
しかし、だからと言って全く追わないとこういった技術をベースとした新しい企画はできませんし、企画の幅も狭まります。
ですので、最近意識しているのが、そのAIモデルでどんなことができるのかの概要だけは把握しておくといったことです。
 
今回のBERTで言えばBERTの細かい理論や数式を把握しきるというよりも、BERTはテキストを分散表現にできるモデルであること、分散表現にできたら、文章の分類や近さを計算できることや、BERTを使って固有表現の抽出もできるといったことを覚えておくといった具合です。
 
AIといっても様々な種類があり、それぞれで得意なことが違ったりするので、それぞれのできることや特徴を把握しておくことで、ビジネスにおけるAIの活用を意識した企画を考えるようにしています(本当はこれ以外にもモデルの精度やデータが揃っているかなどを検討したり、そもそもどういった未来を作るのがいいんだっけと考えるところから検討は始めますが今回は割愛します)。
 
 

最後に

今回はBERTの簡易的な概要と個人的に企画をする上でAIをどう把握しているかに関して記事を書かせてただいました。ペースは落ちてしまってしまいますが、今年もまだまだ記事を書いていくので、ぜひ次回のデータサイエンティストのひよこ成長日記をお楽しみにしていてください!次回は顧客行動のデータなどに関してかけるといいなと思ってます。



参考文献

今回執筆にあたりこれらのサイトや書籍を参考にさせていただきました。どれも丁寧に解説されていて、大変参考になります。また、文章校正モデルはストックマーク株式会社編「BERTによる自然言語処理入門ーTransformersを使った実践プログラミング」のコードを参考にさせていただきました。かなりの良書だと思うので、ぜひ気になる方は読んでみてください。
Transformerに関してのわかりやすいサイト:https://tips-memo.com/translation-jayalmmar-transformer
Attention機構に関してのわかりやすいサイト:https://tips-memo.com/translation-jayalmmar-attention
BERTの参考サイトその1:https://qiita.com/omiita/items/72998858efc19a368e50
BERTの参考サイトその2:https://deepsquare.jp/2020/09/bert/#outline__1_2



alt


長谷川 智彦 Tomohiko Hasegawa


デジタルテクノロジー統括部 デジタルビジネス部 ビジネスグループ

大学時代の専攻は植物学・分子生物学。最近趣味でデザインをかじり出した社会人2年目。植物の実験データを正しく解釈するために統計を勉強し始め、データ分析に興味をもつ。データサイエンスはただいま必死に勉強中。

※2021年7月現在の情報です。