site_review: 2024-01-15 12:00:00.005694 【技術本】大規模言語モデル入門

【技術本】大規模言語モデル入門

https://amzn.to/3TZUzE0


【技術本】大規模言語モデル入門


x postへポスト
ChatGPTの登場によりさまざまな技術が塗り替えられつつある昨今だが、2023年当時におけるTransformer技術の体系を素早く一冊で学べる。
主に以下のTransformerの技術が実装を踏まえて学べる。(各実装はHuggingFaceのTransformerライブラリを使用して行なっている。Transformer自体のモデルの説明概要が数式を含めて述べられているがニューラルネットワーク技術の基礎を理解している必要がある。)
Transformer:
・感情分析:テキストから読み取れる感情を検出する文書分類のこと(ネガティブ、ポジティブ、中立)
・自然言語推論:2つのテキストの論理関係を予測するタスク(含意、矛盾、中立)
・意味的類似計算:2つのテキストが似ている度合いをスコアとして予測する
・固有表現認識:テキストに含まれる固有表現を抽出するタスク
・要約生成:比較的長い文章から短い要約を生成するタスク
補助的技術:
・文字埋め込みモデル:SimCSE, BPR
 意味類似度計算などで毎回推論するとコストが高いため、あらかじめ文に対して評価したベクトル値を埋め込み、ベクトル値のみの比較で類似計算して処理を軽くする技術。インデックスを張ってさらに高速化もできる。

最終的に、質疑応答アプリを作成する。(実装は、文字検索モデルで質疑内容に関する類似文を抽出し、それをChatGPTで回答文に加工生成する)
全ての実装コードはGoogle Colabを使用した実装ファイルを提供してくれているため、検証がしやすい。(Colabアップデートによるバグの更新もあり)
最終章のChatGPTと検索モデルを連携した質疑応答アプリは、Google Colabの無料枠では実行できない規模(課金必須)になっているので注意が必要。ChatGPTのAPI利用にも課金する実装となっている。

初心者はニューラルネットワーク技術の基礎を事前に理解しておく必要があるかもしれないが、2023年時点でのトレンドを押さえるには良書だと感じた。

----------
以下内容メモ

●1章:初めに
自然言語処理:ニューラルネットワークを使った大規模言語モデルによる手法が標準的となる。
transformerライブラリ:HuggingFace 2016年に創設された企業が開発したもの。社の他のサービスでライブラリやデータセットを無料で共有できるHuggingFace Hubの提供もしている。

Transformerでできる自然言語処理
・感情分析:テキストから読み取れる感情を検出する文書分類のこと(ネガティブ、ポジティブ、中立)
・自然言語推論:2つのテキストの論理関係を予測するタスク(含意、矛盾、中立)
・意味的類似計算:2つのテキストが似ている度合いをスコアとして予測する
・固有表現認識:テキストに含まれる固有表現を抽出するタスク
・要約生成:比較的長い文章から短い要約を生成するタスク

単語埋め込みとニューラルネットワークの基礎:
単語の意味をコンピュータに教える手法。従来は人手で辞書を作り理解させる>WordNetなど
デメリット:専門用語、固有名詞、新語など全てをカバーするのは難しい。
2013年:word2vecなど、単語の意味を表現したベクトルを大規模なテキストから学習するニューラルネットワークが出現。
こうしたベクトルのことを、単語埋め込み、単語ベクトル、単語表現、などと呼ぶ。
自然言語処理に用いるために構築されたテキストをコーパスと呼ぶ。
word2vec:単語の意味は、周辺に出現する単語によって表わせると考える分布仮説に基づいて設計されている。周辺の単語が知らない単語の意味を表すことを裏付けている。
単語のベクトルの空間上で、関連性の高い単語同士は近くに配置される。

自己教師あり学習:入力から自動的に予測するラベルを生成して学習を行う方式。
教師あり学習:人手でラベルを付与したデータセットを使って学習を行う。

1.4:大規模言語モデルとは
 文脈:マウスでも、前後の文脈から動物のネズミか、PC機器のマウスか判断できる。また、似たような文章のニュアンスの違いを理解できる。
>文脈化単語埋め込みとTransformerの発案
>こうした事前学習した大規模なニューラルネットワークは、大規模言語モデル、PLM:Pre-Trained-Language-Model 事前学習済み言語モデルとも呼ばれる
また、事前学習されたモデルを下流タスクのデータセットで微調整することを、ファインチューニングと呼ぶ。

