SEO

BERTについて解説!日本語モデルを使って予測をしてみようー!

ウマたん
ウマたん
本記事では、Googleが新たにリリースしたBERTについてSEO的観点とデータサイエンス的観点で解説し、日本語モデルを使って実際に文章の予測を行っていきます!BERTはPythonで簡単に実装できるんですよー!ぜひ試してみてくださいね!

こんにちは!

消費財メーカーでデジタルマーケター・データサイエンティストをやっているウマたん(@statistics1012)です!

データサイエンティストとしてもブロガーとしても気になるBERT!

ロボたん
ロボたん
BERTって話題になっているけど、いまいちよくわかってないんだよなー!
ウマたん
ウマたん
そうだよねー!そんなBERTにすこしだけ踏み込んで見ていこう!

より文脈をAIが理解できるようになったBERTというロジックにデータサイエンス的な観点とSEO的な観点で踏み込んでいきたいと思います。

BERTとは

BERTとは「Bidirectional Encoder Representations from Transformers」の略であり、Googleが新たに開発した自然言語処理のロジックになります。

Googleは2018年10月11日に論文を公開し、Google検索のアルゴリズムに2019年10月25日に適応しました。

そして日本語のGoogleへのアップデート適応は2019年12月となっています。

BERTの登場によりGoogleはより長く複雑な文章を理解できるようになり、文脈を読み取ることができるようになりました。

実際にGoogleのリリースにBERT導入前と導入後のGoogle検索の違いが記載されています。

BERT 検索結果(引用元:Google-”Understanding searches better than ever before”)

ブラジル人が米国へ渡航する際のビザの有無を知りたいのですが、BERT実装前は英文における”to”の意味を明確に捉えることができずアメリカ人がブラジルへ旅行する場合の結果を返していました(左側)。

BERT実装後は、しっかりアメリカ渡航の際の結果を返すことができています。

ロボたん
ロボたん
本当だ!確実に検索エンジンが賢くなっている!!
ウマたん
ウマたん
逆にこれまでは、この文脈を読み取れていなかったんだねー意外!

このように検索結果が、より検索者の検索意図を読み取れるように進化してきているのです。

BERTのアルゴリズム

そんなBERTはどのようなアルゴリズムなのでしょうか?

2018年10月にGoogleからリリースされた論文にはこのように記載されています。

