---
# System prepended metadata

title: PyData Osaka読書会：機械学習エンジニアのためのTransformers
tags: [読書会]

---

# PyData Osaka読書会：機械学習エンジニアのためのTransformers
###### tags: `読書会`

## **注意**

このメモ書きは公開されています!!
見られると問題がある情報は書きこまないようにお願いします!!

## 全般的な情報

* [サンプルコードのリポジトリ](https://github.com/nlp-with-transformers/notebooks)
  * [`README.md`の和訳](https://hackmd.io/ttIdeuadT4yy4zY9wIrhkw)

## 進め方について
* [connpassの説明](https://pydataosaka.connpass.com/event/273676/)
* 基本はPDFなどは画面共有しない(手元にある前提)
* HackMD, Discordチャット、Discordボイスチャンネルの使い分け
    * HackMDはこのページを毎回使い回します
      * 下の方の項目からキーバインドをvimやemacsに切り替えることもできます
    * カメラのOn/Offは自由、マイクは発言時以外はミュートをお願いします。
    * Discord は デスクトップアプリの利用をおすすめします。特に音声設定面でデスクトップ版の方が優れています。 ![](https://hackmd.io/_uploads/SJYGnGaE3.png)
    * 質疑応答はいつでも気楽に行いましょう！
* コード実行
  * 事前に参加者の誰かは一度は実行しておく

## 2023/5/13

### 流れ

* 冒頭5分で概要説明
  * [pydata osakaについてのスライド](https://docs.google.com/presentation/d/1rjxxqk91ji09stdaOlS9Cf6OPu7v2XUZ13e58FpX1oc/edit#slide=id.g180e360fbd0_0_11)
  * [Webサイト](https://osaka.pydata.org)
* 読書会実施
  * 進行: 大橋

### 自己紹介

* discordの`pydataosaka読書会`のテキストチャンネルにお願いします。

### 読書会メモ

* 今日は序文、訳者前書き、1.1、1.2
* 日本語GitHub https://github.com/oreilly-japan/nlp-with-transformers-ja
* colabで`install_requirements()`に失敗する
  * [このissue](https://github.com/nlp-with-transformers/notebooks/issues/96)で報告あり
  * `!apt install cargo`を冒頭に追記しておく必要有 ![](https://hackmd.io/_uploads/HJON7M6N3.png)
      * cargo というのは rust のパッケージマネージャー
* introductionの範囲ではGPUはT4で実行可能
* GPT-JのJはJaxのこと？
* アテンションとは何なのか？ダイアグラムのどこにアテンションが該当するのか？わからない！ (重要なご意見だと思います！)


### 次回

* 担当 大橋(引き続き)
* 日時
  * 5/20(土) 22:00-23:00
  * conpassでのイベント登録をお願いします
  
### 反省点

* チャットはボイスチャットにも存在している、おそらくボイスチャンネルと生存期間は同じ
  * 元のテキストチャットは消す方向？
* ミュート対策が必要？というか設定によってかなり違うのかも？ Zoom と違って、音をかなり拾う
  * 人によって音量が結構違うが設定が可能
  * 人のミュートOn/Offの通知音も設定で制御できるらしい
* 各章の担当者+日程を先に決めておいた方が良いのではないか？
  * 次回の最後に相談
  * 2章以降は節単位で分けても良いかもしれない
* discord はウェブ版ではなくデスクトップ版を使ってほしい！という旨を伝える
  * 音声性能差がありそう
* DiscordのUser settingsのNotificationでMute/Unmute切り替え時の効果音を消すことができる
  * ラップトップのマイクだとマックスに拾うように設定しても入力レベルが足りないことがある、と思われる。(ThinkPadとかで。)
  * デスクトップ版の入力感度を自動調整する、機能が鍵かも。 ![](https://hackmd.io/_uploads/SJYGnGaE3.png)

## 2023/5/20

### 本日の流れ

* 担当: 大橋
* 冒頭で説明
  * 進め方
  * HackMD、チャット、ボイスチャットの使い分け
  * リポジトリの紹介
    * `!apt install cargo`
* 各自の自己紹介
  * 新規参加者
    * 可能であれば音声で一言紹介をお願いします
  * 前回参加者
    * 可能であればチャット(テキストの方)に自己紹介を記載してください
* 前回の振り返り
* 続きを実施
* 次回以降の日程及び担当の決定(最後10分)
  * [x] 担当の確定
    * 1.6-1-8 shiomitさん
    * 2.0-2.2の終わりまで msさん
    * 2.3- 吉岡さん
  * [x] 日程の決定
    * 5/27(土)
    * 6/3(土)はスキップ
    * 6/10, 17, 24はやる可能性有
  * カレンダー https://osaka.pydata.org/
    * [x] あとでリンクが分かれば貼る
      * 多分Webサイトのカレンダーの右下の+から登録できる?
  * [x] connpassの作成(オーガナイザー)
    * 登録をお願いします

### 本日のメモ

* 1.3 NLPにおける転移学習
  * ボディとヘッドの分割（図1-7）
  * 転移学習はCVで成功していたが、NLPで使えるかは明らかでなかった。
  * 2017〜18年頃にOpenAIの研究で転移学習がNLPで使えるようになった。
  * ULMFiTの3つのステップ：事前学習、ドメイン適応、ファインチューニング
    * ドメイン適応は知りませんでした（ULMFiTも知らなかったです）。
  * 2018年、GPTとBERTが提案された
  * 少し後？にTransformersライブラリのリリース
* 1.4 入門 Hugging Face Transformers
  * 様々なモデルやタスクに対する統一されたインターフェースを提供
  * バックエンドとしてTensorflow、PyTorch、JAXをサポート
* 1.5 Transformer の応用を巡る旅
  * 本節では*パイプライン*を使用
    * `pipeline()`関数を用いて以下のタスクを実行できる
  * 1.5.1 感情分析（テキスト分類）の例
  * 1.5.2 固有表現認識
    * ORG（組織）、LOC（場所）、PER（人）、MISC（その他）
  * 1.5.3 質問応答
    * 質問応答にはいくつかの種類があり7章で詳しく説明
  * 1.5.4 要約
  * 1.5.5 翻訳
  * 1.5.6 テキスト生成
    * 自動補完の例 - 元のテキストにプロンプトを追加した文字列をジェネレータに与えると続きの文章を生成する
  * ファインチューニングの方法は次章で学ぶ

### 反省

* 画面共有を見ながらテキストチャットに移ると画面が小さくなってしまう
  * ボイスチャットのチャット欄の方が聞きながらだと良いかもしれない
    * 画面のポップアウトもできるので移動できる
  * Discordは同じアカウントで別のデバイスから入れない
    
## 2023/5/27

* 担当: shiomitさん、msさん
* 冒頭で説明
  * 進め方
  * HackMD、チャット、ボイスチャットの使い分け
  * リポジトリの紹介
    * `!apt install cargo`
* 各自の自己紹介
* 前回の振り返り
* 続きを実施
* 次回以降の日程及び担当の決定(最後10分)
  * [ ] 担当の確定
  * [ ] 日程の決定
    * カレンダー https://osaka.pydata.org/
        * Webサイトのカレンダーの右下の+から登録できる
  * [ ] connpassの作成(オーガナイザー)

### 5/27のメモ

Colab上でノートブックが実行できない場合、以下の手順を試してください。

1. ノートブックの最初のセルを以下のように書き換えて実行します。
  ```bash
  # Uncomment and run this cell if you're on Colab or Kaggle
  !git clone https://github.com/nlp-with-transformers/notebooks.git
  !apt install git-lfs cargo
  ```
2. Colab上でnotebook/requirements.txtを編集し、中身を[リンク先](https://github.com/taku-y/nlp-with-transformers-notebooks/blob/ch2/requirements.txt)で置き換えます。

3. 先ほどのセルに続いて、以下のセルを実行します。
  ```bash
  %cd notebooks
  from install import *
  install_requirements(is_chapter2=True)
  ```

* 1.6　Hugging Faceのエコシステム
  * 1.6.1　Hugging Face Hub
    * 20,000以上もモデルがある（今はもっとありそう）
  * 1.6.2　Hugging Face Tokenizers
  * 1.6.3　Hugging Face Datasets
    * メモリマッピング
      * ファイル上のデータをメモリにアクセスするように使う仕組み？
      * [この辺り](https://huggingface.co/docs/datasets/about_arrow)をちゃんと読めば良さそう？
        * Arrowの仕組みを理解してない、、、
  * 1.6.4　Hugging Face Accelerate
    * ここはよくわからない、、、
* 1.7　Transformerの主な課題
  * 課題
    * 言語（英語以外）
    * データの可用性（ラベルの量が相対的に少ない）
    * 長い文書（計算量が多くなる、トークン数の二乗か三乗で増えたと思う）
    * 透明性（解釈性の低さ）
    * バイアス（データソース自体が持つバイアスがモデルに影響を与える）
* 1.8　まとめ
* 2章　テキスト分類
  * DistilBERTを使用、BERTと同等の性能でサイズが小さい
  * チェックポイント：モデルの重みの集合
  * 2.1　データセット
    * 6種類の感情が文書にラベリングされている
    * 2.1.1　初めてのHugging Face Datasets
      * "emotion"データセットをロード
      * データセットがApache Arrowで実装されている
        * Arrowはファイル上の大量データを扱うイメージを持っていますが、インメモリのデータ構造としても有用なんでしょうか？
    * 2.1.2　データセットからDataFrameへ
      * データの型（pandas変換後）
    * 2.1.3　クラス分布の確認
      * クラス間のデータ数の不均衡
    * 2.1.4　ツイートの長さはどれくらい？
      * DistilBERTの扱えるトークン数は512
      * 幸い、Emotionsデータセット中の文書の単語数は最大50程度で、多分DistilBERTで扱える
  * 2.2　テキストからトークンへ
    * 2.2.1　文字トークン化
      * トークンをベクトル化する
        * 順序が無いデータに順序を付けてはいけない

## 2023/6/03

* 担当: msさん
* [冒頭説明](https://hackmd.io/0C66iH5bSV6-2ogd0Xkijg#%E9%80%B2%E3%82%81%E6%96%B9%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6)
* 続きを実施
* 次回以降の日程及び担当の決定(最後10分)
  * [x] 担当の確定
  * [x] 日程の決定
    * カレンダー https://osaka.pydata.org/
        * Webサイトのカレンダーの右下の+から登録できる
  * [x] connpassの作成(オーガナイザー)

### 本日のメモ

* 2.2　テキストからトークンへ (msさん)
    * 2.2.2　単語トークン化
    * 2.2.3　サブワードトークン化
    * 2.2.4　データセット全体のトークン化
  * 2.3　テキスト分類器の学習 (吉岡さん)
    * 2.3.1　特徴抽出器としてのTransformer
        * 2.3.1.2 最後の隠れ状態の抽出

### 今後の担当

3.1 msさん
3.2 吉岡さん
4章冒頭　大橋(@wrist) 

## 2023/6/10

* 担当: 吉岡
* [冒頭説明](https://hackmd.io/0C66iH5bSV6-2ogd0Xkijg#%E9%80%B2%E3%82%81%E6%96%B9%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6)
* 続きを実施
* 次回以降の日程及び担当の決定(最後10分)
  * [x] 担当の確定
  * [x] 日程の決定
    * カレンダー https://osaka.pydata.org/
        * Webサイトのカレンダーの右下の+から登録できる
  * [x] connpassの作成(オーガナイザー)

### 本日のメモ

* `emotions_encoded.map`に時間がかかる
  * `extract_hidden_states`の実行で推論を行うのでGPUが必須?

## 2023/6/17

* 担当: 吉岡
* [冒頭説明](https://hackmd.io/0C66iH5bSV6-2ogd0Xkijg#%E9%80%B2%E3%82%81%E6%96%B9%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6)
* 続きを実施
* 次回以降の日程及び担当の決定(最後10分)
  * [x] 担当の確定
  * [x] 日程の決定
    * カレンダー https://osaka.pydata.org/
        * Webサイトのカレンダーの右下の+から登録できる
  * [x] connpassの作成(オーガナイザー)

### 本日のメモ

* 2. テキスト分類
  * 2.3　テキスト分類器の学習 (吉岡さん)
    * 2.3.1　特徴抽出器としてのTransformer
        * 2.3.1.1 事前学習済みモデルの使用
        * 2.3.1.2 最後の隠れ状態の抽出
        * 2.3.1.3 特徴行列の作成
        * 2.3.1.4 学習データセットの可視化
        * 2.3.1.5 単純な分類器の学習

* emotionデータセットのダウンロードに失敗する場合はノートブック上で`!pip install -U datasets`を実行しておく必要がある
  * colabでは実行後に`WARNING: The following packages were previously imported in this runtime:
  [datasets]
You must restart the runtime in order to use newly installed versions.`と出るので一度runtimeを再起動する必要がある
* huggingfaceへのアップロードに失敗する
  * ノートブック上で指定しているリポジトリ`distilbert-base-uncased-finetuned-emotion`を予め空のモデルリポジトリ(private)として作っておく必要がある
* 次回は3章から実施
  * msさんが参加できない場合は大橋が代理発表する
  
## 2023/6/24

* 担当: msさん、吉岡さん
* [冒頭説明](https://hackmd.io/0C66iH5bSV6-2ogd0Xkijg#%E9%80%B2%E3%82%81%E6%96%B9%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6)
* 続きを実施
* 次回以降の日程及び担当の決定(最後10分)
  * [x] 担当の確定
  * [x] 日程の決定
    * カレンダー https://osaka.pydata.org/
        * Webサイトのカレンダーの右下の+から登録できる
  * [x] connpassの作成(オーガナイザー)

### 本日のメモ

* 3. Transformerの詳細
  * 3.1　Transformerのアーキテクチャ
  * 3.2　エンコーダ
    * 3.2.1　セルフアテンション
* 3.2.2.1のP.68の途中まで終了
  * 「クエリ、キー、バリューを理解する」まで説明
* [可視化ライブラリbertviz](https://github.com/jessevig/bertviz)
  * 本文と同じ図にするには一番左側の+を押さないといけない
  * LayerとHeadのプルダウンの値も本文と同じく0と8にしておく必要有
* 表3-1の`torch.nn.bmm()`は間違い、正しくは`torch.bmm()`

## 2023/7/1

* 担当: 吉岡さん
* [冒頭説明](https://hackmd.io/0C66iH5bSV6-2ogd0Xkijg#%E9%80%B2%E3%82%81%E6%96%B9%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6)
* 続きを実施
* 次回以降の日程及び担当の決定(最後10分)
  * [x] 担当の確定
  * [x] 日程の決定
    * カレンダー https://osaka.pydata.org/
        * Webサイトのカレンダーの右下の+から登録できる
  * [ ] connpassの作成(オーガナイザー)

### 本日のメモ

* 3. Transformerの詳細
  * 3.2　エンコーダ
    * 3.2.1　セルフアテンション
      * 3.2.1.1 スケール化ドット積アテンション
        * `nn.Embedding`はここではランダムな重みを用いて埋め込みベクトルに変換する(学習によって適切な重みを獲得する)

## 2023/7/8

* 担当: 吉岡さん
* [冒頭説明](https://hackmd.io/0C66iH5bSV6-2ogd0Xkijg#%E9%80%B2%E3%82%81%E6%96%B9%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6)
* 続きを実施
* 次回以降の日程及び担当の決定(最後10分)
  * [x] 担当の確定
  * [x] 日程の決定
    * カレンダー https://osaka.pydata.org/
        * Webサイトのカレンダーの右下の+から登録できる
  * [ ] connpassの作成(オーガナイザー)

### 本日のメモ

* 3. Transformerの詳細
  * 3.2　エンコーダ
    * 3.2.2　順伝播層
    * 3.2.3　レイヤー正規化の追加
      * トークンの位置に関する情報が失われるとはどういう意味？
        * 内部では内積を計算しているだけなのでトークンの位置を入れ替えても結果は同じになるということ？※4も同じような意味ではないか
    * 3.2.4　位置埋め込み
    * 3.2.5　分類ヘッドの追加
  * 3.3　デコーダ
  
## 2023/7/15
  
* 担当: 3章 吉岡さん,　 4章冒頭: 大橋
* [冒頭説明](https://hackmd.io/0C66iH5bSV6-2ogd0Xkijg#%E9%80%B2%E3%82%81%E6%96%B9%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6)
* 続きを実施
* 次回以降の日程及び担当の決定(最後10分)
  * [x] 担当の確定
  * [x] 日程の決定
    * 7/29(7/22はスキップ)
    * カレンダー https://osaka.pydata.org/
        * Webサイトのカレンダーの右下の+から登録できる
  * [ ] connpassの作成(オーガナイザー)

### 本日のメモ

#### 3章

* 3.4　Transformer系モデルの紹介
  * 3.4.1　Transformerの系統樹
      * 3.4.2　エンコーダ系のモデル
  * 3.4.3　デコーダ系のモデル
    * CTRLトークンはpromptingの走り?
    * https://www.eleuther.ai/
  * 3.4.4　エンコーダ・デコーダ系のモデル
    * Big Bird 
      * https://arxiv.org/pdf/2007.14062.pdf
* 3.5　まとめ

#### 4章

* 4章　多言語の固有表現認識
 * 4.1　データセット
    
## 2023/7/29
  
* 担当: 4章: 大橋
* [冒頭説明](https://hackmd.io/0C66iH5bSV6-2ogd0Xkijg#%E9%80%B2%E3%82%81%E6%96%B9%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6)
* 続きを実施
* 次回以降の日程及び担当の決定(最後10分)
  * [x] 担当の確定
  * [x] 日程の決定
    * 次回8/5
    * 8/12は恐らく休み？8/19も休みの可能性あり
    * カレンダー https://osaka.pydata.org/
        * Webサイトのカレンダーの右下の+から登録できる
  * [x] connpassの作成(オーガナイザー)

### 本日のメモ

#### 4章

* 4章　多言語の固有表現認識
 * 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　カスタムモデルのロード
   
## 2023/8/5
  
* 担当: 4章: 大橋
* [冒頭説明](https://hackmd.io/0C66iH5bSV6-2ogd0Xkijg#%E9%80%B2%E3%82%81%E6%96%B9%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6)
* 続きを実施
* 次回以降の日程及び担当の決定(最後10分)
  * [x] 担当の確定
  * [x] 日程の決定
    * 次回8/19
    * カレンダー https://osaka.pydata.org/
        * Webサイトのカレンダーの右下の+から登録できる
  * [x] connpassの作成(オーガナイザー)

### 本日のメモ

* 4.6　固有表現認識のためのテキストトークン化
  * [seqeval](https://github.com/chakki-works/seqeval)
  * `tokenized_input = xlmr_tokenizer(de_example["tokens"], is_split_into_words=True)`における`is_split_into_words`は入力が既にトークンに分割されていることを知らせるために必要
  * `tokenize_and_align_labels`は`{str: List}`を受け取り`{str: List}`を返す関数であるが、動作としては`tokenized_inputs`に`["labels"]`を追加して返却する
    * 直後の`map`での変換時には`["labels"]`以外のキーは不要となるため`remove_colmuns`で除外している
* 4.7　性能指標
* 4.8　XLM-RoBERTaのファインチューニング
 
## 2023/8/19
  
* 担当: 4章: 大橋
* [冒頭説明](https://hackmd.io/0C66iH5bSV6-2ogd0Xkijg#%E9%80%B2%E3%82%81%E6%96%B9%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6)
* 続きを実施
* 次回以降の日程及び担当の決定(最後10分)
  * [ ] 5章の担当の確定
  * [x] 日程の決定 -> 8/26
    * カレンダー https://osaka.pydata.org/
        * Webサイトのカレンダーの右下の+から登録できる
  * [ ] connpassの作成(オーガナイザー)

### 本日のメモ

* 4.9　エラー分析
  * p.116 pandas.Series.explode()で行を展開することで結果をうまく集計できるようになる
  * p.119 自動アノテーションの誤りが悪い影響を及ぼしている

## 2023/8/26
  
* 担当: 4章: 大橋
* [冒頭説明](https://hackmd.io/0C66iH5bSV6-2ogd0Xkijg#%E9%80%B2%E3%82%81%E6%96%B9%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6)
* 続きを実施
* 次回以降の日程及び担当の決定(最後10分)
  * [x] 5章の担当の確定
  * [x] 日程の決定
    * 9/9
    * カレンダー https://osaka.pydata.org/
        * Webサイトのカレンダーの右下の+から登録できる
  * [x] connpassの作成(オーガナイザー)

### 本日のメモ

* 4.10　言語間転移
  * 4.10.1　ゼロショット転移が有効なのはどんなときか？
  * 4.10.2　複数言語の同時並行的なファインチューニング
* 4.11　モデルウィジェットとのインタラクション
  * モデルのページの右の方にある
* 4.12　まとめ
* セルを最後まで実行するためには下記Hugging face上にモデルリポジトリを作っておく必要がある(privateで良い)
  * `xlm-roberta-base-finetuned-panx-de`
  * `xlm-roberta-base-finetuned-panx-fr`
  * `xlm-roberta-base-finetuned-panx-de-fr`
  * `xlm-roberta-base-finetuned-panx-it`
  * `xlm-roberta-base-finetuned-panx-en`
  * `xlm-roberta-base-finetuned-panx-all`
  
## 2023/9/9
  
* 担当: 5章: 吉岡さん
* [冒頭説明](https://hackmd.io/0C66iH5bSV6-2ogd0Xkijg#%E9%80%B2%E3%82%81%E6%96%B9%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6)
* 続きを実施
* 次回以降の日程及び担当の決定(最後10分)
  * [ ] 日程の決定
    * カレンダー https://osaka.pydata.org/
        * Webサイトのカレンダーの右下の+から登録できる
  * [ ] connpassの作成(オーガナイザー)

### 本日のメモ

[ノートブック (colab) ](https://colab.research.google.com/github/nlp-with-transformers/notebooks/blob/main/05_text-generation.ipynb)

colabのフリープランだと下記画像のセルでメモリが足りなくて必ずクラッシュします。
(添付画像はクラッシュした後なのでシステムRAMが 1.0/12.7GB となってますが、こうなる前にメモリ利用量がぐんと跳ね上がり12.7GBを超えました。)
![](https://hackmd.io/_uploads/rJKEkl902.png)

このノートブックに関しては有料プランが必要そうに思われます。
https://github.com/nlp-with-transformers/notebooks には colab 以外のサービスへのリンクもありますが
(どのサービスも P100 のような GPU をいつでも使えるようにはなっていないので)
colab の有料プランを使うのがよさげに思いました。

* 5章　テキスト生成
 * 5.1　一貫した内容のテキストを生成するための課題
 * 5.2　貪欲法によるデコード
 * 5.3　ビームサーチによるデコード
 * 5.4　サンプリング手法
 * 5.5　Top-kサンプリングとTop-pサンプリング
 * 5.6　どのデコード手法が最適か？
 * 5.7　まとめ
 
## 2023/9/23
  
* 担当
  * 5章: 吉岡さん
  * 6章: 大橋
* [冒頭説明](https://hackmd.io/0C66iH5bSV6-2ogd0Xkijg#%E9%80%B2%E3%82%81%E6%96%B9%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6)
* 続きを実施
* 次回以降の日程及び担当の決定(最後10分)
  * [x] 日程の決定
    * 次回10/7
    * カレンダー https://osaka.pydata.org/
        * Webサイトのカレンダーの右下の+から登録できる
  * [x] connpassの作成(オーガナイザー)
  
### ６章の内容

```
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
```

## 2023/10/14
  
* 担当
  * 6章: 大橋
* [冒頭説明](https://hackmd.io/0C66iH5bSV6-2ogd0Xkijg#%E9%80%B2%E3%82%81%E6%96%B9%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6)
* 続きを実施
* 次回以降の日程及び担当の決定(最後10分)
  * [ ] 日程の決定
    * 次回10/?
    * カレンダー https://osaka.pydata.org/
        * Webサイトのカレンダーの右下の+から登録できる
  * [ ] connpassの作成(オーガナイザー)
  
### ６章の内容

```
6章　要約
    6.4　生成されたテキストの品質を測定する
        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　まとめ
```

### 本日のメモ

* pred = "the the the the the", ref = "the cat is on the mat"の場合
  * Count_clip("the") = 2
    * ~~Count_clip(n-gram): 生成文に含まれるn-gramが参照文に出現する回数~~
  * ~~Count_match("the") = 6?~~
    * ~~Count_match(n-gram): 参照文に含まれるn-gramが生成文に出現する回数~~
    * 結局matchも2ではないのか？
* 読書会中に出た参考文献および記事
  * [脚注7の文献](https://www.microsoft.com/en-us/research/wp-content/uploads/2016/07/was2004.pdf)
  * ROUGEについて書かれたmediumの記事
    * https://medium.com/nlplanet/two-minutes-nlp-learn-the-rouge-metric-by-examples-f179cc285499
    * https://medium.com/@eren9677/text-summarization-387836c9e178
* 元論文を読むと、Count_matchの定義は以下の通り：
  * Count_match(n-gram) is the maximum number of n-grams co-occurring in a candidate summary and a set of reference summaries.
  * なので、pred = "the the the the the", ref = "the cat is on the mat"の場合、Count_match("the") = 2
  * [Mediumの記事](https://medium.com/nlplanet/two-minutes-nlp-learn-the-rouge-metric-by-examples-f179cc285499) の説明とも整合する


---

* https://tt-tsukumochi.com/archives/4403
  * metricとしては4つある
    * ROUGE-1
    	* 「要約システムが作成した要約 (=予測) 」と「人手で書かれた要約 (=正解) 」の1-gram（単語）の共起を評価する。
    * ROUGE-2
      * 「要約システムが作成した要約 (=予測) 」と「人手で書かれた要約 (=正解) 」の2-gramの共起を評価する。
    * ROUGE-L
      * 最長共通部分列（LCS） を評価する。1つの文ごとのスコアを計算し、平均をとる。
    * ROUGE-SUM
      * 最長共通部分列（LCS） を評価する。要約全体に対して計算する。
* colabで下記セルを実行することでそれぞれ表示が可能
```python
import pandas as pd
import numpy as np

rouge_metric = load_metric("rouge")

agg_to_str = lambda x: f"recall: {x[0]:.2}, precision: {x[1]:.2}, fmeasure: {x[2]:.2}"

rouge_metric.add(
    prediction="the the the the the the", reference=["the cat is on the mat"])
results = rouge_metric.compute()
pd.DataFrame.from_dict(results, orient="index").applymap(agg_to_str)
```
        
resultの中身

    {'rouge1': AggregateScore(low=Score(precision=0.3333333333333333, recall=0.3333333333333333, fmeasure=0.3333333333333333), mid=Score(precision=0.3333333333333333, recall=0.3333333333333333, fmeasure=0.3333333333333333), high=Score(precision=0.3333333333333333, recall=0.3333333333333333, fmeasure=0.3333333333333333)),
     'rouge2': AggregateScore(low=Score(precision=0.0, recall=0.0, fmeasure=0.0), mid=Score(precision=0.0, recall=0.0, fmeasure=0.0), high=Score(precision=0.0, recall=0.0, fmeasure=0.0)),
     'rougeL': AggregateScore(low=Score(precision=0.3333333333333333, recall=0.3333333333333333, fmeasure=0.3333333333333333), mid=Score(precision=0.3333333333333333, recall=0.3333333333333333, fmeasure=0.3333333333333333), high=Score(precision=0.3333333333333333, recall=0.3333333333333333, fmeasure=0.3333333333333333)),
     'rougeLsum': AggregateScore(low=Score(precision=0.3333333333333333, recall=0.3333333333333333, fmeasure=0.3333333333333333), mid=Score(precision=0.3333333333333333, recall=0.3333333333333333, fmeasure=0.3333333333333333), high=Score(precision=0.3333333333333333, recall=0.3333333333333333, fmeasure=0.3333333333333333))}
     
blueにおける2つ目の例に対応した結果 
     
```python
import pandas as pd
import numpy as np

rouge_metric = load_metric("rouge")

agg_to_str = lambda x: f"recall: {x[0]:.2}, precision: {x[1]:.2}, fmeasure: {x[2]:.2}"

rouge_metric.add(
    prediction="the cat is on mat", reference=["the cat is on the mat"])
results = rouge_metric.compute()
pd.DataFrame.from_dict(results, orient="index").applymap(agg_to_str)
```

```csvpreview
,low,,,	mid,,,	high
rouge1,	recall: 1.0, precision: 0.83, fmeasure: 0.91,	recall: 1.0, precision: 0.83, fmeasure: 0.91,	recall: 1.0, precision: 0.83, fmeasure: 0.91
rouge2,	recall: 0.75, precision: 0.6, fmeasure: 0.67,	recall: 0.75, precision: 0.6, fmeasure: 0.67,	recall: 0.75, precision: 0.6, fmeasure: 0.67
rougeL,	recall: 1.0, precision: 0.83, fmeasure: 0.91,	recall: 1.0, precision: 0.83, fmeasure: 0.91,	recall: 1.0, precision: 0.83, fmeasure: 0.91
rougeLsum,	recall: 1.0, precision: 0.83, fmeasure: 0.91,	recall: 1.0, precision: 0.83, fmeasure: 0.91,	recall: 1.0, precision: 0.83, fmeasure: 0.91
```

* huggingface/datasetsのrouge実装
  * https://github.com/huggingface/datasets/tree/main/metrics/rouge
  * 上記は https://github.com/google-research/google-research/tree/master/rouge のラッパー
* low/mid/highの違い
  * https://stackoverflow.com/questions/72675260/in-the-rouge-metrics-what-do-the-low-mid-and-high-values-mean
  * `2.5th, 50th and 97.5th percentiles to calculate the values for low, mid and high, respectively (can be controlled with the confidence_interval param)`
  
## 2023/11/4
  
* 担当
  * 6章: 大橋
  * 7章: 吉岡さん
* [冒頭説明](https://hackmd.io/0C66iH5bSV6-2ogd0Xkijg#%E9%80%B2%E3%82%81%E6%96%B9%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6)
* 続きを実施
* 次回以降の日程及び担当の決定(最後10分)
  * [x] 日程の決定
    * 次回11/18
    * カレンダー https://osaka.pydata.org/
        * Webサイトのカレンダーの右下の+から登録できる
  * [ ] connpassの作成(オーガナイザー)
  
### ６章の内容

```
6章　要約
    6.6　要約モデルの学習
        6.6.1　SAMSumでPEGASUSを評価
        6.6.2　PEGASUSのファインチューニング
        6.6.3　対話の要約を生成
    6.7　まとめ
```

## 2023/11/18
  
* 担当
  * 6章: 大橋
  * 7章: 吉岡さん
* [冒頭説明](https://hackmd.io/0C66iH5bSV6-2ogd0Xkijg#%E9%80%B2%E3%82%81%E6%96%B9%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6)
* 続きを実施
* 次回以降の日程及び担当の決定(最後10分)
  * [x] 日程の決定
    * 次回11/25
    * カレンダー https://osaka.pydata.org/
        * Webサイトのカレンダーの右下の+から登録できる
  * [ ] connpassの作成(オーガナイザー)
  
### 7章の内容

7.1.2.3の手前まで実施

```
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　まとめ
```

## 2023/11/25
  
* 担当
  * 7章: 吉岡さん
  * 8章: t-sakai2020jpさん
    * 現在P.197でP.221から8章なので12月末か年始ぐらいから?
* [冒頭説明](https://hackmd.io/0C66iH5bSV6-2ogd0Xkijg#%E9%80%B2%E3%82%81%E6%96%B9%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6)
* 続きを実施
* 次回以降の日程及び担当の決定(最後10分)
  * [x] 日程の決定
    * 12/2
    * カレンダー https://osaka.pydata.org/
        * Webサイトのカレンダーの右下の+から登録できる
  * [ ] connpassの作成(オーガナイザー)
  
### 7章の内容

P.197の鳥アイコンの手前あたりまで終了、次回は7.1.3.3から再開

```
7章　質問応答
    7.1　レビューベースの質問応答システムの構築
        7.1.3　Haystackを用いた質問応答パイプラインの構築
    7.2　質問応答パイプラインの改善
        7.2.1　Retrieverの評価
        7.2.2　Readerの評価
        7.2.3　ドメイン適応
        7.2.4　質問応答パイプライン全体の評価
    7.3　抽出型質問応答の先
    7.4　まとめ
```

### 7章のipynbファイル

* githubから直接飛べるリンクは古いバージョン
* notebookは下記URLをcolabで開かないといけない
  * https://github.com/nlp-with-transformers/notebooks/blob/main/07_question_answering_v2.ipynb
  * colabで開いてからURL末尾にv2を加えても良い
  * https://colab.research.google.com/github/nlp-with-transformers/notebooks/blob/main/07_question_answering_v2.ipynb
* 最初のセルのコメントを外して実行
  * 失敗するがnotebookのcloneが実行される
  * この状態で`requrements-chapter7-v2.txt`を編集 
    * `farm-haystack[all]==1.20.1`
  * 最初のセルの`!git clone https://github.com/nlp-with-transformers/notebooks.git`の行をコメントアウトして実行すると、成功
  * この状態で残りの部分が実行できるようになるが、elasticsearch関連のエラーで結局途中で失敗
  * `!pip install farm-haystack[all]`でfarm-haystackを直接入れた方が良い?

* RAGとReader-Retrieverモデルの関連
  * https://zenn.dev/kun432/scraps/634fbd9adb8da8
* BM25
  * https://mieruca-ai.com/ai/tf-idf_okapi-bm25/
  
## 2023/12/2
  
* 担当
  * 7章: 吉岡さん
  * 8章: t-sakai2020jpさん
    * 現在P.197でP.221から8章なので12月末か年始ぐらいから?
* [冒頭説明](https://hackmd.io/0C66iH5bSV6-2ogd0Xkijg#%E9%80%B2%E3%82%81%E6%96%B9%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6)
* 続きを実施
* 次回以降の日程及び担当の決定(最後10分)
  * [x] 日程の決定
    * 12/9
    * カレンダー https://osaka.pydata.org/
        * Webサイトのカレンダーの右下の+から登録できる
  * [ ] connpassの作成(オーガナイザー)
  
### 7章の内容

P.200末あたりまで終了、次回は7.2.1から再開

```
7章　質問応答
    7.2　質問応答パイプラインの改善
        7.2.1　Retrieverの評価
        7.2.2　Readerの評価
        7.2.3　ドメイン適応
        7.2.4　質問応答パイプライン全体の評価
    7.3　抽出型質問応答の先
    7.4　まとめ
```

### 7章のipynbファイル

* notebook実行のために前回の内容に加えて下記をrequirements_v2.txtに記載した
  * farm-haystack[colab,faiss,elasticsearch,metrics]==1.17.2
* 上記実行により`eval_df[eval_df["query"] == "How do you like the lens?"][["query", "filters", "rank", "content", "gold_document_contents", "document_id", "gold_document_ids", "gold_id_match"]]`のセルでKeyErrorが発生するが、key指定を外せばとりあえず実行はできた
  * `eval_df[eval_df["query"] == "How do you like the lens?"]`
* しかし`reader.train(data_dir=".", use_gpu=True, n_epochs=1, batch_size=16, train_filename=train_filename, dev_filename=dev_filename)`のセルで再度エラーが発生
* この最後の記述がよく理解できなくて追試ができていない状況です。（原田）2023120918:00

## 2023/12/9
  
* 担当
  * 7章: 吉岡さん
  * 8章: t-sakai2020jpさん
    * 現在P.197でP.221から8章なので12月末か年始ぐらいから?
* [冒頭説明](https://hackmd.io/0C66iH5bSV6-2ogd0Xkijg#%E9%80%B2%E3%82%81%E6%96%B9%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6)
* 続きを実施
* 次回以降の日程及び担当の決定(最後10分)
  * [x] 日程の決定
    * 12/16
    * 12/23, 30はスキップ？ -> 1/6再開?
    * カレンダー https://osaka.pydata.org/
        * Webサイトのカレンダーの右下の+から登録できる
  * [ ] connpassの作成(オーガナイザー)
  
### 7章の内容

P.214の7.2.4の手前まで実施済み、次回は7.2.4から実施予定かつ8章に入る可能性あり?

```
7章　質問応答
    7.2　質問応答パイプラインの改善
        7.2.1　Retrieverの評価
        7.2.2　Readerの評価
        7.2.3　ドメイン適応
        7.2.4　質問応答パイプライン全体の評価
    7.3　抽出型質問応答の先
    7.4　まとめ
```

### 7章のipynbファイル

* (前回のメモ忘れ)Evaluating the Retrieverあたりのコードはv1とv2のノートブックで違っている(更新されている)が、読書会ではv1(本と同じコード)を見ながら実施している
* `self.eval_retriever = EvalDocuments()`の右辺はHayStack(v0.9)であるが、最新はv1.2.2ぐらいなのでドキュメントが残っていない
  * https://github.com/deepset-ai/haystack/pull/4194 で削除されている
  
```
class EvalDocuments(BaseComponent):
    """
    This is a pipeline node that should be placed after a node that returns a List of Document, e.g., Retriever or
    Ranker, in order to assess its performance. Performance metrics are stored in this class and updated as each
    sample passes through it. To view the results of the evaluation, call EvalDocuments.print(). Note that results
    from this Node may differ from that when calling Retriever.eval() since that is a closed domain evaluation. Have
    a look at our evaluation tutorial for more info about open vs closed domain eval (
    https://haystack.deepset.ai/tutorials/evaluation).
    EvalDocuments node is deprecated and will be removed in a future version.
    Please use pipeline.eval() instead.
    """
```

* P.209の日本語が怪しい
  * 表7-2が存在しない?
  
 昨日12/09は担当ご苦労様でした。７章の実行はrequirementをアップして最初のセルをコメント＃を外したり次は＃を入れて実行しましたがエラーを起こしました。この章の実行は諦め本の理解に重点を置く方針に決めました。harada
 
## 2023/12/16
  
* 担当
  * 7章: 吉岡さん
  * 8章: t-sakai2020jpさん
* [冒頭説明](https://hackmd.io/0C66iH5bSV6-2ogd0Xkijg#%E9%80%B2%E3%82%81%E6%96%B9%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6)
* 続きを実施
* 次回以降の日程及び担当の決定(最後10分)
  * [x] 日程の決定
    * 1/6再開
    * カレンダー https://osaka.pydata.org/
        * Webサイトのカレンダーの右下の+から登録できる
  * [x] connpassの作成(オーガナイザー)
  
### 7章の内容

7章は完了

### 8章の内容

8.1の手前まで完了、次回は8.1の「意図検出を事例として」から再開

```
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　まとめ
```

## 2024/1/6
  
* 担当
  * 8章: t-sakai2020jpさん
* [冒頭説明](https://hackmd.io/0C66iH5bSV6-2ogd0Xkijg#%E9%80%B2%E3%82%81%E6%96%B9%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6)
* 続きを実施
* 次回以降の日程及び担当の決定(最後10分)
  * [x] 日程の決定
    * 1/13(土) 22:00-23:00
    * カレンダー https://osaka.pydata.org/
        * Webサイトのカレンダーの右下の+から登録できる
  * [x] connpassの作成(オーガナイザー)
  
### 8章の内容

8.3の手前まで完了、次回は8.3の「8.3　知識蒸留でモデルを小さくする」から再開

```
8章　Transformersの高速化
    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　まとめ
```

## 2024/1/13
  
* 担当
  * 8章: t-sakai2020jpさん
* [冒頭説明](https://hackmd.io/0C66iH5bSV6-2ogd0Xkijg#%E9%80%B2%E3%82%81%E6%96%B9%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6)
* 続きを実施
* 次回以降の日程及び担当の決定(最後10分)
  * [x] 日程の決定
    * 1/20(土)
    * カレンダー https://osaka.pydata.org/
        * Webサイトのカレンダーの右下の+から登録できる
  * [x] connpassの作成(オーガナイザー)
  
### 8章の内容

* 温度パラメータT付のsoftmaxの勾配の導出
  * https://math.stackexchange.com/questions/3789676/derivative-of-softmax-loss-function-with-temperature-t
* 8.3.4の途中まで終了、次回はP.237から再開

```
8章　Transformersの高速化
    8.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　まとめ
```

## 2024/1/20
  
* 担当
  * 8章: t-sakai2020jpさん
* [冒頭説明](https://hackmd.io/0C66iH5bSV6-2ogd0Xkijg#%E9%80%B2%E3%82%81%E6%96%B9%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6)
* 続きを実施
* 次回以降の日程及び担当の決定(最後10分)
  * [x] 日程の決定
    * 2/3(土)
    * カレンダー https://osaka.pydata.org/
        * Webサイトのカレンダーの右下の+から登録できる
  * [x] connpassの作成(オーガナイザー)
  
### 8章の内容

* Hugging Faceにあらかじめmodelリポジトリを作っておく必要がある
  * distilbert-base-uncased-finetuned-clinc
  * distilbert-base-uncased-distilled-clinc
* バナナ関数
  * https://jp.mathworks.com/help/optim/ug/banana-function-minimization.html
  
* P.246まで完了、次回は8.4の途中のP.247から再開

```
8章　Transformersの高速化
    8.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　まとめ
```

## 2024/2/3
  
* 担当
  * 8章: t-sakai2020jpさん
  * 9章: msさん?
* [冒頭説明](https://hackmd.io/0C66iH5bSV6-2ogd0Xkijg#%E9%80%B2%E3%82%81%E6%96%B9%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6)
* 続きを実施
* 次回以降の日程及び担当の決定(最後10分)
  * [x] 日程の決定
    * 2/10(土)
    * カレンダー https://osaka.pydata.org/
        * Webサイトのカレンダーの右下の+から登録できる
  * [x] connpassの作成(オーガナイザー)
  
### 8章の内容

* PyTorchの量子化
  * https://pytorch.org/blog/introduction-to-quantization-on-pytorch/
  * https://pytorch.org/docs/stable/quantization.html
* 最近は全結合層以外も量子化されつつある
  * softmax関数で量子化をどう扱うかについては最近色々な研究がある
* https://lab.mo-t.com/blog/quantization-frameworks
* 量子化でaccuracyが向上する理由は不明 
* P.256の途中まで終了、次回はここから再開

```
8章　Transformersの高速化
    8.6　ONNXとONNX Runtimeを使った推論の最適化
    8.7　重みの枝刈りでモデルをよりスパースにする
        8.7.1　ディープニューラルネットワークにおけるスパース性
        8.7.2　重み枝刈りの手法
    8.8　まとめ
```
## 2024/2/10
  
* 担当
  * 9章: msさん
* [冒頭説明](https://hackmd.io/0C66iH5bSV6-2ogd0Xkijg#%E9%80%B2%E3%82%81%E6%96%B9%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6)
* 続きを実施
* 次回以降の日程及び担当の決定(最後10分)
  * [x] 日程の決定
    * 2/17(土)
    * カレンダー https://osaka.pydata.org/
        * Webサイトのカレンダーの右下の+から登録できる
  * [ ] connpassの作成(オーガナイザー)
  
### 9章の内容

* notebookのconvert関数実行時のエラー
  * https://github.com/huggingface/transformers/issues/4906
  * 以下の2つの引数を消したら通ったという情報
    * `TypeError: export() got an unexpected keyword argument 'use_external_data_format'`
    * `TypeError: export() got an unexpected keyword argument 'enable_onnx_checker'`
* 次回は9.1から再開 

## 2024/2/17
  
* 担当
  * 9章: msさん
* [冒頭説明](https://hackmd.io/0C66iH5bSV6-2ogd0Xkijg#%E9%80%B2%E3%82%81%E6%96%B9%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6)
* 続きを実施
* 次回以降の日程及び担当の決定(最後10分)
  * [x] 日程の決定
    * 2/24
    * カレンダー https://osaka.pydata.org/
        * Webサイトのカレンダーの右下の+から登録できる
  * [x] connpassの作成(オーガナイザー)
  
### 9章の内容

* pandasのexplode関数
  * https://analytics-note.xyz/programming/pandas-dataframe-explode/
  * 各行の値がリストとなっている場合、それらの値を別の行として展開する関数
* [scikit-multilearn](http://scikit.ml/)
  * `iterative_train_test_split`関数
    * 均衡したラベルを得るためにデータセットを繰り返し分割して学習/評価データセットを作成することができる関数
    * http://scikit.ml/stratification.html
  * `BinaryRelevanceクラス`
    * scikit-learnのclassifierを与えると2値分類器をマルチラベル分類器として使えるようにしてくれる模様
    * http://scikit.ml/api/skmultilearn.problem_transform.br.html

* 本日9.2まで終了、次回は9.3ラベルのないデータへの対処方法から再開

## 2024/2/24
  
* 担当
  * 9章: msさん
* [冒頭説明](https://hackmd.io/0C66iH5bSV6-2ogd0Xkijg#%E9%80%B2%E3%82%81%E6%96%B9%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6)
* 続きを実施
* 次回以降の日程及び担当の決定(最後10分)
  * [x] 日程の決定
    * msさんの連絡待ち
    * カレンダー https://osaka.pydata.org/
        * Webサイトのカレンダーの右下の+から登録できる
  * [x] connpassの作成(オーガナイザー)
  
### 9章の内容

* [langsmith](https://docs.smith.langchain.com/)
* P.286の例文は比較なので文意が変わってしまうが、受動態に直すなどであれば単語の主語と目的語を入れ替えても良いのではないか？
* 自然言語処理のデータ拡張のためにはNlpAug, TextAttackなどのライブラリが存在
* P.294の真ん中のk=15, m=5まで読んだので次回はここから再開

## 2024/3/2
  
* 担当
  * 9章: msさん
  * 10章: 大橋だが状況に応じて他の方にも担当いただくかもしれない
* [冒頭説明](https://hackmd.io/0C66iH5bSV6-2ogd0Xkijg#%E9%80%B2%E3%82%81%E6%96%B9%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6)
* 続きを実施
* 次回以降の日程及び担当の決定(最後10分)
  * [x] 日程の決定
    * 3/9
    * カレンダー https://osaka.pydata.org/
        * Webサイトのカレンダーの右下の+から登録できる
  * [ ] connpassの作成(オーガナイザー)
  
### 9章の内容

* FAISSではベクトル量子化を利用している模様
  * https://ja.wikipedia.org/wiki/%E3%83%99%E3%82%AF%E3%83%88%E3%83%AB%E9%87%8F%E5%AD%90%E5%8C%96
  * https://ocw.u-tokyo.ac.jp/lecture_files/engin_01/4/notes/ja/D3-VectorQuantization.pdf
* [ADAPET](https://github.com/rrmenon10/ADAPET)

## 2024/3/9

* 担当
  * 10章: 大橋
* [冒頭説明](https://hackmd.io/0C66iH5bSV6-2ogd0Xkijg#%E9%80%B2%E3%82%81%E6%96%B9%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6)
* 続きを実施
* 次回以降の日程及び担当の決定(最後10分)
  * [x] 日程の決定
    * 3/16
    * カレンダー https://osaka.pydata.org/
        * Webサイトのカレンダーの右下の+から登録できる
  * [x] connpassの作成(オーガナイザー)
  
### 10章の内容

* [codeparrotのデータセット](https://huggingface.co/datasets/transformersbook/codeparrot)
* colabのコード実行
  * `tokenizer.convert_tokens_to_string(t)`ではなく`tokenizer.convert_tokens_to_string([t])`としてリストとして渡す必要がある
    * `print([f'{tokenizer.convert_tokens_to_string(t)}' for t, _ in tokens[257:280]]);`などの箇所
* [Apache Arrowを使っているHuggingfaceの説明記事](https://huggingface.co/docs/datasets/v2.3.2/en/about_arrow)
* 今回は10.1まで完了、次回は10.2トークナイザーの構築から再開

## 2024/3/16

* 担当
  * 10章: 大橋
* [冒頭説明](https://hackmd.io/0C66iH5bSV6-2ogd0Xkijg#%E9%80%B2%E3%82%81%E6%96%B9%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6)
* 続きを実施
* 次回以降の日程及び担当の決定(最後10分)
  * [x] 日程の決定
    * 3/30
    * カレンダー https://osaka.pydata.org/
        * Webサイトのカレンダーの右下の+から登録できる
  * [ ] connpassの作成(オーガナイザー)
  
### 10章の内容

* 今回は10.2.3まで完了、次回は10.2.4のトークナイザーの学習から再開

## 2024/3/30

* 担当
  * 10章: 大橋
* [冒頭説明](https://hackmd.io/0C66iH5bSV6-2ogd0Xkijg#%E9%80%B2%E3%82%81%E6%96%B9%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6)
* 続きを実施
* 次回以降の日程及び担当の決定(最後10分)
  * [x] 日程の決定
    * 4/6(土)
    * カレンダー https://osaka.pydata.org/
        * Webサイトのカレンダーの右下の+から登録できる
  * [x] connpassの作成(オーガナイザー)
  
### 10章の内容

* hugging faceへのログインはコマンドラインで実施している前提でコードを実行している
* 今回は10.3.1.3まで完了、次回は10.3.2のモデルの初期化から再開

## 2024/4/6

* 担当
  * 10章: 大橋
* [冒頭説明](https://hackmd.io/0C66iH5bSV6-2ogd0Xkijg#%E9%80%B2%E3%82%81%E6%96%B9%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6)
* 続きを実施
* 次回以降の日程及び担当の決定(最後10分)
  * [x] 日程の決定
    * 4/13
    * カレンダー https://osaka.pydata.org/
        * Webサイトのカレンダーの右下の+から登録できる
  * [x] connpassの作成(オーガナイザー)
  
### 10章の内容

* 10.3.2のモデルの初期化から再開
* P.347の下から二段落目から次回は再開
* 次回11章の担当を決めたい

## 2024/4/13

* 担当
  * 10章: 大橋
  * 11章の担当を決めたい
    * P.359-386
    * msさん
* [冒頭説明](https://hackmd.io/0C66iH5bSV6-2ogd0Xkijg#%E9%80%B2%E3%82%81%E6%96%B9%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6)
* 続きを実施
* 次回以降の日程及び担当の決定(最後10分)
  * [x] 日程の決定
    * 4/20(土)
    * カレンダー https://osaka.pydata.org/
        * Webサイトのカレンダーの右下の+から登録できる
  * [ ] connpassの作成(オーガナイザー)
  
### 10章の内容

* P.347の下から二段落目から再開

## 2024/4/20

* 担当
  * 11章: msさん
* [冒頭説明](https://hackmd.io/0C66iH5bSV6-2ogd0Xkijg#%E9%80%B2%E3%82%81%E6%96%B9%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6)
* 続きを実施
* 次回以降の日程及び担当の決定(最後10分)
  * [x] 日程の決定
    * 4/27(土)
    * カレンダー https://osaka.pydata.org/
        * Webサイトのカレンダーの右下の+から登録できる
  * [x] connpassの作成(オーガナイザー)
  
### 11章の内容

* P.369の11.2の手前まで終了
* 参考リンク
  * [30分で完全理解するTransformerの世界](https://zenn.dev/zenkigen_tech/articles/2023-01-shimizu)
  * 共通で大規模モデルを作る試み
    * https://bigscience.huggingface.co/ * https://speakerdeck.com/kanbayashi1125/yin-sheng-chu-li-turukitutoespnetnoxian-zai-towei-lai
  * scaling-law関連
    * [元論文](https://arxiv.org/pdf/2010.14701.pdf)
    * compute budgetにおけるPF-dayの定義
      * https://analyticsindiamag.com/forget-chatgpt-vs-bard-the-real-battle-is-gpus-vs-tpus/
      * https://www.reddit.com/r/MachineLearning/comments/tu8szc/d_petaflops_as_a_unit_of_measure_in_machine/ 
      
```
PetaFLOP/s-days is a unit for amount of communication. 
It's the total number of compute operations 
if you had a computer with throughput 1 PetaFLOP/s working on a problem 
for a full day (so it would be 10^15 FLOP/s * 3600 s/hr * 24 hr/day.
PetaFLOP/day is a unit of throughput.
```