ファインチューニングと転移学習の違い
・ファインチューニング:すでに学習済みモデルに新たな層を追加し、モデル全体を再学習する手法。モデルを再利用するため、1から学習するよりも短時間で少ないデータでモデルの構築が可能。
下流タスクを解くためにニューラルネットワークの層をモデルの出力に追加して、下流タスクのデータセットを用いて、モデル全体を微調整する。
・転移学習:別タスクで学習された「知識」を別の領域の学習に適用させる技術。
通常の機械学習では、犬・猫それぞれ別のモデルを作成する。犬のデータは大量に用意されている場合は、犬のモデルの学習は問題ないが、猫のデータ足りない場合、猫のモデルは精度が落ちてしまう。ただし、転移学習では、犬の種類判別によって得られた知識を、猫の種類判別モデルに適応させることができる。そのため、猫の画像データが少なくても、猫の判別を高精度でおこなえるようになる。

●2章:TRANSFORMER
Transformer:2017年にgoogleが提案したニューラルネットワーク。当初は機械翻訳のモデルとして提案されたが、やがて大規模言語モデルを含む幅広いタスクに応用され、自然言語処理において2023年の執筆時点で標準的に利用されるニューラルネットワークとなる。
Transfoermerの入力には、単語より細かい単位の「サブワード」や文字を使うことが一般的。>3.6章

Transformerの種類:3種
・エンコーダ・デコーダ
・エンコーダのみ
・デコーダのみ

エンコーダ:
L個のブロックで多段的に文脈情報を付与する。この多段的な処理によって、低い位置にある層では表層的に、中間にある層では文法的に、高い位置にある層では意味的に、と言う感じでより複雑で抽象的な文脈を捉えられるようになると考えられている。

残差結合:
勾配消失、勾配爆発の問題を防ぐ。

層正規化:
過剰に大きい値によって訓練が不安定になるのを防ぐために、ベクトル値を正規化して対応する。

ドロップアプト:
訓練データセットに対して、モデルが過適合するのを防ぐための正規化の仕組み。
依存しすぎないように、要素を欠落させる。

●3章:大規模言語モデルの基礎
Transformer3種の事前学習、ファインチューニングの説明。
大規模言語モデルは、大規模コーパスに含まれるトークンを予測する学習を通じて訓練されている。

・3.2 GPT(デコーダ):
 GPT: Generative Pre-trained Transformer 2018年OpenAIが提案。
7000冊の書籍から作成した訓練コーパスを使い事前学習したもの。
大規模なパラメータを含むtransformerを使った言語モデルを大規模なコーパスで訓練した大規模言語モデルの最も初期のモデル。
仕組み:先行するトークン列から、次のトークンを予測する。

ファインチューニング
事前学習済みモデルの上部に追加され、モデルの出力を下流タスクに合わせて変換する層のことを「ヘッド(head)」とよぶ。

・3.3 BERT、RoBERTa(エンコーダ):
 BERT 2018年googleが提唱
 RoBERTa 2019年Facebook が発表。
デコーダの改良版。
デコーダは先行するトークン列しか捉えられなかったが、後続するトークン列の双方から文脈を捉えられるように改良。

事前学習
マスク言語モデリング:トークンの穴埋めを行うタスク。
先行するトークン列と、後続するトークン列の双方の文脈情報を用いて、隠したトークンを予測することで、双方向から文脈を捉える訓練をする。

・3.4 T5(エンコーダ・デコーダ)
 T5 googleから発表。
T5: Text to Text Transfer Transformer
エンコーダ・デコーダ構成を採用した大規模言語モデル。
エンコーダ・デコーダ構成の利点は、エンコーダによって双方の文脈情報を捉えられることと、デコーダによって自由にテキストで結果を生成できることの双方を活用できる。
C4と呼ばれる750GBのウェブから抽出された大規模なコーパスが準備され、パラメータもBERT 、RoBERTaより30倍以上多い。
要約、質問、応答、機械翻訳などに有効。

タスクにあったモデルの選択の必要性:文章単位・トークン単位の分類など言語生成が不要なタスクにおいてはBERT RoBERTaの方が性能が高く、処理も早い。

・3.5 多言語モデル
 ここまで紹介してきたモデルは、提案時には英語のコーパスで事前学習が行われてたが、コーパスを他の言語に差し替えることで英語以外のモデルを構築できる。

