ISID × Azure × PyTorchの取り組み

続いて「ISID × Azure × PyTorchの取り組み」について発表します。まず「PyTorchとは」ということで、知っている方も多いと思いますが、PyTorchは2016年にFacebookの人工知能研究グループから公開された、Pythonのオープンソースの機械学習ライブラリです。

図に示しているのが、2017年の3月から2021年の現在まで、論文実装に使用されているマシンラーニングライブラリの割合です。2017年当初を見てみると、TensorFlowが非常に多く使われています。また、TensorFlow以外にもその他のライブラリが多く使われていることがわかります。

しかし2021年現在ではPyTorchが約4割を占めており、TensorFlowは約2割になっています。このように、PyTorchがマシンラーニングを使うにあたり、非常に人気であることがわかります。

そしてISID × Azure × PyTorchということで、私たちISIDとマイクロソフトさまはPyTorchとの連携に力を入れています。例えば私たちISIDでいうと、こちらはプレスリリースの内容になりますが、ビジネスでPyTorchを利用したディープラーニングモデルの作成などを行っています。

一方でマイクロソフトさまのほうでは、こちらはマイクロソフトさまの公式のページになりますが、PyTorchのエコシステムへの貢献を非常に多く取り組まれています。最近でいうとPyTorch Profilerという機能が、PyTorchの1.8でリリースされましたが、この開発をマイクロソフトさまとFacebookで主に行っているということです。

このように、私たちISIDとマイクロソフトさまはPyTorchの連携に非常に力を入れています。

そして、この度ISIDとマイクロソフトさまとで、PyTorchに関する事例記事を米国と日本両方で公開しました。

こちらはリンク(日本語英語)から参照できます。内容としては、Azure ML、そしてPyTorchを使った製品開発、今回説明したTexAIntelligenceに関する内容になっています。こちらも興味ある方はぜひ見てください。

ISIDメンバーのPyTorchコミュニティへの貢献

最後にISIDメンバーによるPyTorchコミュニティへの貢献ということで、ISIDではビジネスでのPyTorch利用だけではなく、PyTorchコミュニティへの貢献も行っています。

1つ目が、PyTorchの日本語チュートリアルの公開です。こちらはPyTorchの公式サイトからリンクでき、私たちISIDグループのメンバーが作成しています。

また、冒頭にもお話したようなPyTorchに関する書籍もISIDメンバーから出版しています。『PyTorch実践入門』であったり、その他にも『つくりながら学ぶ! PyTorchによる発展ディープラーニング』などもISIDのメンバーが執筆しています。これらはPyTorch公式のTwitterからも紹介されています。

それでは、私からの発表は以上となります。

3人目の登壇者の自己紹介

ファイサルハディプトラ氏(以下、ファイサル):続いて発表者が代わり、私ファイサルから「TexAIntelligenceを搭載したALBERTモデルの構築」について発表します。

まずは自己紹介します。私は深谷と後藤と同じように、AIトランスフォーメーションセンターという部署の中で、製品開発グループに所属しています。主な仕事としては、自然言語処理を中心とした研究開発を行ったり、自社のAIソフトウェアであるTexAIntelligenceの開発をしたりしています。

2つの発表内容とBERTのおさらい

今回の発表としては、主にこの2つ内容があります。ISIDオリジナルALBERTモデルについて、どのようにそのモデルを構築するかという話と、TexAIntelligenceという製品にどのようにALBERTモデルを組み込むかという2つの話をします。

まずはBERTのおさらいから入ります。ご存知のとおり、2018年の10月にGoogleがBERTを公開して、自然言語処理の業界が変化しました。さまざまな英語のNLPタスクを解いて、State-of-the-artsになりました。その次に、英語以外にも多言語のモデルを公開して、さまざまな言語に対応するようになりました。

ただし、日本語のデータに対してはあまり性能が出ない問題があります。そのために、いろいろな企業が日本語版のBERTを公開し始めています。

BERTそのものを業務システムに組み込むと、いろいろな問題が発生します。

根本的な原因として、BERTのモデルの中ではパラメーター数が多く、モデルサイズが大きいので、限られた計算リソースだと学習がちょっと厳しいです。推論時間も遅く、ディスクの使用量が多いという別の問題があって、その問題を解決するためには、どうやってモデルを小さくするか、どうやってモデルの推論時間を早くするかという2つの課題が残っています。

その課題を解決するために、私たちが調べたALBERTという新しい、BERTモデルよりも軽量な仕組みを検討しました。

ALBERTの3つの工夫点

このALBERTを使うと、BERTのパラメーター数を10倍ほど削減でき、推論時間も早くなります。ALBERTの中には主に3つの工夫点があり、BERTを改善します。

1つ目はEmbeddingパラメーターを因数分解して、もともと大きい行列を小さい2つの行列に分けています。もう1つは、もともとBERTにある12層のSelf​-Attention Layerのパラメーターを共通化して、1つのパラメーターとして扱っています。この1つ目と2つ目の工夫点によって、BERTのパラメーター数を10倍ほど削減できます。

最後に、BERTのNext Sentence Predictionというタスクの代わりに、新たなSentence Order Predictionというタスクを導入して、よりよい精度が得られます。

