LoginSignup
12
16

More than 3 years have passed since last update.

3秒で使えるBERT

Last updated at Posted at 2019-06-30

私はtransformerのイメージをつかめずBERTを理解できませんでした。だけどBERTは使いたい。
BERTを理解できないけど使ってみたいという人は多いと思います。私もその一人で、transformerの理解ができずに諦めました。

bert-as-service

2行で使えるbert-as-service(https://github.com/hanxiao/bert-as-service)
image.png

これでニュースのテキストデータをベクトルデータに変換します。
ニュースは例えばこんな感じの記事です。
image.png

コマンドはこんな感じ

pip install bert-serving-client
pip install bert-serving-server
wget https://storage.googleapis.com/bert_models/2018_10_18/cased_L-12_H-768_A-12.zip
unzip cased_L-12_H-768_A-12.zip
bert-serving-start -model_dir cased_L-12_H-768_A-12/ -num_worker=1 -max_seq_len=300

これでローカルにbert推論サーバを立てられるのでクライアント側から推論リクエストを送ればいい
↑サーバ ↓クライアント

from bert_serving.client import BertClient
import pandas
import numpy

if __name__ == "__main__":
    df = pandas.read_csv("news.csv")
    with BertClient(ip="0.0.0.0") as client:
        vecs = client.encode(list(df["News"]))
    numpy.savetxt("news_vec.csv", vecs, delimiter=",")

実行すると768次元のベクトルに変換できました。366は変換したニュースの数です。
image.png

試しに以下の条件でデータにバイナリフラグを作成して主成分分析して2次元データに変換します。
image.png

で、Trump_flagの0,1を赤、青で色分けして散布図を作成するとこうなりました。だいたいいい感じ。
image.png

全体のフローとしては、テキストデータをbertで768次元のベクトルデータに変換、主成分分析で2次元データに圧縮しました。主成分分析に関しては可視化のために無理やり入れた処理で、768次元の特徴量ベクトルのまま使うほうが使いやすいです。

今回作ったコードはここにあります。
https://github.com/shiibashi/qiita/tree/master/9

12
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
16