多言語モデルは、言語に依存しない表現を内部的に獲得していることが示唆されており、それを示す結果として言語横断転移学習ができることが知られて居る。
例えば、英語の事例のみでファインチューニングした多言語モデルに日本語の事例を解かせることができる。
世界の言語の中には、自然言語処理に使えるデータが稀少な言語が依然として多く、言語横断転移学習はその言語の課題を解決できる可能性を秘めている。
モデルの学習には、翻訳データなどの言語間の対応を明示的に示したデータを用いていない。それにもかかわらず、モデルが言語の共通性を捉えることができる。異なる言語間に共通の文字が全く存在しない場合でも起こるため、モデルは言語の抽象的な構造の共通性を手がかりに、言語に依存しない内部表現を獲得して居ると考えらる。

・3.6 トークナイゼーション
 語彙を作成する上での問題
・低頻度な単語を大量に語彙に含めることで、訓練に使うコーパスにおける単語の頻度に大きな偏りが生まれ、性能に悪影響を及ぼす。
・エンコーダの事前学習時、エンコーダ・デコーダまたはデコーダの訓練・推論時に必要な全ての語彙に対する確率計算のコストが増加する
・単語埋め込み行列の容量が大きくなり、事前学習・ファインチューニングの際に必要なメモリ容量が増える。
・語彙サイズを小さくすると語彙に含まれない単語は未知語となり、モデルで適切に扱うことができなくなる。
これらの問題を踏まえて、大規模言語モデルで標準的に使われているのが単語と文字の中間の単位であるサブワード。サブワードによる分割では語彙のサイズをハイパーパラメータにすることで分割の粒度を自由に制御できる。
方法:
・バイト対符号化
・WordPiece

●4章;大規模言語モデルの進展
2023 OpenAI GPT-4(CHAT-GPT)
幅広い自然言語のタスクをファインチューニングなしに高性能に解けることを示したデコーダ構成のTransformer。
モデルが大規模化することで性能が改善する創発的能力がある。
モデルの大規模化に伴って、従来はファインチューニングをしなうと解けないと思われていた多くのタスクが、モデルのプロンプトと呼ばれるテキストを入力して、後続するテキストを予測するという単純な方法で解けることがわかってきた。
大規模言語モデルが、どのような仕組みで例示から学習してタスクを解くのか、2023年時点では、詳しくわかっていない。

多段階の推論(マルチステップ推論)の解き方。
例:部屋に23個のりんごがあります。料理に20個使い、6個買い足したとき何個のりんごがありますか。(問いを解くのに、23−20=3と、3+6=9と言うように2段階で推論が必要なもの)
複数の推論が必要な際に、推論過程の例示を与えるchain-of-through推論を用いると、性能が改善されることが報告されている。
または、「ステップごとに推論しよう」と末尾に付与して回答を抽出するzero-shot chain-of-through推論も提案されている。
このようなことから、大規模言語モデルを使うにあたっては、プロンプトの与え方を工夫することが重要

・4.3 アライメントの必要性
 モデルの予測が人間や社会にとって理想的な挙動と一致するとは限らない
有益で適切な挙動になるように調整することをアライメントとよぶ

・4.4 指示チューニング
 指示を含んだプロンプトと理想的な出力テキストの組みで構成されるデータセットを使ったファインチューニングでアライメントを行う方法。
>人手でコスト高い。

・4.5 人間のフィードバックから強化学習
 人間の好みに対して直接最適化することでアライメントを行う。

・4.6 ChatGPT
 大規模言語モデルを対話形式で操作する方法を採用。
指示チューニングとRLHF(人間のフィードバックからの強化学習)を組み合わせた方法で学習。
対話形式に対応するためのデータセットが新しく追加されている。
学習方法:
指示チューニングのデータセットとして、ユーザとモデルの模擬的な会話を含んだデータセットを人手で作成している。ユーザ、モデルのメッセージともに人手で作成。
作成したデータセットをInstructGPTで用いたデータセットと結合し指示チューニングを行う。
次に報酬モデルを訓練するために、人間とモデルとの会話を収集したデータセットを構築する。ここでは指示チューニングのデータセットと異なり、モデル側のメッセージは実際のモデルからの出力を使う。そして、このデータセットの中からモデル側のメッセージをランダムに選択し、同一の会話の文脈においていくつかの代わりとなるメッセージをモデルに生成させて、これらの優劣を順序づけすることで、報酬モデル用のデータセットを作成。
そして報酬モデルのデータセット構築・訓練と強化学習を数回繰り返して最終的なモデルを学習する。

●5章:大規模言語モデルのファインチューニング
この章ではエンコーダ構成の大規模言語モデルを使って解説。
使用モデル:BERT

