日本語BERT学習済みモデルを使った日本語の文章ベクトル作成をしてみました。
BERTで文章ベクトルを作るやり方はいろいろなサイトで見たのですが、モデルファイルの配置場所が分からなかったり、なかなかゼロから始めてすんなりできなかったので、Google Colaboratoryを使って、自分のマシンに色々入れずに手軽にやる方法でやってみたいと思います。
Google Colaboratoryとは?
自分のマシンに何もインストールしなくてもブラウザとGoogleアカウントがあればクラウド実行環境でPythonプログラムを実行できます。イメージ的にはクラウド上のJupyterノートブック環境です。Pythonコードを書くとすぐにその場で実行することができます。Googleが機械学習の教育、研究用に使われることを目的としているので、素晴らしいことに無料で使うことができます。なんとGPUやTPUも使えるという、実験や勉強のために使わない選択肢はないというサービスです。
BERTのモデルを準備する
まずはBERTの学習済みモデルを準備します。ありがたいことに日本語のWikipediaで学習済みモデルを作り公開してくださっている方がいらっしゃいますので、こちらのモデルを使わしていただくことにします。
BERT with SentencePiece を日本語 Wikipedia で学習してモデルを公開しました
こちらのページにgoogle driveのリンクがあるのでそちらからファイルをダウンロードしてください。必要なのは以下のファイルです。(一番サイズが大きいbz2ファイルは要らないです!)
- graph.pbtxt
- model.ckpt-1400000.data-00000-of-00001
- model.ckpt-1400000.index
- model.ckpt-1400000.meta
- wiki-ja.model
- wiki-ja.vocab
ファイルをダウンロードしたら自分のGoogle Driveのマイドライブの下にbertフォルダを作成、その中にbert-wiki-jaフォルダを作成し、その中に上記のファイルをすべてアップロードします。
さらに、こちらから以下のファイルをダウンロードしてこれも同じくbert-wiki-jaフォルダにアップロードします。このファイルは先にアップロードしたモデルファイルを使うのに必要な設定値が記載されているファイルになります。
- bert_config.json
最終的にGoogle Driveに以下のファイルがそろっていれば大丈夫です。
文章ベクトルを作るプログラムを動かす
こちらからプログラム本体である以下のipynbファイルをダウンロードしてGoogle Driveの任意の場所にアップロードします。
- bert_sentencevector_test1.ipynb
Google Colaboratoryが使えるようにGoogle Driveに設定をして、このファイルをGoogle Colaboratoryで開きます。開いたらRun all ([Ctrl]+[F9])で実行します。
コードが順に走り、途中一か所「Google Driveをパス/content/driveにマウントする」という部分で以下のように表示されます。Google Driveのファイルを参照するために認証を通す必要がるため、表示されたリンクをクリックし、画面の指示に従ってアクセス許可を与え、最後に表示されたコードを、"Enter your authorization code:" のところに入れてやると先に進みます。
Go to this URL in a browser: https://accounts.google.com/o/oauth2/auth?client_id=...
Enter your authorization code:
最後のコードセルの、textに設定された文章が文章ベクトルを作る対象の文章です。
text= '東京の表玄関とも言うべきターミナル駅。特に東海道新幹線と東北新幹線の起点となっており、全国の新幹線網における最大の拠点となっている。'
texts2matrix([text])
作られた文章ベクトルはこんな感じです。
array([[ 7.48805702e-01, 6.90443218e-01, -2.08694339e-01,
2.60837108e-01, -6.57196045e-01, 2.21781164e-01,
2.99572378e-01, -5.03947437e-02, 2.57107586e-01,
-3.71909142e-02, 4.70012784e-01, -4.32350069e-01,
...
-2.44613029e-02, -5.86998463e-02, 3.70831758e-01,
-2.27520689e-01, 3.76363575e-01, 2.21934259e-01,
7.50128254e-02, 1.20648248e-02, -2.35060215e-01]], dtype=float32)
うまくうごきましたでしょうか?
text
を書き換えて、このコードセルを再度実行すると文章ベクトルが再計算され出力されます。
参考文献
今回の記事はこちらのドキュメントを参考にさせていただきました。
コード説明を追加した改訂記事、ベクトルの視覚化の記事を公開していますので、こちらもぜひご覧ください。
おわりに
できるだけ簡単に最短手順で文章ベクトルを作る方法をご紹介しましたが、うまくいかなかったなどあればコメントください。文章がベクトルにできると使い道がいろいろ広がりそうです。
普段はこちらの会社で自然言語関連の業務をしています。
BERT以外の技術も使っていますのでご興味あればぜひご覧ください。
→ アイフォーカス・ネットワーク株式会社