404 Views
October 31, 24
スライド概要
AI・機械学習を勉強したい学生たちが集まる、京都大学の自主ゼミサークルです。私たちのサークルに興味のある方はX(Twitter)をご覧ください!
2024年度後期輪読会#5 10/31 大規模言語モデル入門 5.1-5.3 京都大学理学部3回生 宮本 真弥 0
アジェンダ ◼ 日本語ベンチマーク:JGLUE ◼ 感情分析モデルの実装 ◼ 感情分析モデルのエラー分析 1
アジェンダ ◼ 日本語ベンチマーク:JGLUE ◼ 感情分析モデルの実装 ◼ 感情分析モデルのエラー分析 2
日本語ベンチマーク:JGLUE 基盤モデルが進歩するほど難しいベンチマークが必要になる 基盤モデルの性能向上 ・BERT ・GPT ・Amazon Titan ・Claude ・BLOOM … 難しいベンチマークの提案 ・GLUE ・SuperGLUE ・BIG-Bench ・HELM ・GAIA … しかし英語のものが多くほかの言語におけるベンチマークの作成は重要な課題 3
日本語ベンチマーク:JGLUE 日本語のベンチマークJGLUEが構築される タスク データセット 文章分類 MARC-ja MARC-ja JSTS・JNLI JCoLA 文ペア分類 JSTS JSQuAD JNLI 質疑応答 JCommonsenseQA JSQuAD JCommonsenseQA JCoLAのデータ https://github.com/osekilab/JCoLA/blob/main/data/jcola-v1.0/in_domain_train-v1.0.tsv 画像引用:https://techblog.yahoo.co.jp/entry/2022122030379907/ 4
日本語ベンチマーク:JGLUE MARC-ja:Amazonの商品レビューテキスト+極性ラベル(1:肯定的, 0:否定的) レビューの星が3のものを除外。星1~2なら否定的、星4~5なら肯定的とラベリング Amazonレビュー テキスト: パッケージがUK使用だったため、 少し安っぽい印象でしたが、中 身は日本語吹き替え、日本語字 幕、特典映像もちゃんとついて ます。この値段でこの内容なら 十分満足です。 ラベル:肯定的 画像を作成したサイト:https://k-editor.com/editor/template/7/edit/ 5
アジェンダ ◼ 日本語ベンチマーク:JGLUE ◼ 感情分析モデルの実装 ◼ 感情分析モデルのエラー分析 6
感情分析モデルの実装 大規模言語モデルをファインチューニングして感情分析モデルをつくる • データセットはWRIME(MARC-jaと同じような感情分析用データセット) • エンコーダ構成のtransformerに線形層のヘッドを追加したモデル • モデル・トークナイザはともに東北大学が公開しているBERTを用いる 実装は以下の手順で行う 1. 2. 3. 4. 5. 6. 環境・データセットの準備 トークナイゼーション 前処理 モデルの構築 モデルの訓練 モデルの評価 7
感情分析モデルの実装 1.環境・データセットの準備:AIプラットフォーム Hugging Face を利用 Hugging Face:人工知能のモデルやデータを共有し利用するためのオープンソー スプラットフォーム ・transformers・datasetsは Hugging Faceが提供しているライ ブラリ。インストールするだけで簡 単に使える。 ・pprint関数はprint関数より出力が 見やすい形になっている。 出力 8
感情分析モデルの実装 2.トークナイゼーション:transformersライブラリのトークナイザを用いる ・transformersのAutoTokenizerをimportし てAutoTokenizer.from_pertrained(“モデル名”) とすればトークナイザを呼び出せる ・tokenizerの出力はBatchEncodingという クラスのオブジェクトで、Pythonのdictの ように扱えるが、いくつか特別なメソッド が用意されている (char_to_token,convert_to_tensorなど) ・オブジェクトの内容は3つ ・input_ids:トークンのID ・token_type:セグメント埋め込み(0か1) ・attention_mask:トークンなら1、それ 以外は0とする。ミニバッチを構築する ときにダミーを作るのでそれを0とする 9
感情分析モデルの実装 トークン化の流れ 1.トークンに分割:MeCab+WordPiece (MeCab:https://taku910.github.io/mecab/ ) 2.トークンをID化。文の初めに[CLS]、文の 最後に[SEP]に対応するIDがつく。これが BERTのインプットに用いられる。 ・convert_ids_to_tokensメソッドでIDを トークンに戻せる。実際に文をうまくトーク ン化できていることが分かる。 ・tokenizer(前述)はトークン化を一発でやっ てくれる。 10
感情分析モデルの実装 データの可視化:左が訓練用、右が検証用のデータ 外れ値! 外れ値! 11
感情分析モデルの実装 3.前処理:テキストをトークンID系列に変換する関数を定義 ・tokenizerにexample[“sentence”]を与え てID化する。max_lengthは最大系列長のこ とで、この値を超えると先頭からトークンを 切り詰める(truncation)。 ・ラベルも格納しておく ・この関数を用いてデータセット全体をトー クナイゼーションする。Mapメソッドでデー タセットの事例それぞれに指定した関数を適 用できる。 12
感情分析モデルの実装 3.ミニバッチを構築する。このときPaddingという処理で入力の系列長を最大のものにそろえる。 ・DataCollatorWithPaddingを用いる。正確 にはDataCollatorWithPadding内でtokenizer のtokenizer.padメソッドを用いる。 ・labelはバッチサイズ(ここでは4)のテンソル、 ほかは(バッチサイズ×バッチ内の最大系列 長)次元のテンソルとして変換されていること が分かる。 13
感情分析モデルの実装 4.モデル構築:AutoModelForSequenceClassificationのfrom_pretrainedで訓練済みモデルを読み込む ・読み込んだ時点で最後尾に線形層のヘッドを付 けてくれている。出力次元はnum_labelsで指定 する。 ・label2id,id2labelを使うとIDとラベルが対応付 けされて後々pipelineを使う時に見やすくなる。 ・モデルの入力にはforwardメソッドを用いる。 出力はSequenceClassifierOutputクラスのオブ ジェクトで、loss(損失)、logits(モデルの出力す るテンソル)がある。Hidden_statesとattentions は普通は出力されない。 14
感情分析モデルの実装 5.モデルの訓練:まずTrainingArgumentクラスを使って学習の設定を行う ・学習率スケジューラによって訓練 の中で学習率を変動させる。今回は linear schedulerを用いる。このと き、はじめは学習率をだんだん大き くしていき、その後徐々に小さくし て0に近づけていくように変化させ る。このとき学習率を大きくしてい くことをウォームアップという。 ・warmup_ratioによってウォーム アップの長さの比率を指定できる。 15
感情分析モデルの実装 5.モデルの訓練:Trainerライブラリを用いてモデルを訓練する ・評価指標として関数を定義してい る。ここではAccuracyを評価指標と している。 ・損失関数のデフォルトはクロスエ ントロピー関数。一応カスタム可能 ・Trainerにモデル、訓練データ、検 証データ、collator、Augment、評 価指標を設定しtrain()で実行するだ け 16
感情分析モデルの実装 6.モデルの訓練:検証用データでモデルを評価 17
アジェンダ ◼ 日本語ベンチマーク:JGLUE ◼ 感情分析モデルの実装 ◼ 感情分析モデルのエラー分析 18
感情分析モデルのエラー分析 Pipeline関数を用いてモデルの予測結果を取得 ・pipeline関数を使うことでトーク ナイザやモデルを読み込むことなく 入力の前処理・内部計算・出力の後 処理までを呼び出すことができる ・load_datasetによってで保存した データを所得。 ・pipeline(“テキスト”)とすれば、そ のテキストに対応する予測結果(予 測ラベルとスコア)を所得できる。 ・int2strメソッドでラベルをIDか ら”positive”と”negative”に変換し ている。 19
感情分析モデルのエラー分析 混合行列を使って全体的な傾向を分析 20
感情分析モデルのエラー分析 【おまけ】予測が間違っているデータを見てみる(予想してみよう!) 1.何のこれしき会社員だった頃の辛さに比べれば。まあ種類が違うけど。 2.今年のプリキュアの決め台詞が、「お大事に」今年にマッチングし過ぎてて、プリキュアスタッフの 先見の明がすご過ぎるし、何が言いたいかと言うと変身する棒を買わされました。 3.ツイッター早朝部、いくわよ!! あと諸事情により数人ブロックさせて頂きました…申し訳ない…… 4.酒はぬるめの 燗がいい 肴は炙った イカでいい←もっといいもの食えよ 5.できれば今すぐお線香あげにいきたい 6.もうwwww訳がwwwwわからないよwwww 7.一月ぶりに湯らっくす行って、10時間も寛いでいまい、寝落ちする以外なにもできない 8.この時期はこれだから 9.というか私のオタク人生に大きな影響を与えすぎたのがクロウ 10. 3週間ガーッと仕事して1週間まるっと旅に出るというサイクルを繰り返したい。そんな働き方さ せてもらえませんかね。 なんだこれ。 答え:1.P, 2.N, 3.P, 4.N, 5.N, 6.N, 7.P, 8.N, 9.P, 10.P 21
22