・5.1日本語ベンチマーク:JGLUE
データセットとはモデルの学習や評価のためにまとめられたデータの集合で、基本的に次の3つのセット。
 ・訓練セット
 ・検証テスト
 ・テストセット
データセットを分割しているのは、モデルの汎化性能を計測するため。
未知データに対して発揮する性能を担保するため。

JGLUEに含まれるタスクとデータセット:
・文章分類
 トピック(ジャンル分類、経済、スポーツなど)、極性(レビュー文の肯定的、否定的分類)
 >SNS投稿を大規模に分析し、トピックを分類することで、世間でどのようなことが話題になっているかいち早く検知できる。>マーケティングに役立てられる
 MARC-ja:多言語商品レビューコーパス
 JCoLA:分布的な容認性判断能力を評価するためのデータセット
・文ペア関係予測
 二つの文がどれだけ意味が近いかを表す意味的類似度判定、意味が合致、矛盾かの含意関係の判定
 JNLI:自然言語推論データセット:含意、矛盾、中立のラベルづけされたもの
 JSTS:意味的類似度計算データセット:類似度スコア
・質問応答
 与えられた質問に対する答えを出力するタスク。
 JCommonsenseQAは、多岐選択式質問応用のデータセット

・5.2 感情分析モデルの実装
 MARC-jaのデータセットを用いて評価

・5.3 感情分析モデルのエラー分析
 商品レビューで、文章内容はネガティブでありラベルもネガティブなのだが、「星4つ(最大評価星5つ)」と言う表現があるだけでポジティブの予測をしてしあう。
つまり、予測のショートカットが行われてしまう。
この場合は、データセットから「星〜個」などの表現を取り除く必要がある。

・5.4 自然言語推論・意味的類似度計算・多岐選択式質問応用モデルの実装
・自然言語推論
 データセット:JNLIを使用
・意味的類似度計算
 データセット:JSTSを使用
・多岐選択式質問応答
 データセット:JCOmmensenseQAを使用

・5.5 メモリ効率の良いファインチューニング
・自動混合制度演算
 16ビットと32ビットを使い分けることで、高精度かつ高効率な学習を実現
 計算時に16ビットを使って高速化、32ビットの情報も保持し、16ビットで表現できない場合は適宜32ビットで変換する
データも16ビットで保持できるようアンダーフローしないようにスケールし、パラメータ更新時など実データが必要な場合は32ビットに変換して計算
・勾配累積
 バッチサイズを小さくすれば、前向き計算と誤差逆伝播の計算量が減るのでメモリ使用量を削減できる。
小さなバッチサイズで計算した勾配を集約することで、メモリ使用量を抑えながら実質のバッチサイズを増やす手法
・勾配チェックポインティング
 勾配のバッチサイズを増やしたいが、GPUのメモリが足りない時に役立つ手法
前向き計算における途中の計算結果を間引くことでメモリ消費量を抑える。保持して居る近い計算結果(チェックポイント)から再計算して復元して対応する。
・LoRAチューニング
 ファインチューニング時には、パラメータごとに勾配値などの最適化に必要な情報をメモリ上に保持する必要がある。この時のメモリ消費量を抑えるために、更新するパラメータをごく少数にする。

・5.6 日本語大規模言語モデルの比較
 BERTの他のモデルの紹介
・LUKE
 wikipedieaからえらえるエンティティ情報を取り入れたモデル
 エンコーダ構成のTransformer
・DeBERTa-v2
 BERTのアーキテクチャを改良したもの
 Microsoftの研究チームより提案

●6章:固有表現認識
テキストから特定の人名や地名などの固有表現を抽出する固有表現モデルを作成。
*テキスト上で固有表現ラベルが重複しない場合、重複する場合などで抽出タスクが異なるので注意。
重複するケース例:
愛知県庁>愛知県庁=施設名、愛知県=地名、が単語に重複する。

・6.3固有表現認識モデルの実装
 BERTをベースとする。
固有表現ラベルを分類するためのヘッドを加えたBERTをファインチューニングすることでモデルを作成。

・6.4 アノテーションツールを用いたデータセット構築
 固有表現認識モデルの作成において、適切なデータセットが存在しなければ自前で構築する必要がある。
アノテーションツールを用いて、テキストデータにラベルを付与することで固有表現認識データセットを構築する方法を解説。LabelStudioというツールを使って解説。

●7章:要約生成
 比較的長い文章から重要な内容を含んだ短い要約を生成する
>要約生成モデル

