見出し画像

ノンプログラミングでBERT,Word2Vec,tf-idf,BM25を試す

こんにちは! 株式会社MatrixFlowのMatrixFlowチームです。

今回はMatrixFlow バージョン0.3.8で自然言語処理のアルゴリズムを大きく増やしたので、使ってみたいと思います。

まず、今回増やしたアルゴリズムですが、BERTとWord2VecとBM25+を使えるようにしました。

それぞれの解説を軽くしたいと思います。

BERTとは

Transformerという手法を使ったDeep Learningのモデルです。
2018の10月にGoogleの研究チームが発表し、2020年7月の現在では5000近くの論文で引用されています。文章読解のベンチマーク「SQuAD 1.1」で人間の精度を初めて超えたことで話題になりました。また特定のタスクだけでなく多種類のタスクで最高精度を出したのも業界を驚かせました。
MatrixFlowは内部では「HuggingFace」のモジュールを使い、現在は学習済みモデルを使うのみになっています。(いずれファインチューニング機能もつける予定です。)

Word2Vecとは

中間層が一層のニューラルネットワークです。Word2VecにはCBOWとSkip-Gramという2種類のモデルがあります。教師なし学習で単語をベクトル化し、意味の近い単語が近いベクトルになるだけでなく、その単語ベクトルが足し引きでそれっぽい値を出す事で話題になりました。例えば、「東京 - 日本 + フランス」という演算をすると「パリ」という単語ベクトルに近いベクトルが出てきます。
MatrixFlowではskip-gramで学習し、最後に文書ごとに平均をとる事で文書をベクトル化するところまで処理を行います。

tf-idfとは

文書中に含まれる単語の重要度を評価するアルゴリズムです。
単語の出現頻度(Term Frequency, tf)と逆文書頻度(Inverse Dcument Frequency, idf)の積で定義されています。昔から存在するアルゴリズムで、文書のベクトル化の際にはよく使われます。

BM25とは

tf-idfと同様に文書中に含まれる単語の重要度を評価するアルゴリズムです。最初に実装されたシステムのOkapi情報検索システムにちなんで、Okapi BM25とも呼ばれます。
特徴としては、tf-idfでは単語数が多い文書に含まれる単語のスコアが高くなる傾向にあるのですが、Okapiではそれを解消するような重みが足されています。
MatrixFlowではBM25の改良版のBM25+を実装しています。

比較

MatrixFlowを使って分類のタスクで比較してみましょう。
無料で入手できるニュース記事のデータセットlivedoor ニュースコーパスを使います。
ニュースは9つのカテゴリに別れているので、ニュース記事本文からカテゴリを予測できるように教師あり学習で学習させます。ちなみにカテゴリは以下の通りです。
・トピックニュース
・Sports Watch
・ITライフハック
・家電チャンネル
・MOVIE ENTER
・独女通信
・エスマックス
・livedoor HOMME
・Peachy

また今回はBERTの計算が全然終わらなかったので、それぞれのカテゴリから100記事のみを取り出して、合計900個の記事を使いました。

分類のアルゴリズムにはロジスティック回帰を使います。

MatrixFlowのレシピでは以下のようになります。

スクリーンショット 2020-07-29 9.54.56

日本語トークナイザーでは日本語文章を単語に分割する「分かち書き」や不要な単語(httpsで始まるURLなど)の排除などを自動でやってくれます。

日本語トークナイザーに通した後にWord2Vec, BERT, tf-idf, BM25でそれぞれ文書をベクトル化して、ロジスティック回帰に通して分類の精度を比較します。

これらのMatrixFlowの自然言語処理はこちらの記事でも解説しています。

結果です。

tf-idf

スクリーンショット 2020-07-29 10.02.15

Word2vec

スクリーンショット 2020-07-29 10.02.24

BM25

スクリーンショット 2020-07-29 10.02.30

BERT

スクリーンショット 2020-07-29 10.02.39

精度
tf-idf: 0.9222
Word2Vec: 0.6556
BM25: 0.9333
BERT: 0.800

BM25が一番よかったです。tf-idf,Word2Vec,BM25はこの記事で学習を行っていますが、BERTは学習済みモデルに通してベクトル化してるだけです。ですが、思ったより精度は良かったです。Word2Vecはデータサイズが小さくて学習しきれていないと考えられます。(Word2Vecにおいても学習済みモデルと使ってファインチューニングする機能を今後つけようと思いました。)

おわりに

BM25やtf-idfというDeep Learningが登場する前からある古典的な手法が群を抜いて精度が良いのは面白いですね。データサイズが大きくなるとまた違ってくると思いますが、合計で1000程度のならBM25などを使うのはアリだとわかりました。また、あまり触れてないですが、BERTはやはり計算に時間がかかるしメモリも食うのでアプリケーションに組み込む時の扱いには注意する必要がありそうです。

以上です。ありがとうございました。

【会社概要】
株式会社MatrixFlowは、「テクノロジーで世界をつくる」をミッションとするAIベンチャーです。大人から子供、ビジネスマンから学生、デザイナーからサイエンティストに至るまで、様々な人々がAIを活用し、素晴らしい着想を得たり、あっと言わせるクールな活動をすることを支援したいと考えています。その実現に向けた第一歩として、プログラミング不要のクラウド型AI構築プラットフォーム「MatrixFlow」を開発しております。また、様々な会社でのAI活用を推進するためにAIの受託開発・コンサルティング事業も行っております。
【会社情報】
設立 :2018年10月
本社 :東京都三鷹市
URL:https://www.matrixflow.net/
事業内容:プログラミング不要のAI構築プラットフォーム「MatrixFlow」の運営、および、AIの受託開発・コンサルティング
【お問い合わせ先】
E-mail:support@matrixflow.jp
窓口:MatrixFlowカスタマーサポート

いいなと思ったら応援しよう!