Blog

Google Colaboratoryで自然言語処理モデルT5をチューニングする

この記事は、ニフティグループ Advent Calendar 2022 11日目の記事です。

はじめに

会員システムグループ N1!Machine Learning Product Engineerの中村です。

ニフティでは11/22にNIFTY Tech Dayというイベントを開催しました。

この時に、ニフティニュースにおける深層自然言語処理によるニュース記事要約について発表をさせていただきましたが、この時に行った転移学習(ファインチューニング)について技術的な解説をしていきます。

モデルの転移学習について

本記事の大まかな実装は sonoisa さんの記事を参考に構築しています。

https://qiita.com/sonoisa/items/a9af64ff641f0bbfed44

言語モデルの転移学習

現在の言語モデルは非常に大規模であり、全く学習されていない状態(スクラッチ)から改めて学習させることは現実的ではありません。そこで考案されたのが転移学習という手法です。

転移学習とは、既に学習された大規模な言語モデルを元に、新しいタスクについての学習を行う手法です。この方法は、新しいタスクの学習データが少ない場合に特に有効です。また、既に学習されたモデルの学習済みの知識を引き継ぐことで、学習がスムーズに進むため、学習時間の短縮が期待されます。

プロンプト学習

https://arxiv.org/abs/1910.10683

今回のニュース記事要約ではT5というモデルの学習を行いますが、この学習にはプロンプトを用いて学習を行います。現在の深層学習モデルは非常に大規模であり、1つのモデルで複数のタスクを実行可能です。プロンプトと呼ばれる接頭辞を頭に付けて学習を行うことで、文章に対して何を行いたいかを指定し、それに合わせたタスクを実行するように学習します。

実装と学習の実行

ここではニフティニュースにおける記事データと要約データを用いて、T5モデルの転移学習を行います。

データセットの準備

ノーマライズ処理

まず、neologdの正規化処理を改変した処理を用いて、正規化処理を定義します

そのほかにタブ文字やタグの除去、エスケープシーケンスの復号化などを行い、データセットを整備します。

参考元の処理ではlower処理やスペースの削除などが含まれていますが、例えば「iPhone」などの商品名や、空白によって意図的に区切られている部分が消滅するなどの現象が起こったため、本記事ではその部分の処理を行わないように実装しています。

ニフティニュースでは短文と長文の2種類のタイトルの他、3行要約も作成しており、そのデータにそれぞれプロンプトを付与し学習させます。

プロンプトも含めた本文であるtextと、それに対応する応答であるresponseを、all_dataという配列に含めた状態になりました。

データセットの分割

データをtrain/validation/testの3つに分割します。

確認してみると、ランダムにデータが分割されたことがわかります。

学習の実行

モデルの定義などは参考元と同じため、ここでは割愛します。

https://qiita.com/sonoisa/items/a9af64ff641f0bbfed44

事前学習モデルにはmegagonlabs/t5-base-japanese-webを使用します。

A100(80GB)時の設定について

Google ColaboratoryなどでGPUにA100を使う場合、プリインストールされているtorchではCUDAが対応していないというエラーが起きます。その場合には、以下のコマンドで対応するtorchなどをインストールします。

その他ハイパーパラメータ

ハイパーパラメータについては以下のように設定します。

モデルのチェックポイント周りの定義を行っておくと、もしも途中で学習が終了する(PCが止まる、Google Colaboratoryのセッションが切れてしまう)自体に陥っても、学習を途中から始めることが可能なため設定しておくことをおすすめします。

(どうしても時間がかかってしまうような、このような大規模モデルの学習では非常に便利だと感じました)

以下を実行して、転移学習を行います。

推論処理

以下のコードを実行することで推論処理を行います。

# 前処理とトークナイズを行うの部分でプロンプトを与えつつ、トークナイズを行います。

# 生成処理を行うの生成処理ではハイパーパラメータを変更することで、処理時間や精度のトレードオフ関係を調整します。

実際の推論

実際の推論は以下のようになります。(NIFTY Tech Day 2022より)

全てにおいて成功するわけではなく、以下のように失敗する例もあります。

おわりに

今回はNIFTY Tech Day 2022では話せなかった細かい転移学習の手法などについて書いてきました。
深層学習周りの自然言語の歴史や、クラウド上のアーキテクチャに関してもNIFTY Tech Day 2022でお話したので、興味がある方はぜひ御覧ください。

最近だとChatGPTのような流暢な対話型のAI技術も登場し、いよいよ自然言語処理は人間に近い存在になりつつありますね。

実際に深層自然言語処理による要約生成などに挑戦してどのような苦労があったのか?についてもまたどこかの機会に発表したいと思います。

We are hiring!

ニフティでは、さまざまなプロダクトへ挑戦するエンジニアを絶賛募集中です!

ご興味のある方は以下の採用サイトよりお気軽にご連絡ください!

Tech TalkやMeetUpも開催しております!

こちらもお気軽にご応募ください!

この記事は、ニフティグループ Advent Calendar 2022 11日目の記事です。
明日はニフティライフスタイルのsaikeiさんです。次回もお楽しみに!