論文から性能評価を入れると、ALBERTのパラメーター数が少ないですが、精度がかなりいい事実があります。さらに、BERTはlargeからxlargeに拡大すると精度がかなり落ちてしまっていますが、ALBERTの場合は、xxlargeまで拡大しても精度がだんだん上がっていく傾向が発見されます。

BERTよりALBERTのほうがスケールしやすいことがわかったので、ALBERTを採用することにしました。

BERTを使う際の3つの改善点

ISIDでは生のBERTを使うとうまくいかないケースがあるので、今回は改善点を3つ紹介します。

1つ目は、入力文章の長さを2倍に。BERT系のモデルは基本的に512単語までしか扱っていませんが、業務文章では512単語より長い文章がけっこうあるので、今回は512の単語を2倍にして、1024単語まで拡大する工夫をしていました。

それ以外に、もともとのALBERTではSentencePieceというトークナイザーを利用していますが、日本語の場合はSentencePieceを使うよりも事前に形態素解析を行ったほうがよりよい結果が得られるので、今回は形態素解析を使うことにしました。

多数の形態素解析ライブラリの中から、Sudachiを選択しました。なぜかというとSudachiで使用している辞書は比較的新しく、より多くの単語に対応しているのでSudachiを選択しました。

最後に、Whole Word Maskingという仕組みに対応するようにしました。Whole Word Maskingが何かはこの後解説します。

もともとBERTでは、ボキャブラリーに入らない単語をWordPieceに分解して、トークンとして扱っています。BERTではマスク言語モデル(Masked Language Model)というタスクがあり、そのタスクのデータセットを作るためにはランダムでトークンを隠して、学習するときに予測対象とします。

もともとBERTはWhole Word Maskingを使わない場合はトークンごとに隠していますが、Whole Word Maskingを使うと単語全体を隠しています。この例で言うと、“新宿御苑”という単語は3つのWordPieceとして分解されます。“新宿”“御”“苑”というトークンに分解されました。

Whole Word Maskingなしの場合、データセットを作るときに”御”というトークンだけ隠す可能性がありますが、Whole Word Maskingを使う場合は“新宿御苑”という3つのトークンが丸ごと隠されます。Whole Word Maskingを使わない場合はタスクが簡単すぎて学習するメリットが下がる事実があるので、今回はWhole Word Maskingを採用しました。

私たちが構築したモデルのメトリクスはこんな感じです。公開されている日本語版のALBERTより、精度がよりよく得られることが確認できました。しかもALBERTモデルなので、BERTより10倍ほどモデルサイズを小さくできました。

最後に、モデルの評価を測るためにlivedoorニュースという人気の日本語の分類タスクに対してモデルをファインチューニングした結果、私たちが構築したモデルが、かなりいい精度が得られたことは確認しました。さらに学習時間と推論時間も、生のBERTより速いことが確認できました。

構築したモデルをTexAIntelligenceに入れる方法

ここまでは我々が構築したALBERTモデルについて話しました。その次は、どうやって構築したモデルをTexAIntelligenceに入れるかという話になります。

TexAIntelligenceには主に3つの機能があります。“文章類似検索”と“教師あり分類”と“文章要約”です。この3つの機能にどうやってALBERTを適用するか、今回は2つの機能だけ紹介します。

まずは“教師あり分類”からです。基本的な流れとしては、私たちが構築した事前学習済みのALBERTモデルを使用して、ユーザーが提供したデータに対するファインチューニングを行います。その後にファインチューニングされたモデルを使ってテストデータを分類するという、普通の流れでTexAにALBERTモデルを入れました。

その次に“類似検索”機能にどうやってALBERTを入れるかというと、基本的にはTexAの中の類似検索では、ベクトル空間モデルを使っています。検索対象文章をベクトル化して、その後、クエリ文章もベクトル化して類似度を計算する流れになっています。基本的には教師なしアプローチを使っているので、そのままALBERTを使うとあまり精度が出ない事実があります。

その次に、ベクトル化のところを少しだけ解説します。文章を事前にトークン化して、ALBERTモデルを使って文脈付き単語ベクトルを計算して、そのあとは各文脈付き単語ベクトルをプーリングレイヤーに入れて文章ベクトルを計算する流れになっています。今回プーリングレイヤーは、普通のAverage Poolingという、平均をとるレイヤーを使っています。

先ほど言ったように、そのままALBERT事前学習モデルを使うとうまくいかないケースが多いので、今回は私たちが工夫した点を少しだけ紹介します。

教師なしでの有効性があるため、Sentence-BERTのアーキテクチャを使ってファインチューニングを行いました。対象データセットとして、日本語版の自然言語推論SNLIというデータセットに対してファインチューニングを行いました。これで、教師なしでも類似検索がかなりいい精度が得られたことを確認しました。

そのため、Sentence-BERTアーキテクチャでファインチューニングしたモデルを、TexAの類似検索機能に適用することにしました。

TexAIntelligenceを搭載したALBERTモデルの構築のまとめは、以下の通りです。

我々からの発表は以上です。ありがとうございました。

お問い合わせ先
株式会社 電通国際情報サービス
X(クロス)イノベーション本部 AIトランスフォーメーションセンター
URLhttps://isid-ai.jp/
E-mail:g-isid-ai@group.isid.co.jp

ISID-AI製品
テクサインテリジェンスhttps://isid-ai.jp/products/texa.html
オプタピーエフhttps://isid-ai.jp/products/optapf.html
ディーカhttps://isid-ai.jp/products/dica.html