大規模言語モデル入門 の輪読会を開催したので、発表に使った資料を一部修正して公開します。
要約生成とは
長い文章を短くまとめた要約文を生成するタスク。言い換えると。長いシーケンスを短いシーケンスに変換する系列変換タスク。
出力形式と入力文章数に応じたタスクがそれぞれ存在する。
出力形式
名称 | 概要 | 特徴 |
---|---|---|
抽出型要約 | 入力テキストから要約に含めるべき重要な単語や文を抽出するタスク | ・事実と異なる内容や文意を大きく取り違えるなどのエラーが少ない。 ・情報を過度に圧縮した自然な文章を出すのは難しい。 |
生成型要約 | 入力テキストから新しい要約を生成するタスク(こっちが一般的らしい) | ・自然な文章を生成しやすい。 ・事実とは異なる要約を生成しやすい。 |
入力文書数
名称 | 概要 | 事例 |
---|---|---|
単一文書要約 | 1つの文章内容を要約するタスク | ・入力テキストから要約に含めるべき重要な単語や文を抽出するタスク ニュース記事の見出し生成 ・学術論文の要旨生成 |
複数文書要約 | 複数の文章内容を1つに要約するタスク | ・Twitterのツイートからイベント情報の要約 ・特定の商品について書かれた複数の異なるレビュー集合の要約 |
他にも検索エンジンのスニペットを作るなど、特定の情報に着目した要約を生成する「クエリ指向型要約」などがある。
見出し生成モデルの実装
実際のコードについては、公式のレポジトリにまとまっているので割愛。
実装にあたり、実務でのヒントとなりそうな部分を自分なりに整理した。
- 実装するとしても、うまくいくタスクなのかの見極めや手法の選択が重要。
- そもそも記事本文から見出しを生成できるか。
- 見出しに含まれるごくが本文中に現れているか。
- 抽出型要約と生成型要約のどちらのタスクで解くべきか。
テキスト生成における探索アルゴリズム
テキスト生成における探索アルゴリズムが存在する。
- 全探索
- すべてのトークン系列の生成確率を計算し、その中でもっとも確率が高くなるトークン系列を探索する方法。
- 計算量が膨大になるので、基本はあまり行わない(はず)。
- 貪欲法
- 各トークンの生成時点で最も確率の高いトークンを選択する方法
- 各生成時点では最適でも、全体の最適ではないこともあるので注意が必要。
- ビームサーチ
- 各トークンの生成時点で、特定の数だけ候補(ビーム幅)を残しておき、最終的に全体で最も高い確率となるトークン列を選択する方法。
- 貪欲法より「適した」トークン列を探索できるが、「最適な」トークン列を得ることは保証されない。
サンプリングを用いたテキスト生成
確率の高いトークン列を生成することはできるが、全体的に類似したテキストを生成しがちな問題がある。複数パターンから選びたい時は、トークンの生成確率に基づいて、無作為にトークンを選択するサンプリングを行うことで、これを表現できる。
サンプリングによるモデルの制御を行う場合、温度付きソフトマックス関数を使うことで調整ができる。
確率分布のなだらかさを調整するイメージで、これにより解答内容の「適切さ」と「多様さ」のどちらに寄せるかを制御することができる。
また、サンプリングには下記のような方法がある。
- top-kサンプリング
- 確率の高いK個のトークンを候補として抽出し、それらとのトークンに確率を再分配して、トークンをサンプリングする方法
- top-pサンプリング
- 確率の高いトークンから順に累積確率がpを超えるまで、生成する候補の集合にトークンを追加し、この集合に確率を再分配してサンプリングを行います。
長さを調整したテキスト生成
- 最小・最大トークン数を指定して、生成するテキストの長さを調整することも可能。「文字の長さ」ではなく「トークン数」を調整することに注意が必要。
- fixed_model_pipelineのmin_new_tokens, max_new_tokensで調整可能。