機械学習エンジニアのためのTransformers

―最先端の自然言語処理ライブラリによるモデル開発

[cover photo]
TOPICS
Programming
発行年月日
PRINT LENGTH
424
ISBN
978-4-87311-995-3
原書
Natural Language Processing with Transformers
FORMAT
Print PDF EPUB
Ebook
4,400円
Ebookを購入する
Print
4,400円

「Hugging Face Transformers」を使った自然言語処理の解説書。2017年の登場以来、Transformerと呼ばれるアーキテクチャを使った大規模なモデルが急速に普及しています。本書では、Hugging Faceの開発者らが、「Hugging Face Transformers」を使って、これらの大規模モデルを学習しスケールする方法をわかりやすく紹介します。テキスト分類、固有表現認識、テキスト生成、要約、質問応答といったタスクだけでなく、蒸留、量子化、枝刈り、ONNX Runtimeといったモデルの高速化技術、ラベル付きデータが少ないときに使えるゼロショット学習や少数事例学習、その他、多言語転移やドメイン適応といった類書では扱っていない技術についても解説しています。

関連ファイル

目次

賞賛の声
序文
訳者まえがき
まえがき

1章 入門Transformers
    1.1 エンコーダ・デコーダのフレームワーク
    1.2 アテンション機構
    1.3 NLPにおける転移学習
    1.4 入門Hugging Face Transformers
    1.5 Transformerの応用を巡る旅
        1.5.1 テキスト分類
        1.5.2 固有表現認識
        1.5.3 質問応答
        1.5.4 要約
        1.5.5 翻訳
        1.5.6 テキスト生成
    1.6 Hugging Faceのエコシステム
        1.6.1 Hugging Face Hub
        1.6.2 Hugging Face Tokenizers
        1.6.3 Hugging Face Datasets
        1.6.4 Hugging Face Accelerate
    1.7 Transformerの主な課題
    1.8 まとめ

2章 テキスト分類
    2.1 データセット
        2.1.1 初めてのHugging Face Datasets
        2.1.2 データセットからDataFrameへ
        2.1.3 クラス分布の確認
        2.1.4 ツイートの長さはどれくらい?
    2.2 テキストからトークンへ
        2.2.1 文字トークン化
        2.2.2 単語トークン化
        2.2.3 サブワードトークン化
        2.2.4 データセット全体のトークン化
    2.3 テキスト分類器の学習
        2.3.1 特徴抽出器としてのTransformer
        2.3.2 Transformerのファインチューニング
    2.4 まとめ

3章 Transformerの詳細
    3.1 Transformerのアーキテクチャ
    3.2 エンコーダ
        3.2.1 セルフアテンション
        3.2.2 順伝播層
        3.2.3 レイヤー正規化の追加
        3.2.4 位置埋め込み
        3.2.5 分類ヘッドの追加
    3.3 デコーダ
    3.4 Transformer系モデルの紹介
        3.4.1 Transformerの系統樹
        3.4.2 エンコーダ系のモデル
        3.4.3 デコーダ系のモデル
        3.4.4 エンコーダ・デコーダ系のモデル
    3.5 まとめ

4章 多言語の固有表現認識
    4.1 データセット
    4.2 多言語Transformer
    4.3 トークン化の詳細
        4.3.1 トークナイザーのパイプライン
        4.3.2 SentencePieceトークナイザー
    4.4 固有表現認識用のTransformer
    4.5 Transformerモデルクラスの詳細
        4.5.1 ボディとヘッド
        4.5.2 トークン分類のためのカスタムモデルの作成
        4.5.3 カスタムモデルのロード
    4.6 固有表現認識のためのテキストトークン化
    4.7 性能指標
    4.8 XLM-RoBERTaのファインチューニング
    4.9 エラー分析
    4.10 言語間転移
        4.10.1 ゼロショット転移が有効なのはどんなときか?
        4.10.2 複数言語の同時並行的なファインチューニング
    4.11 モデルウィジェットとのインタラクション
    4.12 まとめ

5章 テキスト生成
    5.1 一貫した内容のテキストを生成するための課題
    5.2 貪欲法によるデコード
    5.3 ビームサーチによるデコード
    5.4 サンプリング手法
    5.5 Top-kサンプリングとTop-pサンプリング
    5.6 どのデコード手法が最適か?
    5.7 まとめ