BERT is conceptually simple and empirically powerful. It obtains new state-of-the-art results on eleven natural language processing tasks
(引用元:Google-“BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding”

BERTはシンプルでありながら非常に強力で一般的な11つの言語処理指標において優位な結果を収めたと・・

実はBERTは事前学習モデルであり他の既存モデルと組み合わせることで効果を発揮するものなんです。

BERTとは「Bidirectional Encoder Representations from Transformers

ロボたん
ロボたん
これは日本語に直すと・・・
ウマたん
ウマたん
双方向のエンコーダー表現!

以下のように一般的に文脈から予測する場合、それより前の文字列から予測する一方向的な学習しかできませんでした。

$$ p(x_n|x_1,x_2,…,x_{n-1}) $$

しかしこのBERTは、双方向から文脈を学習できるようになったのです。

BERTがSEOに与える影響

先ほどの検索結果の例でも挙げましたが、BERT導入によりGoogleは検索意図を明確に読み取れるように進化しました。

これは、Googleが「Rank Brain」を導入した2015年以来の大きな進化と言えるでしょう!

別の例を見てみましょう!

BERT 検索結果(引用元:Google-”Understanding searches better than ever before”)

こちらの例では、”Stand”という単語の意味が焦点になっています。

BERT実装前は、エステティシャンという職業の立ち位置的な受け取り方をGoogleはしており、結果的に医療エステティシャンとスパエステティシャンはどっちが良いか的な記事を返しています。

しかし、検索者が知りたいのはエステティシャンの物理的な立ちについて。立ち時間や労働環境について知りたいんです。

BERT後はしっかりエステティシャンの物理的な労働環境について返しています。

英語でもそうですが、日本語においても同じ単語が別の文脈では別の意味で使われることは多いです。

そのような状況でもBERTは文脈から適切に検索意図を読み取ることができるようになっているのです。

日本語BERTをPythonで実装してみる

PC

それでは、そんなBERTを実際に実装してみましょう!

BERTを使って以下の日本語文章の空白を予測してみます。

※昔はスタビジは統計ラボというサイト名でした

[‘統計’, ‘ラボ’, ‘は’, ‘*’, ‘を’, ‘発信’, ‘する’, ‘サイト’, ‘です’]

ロボたん
ロボたん
お!面白そう!
ウマたん
ウマたん
なんて予測されるかなー?

また、実装にはGoogle colaboratoryを使います。

Google colaboratoryはGPUを使用できる強力なクラウドサービス!以下の記事で詳しくまとめているので参考にしてみてください!

Google Colaboratory
Google Colaboratoryのメリットと使い方!GPU環境でPython回すならこれだ!当サイト【スタビジ】の本記事では、Googleが無償で提供する機械学習のプラットフォーム「Google Colaboratory」をメリット・デメリット・使い方について見ていきます!実際にPythonを実行していきGPUの威力を見ていきます。...

また、今回のBERTをGoogle colaboratoryで実装する上で以下の2つの記事を参考にさせていただきました。非常に有用ですので合わせて読んでみてください。

さて、BERTを本格的に日本語に適応して実装するには、そこそこ事前準備が必要なので整理しておきましょう!

・形態素解析のためのJUMAN++インストール
・BERT日本語Pretrainedモデルのダウンロード
・各種必要なライブラリをインストール

JUMAN++とBERT日本語Pretrainedモデルは京都大学の黒橋・河原・村脇研究室からインストールしていきます!

自然言語処理に有用な様々なフレームワークを展開してくれています。

ありがたい!順に見ていきましょう!

形態素解析のためのJUMAN++インストール

京都大学の黒橋・河原・村脇研究室の作成した強力な形態素解析器JUMAN++をインストールしていきます。

こちらは、定番のMeCabよりも口語に対応している形態素解析です。

Google colaboratory上で以下のように記述しインストールを進めます。

※10分ほど時間がかかります。

BERT日本語Pretrainedモデルのダウンロード

まず、BERTを実装するためには日本語における相当な量の事前学習が必要なのですが京都大学の黒橋・河原・村脇研究室が公開してくれています。

BERT日本語Pretrainedモデル 

非常にありがたいですね!

まずは、Google colaboratory上でGoogle driveをマウントしていきます。

これによりGoogle drive上と同期をとるコトが可能です。

結果のURLからパスを入手してGoogle colaboratory上で記述しましょう!

続いて、Google drive上に日本語モデルを格納するフォルダを作成します。

作成したディレクトリに移動します。

移動したら、早速黒橋・河原・村脇研究室で公開しているモデルをダウンロードしていきましょう!

続いてZIPファイルを解凍していきます。

これで、日本語モデルの準備は完了です。

各種必要なライブラリをインストール

最後に必要なライブラリをpipインストールしていきます。


Python上のインポートを行います。

pyknpは黒橋・河原・村脇研究室が提供する、JumanとKNPのバインディングフレームワークです。

transformersは色々と使用用途があるみたいですが、今回はBERTのモデルやパラメータ取得、インプットデータの加工などに使います。

これで準備が整いました。本実装していきます。

BERT本実装

必要なパラメータやモデル、BERTが扱いやすい形に加工するための変換処理などを先ほどダウンロードした日本語Pretrainedモデルから取得します。

続いて、JUMAN++によって品詞分解を行います。

[‘統計’, ‘ラボ’, ‘は’, ‘*’, ‘を’, ‘発信’, ‘する’, ‘サイト’, ‘です’]

文章の区切れやマスクする部分をBERTに明示的に知らせるために、SEPやMASKを挿入していきます。

CLSは文章の頭に、SEPは文章の区切れに、MASKは隠したい部分に適用します。

[‘[CLS]’, ‘統計’, ‘ラボ’, ‘は’, ‘[MASK]’, ‘を’, ‘発信’, ‘する’, ‘サイト’, ‘です’, ‘[SEP]’]


そして、得られたテキストをBERT用に変換します。


そして、マスクされた部分の予測を行います。

結果は・・・

[‘統計’, ‘情報’, ‘データ’, ‘ニュース’, ‘それ’, ‘調査’, ‘分析’, ‘レポート’, ‘トレンド’, ‘ランキング’]

上手く予測できていることが分かります!

BERT 予測結果

マスク部分を前に持ってきても上手く予測できました!

[‘*’, ‘を’, ‘発信’, ‘する’, ‘サイト’, ‘が’, ‘統計’, ‘ラボ’, ‘です’]

[‘統計’, ‘データ’, ‘情報’, ‘それ’, ‘これ’, ‘結果’, ‘ニュース’, ‘調査’, ‘ランキング’, ‘トレンド’]

ロボたん
ロボたん
サイト名が統計ラボだから予測しやすいだろうけど、実際にやってみるとなかなか面白いね!
ウマたん
ウマたん
ぜひ他の文章も試してみてね!!

BERT まとめ

BERTについてSEO観点と機械学習観点から見てきました!

それぞれの観点からBERTについて簡単にまとめてみましょう!

SEO的観点
・文脈の意図を読み取る精度が上がった
・同音異語などの分かりづらい語句の意図を読み取れる
データサイエンス的観点
・双方向に文章を学習することができる
・他の既存モデルと組み合わせる事前学習モデルである

今後GoogleはBERTにとどまらず、さらなる精度のアップデートを行うでしょう!

日々めまぐるしい進化が起こる業界ではありますが、自分のペースで徐々にキャッチアップしていきましょう!

ちなみに自然言語処理については以下の記事でまとめているので合わせてチェックしてみてください!

自然言語処理
【入門】自然言語処理でできることをいくつかPythonで実装してみる!当サイト【スタビジ】の本記事では、自然言語処理についてPythonでの実装と合わせてまとめていきたいと思います。実際にテキスト情報を形態素解析で分解してテキスト類似度を計算したり、空欄を予測したりすることができるんです!...

 

Pythonを初学者が最短で習得する勉強法

Pythonを使うと様々なことができます。しかしどんなことをやりたいかという明確な目的がないと勉強は捗りません。

Pythonを習得するためのロードマップをまとめましたのでぜひチェックしてみてくださいね!