出力形式、入寮文書数、要約の目的に応じてタスクやアプローチが異なる。
出力形式:
・抽出型要約:入力テキストから要約に含めるべき重要な単語や句、文章を抽出
抽出型では、本文で述べられていない事実の異なる内容を含んだり、文意を大きく取り違えることは少ない。
 モデル:BERTSUMExt
・生成型要約:入力テキストをもとに、新しく要約を生成する
 エンコーダ・デコーダ構成の大規模言語モデルで実装
 エンコーダに長いテキストを入力し、デコーダで要約を生成
 欠点:事実を異なる要約を生成しやすい
入力文書数:
 単一文章要約:入力テキストと要約が1対1で対応
 複数文書要約:複数の異なるレビュー集合の要約など
クエリ指向:
 クエリ指向型要約:要約対象の文章と、着目したい情報を入力して要約を生成
 非クエリ指向型要約:クエリを指定しない一般的要約。ニュース記事からの見出し作成

・7.4見出し生成モデルの実装
 T5モデルで実装

●8章:文埋め込み
文字埋め込みモデルの必要性
意味的類似度計算がBERT単体で行えるのであれば、文字埋め込みモデルは不要では?
しかし、BERT単体で意味類似度計算を行うことには、応用上、計算量の問題がある。
FAQ検索を例にすると、FAQとして登録されている1万件の中から最も意味的類似度が高い質問を探す場合、BERTに入力し類似度計算する必要がある。つまり推論を1万回実施する必要がある。
一方、分埋め込みモデルは、一つの文を入力として受け取り、ベクトルを出力として得ることができるので、FAQの1万件の質問に対してあらかじめ文埋め込みのベクトルを計算しておくことが可能。ユーザが入力した分のベクトルと、一万件のあらかじめ計算しておいたベクトル間での類似計算をすればいい。
BERT推論より計算量が少なくて済む。
さらに、最近傍探索ライブラリを用いてインデックス化することで検索を高速化できる。

・8.3文字埋め込みモデル
 モデル:SimCSE
対照学習:
ラベルづけがなされていない大量のデータの中から、互いに類似した事例のペアと異なる事例のペアを取り出し比較することでモデルの学習をする。正例ペアと負例ペアを構成する各事例をベクトルで表現し、正例ペアのベクトルは類似度が高くなるように(=ベクトルを近づける)、負例ペアのベクトルは類似度が低くなるように(=ベクトルを遠ざける)学習を行う。

教師なしSimCSE
 ラベルづけがされていない大量の文の集合を訓練セットとして用いる
 モデルはドロップアウトを有効にして訓練する。

教師ありSimCSE
 ラベル付きデータとして自然言語推論データセットを利用して、埋め込みモデル訓練をする。
 ラベル:含意、中立、矛盾

・8.4.1最近傍探索ライブラリFaiss
 ベクトルの最近傍探索やクラスタリングを行うためのライブラリ。
文字埋め込みのような高次元ベクトルを効率的にインデックス化し、クエリのベクトルに対して類似したベクトルを高速に検索できる。

・8.4.3 類似文検索のウェブアプリ実装
 pythonのStreamlitライブラリ
 HTMLやJavascriptの記述を必要とせず、pythonコードだけでウェブアプリを実装できる。

●9章:質疑応答

質疑応答システムの種類
・オープンブック質問応答
 持ち込み可能試験みたいなもの。質問と与えられた情報源から回答を導き出す
・クローズドブック質問対応
 知識源の知識を参照することなく質問への回答を行う
 大規模言語モデルに知識そのものを保持させる。

ChatGPTを使って実装
文書検索モデルで質問(入力内容)の検索を大量の文章集合から検索し、プロンプトからの解答書式指示に合わせた解答形式の生成にChatGPTを使用する。
*文書検索モデル:BPR

・9.4.2文章検索モデル
・DPR
 質問とパッセージ(一定の長さを持ったテキストのこと)をエンコーダ(BERT)を用いて埋め込みに変換し、それらの内積の値が上位となるパッセージを検索するモデル。
 同じ類似度検索によるSimCSEとはアーキテクチャが異なる。
 デメリット:ベクトルインデックスのメモリコストが大きい
・BPR
 DPRの手法を拡張し、パッセージの埋め込みをバイナリ化して計算することで、ベクトルインデックスのサイズを大幅に小さくし計算効率を向上させた手法

以上。


x postへポスト


  Copyright 2021-2025 REVIEW_SITE ALL RIGHTS RESERVED.
  このサイトについて/お問い合わせ
  プライバシーポリシー
  総合トップページへ