6章 要約
    6.1 CNN/DailyMailデータセット
    6.2 要約のパイプライン
        6.2.1 要約のベースライン
        6.2.2 GPT-2
        6.2.3 T5
        6.2.4 BART
        6.2.5 PEGASUS
    6.3 要約の比較
    6.4 生成されたテキストの品質を測定する
        6.4.1 BLEU
        6.4.2 ROUGE
    6.5 CNN/DailyMailデータセットでPEGASUSを評価
    6.6 要約モデルの学習
        6.6.1 SAMSumでPEGASUSを評価
        6.6.2 PEGASUSのファインチューニング
        6.6.3 対話の要約を生成
    6.7 まとめ

7章 質問応答
    7.1 レビューベースの質問応答システムの構築
        7.1.1 データセット
        7.1.2 テキストから回答を抽出する
        7.1.3 Haystackを用いた質問応答パイプラインの構築
    7.2 質問応答パイプラインの改善
        7.2.1 Retrieverの評価
        7.2.2 Readerの評価
        7.2.3 ドメイン適応
        7.2.4 質問応答パイプライン全体の評価
    7.3 抽出型質問応答の先
    7.4 まとめ

8章 Transformersの高速化
    8.1 意図検出を事例として
    8.2 性能ベンチマークの作成
    8.3 知識蒸留でモデルを小さくする
        8.3.1 ファインチューニングのための知識蒸留
        8.3.2 事前学習のための知識蒸留
        8.3.3 知識蒸留用のトレーナーの作成
        8.3.4 良い生徒モデルの選択
        8.3.5 Optunaによる良いハイパーパラメータの探索
        8.3.6 蒸留されたモデルのベンチマーク
    8.4 量子化によるモデルの高速化
    8.5 量子化モデルのベンチマーク
    8.6 ONNXとONNX Runtimeを使った推論の最適化
    8.7 重みの枝刈りでモデルをよりスパースにする
        8.7.1 ディープニューラルネットワークにおけるスパース性
        8.7.2 重み枝刈りの手法
    8.8 まとめ

9章 ラベルのないまたは少ない状況への対応方法
    9.1 GitHub Issueタガーの構築
        9.1.1 データの取得
        9.1.2 データの準備
        9.1.3 学習データセットの作成
        9.1.4 学習スライスの作成
    9.2 ナイーブベイズによるベースラインの実装
    9.3 ラベルのないデータへの対処方法
    9.4 ラベルの少ないデータへの対処方法
        9.4.1 データ拡張
        9.4.2 埋め込みをルックアップテーブルとして使用する場合
        9.4.3 通常のTransformerのファインチューニング
        9.4.4 プロンプトを使ったインコンテキスト学習と少数事例学習
    9.5 ラベルなしデータの活用
        9.5.1 言語モデルのファインチューニング
        9.5.2 分類器のファインチューニング
        9.5.3 高度な手法
    9.6 まとめ

10章 Transformerをゼロから学習する
    10.1 大規模データセットとその入手先
        10.1.1 大規模コーパスを構築する際の課題
        10.1.2 コードデータセットの自作
        10.1.3 大規模データセットの扱い方
        10.1.4 Hugging Face Hubへのデータセットの追加
    10.2 トークナイザーの構築
        10.2.1 トークナイザーモデル
        10.2.2 トークナイザーの性能測定
        10.2.3 Python用のトークナイザー
        10.2.4 トークナイザーの学習
        10.2.5 Hubにカスタムトークナイザーを保存する
    10.3 ゼロから始めるモデルの学習
        10.3.1 事前学習の目的の話
        10.3.2 モデルの初期化
        10.3.3 データローダーの実装
        10.3.4 学習ループの定義
        10.3.5 学習の実行
    10.4 結果と分析
    10.5 まとめ

11章 Transformerの未来
    11.1 Transformerのスケーリング
        11.1.1 スケーリング則
        11.1.2 スケーリングへの挑戦
        11.1.3 アテンションプリーズ!
        11.1.4 スパースアテンション
        11.1.5 アテンションの線形化
    11.2 テキスト以外への適用
        11.2.1 画像
        11.2.2 テーブル
    11.3 マルチモーダルTransformer
        11.3.1 音声認識
        11.3.2 画像とテキスト
    11.4 この先の学び方

索引

コラム目次
    自分のデータセットがHubにない場合は?
    フレームワーク間の相互運用性
    Kerasを使ったファインチューニング
    クエリ、キー、バリューを理解する
    エンコーダ・デコーダアテンションの謎を解く
    スタンフォード質問応答データセット(SQuAD)
    浮動小数点数と固定小数点数についての入門
    FAISSによる効率的な類似度検索
    ノイズを除去するかしないか?