May the Neural Networks be with you

ニューラルネットワークと共にあらんことを

2020年の振り返り

こんにちは。@shunk031 です。クリスマスにニューラルネットワーク "力" をお願いしましたが、何も貰えませんでした。 サンタさんは Hinton 先生ではないみたいです。 毎年同じお願いをしている気がします。 2020 年をツイートベースで振り返ります。

f:id:shunk031:20210102232416j:plain
京都タワーに登ったときの写真。地上から見たら高いように見えたのですが、登ってみたらそんなに高くなかった。Pixel 5 の夜景モードすごい。

各月の活動

1 月

年始は自分の今のマインドを簡単に確認すべく 16personalities をやりました。 16personalities は常に同じ結果を示すとは限らず、その時の自分のマインドが反映されると考えています。

小倉唯ライブ

今後オフラインで密の空間でオタクができなくなるとはこのときには思いもしませんでした。

言語処理学会全国大会 論文投稿

自分が筆頭の論文と後輩 x 2, 留学生x2 の共著として計 4 本論文を投稿しました。

日刊工業新聞 取材

初めて新聞の取材を受けました。

2 月

幼馴染な新婚夫妻と旅行

なぜ...? でも楽しかったです。

KDD2020 論文投稿

フルリモート勤務機運

法政大 博士課程 入学試験・合格通

学内の推薦を使って秋季の博士課程入学試験を受けました *1。 推薦のおかげで面接のみで、いつもお世話になっていた先生方の前で 15 分ほど自分のこれまでやってきた研究と今後について話しました。 先生方に非常にウケがよく(すくなくとも自分はそう感じ、とてもやりやすかったです)、ほどなくして合格をいただきました。

修論 執筆・発表

3 月

人工知能学会全国大会 論文投稿

ACL2020 SRW 論文投稿

情報処理学会 2020 参加

言語処理学会 2020 発表

学位授与式

4 月

個人ページ新調

大学に入れなくなる

ACL2020 結果通知

不採択通知をいただきました。

We are sorry to inform you that the following submission was not selected by the program committee to appear at ACL 2020: XXXX. The selection process was very competitive. Our selection process was not based solely on the reviewers' assessment and scores, but also on discussions among reviewers, careful assessment by Area Chairs and Senior Area Chairs, and our goal to assemble a diverse, interesting and high-quality program. We have enclosed the reviewer comments for your perusal.

ACL2020 SRW 結果通知

採択通知と不採択通知をいただきました。

採択通知:

On behalf of the ACL SRW 2020 Program Committee, we are delighted to inform you that the following submission has been accepted to appear at the workshop: XXXX. The Program Committee worked very hard to thoroughly review all the submitted papers. The reviews are attached below. Please follow the suggestions included in the reviews when you revise your paper.

不採択通知:

I am sorry to inform you that the following submission was not selected by the program committee to appear at ACL SRW 2020: XXXX. The selection process was very competitive. Due to time and space limitations, we could only choose a small number of the submitted papers to appear on the program.

このときに採択された論文とその概要です。

arxiv.org

博士課程スタート

学生生活初めてのオンライン講義がスタートしました。

5 月

研究室運動会 (canceled)

例年は 5 月に研究室所属メンバー全員で小金井公園にて運動会をやっていましたが、今年はキャンセルになりました。 http://iyatomi-lab.info/% E3%83%9F% E3%83%8B% E3%83%96% E3%83% AD% E3%82% B0/2019-5-22-0iyatomi-lab.info

小倉唯ライブ (canceled)

TACHIKAWA STAGE GARDEN 2 講演、ロームシアター京都 メインホール 2 講演、愛知一宮市民会館 1 講演に参戦予定でしたがキャンセルになりました。

KDD2020 結果通知

不採択通知をいただきました。

We are sorry to inform you that your submission, XXXX: YYYY, has not been accepted to KDD 2020.

6 月

人工知能学会 2020 オンライン

小倉唯ライブ (canceled)

東京ガーデンシアター 1 講演に参戦予定でしたがキャンセルになりました。

AACL2020 論文投稿

論文を投稿しました。

7 月

ACL2020 参加

オンラインでした。

ACL2020 SRW 発表

オンラインでポスター発表をしました。

東京女子医大 訪問

指導教員の先生の指導教員の先生が python まわりで困っているとのことでお手伝いに行きました。 結局優秀な後輩ががんばってくれたので僕は特に何もせずに見ているのみでした。

オンライン研究室紹介 撮影

そして公開された研究室紹介はこちら。

8 月

論文投稿→勉強会発表→金沢旅行を 10 時間以内にやる過密スケジュールがありました。

WSDM2021 論文投稿

投稿しました。

ACL2020 オンライン LT 会

発表しました。

shunk031.hatenablog.com

GoTo 金沢

1 週間ほど金沢にいました。

9 月

ACL2020 オンライン読み会

発表しました。

shunk031.hatenablog.com

AACL2020 結果通知

不採択通知をいただきました。

We are sorry to inform you that the following submission was not selected by the program committee of AACL-IJCNLP 2020: XXXX. The selection process was very competitive. Our selection process was not based solely on the reviewers' assessment and scores, but also on discussions among reviewers, careful assessment by Area Chairs, and our goal to assemble a diverse, interesting and high-quality program.

AACL2020 SRW 論文投稿

AACL2020 の論文を元に SRW へ投稿をしました。

IEEE/ACM TASLP 論文投稿

投稿しました。

10 月

GTC Japan TA

WSDM2021 結果通知

不採択通知をいただきました。

Thank you for submitting your work to WSDM 2021. We regret to inform you that your submission below was not selected for the WSDM 2021 conference: XXXX. This year we received 603 submissions. We were able to accept only 112 of these, representing an acceptance rate of 18.6%. Due to the limited number of available slots in the conference schedule, we unfortunately had to make very difficult decisions and decline many submissions. The program committee worked very hard to thoroughly review all the submitted papers, and to provide suggestions to improve your paper. All papers were reviewed by at least three program committee members, and by at least one senior PC member to oversee discussion amongst the reviewers and provide an overall recommendation for the paper. Please find the reviews for your paper below. We hope these will be useful to revise your work for future submissions.

AACL2020 SRW 結果通知

採択通知でした。

On behalf of the AACL-IJCNLP 2020 SRW Program Committee, we are delighted to inform you that the following submission has been accepted to appear at the workshop: XXXX. The Program Committee worked very hard to thoroughly review all the submitted papers. Please repay their efforts by following their suggestions when you revise your paper.

このときに採択された論文とその概要です。

arxiv.org

11 月

GoTo 京都

1 週間ほど京都にいました。

https://twitter.com/shunk031/status/1328555581293162497

NAACL2020 論文投稿

投稿しました。

12 月

AACL2020 SRW 発表

オンラインでポスター発表をしました。

IEEE/ACM TASLP 結果通知

不採択通知をいただきました。

I am writing to you concerning the above referenced manuscript, which you submitted to the IEEE Transactions on Audio, Speech and Language Processing. Based on the enclosed set of reviews, I regret to inform you that your manuscript has been rejected for publication.

論文投稿

今年は初めて後輩の共著に入って論文を投稿しました。 また主戦場をトップカンファレンスに移しつつ、初めてジャーナルへ論文を投稿しました。 目標として「まず打席に立つ」を意識しつつ、論文の書き方を模索した一年でした。

ACL2020

  • レビュー結果
    • [R] 1, 2.5, 2
  • お気持ち
    • 初めての NLP 系トップカンファレンスへの投稿でした
    • かなり厳しいコメントがいくつかあってでぴえんでした

ACL2020 SRW

  • レビュー結果
    • [A] 4, 4, 3.5
    • [R] 2.5, 3.5
  • お気持ち
    • 初めての SRW 投稿。それぞれ後輩と留学生とともに書きました
    • 非常に丁寧なコメントとメンタリングで驚きました
    • R の方もコメントはポジティブだったため、AACL の short へ投稿することに

AACL2020

  • レビュー結果
    • [R] 2, 3, 2.5
  • お気持ち
    • AACL は第 1 回目の開催であるし、アジアの言語に特化した話だったのでイケるのではと思っていました
    • 結果を受け止め AACL2020 SRW へ投稿することに

AACL2020 SRW

  • レビュー結果
    • [A] 3.8, 2.6, 4.2
  • お気持ち
    • 全体的にポジティブなコメントが多く報われました

NAACL2021

  • Under review

KDD2020

  • レビュー結果
    • [R] R, R, WA
  • お気持ち
    • 核心をつくレビューを頂き、それをベースに修正して WSDM 2021 へ投稿することに

WSDM2021

  • レビュー結果
    • [R] WA, WA, R, A
  • お気持ち
    • 全体的にかなり良い評価だったが 1 人のレビュアに引っ張られた形に
    • 諦めがつかないのでアップデートを準備し、 KDD 2021 へ投稿することに

IEEE/ACM TASLP

  • レビュー結果
    • [R] R, MR, R
  • お気持ち
    • Transformer/BERT と比べてほしいらしいです

番外編

買ってよかったもの

www.apple.com

store.google.com

www.dell.com

www.ankerjapan.com

読んだ本・読んでいる本

Science Research Writing For Non-Native Speakers Of English

Science Research Writing For Non-Native Speakers Of English

まとめ

  • たくさん失敗する中で、成功したときの嬉しさがあった
  • 楽しく研究をやって、論文をたくさん書いていく
  • いろいろな方たちと関わって、様々なことを学んでいく

*1:春季にはまだ博士課程進学を迷っていました。ここらへんの心境の変化はどこかでなにか書ければよいかなと。

最新の深層学習技術による古典くずし字認識の現状と今後の展望

こんにちは。@shunk031 です。 普段は最先端の技術が大好きなパソコンのオタクですが、京都へ旅行して古き良き日本の文化に感化されました。

この記事は 法政大応情 Advent Calendar 2020 21 日目の記事です。

f:id:shunk031:20201221153136p:plain
From http://codh.rois.ac.jp/

今回は日本古典籍の分類タスクについて取り組んでみようと考え、近年の日本古典籍における「くずし字認識」に着目して調査をしました *1。 日本古典籍といった古文書に対して、OCR 等の文字認識技術によって文字情報をデジタル化し、それらの情報をもとに解析を行う流れは現代では自然だと考えています。 しかしながら、一般的に OCR は難しく、また古文書を機械に解析させることはさらなる困難があるのは容易に想像できます。

くずし字認識に対して、近年の取り組みでは ROIS-DS 人文学オープンデータ協働センターが Kaggle にて「くずし字認識コンペティション」を主催したのは記憶に新しいです。

www.kaggle.com

私はこれまで日本語や中国語の特徴的な文字の形状を考慮した自然言語処理の研究に取り組んできました *2*3。 これらの研究は深層学習モデルである convolutional neural network (CNN)*4 を元にしており、文字を文字画像に変換し文字形状を保持するような訓練を行い予測に利用するモデルを構築しています。 こうした枠組みはくずし字認識においても一定の効果が見込めそうな一方で、現状のくずし字認識タスクで高いパフォーマンスを題しているモデルや予測の枠組みを把握しておりませんでした。

本記事では、まず日本古典籍における「くずし字認識」タスクの現状について述べます 次に Kaggle で開催されたコンペティションの上位解法をまとめます。 これらのまとめから得られた現状について、既存の手法でどの程度認識可能であるか、また研究としてどのような点で貢献可能かの展望について個人的に考えた考察を含め議論・検討します。

くずし字認識 と 深層学習

深層学習モデルで くずし字 を認識しようと考えたときに一番初めに必要になってくるものはモデルの学習用のデータです。 ROIS-DS 人文学オープンデータ共同利用センター (CODH)*5 では、デジタル化された古典籍を中心に、翻刻テキストを制作する過程で生まれるくずし字の座標情報などを、機械のための学習データや人間のための学習データ である 日本古典籍くずし字データセット を提供しています *6

codh.rois.ac.jp

日本古典籍データセットで公開されるデジタル化された古典籍を中心に、翻刻テキストを制作する過程で生まれるくずし字の座標情報などを、機械のための学習データや人間のための学習データとして提供します。

2019 年 11 月現在、日本古典籍くずし字データセットの規模は、国文学研究資料館所蔵で日本古典籍データセットにて公開する古典籍、および国文学研究資料館の関係機関が公開する古典籍 44 点の画像データ 6,151 コマから切り取った、くずし字 4,328 文字種の字形データ 1,086,326 文字です。

CODH では日本古典籍くずし字データセットを用いた AI くずし字 OCR サービスとして「KuroNet くずし字認識サービス」を公開しています *7。 この AI くずし字 OCR サービスのコア技術として、KuroNet と呼ばれる深層学習をもとにしたくずし字認識の枠組みが使われているようです。次にこの技術の概要について述べます。

KuroNet

KuroNet *8*9 は、U-Net ベースのアーキテクチャである FusionNet *10 を使用して、文字のレイアウトが標準化されていない古典籍のページ画像からくずし字群を認識する深層学習モデルです。 このモデルは前処理を必要とせず、ページ内から得られる広い範囲のコンテキスト情報や大規模な語彙の獲得、標準化されていない文字レイアウトを適切に処理することが可能となっています。

前述のとおりモデルは U-Net をベースにしており、入力としてシンプルに 640x640 にリサイズした古典籍画像を使用しています。 特筆すべき点は mixup を画像のみミックスさせてラベルはミックスさせないで使用している点です。 この設定は文献 *11 と同様の設定のように見えます。

これらの取り組みの初期段階は NeurIPS'18 のワークショップに採択されており *12、非常に注目されておりました。 特に、KuroNet を始めとしたくずし字認識に取り組まれている CODH の @tkasasagi 氏と Google@hardmaru 氏らがチームを組んで研究しているのは珍しく、個人的にも注目しておりました。

こうしたくずし字認識の取り組みを加速させるために、@tkasasagi 氏ら中心となり Kaggle でくずし字認識のコンペティションを開催しておりました。 くずし字認識タスクの現状の upper bound や使われている手法を調査する上で、上位解法の概要を知ることは重要です。 次のセクションにて、このコンペティションの上位解法について調査した結果を述べます。

Kuzushiji Recognition - Opening the door to a thousand years of Japanese culture

Kuzushiji Recognition - Opening the door to a thousand years of Japanese culture機械学習コンペティションをホストする Kaggle にて 2019 年 7 月から 10 月に開催されたコンペティションです。 ROIS-DS 人文学オープンデータ共同利用センター をはじめ、大学共同利用機関法人 人間文化研究機構 国文学研究資料館大学共同利用機関法人 情報・システム研究機構 国立情報学研究所 がホストしています。

コンペティションの目的と評価の概要は以下のとおりです:

  • 目的
    • 文書画像からくずし字の位置を検出し、くずし字の種類を分類する
  • 評価
    • 与えられたデータからくずし字が書かれた文書画像 (3881 枚)、くずし字の位置を示すバウンディングボックス、字の種類を認識し、その精度を競う

このセクションでは、まず上位解法で採用されているモデルや手法について全体的な傾向を示し、その後それぞれの手法の概要について述べます。

全体的な傾向

入力画像の文字の位置 (中心座標) および文字種を認識するタスクであるため、コンピュータビジョン分野で発展してきた深層学習モデルが中心に使用されていました。 コンペティションにおいて、文字の検出 (detection) と文字の認識 (classification) を同時に行う手法もあれば、個別に行う手法がありました。 以下は使用されている手法群です。

Data augmentation

  • Method
  • Framework
    • albumentations *16

Model architecture

  • Detection
  • Classification
    • Model
      • HRNet *29
      • EfficientNet *30
      • SEResNeXt *31
      • Convolutional Reccurent Neural Network (CRNN)*32
      • MobileNet V3 *33
  • Others
    • Loss function
      • Focal loss *34
      • Class-balanced loss *35
      • SoftTriplet Loss *36
    • Text Detection
      • Connectionist Text Proposal Network (CTPN)*37
      • Connectionist Temporal Classification (CTC)*38
    • Language Modeling
    • Training techniques
      • Pseudo labeling *40
      • Pre-trained model in weakly supervised learning (WSL) on 940 million public images with 1.5K hash tags *41
      • Bag of Tricks for Image Classification *42
    • Domain Adaption
      • Domain adversarial neural network (DANN)*43

上位解法

このセクションではくずし字認識コンペティションにおける上位解法の概要について述べます。 解法に関しては、discussion にて公開されている情報や公開されているコードから読み取れる情報をもとに、以下の形式でまとめます:

  • Preprocess
    • 前処理について記述
  • Data split
    • 学習用データをどのように分割してモデルの学習に利用したかについて記述
  • Model architecture
    • モデルのアーキテクチャについて記述
      • モデルが single-stage /multi-stage かどうか
      • data augmentation の有無やその種類
      • pseudo labeling の有無や適用方法
      • モデルアンサンブルの有無や適用方法
  • Discorded ideas / Future work
    • 試してみたがあまり効果がなかった方法
    • 今後試してみたい方法

なお、学習用データの分割には book title を元にした分割が多く見受けられました。 これは古典籍 (ここでいう book) ごとに特徴があり、そうした特徴が評価時に leak しないようにするためです。

1st place solution

Preprocess

  • 学習時
    • 1024x1024 になるようにクロップ & リサイズ
  • 推論時
    • 最大のサイズを設定して、そのサイズで推論

Data split

Model architecture

Single-stage なアーキテクチャを使用。

  • Cascade R-CNN
    • HRNet w32 (LB: 0.935)
      • train scales: 512 ~ 768
      • test scales: 0.5, 0.625, 0.75
    • HRNet w48 (LB: 0.946)
      • train scales: 768 ~ 1280
      • test scales: 0.75, 0.875, 1.0, 1.125, 1.25
  • Ensemble
    • HRNet w32 & HRNet w48 (LB: 0.950)

Discorded ideas / Future work

  • N/A

2nd place solution

Preprocess

  • Detection phase
    • 学習時
      • ページの高さが 1500px になるようにリサイズし、512x384 にクロップして学習
    • 推論時
      • ページ全体を使って推論
  • Classification phase
    • 2500 ~ 3000px の高さの画像から 512x768 をクロップして学習

Data split

  • book title-based group 5 fold cross validation

Model architecture

Multi-stage (First level model -> Second level model) なアーキテクチャを使用。

First level model
  • Detection phase
    • Faster R-CNN
      • 文字のクラスは当てない
      • ground truth と重なりが少ない bbox に対して、追加のクラス seg_fp (segmentation false positive) を定義してセグメンテーションモデルの誤りを修正するようにした
      • ResNet152 をバックボーンに使用
      • torchvision を使用
      • data augmentation
        • albumentations を使用
          • scale, minor color augmentations (hue/saturation/value)
  • Classification phase
    • resnetxt101_32x8d_wsl (LB: 0.935 (0.925 - 0.930))
      • ImageNet よりも大きいデータセットを用いて弱教師あり学習で学習
      • ハイパーパラメータに非常に敏感であった
        • gradient accumulation では敏感さを吸収しきれなかった
      • GTX 2080Ti で resnext101_32x8d_wsl を訓練するために
      • SGD より Adam が良かった
      • data augmentation
        • albumentations を使用
          • hue/saturation/value, random brightness, contrast, gamma
      • Test time augmentation (TTA)
        • 4 different scales
    • resnext101_32x8d_wsl & resnet152 (LB: 0.941)
  • Pseudo labeling
Second level model

First-level model において cross valiadtion によってデータセット全てに対して得られた予測を用いて、 LightGBMXGBoost をアンサンブルした second level model を訓練している。

  • このモデルは 5k クラス分類問題であった cdiscount 画像分類チャレンジおける Pavel Ostyakov の解法にインスパイアされている
  • Classification phase で得られた 4 種類のモデルそれぞれにおいて、予測クラスと上位 3 つの予測スコアを特徴量として入力。他の bbox との最大オーバーラップ量も追加している
    • これらの予測クラスと seg_fp クラスを使って、これら予測の候補になりそうな候補クラスが予測すべき真のクラスかどうかを 2 値分類問題として学習した

Discorded ideas / Future work

3rd place solution

Preprocess

Data Split

Multi-stage (Detection -> Classification) なアーキテクチャを使用。

  • Detection
    • train detection model with all train images
    • validate with public leaderboard
  • Classification
    • book-level split
      • validation: book_title=200015779 train: others
      • validation: book_title=200003076 train: others

Model architecture

  • Detection
    • Faster R-CNN
      • ResNet101 backbone
      • Multi-scale train & test
      • Data augmentation
        • brightness, contrast, saturation, hue, random grayscale
        • no vertical and horizontal flip
  • Classification
    • ensemble 5 classification models (hard voting)
      • EfficientNet-B4
        • Grayscale, 190x190, mixup + random erasing, valid book 200015779
      • ResNet152
        • Grayscale, 112x112, mixup + random erasing, valid book 200015779
      • SE-ResNeXt101
        • RGB, 112x112, mixup + random erasing, valid book 200015779
      • SE-ResNeXt101
        • RGB, 112x112, ICAP + random erasing, valid book 200003076
      • ResNet152
        • RGB, 112x112, ICAP + random erasing, valid book 200003076
    • Pseudo labeling
  • Post processing

Future work

  • SoftTriple loss の利用
    • 変体仮名の分類には SoftTriple loss が特に有効な雰囲気
  • 分類に文字のアスペクト比を使用
    • 今回文字認識する際に書く文字のアスペクト比を考慮せずに一定のサイズへリサイズしている
    • アスペクト比は文字認識に有効な特徴の1つであると考えられるために分類モデルへ特徴として入力すべきだった

4th place solution

Preprocess

Data split

Model architecture

Multi-stage (Detection -> Classification) なアーキテクチャを使用。

  • Detection
    • Hybrid Task Cascade (HTC) で文字を認識
    • Connectuinust Text Proposal Network (CTPN) で各行のテキストを認識
  • Classification
    • Convolutional recurrent neural network (CRNN) で文字認識
      • CNN + LSTM + connectionist temporal classification (CTC)
      • CTC モデルのアラインメント精度を上げるためにマルチタスク学習として attention 機構を導入 *44
    • Kenlm による 6-gram 言語モデルを学習し、CTC の出力をデコードするために beam search を使用
      • 各文字の位置は元の画像の各行の座標と CTC の出力を考慮して計算
    • Data augmentation
      • CLAHE, solarize, random brightness, random contrast, random scale random distort
  • Ensemble
    • 使用しなかった

Discorded ideas / Future work

  • Classification
    • CRNN における RNN (今回は LSTM を使用) の有無と multi-task learning について
      • LSTM 層の有無
        • LSTM 層のないモデルでは位置予測は正確だが文字認識精度は低くなる
        • LSTM 層を加えると位置予測が不正確になる
      • Multi-task learning の有効性
        • 出力を制御するような attention を導入することで CRNN の位置予測精度が向上
    • Attention ベースのネットワークは CTC より精度が悪かった
      • 精度は ResNet > VGG だった
      • ResNeXt や SENet は性能が上がらなかった。
      • CRNN における LSTM が 2 層以上になると精度が悪化した

5th place solution

Preprocess

  • N/A

Data split

  • 10 fold cross validation

Model architecture

Single-stage (Detection & Classification) なアーキテクチャを使用。

  • CenterNet
    • Hourglass network を ResNet50 or ResNet101 + FPN decoder へ変更
    • loss を penalty-reduced pixel-wise logistic regression with focal loss by binary cross-entropy に変更
    • head を無くした
    • CenterNet は gaussian カーネルを用いるが、よりシンプルなカーネルを使用した
    • ResNet101 に bag of tricks を適用した
      • timm の gluon_resnet101_v1d を使用すると bag of tricks 適用モデルが使用できる
    • data augmentation
      • shift scale rotate, random crop, clahe, gauss noise, gaussian blur, random brightness contrast, rgb shift, hue saturation
  • Ensemble

Discorded ideas / Future work

  • multi-stage なアプローチ
    • detection してから classification
  • 解像度を上げる
    • 1536x1536 で試していたけどこれ以上解像度を上げても予測結果に変化はなかった
  • 文字の種類を増やす

7th place solution

Preprocess

  • N/A

Data split

  • Book title-based group split

Model architecture

Multi-stage (Detection -> Classification) なアーキテクチャを使用。

  • Detection
    • CenterNet
      • in: 512x512, out: 128x128
      • data augmentation
        • cropping, brightness, contrast, horizontal flip
  • Classification
    • ResNet based
      • in: 64x64
      • data augmentation
        • cropping, erasing, brightness, contrast
      • pseudo labeling

Discorded ideas / Future work

  • LSTM による言語モデル
    • 改善幅は小さかった
  • DANN のようなドメイン適応モデル
    • pseudo labeling をしたほうが良かった

8th place solution

Preprocess

  • N/A

Data split

  • Book title-based 4 fold cross validation

Model architecture

Multi-stage (Detection -> Classification) なアーキテクチャを使用。

  • Detection
    • CenterNet
      • ResNet18 + U-Net
      • full training set to train single model
      • TTA: scale adjustment -> multi-scale + bbox voting
  • Classification
    • MovileNet V3
    • standard softmax cross entropy loss
    • training: use full training set to train single model
    • fine-tuning: use full training set + pseudo label
    • No TTA

Discarded ideas / Future work

  • Clasification
    • 少ないクラスをオーバーサンプリングする方法
    • Class-balanced loss
    • 言語モデリング
  • Detection / Classification
    • CODH で公開されている (ラベルがついていない) 文字画像を使った半教師あり学習

9th place solution

Preprocess

Data split

  • book title-based group 5 fold cross validation

Model architecture

Multi-stage (Detection -> Classification) なアーキテクチャを使用。

  • Detection
    • CenterNet
      • HourglasNet
      • ResNet34
  • Classification
    • ResNet18
    • Data Augmentation
    • pseudo labeling

Discorded ideas / Future work

13th place solution

Preprocess

  • 学習時・推論時
    • 512x512 に画像をリサイズ
    • 画像をグレースケールへ変換

Data split

  • N/A

Model architecture

Multi-stage (Detection -> Classification) なアーキテクチャを使用。

  • Detection
    • Faster R-CNN
      • ResNet34 を backbone に使用
        • 一般的な ResNet34 の畳み込みフィルタの 2 倍のフィルタ数を設定した
      • 入力はカラー画像
      • Region Proposal Network (RPN) と後段の classifier は層を共有しないようにした
        • RPN と classifier を互いに独立して変更可能のため、実験が容易になった
      • アンカーのサイズを任意に選ぶのではなく、ground truth の bounding box の高さと幅に対して k-means でクラスタリングを実行してアンカーサイズを選択した
        • クラスタの中心をアンカーボックスのサイズとして利用した
      • 一般的な ROI pooling の代わりに ROI Align pooling を使用した
        • ROI Align pooling の方がわずかに良い結果が得られた
  • Classification
    • ResNet34
      • 入力はグレースケース画像
      • 一般的な ResNet34 の畳み込みフィルタの 3 倍のフィルタを設定した
        • ResNet50 や ResNet101 等で実験をしたが、今回の設定のように wide で shallow なほうがよかった
      • Residual block の部分にも dropout を導入した

Discard ideas / Future work

  • くずし字認識結果を補正する後処理に言語モデルを活用しようとして失敗
    • 人間が読む順番に近い形に文字順を整理する
      • クラスタリング等を使い、ソート
        • DBSCAN を使って文字を列ごとにグループ化
        • グループ化した文字の列に対して水平方向の平均座標でソート
        • 各列内の文字を垂直方向に座標でソート
      • 以上の操作はほとんどの画像データで正常に機能した
    • 補正処理を行う correction network を訓練する
      • ground truth を使って認識誤りを含む結果を擬似的に多数生成した
        • これらの認識誤り結果は現実的なものだった
        • Fater R-CNN ベースのモデルが cross validation 下でどのように動作するかの統計情報を元にランダムに誤りを追加
    • くずし字認識誤りを補正する言語モデルを訓練する
      • 英語から日本語へ翻訳する以下のようなエンコーダデコーダモデルを作成して試した
        • 試したモデルの例
          • Attention 機構付き LSTM ベースの seq2seq モデル
          • Transformer ベースのモデル
        • これらは正しく修正できた箇所よりも多くの補正誤りを引き起こしてしまった
        • 最終的には単純な bi-directional GRU を使用した
      • ベースラインモデルに近いあまり強力ではないモデルではうまく動作したが、ベストなモデルではあまり効果的に動作しなかった
      • 外部のテキストコーパスを使用することで、言語モデル自体の性能を向上させる必要がありそう

15th place solution

Preprocess

Data split

  • train:test = 80:20

Model architecture

Multi-stage (Detection -> Classification) なアーキテクチャを使用。

  • Detection
    • 以下の 2 段階の CenterNet によってくずし字に対する bonding box を予測
      • 各段階は 2 つの CenterNet を用いて構成
        • CenterNet (1)
          • 入力として、512x512 へリサイズした画像を使用し、予測 bbox (1) を得る
          • bbox (1) を使って画像内の最も遠い予測における外側の bbox を取り除く
        • CenterNet (2)
          • 入力として、512x512 へリサイズした画像を使用
          • bbox (1) と bbox (2) をアンサンブル
      • 最終的な detection model の構成は以下:
        • CenterNet1: 1 段階目における 2 つの CenterNet のアンサンブル
          • data augmentation:
            • horizontal movement, brightness adjustment
        • CenterNet2: 2 段階目における 2 つの CenterNet のアンサンブル
          • data augmentation:
            • random erasing, horizontal movement, brightness adjustment
  • Classification
    • 以下の 3 段階による文字種を認識
      • Detection phase によって得られた検出結果をもとにクロップシ、64x64 に画像をリサイズ
      • ResNet ベースのモデルを 3 つアンサンブル・9 種の horizontal movement による TTA により、分類結果を得る
        • ResNet base (1)
          • log (bounding vox aspect ratio) の特徴を全結合層の部分に入れたモデル
        • ResNet base (2)
          • ResNet base (1) とは学習データを変えたモデル
        • ResNet base (3)
          • ResNet base (1) と同様だが pseudo labeling によるデータで訓練
      • 以上のモデルを 3 つ作りアンサンブル
        • 3 x ((ResNet base (1) + (2) + (3)) x 9)
      • data augmentation
        • horizontal movement, rotation, zoom, random erasing

Discorded ideas / Future work

  • N/A

上位解法を踏まえた研究貢献可能点について

上記の上位解法を踏まえたうえで、くずし字認識に対して研究の面でどのように貢献できるかを考えます。 高精度なくずし字認識を実現するためには主に以下の 2 つの視点から既存の課題を解決することが重要です:

以下では、これら 2 つの分野における視点に対して私の考える研究貢献可能点について検討しました

なお、くずし字認識というタスクにおいて実行速度はあまり重要ではないと考えました。タスクの性質上リアルタイム性はあまり必要なく、少し時間がかかっても精度の高い予測を提供することが重要であると考えたためです。 以下は全体的なモデルのパラメータ数が増えてしまうアイディアも存在しますが、上記のシチュエーションを踏まえて検討しております。

コンピュータビジョンからの視点

デジタル化された古典籍の画像から高精度に「文字検出」し、検出した文字を「文字認識」する必要があることがわかりました。 これらはコンペティションの解法では multi-stage なアーキテクチャとして現れております。 以下では、「文字検出」と「文字認識」の観点から、研究として取り組んでみたいことを列挙します。

文字検出モデルの予測精度向上

文字検出において重要なのは、画像中に複数存在するくずし字に対する detection モデルの精度向上です。 今回私は より高解像度の画像から比較的小さな物体を検出可能な軽量且つ高精度 detection モデル について検討しました。

高解像度な画像から小さな物体を検出可能な軽量かつ高精度な detection モデル

一般的に、高解像度な画像を入力として与えると予測精度はより向上することが知られており、上位解法においても比較的解像度の高い 1000x1000 以上の画像を入力とするモデルが効果的であることが示唆されております。

また、detection モデルを cascade する構造を持つ Cascade R-CNN が有効であることもわかりました。 しかしながらなぜこうした構造が有効であるかは明らかにはなっていません。

以下は 高解像度な画像を扱える軽量かつ高精度な detection モデル画像中に小さい物体が複数存在する検出タスクに強い detection モデル の 2 つの側面からくずし字認識に適する検出モデルを検討します。

  • 高解像度な画像を扱える軽量かつ高精度な detection モデルの検討
    • 高性能なモデルは一般的にパラメータ数が多く、訓練には大規模な GPU マシンが必要
      • より高解像度な画像を入力とすると、さらに規模の大きい計算機環境が必要になる
    • 近年では以下のような軽量かつ高精度なモデルが提案されている
      • EfficientDet *45
      • Scaled-YOLOv4 *46
      • Yolov5 *47
  • 画像中に小さい物体が複数存在する検出タスクに強い detection モデルの検討
    • Cascade R-CNN が有効であったのは、おそらく cascade した detector が段階的に IOU の閾値を厳しくしていき予測 bounding box のリファインを効率的に行えているから
      • こうした学習は画像中に存在する比較的小さめな物体 (今回はくずし字) が多数現れるくずし字認識タスクと相性が良いのだろうと予想できる
      • Cascade R-CNN の構造を参考に、小さい物体を効率的に認識可能な detection モデルを検討することが有効であると示唆される

文字認識モデルの予測精度向上

文字認識において重要なのは、detection によって得られたくずし字領域に対する classification モデルの精度向上です。 今回私は generative adversarial network (GAN)*48 を用いた 文字画像生成による data augmentation について検討しました。

GAN によるくずし字画像 data augmentation

上位解法からもわかるように、classification モデルを学習させる上で効果的な data augmentation が重要です。 今回私は擬似的にくずし字を生成して data augmentation として活用する方法を検討しました。 昨今では GAN によるさまざまな data augmentation 手法が提案されており、特にフォントを生成するような事例は特に成功しているように見えます。 こうした枠組みを応用することでくずし字認識の精度向上が期待できると考えています。

  • 一般的な GAN による data augmentation
    • Data Augmentation GAN (DAGAN )*49
    • Prototype Matching Networks (PMN) *50
    • CNN-AUG-GAN *51
  • フォントの自動生成
    • Font を生成する GAN *52
    • 少ない訓練サンプルからフォントを生成 *53

自然言語処理からの視点

今回対象である古典籍は、時代は違えど同じ人間が自然言語として記述したものです。 したがって、背後には言語モデルが存在し、その言語モデルに従って言語が現れていると捉えることができます。 こうした言語モデルを適切に捉えることにより、意図しない文字の列が現れないように補正しようというアイディアは非常に面白いものだと個人的に感じます。 しかしながら、コンペティションではあまり効果がないという報告が少なからずありました。

今回私は、言語モデルを用いて文字認識結果の補正を行うというアイディアに対して、自然言語処理的な観点で補正を行う 言語モデルの予測精度をどのように向上させるか を検討しました。 昨今使われている現代語による言語モデルの学習事例は星の数ほどありますが、古語に対して言語モデルを学習する事例はほとんどありません。 こうした古語に対するモデルの学習は古語に適した学習法の検討が必要だと考えております。

言語モデルの予測精度向上

学習データの多い、いわゆるリソースの多い現代語で成果を上げているモデルをそのままリソースの少ない古語に適用するのは困難であることは容易に想像できます。 今回私は リソースの多い言語からリソースの少ない言語への転移学習 について検討しました。

リソースの多い言語から少ない言語への転移学習

深層学習は一般的に大規模な学習データが必要であるため、今回の古語のようなリソースが限られている対象をそのまま学習させるのは非常に難しいです。 上位解法には翻訳モデルを使って日本語から英語に変換する補正ネットワークを検討している事例がありましたが、このような難しさによって効果的な補正ネットワークを学習できていないと個人的には考えております。

近年は大規模なラベルなしデータによって訓練された事前学習モデルとして BERT *54 等が存在しており、広く使われてくるようになりました。 BERT はタスクに特化した fine-tuning により少量の学習データから精度の高い予測が可能になる一方で、今回のような同じ言語(日本語)における現代語(事前学習)と古語(fine-tuning)という設定はこれまでに存在しないように思えます。 個人的な興味ですが、こうした現代語から古語の特徴をどれだけ捉えられることが可能かは、くずし字認識に限らず非常に面白い研究トピックの一つになりうると考えています。

おわりに

本記事では、日本古典籍における「くずし字認識」タスクの現状について述べました。 また Kaggle で開催されたコンペティションの上位解法をまとめました。 これらのまとめから得られた現状について、既存の手法でどの程度認識可能であるか、また研究としてどのような点で貢献可能かの展望について個人的に考えた考察を含め検討しました。

コンピュータビジョンと自然言語処理の観点から、私が検討した研究貢献点はおそらくこれまで学術的に検討されていない点が多く含まれていると感じます。 これらは一見すぐに本質的な改善が見られないかもしれませんが、腰を据えてじっくりと取り組むと面白い洞察が得られるのではないかと確信しております。

*1:実は今期の博士課程のコースワークの課題でもあります。

*2:[1810.03595] End-to-End Text Classification via Image-based Embedding using Character-level Networks https://arxiv.org/abs/1810.03595

*3:[2006.11586] AraDIC: Arabic Document Classification using Image-Based Character Embeddings and Class-Balanced Loss https://arxiv.org/abs/2006.11586

*4:Gradient-based learning applied to document recognition - IEEE Journals & Magazine https://ieeexplore.ieee.org/abstract/document/726791

*5:ROIS-DS 人文学オープンデータ共同利用センター / ROIS-DS Center for Open Data in the Humanities (CODH) http://codh.rois.ac.jp/

*6:日本古典籍くずし字データセット | ROIS-DS 人文学オープンデータ共同利用センター http://codh.rois.ac.jp/char-shape/

*7:KuroNet くずし字認識サービス(AI OCR) | ROIS-DS 人文学オープンデータ共同利用センター (CODH) http://codh.rois.ac.jp/kuronet/

*8:[1910.09433] KuroNet: Pre-Modern Japanese Kuzushiji Character Recognition with Deep Learning https://arxiv.org/abs/1910.09433

*9:KuroNet: Regularized Residual U-Nets for End-to-End Kuzushiji Character Recognition | SpringerLink https://link.springer.com/article/10.1007/s42979-020-00186-z

*10:[1612.05360] FusionNet: A deep fully residual convolutional neural network for image segmentation in connectomics https://arxiv.org/abs/1612.05360

*11:[1801.02929] Data Augmentation by Pairing Samples for Images Classification https://arxiv.org/abs/1801.02929

*12:[1812.01718] Deep Learning for Classical Japanese Literature https://arxiv.org/abs/1812.01718

*13:[1708.04896] Random Erasing Data Augmentation https://arxiv.org/abs/1708.04896

*14:[1710.09412] mixup: Beyond Empirical Risk Minimization https://arxiv.org/abs/1710.09412

*15:[1811.09030] Data Augmentation using Random Image Cropping and Patching for Deep CNNs https://arxiv.org/abs/1811.09030

*16:Information | Free Full-Text | Albumentations: Fast and Flexible Image Augmentations https://www.mdpi.com/2078-2489/11/2/125

*17:[1506.01497] Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks https://arxiv.org/abs/1506.01497

*18:[1906.09756] Cascade R-CNN: High Quality Object Detection and Instance Segmentation https://arxiv.org/abs/1906.09756

*19:[1901.07518] Hybrid Task Cascade for Instance Segmentation https://arxiv.org/abs/1901.07518

*20:[1904.07850] Objects as Points https://arxiv.org/abs/1904.07850

*21:[1612.03144] Feature Pyramid Networks for Object Detection https://arxiv.org/abs/1612.03144

*22:[1505.01749] Object detection via a multi-region & semantic segmentation-aware CNN model https://arxiv.org/abs/1505.01749

*23:[1505.04597] U-Net: Convolutional Networks for Biomedical Image Segmentation https://arxiv.org/abs/1505.04597

*24:[1603.06937] Stacked Hourglass Networks for Human Pose Estimation https://arxiv.org/abs/1603.06937

*25:[1703.06870] Mask R-CNN https://arxiv.org/abs/1703.06870

*26:facebookresearch/detectron2: Detectron2 is FAIR's next-generation platform for object detection and segmentation. https://github.com/facebookresearch/detectron2

*27:open-mmlab/mmdetection: OpenMMLab Detection Toolbox and Benchmark https://github.com/open-mmlab/mmdetection

*28:pytorch/vision: Datasets, Transforms and Models specific to Computer Vision https://github.com/pytorch/vision

*29:[1908.07919] Deep High-Resolution Representation Learning for Visual Recognition https://arxiv.org/abs/1908.07919

*30:[1905.11946] EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks https://arxiv.org/abs/1905.11946

*31:[1709.01507] Squeeze-and-Excitation Networks https://arxiv.org/abs/1709.01507

*32:[1507.05717] An End-to-End Trainable Neural Network for Image-based Sequence Recognition and Its Application to Scene Text Recognition https://arxiv.org/abs/1507.05717

*33:[1905.02244] Searching for MobileNetV3 https://arxiv.org/abs/1905.02244

*34:[1708.02002] Focal Loss for Dense Object Detection https://arxiv.org/abs/1708.02002

*35:[1901.05555] Class-Balanced Loss Based on Effective Number of Samples https://arxiv.org/abs/1901.05555

*36:[1909.05235] SoftTriple Loss: Deep Metric Learning Without Triplet Sampling https://arxiv.org/abs/1909.05235

*37:[1609.03605] Detecting Text in Natural Image with Connectionist Text Proposal Network https://arxiv.org/abs/1609.03605

*38:Connectionist temporal classification | Proceedings of the 23rd international conference on Machine learning https://dl.acm.org/doi/abs/10.1145/1143844.1143891

*39:KenLM: Faster and Smaller Language Model Queries - ACL Anthology https://www.aclweb.org/anthology/W11-2123/

*40:Pseudo-Label: The Simple and Efficient Semi-Supervised Learning Method for Deep Neural Networks - Workshop on challenges in representation learning, ICML. Vol. 3. No. 2. 2013.

*41:[1805.00932] Exploring the Limits of Weakly Supervised Pretraining https://arxiv.org/abs/1805.00932

*42:[1812.01187] Bag of Tricks for Image Classification with Convolutional Neural Networks https://arxiv.org/abs/1812.01187

*43:[1505.07818] Domain-Adversarial Training of Neural Networks https://arxiv.org/abs/1505.07818

*44:[1609.06773] Joint CTC-Attention based End-to-End Speech Recognition using Multi-task Learning https://arxiv.org/abs/1609.06773

*45:[1911.09070] EfficientDet: Scalable and Efficient Object Detection https://arxiv.org/abs/1911.09070

*46:[2011.08036] Scaled-YOLOv4: Scaling Cross Stage Partial Network https://arxiv.org/abs/2011.08036

*47:ultralytics/yolov5: v3.1 - Bug Fixes and Performance Improvements | Zenodo https://zenodo.org/record/4154370#.X92gpen7R24

*48:[1406.2661] Generative Adversarial Networks https://arxiv.org/abs/1406.2661

*49:[1711.04340] Data Augmentation Generative Adversarial Networks https://arxiv.org/abs/1711.04340

*50:[1801.05401] Low-Shot Learning from Imaginary Data https://arxiv.org/abs/1801.05401

*51:[1803.01229] GAN-based Synthetic Medical Image Augmentation for increased CNN Performance in Liver Lesion Classification https://arxiv.org/abs/1803.01229

*52:[1910.12604] FontGAN: A Unified Generative Framework for Chinese Character Stylization and De-stylization https://arxiv.org/abs/1910.12604

*53:[1701.05703] Automatic Generation of Typographic Font from a Small Font Subset https://arxiv.org/abs/1701.05703

*54:[1810.04805] BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding https://arxiv.org/abs/1810.04805

コンピュータサイエンスのトップカンファレンスが示す再現性チェックリスト

こんにちは。@shunk031 です。機械学習モデルの実験をする際の乱数シード値は 19950815 を使っています。

この記事は 法政大応情 Advent Calendar 2020 10 日目の記事です。

f:id:shunk031:20201210200333j:plain
再現性を担保する上で多様な視点のチェック項目が必要です*1

研究において、再現性は非常に重要なポイントの 1 つです。 特に最近は機械学習や深層学習の研究における再現性について議論されております。 こうした研究において再現性を高める上で、当たり前ですが次の 2 点が重要です:

  • 再現可能な 実装 の公開
  • 再現可能な 論文 の公開

再現可能な実装の公開 については、先日私が寄稿した pyenv と poetry による再現可能な実験環境構築 が助けになるかもしれません。

data.gunosy.io

本記事では 再現可能な論文の公開 に焦点を当てます。 近年のコンピュータサイエンス分野におけるトップカンファレンスでは、著者に対して 再現性チェックリスト が示され、投稿時にこれらのチェックリストに従った論文であるかの確認があります。 こうした再現性チェックリストについての論文が arXiv に公開されていたりと、今後も注目される点だと感じております *2。 本記事の目的は、複数のトップカンファレンスから各カンファレンスがどのような点の再現性を求めているかを把握し、今後の執筆に役立てることです。

トップカンファレンスが要求する再現性

今回、独断と偏見で、人工知能分野 , 機械学習分野 , コンピュータビジョン分野 , 自然言語処理分野 から再現性に言及している以下のカンファレンスを対象としました:

各カンファレンスが示す再現性チェックリスト

以下は各カンファレンスが示す再現性の確認項目やチェックリストです:

上記で示されている再現性確認項目の中で、 Joelle Pineau 氏の The Machine Learning Reproducibility Checklist (2020/12/10 現在 v2.0) が複数登場しています。 次にこの再現性チェックリストについて詳しく見ます。

The Machine Learning Reproducibility Checklist

2020/12/10 現在の The Machine Learning Reproducibility Checklist の中身をざっくり日本語訳すると以下のとおりです。 なおこのチェックリストに加えて NAACL'21 で追加された項目がありました:

  • ✔ 論文中に提示されているモデルやアルゴリズムについて
    • 数式を用いたモデルやアルゴリズムの明確な説明
    • そのほか用いた定理等の明確な説明
    • アルゴリズムの複雑性 e.g., 時間複雑度、空間複雑度 etc
  • ✔ 理論的な主張について
    • 主張の明確さ
    • 完全な証明
  • ✔ 論文中で使われたすべてのデータセットについて
    • 統計量 e.g., サンプル数
    • データセットを train /validation/test 分割する際の詳細
    • データの前処理や予め取り除いたデータについての詳細
    • 使ったデータセットやシミュレーション環境をダウンロード可能なリンクの提示
    • 新たなデータを収集した場合、どのように収集したか e.g., アノテーターへの指示やクオリティを制御する方法 etc を明示
    • 言語の種類 e.g., 英語や日本語 etc. (NAACL'21)
  • ✔ 提案法の評価の際に実装したコードについて
    • 依存コード・アプリケーションの明示
    • 学習用コード
    • 評価用コード
    • (事前) 学習済みモデル
    • 以下の情報が含まれている README ファイル
      • 結果の表
      • コードの実行方法
  • ✔ 論文中で報告されているすべての結果について
    • ハイパーパラメータについての詳細
      • ハイパーパラメータの範囲
      • どのようにハイパーパラメータの値を選択したか e.g., manual tuning, uniform sampling, etc.
      • どのようにハイパーパラメータを評価したか e.g., accuracy
      • 報告されている結果を再現する上で必要なすべてのハイパーパラメータの設定
      • ハイパーパラメータチューニングの結果のサマリ e.g., expected validation performance *3*4, mean, variance, error bar, etc.
    • 学習と評価はそれぞれ何回行われたか
    • 結果を報告するために使用された指標または統計量の明確な定義
    • 報告されている結果の平均と分散
    • 平均実行時間
    • 結果を得るための計算機環境
    • モデルのパラメータ数について (NAACL'21)
    • 対応する test に対応する validation スコア (NAACL'21)

提案モデル・アルゴリズム評価データ実験コード評価方法 の観点から簡潔な指示が与えられている事がわかりました。

ML Code Completeness Checklist

実験を再現するコードについて、論文実装がまとめられている paper with code と The Machine Learning Reproducibility Checklist を公開している Joelle Pineau 氏から機械学習コードの再現性チェックリストも公開されています。

ML Code Completeness Checklist では公開されている著者実装レポジトリに対して、以下の視点からチェックします:

  • ✔ Dependencies
    • リポジトリに依存関係に関する情報や環境の設定方法の指示があるか?
  • ✔ Training scripts
    • リポジトリに論文で説明されているモデルをトレーニング / フィットさせる方法が含まれているか?
  • ✔ Evaluation scripts
    • リポジトリには、訓練されたモデルの性能を計算したり、モデルの実験を実行するためのスクリプトが含まれているか?
  • ✔ Pretrained models
    • リポジトリは予習済みモデルの重みへの無料アクセスを提供しているか?
  • ✔ Results

リポジトリは、0(だめ)から 5(いいね)のスコアを付けることができます。 各基準の詳細については以下のレポジトリで公開されており、1000 を超えるスターを得ています。 github.com

ML Code Completeness Checklist の詳細は以下のブログ記事から読むことが可能です。 medium.com

まとめ

本記事では 再現可能な論文の公開に焦点を当て、 近年のコンピュータサイエンス分野におけるトップカンファレンスに投稿する際に著者に対して示されている再現性チェックリストの内容を大まかに把握しました。 また成果を公開する際にチェックするとよいリストについても言及し、より再現性担保する方法を確認しました。 これらのチェックリストを予め把握しておくことで、実験や執筆時に注意しながら研究を進めることができ、結果として良い研究ができるのではないでしょうか。

*1:Background image from https://ai.facebook.com/blog/how-the-ai-community-can-get-serious-about-reproducibility/

*2:[2003.12206] Improving Reproducibility in Machine Learning Research (A Report from the NeurIPS 2019 Reproducibility Program) https://arxiv.org/abs/2003.12206

*3:[1909.03004] Show Your Work: Improved Reporting of Experimental Results https://arxiv.org/abs/1909.03004

*4:http://shunk031.hatenablog.com/entry/allentune-algorithm

今年行けなかった国内・海外旅行を供養する

こんにちは @shunk031です。GPUマシンで暖を取る季節になってきましたね。まずは実験を回しましょうか。

この記事は 法政大応情 Advent Calendar 2020 2日目の記事です。

f:id:shunk031:20201201235559p:plain
最近はただシンプルに「飛行機に乗りたい」と思う毎日です。

去年、所属研究室で 彌冨研 Advent Calendar 2019 をやっていた頃と世界情勢がまるっきり変化してしまいました。 その影響もあり、今年行く予定であった国内・海外旅行がキャンセルになることが多かったです。

この記事では、今年行く予定であったが行けなかった国内・海外旅行を列挙し、今後の世界情勢が良くなったときに行けるようにメモとして残します。

海外旅行

今年は国際会議での学会発表の他、東京オリンピックから逃げるための旅行を予定していました。

アメリカ・シアトル

7月の中旬1週間程度滞在予定でした。 この期間はACL2020がシアトルで行われる予定でした。 留学生と書いた論文が採択されたため付いていく予定でしたが、オンライン発表になってしまいました。

f:id:shunk031:20201202001553j:plain
From https://stories.starbucks.com/stories/2015/store-tour-inside-1912-pike-place-seattle-usa/

アメリカ・ハワイ

8月最初の1週間程度滞在予定でした。 当初は8月初めの灼熱のなか東京オリンピックが開催される予定になっており、逆張りのオタクこと私は東京にいるより海外に居たほうが良いと考えて適当にハワイへの飛行機を取っていました。

f:id:shunk031:20201202002903p:plain
From https://portal.ehawaii.gov/government/county-governments/

アメリカ・サンディエゴ

8月の後半1週間程度滞在予定でした。 この期間はKDD2020がサンディエゴで行われる予定でした。 残念ながら投稿した論文が採択されなかったのでおそらく行けなかったのですが、とても楽しみな旅行でした。

f:id:shunk031:20201202002214p:plain
From https://www.sandiego.gov

中国・蘇州

12月の初旬に1週間程度滞在予定でした。 この期間はAACL-IJCNLP2020が蘇州で行われる予定でした。 後輩と書いた論文が採択されたため付いていく予定でしたが、オンライン発表になってしまいました。

f:id:shunk031:20201202003618j:plain
From https://www.traveltosuzhou.com

国内旅行

国内旅行もベースは学会発表ですが、推しのライブへ行くための遠征の予定もありました。

金沢

3月初旬の1週間程度滞在予定でした。 この期間は情報処理学会 第82回全国大会金沢工業大学で行われる予定でした。 後輩の発表を見に行く予定でしたがオンライン発表になり、この予定をキャンセルしました。

茨城

3月中旬の1週間程度滞在予定でした。 この期間は言語処理学会 第26回年次大会茨城大学で行われる予定でした。 論文を発表予定でしたがオンライン発表になり、この予定をキャンセルしました。

京都

5月23-24日で滞在予定でした。 この期間は小倉 唯 LIVE TOUR 2020『#LOVEcall』京都公演ロームシアター京都で行われる予定でしたが、公演中止のためこの予定をキャンセルしました。

名古屋

5月30-31日で滞在予定でした。 この期間は小倉 唯 LIVE TOUR 2020『#LOVEcall』愛知公演一宮市民会館で行われる予定でしたが、公演中止のためこの予定をキャンセルしました。

矢場とん味噌カツが食べたいです(以下は1年前に昔訪れたときのツイート)。

熊本

6月の中旬1週間程度滞在予定でした。 この期間は人工知能学会 第34回全国大会 が熊本城ホールで行われる予定でした。 論文発表と招待講演を予定していましたがオンライン発表になり、この予定をキャンセルしました。

speakerdeck.com

おまけ: Go To キャンペーンで行った旅行

金沢

8月17-21日でGo Toキャンペーンを利用して滞在しました。 3月に金沢へ行く予定のリベンジでした。

京都

11月16-20日でGo Toキャンペーンを利用して滞在しました。 5月に京都へ行く予定のリベンジでした。

おわりに

今年1年で国内・海外含めさまざまな地域へ旅行する予定でしたが、半数以上がキャンセルになってしまいました。Go Toキャンペーンを利用して旅行をしましたが、果たして 旅行をする ことが正しかったのかは正直自信はありません。このキャンペーンを通じて観光地の方たちの力になれたら幸いです。気持ちよく旅行できる世界が来る日に向けて個人でできることをやっていきたいです。

【外部発表】Learning to Faithfully Rationalize by Construction

こんにちは。@shunk031です。論文読み会で登壇したので、そのときの発表資料と概要、及び頂いた質問への回答*1を載せます。

イベント: ACL 2020 オンライン読み会

exawizards.connpass.com

登壇概要

タイトル:Learning to Faithfully Rationalize by Construction

Learning to Faithfully Rationalize by Construction

  • Sarthak Jain1, Sarah Wiegreffe2, Yuval Pinter2, Byron C. Wallace1
    • 1Khoury College of Computer Sciences, Northeastern University
    • 2School of Interactive Computing, Georgia Institute of Technology

自己紹介

  • 北田 俊輔 法政大学大学院 理工学研究科 D1 彌冨研 所属
    • 深層学習を元にした基礎・応用研究
      • 自然言語処理: 文字形状に着目・解釈性のあるモデル
        • YANS2019にて 奨励賞 を受賞
        • ACL2020 SRWにて共著の論文採択
      • 医用画像処理: 悪性黒色腫自動診断システムの構築
        • IPSJ2019にて 学生奨励賞 受賞
      • 計算機広告: 広告クリエイティブの評価・作成支援
        • KDD2019(データマイニングの最難関国際会議)にて論文採択
          • Attention可視化によるクリエイティブ作成支援

本論文を選択した理由

“Attention is not Explanation” と “Attention is not not Explanation” の著者らによる夢のコラボレーション

Attentionに説明性があるかを解析した論文[Jain+Wallace NAACL19; Wiegreffe+Pinter EMNLP19] の著者による深層学習モデルの予測に対する根拠を学習する手法を提案

本文から根拠を抽出してその根拠を元にタスクを解く新たな枠組みの提案

  • 予測の根拠をどのように抽出するかが気になった
  • 根拠抽出により短くなったテキストでどれくらいの精度でタスクを解くことができるのか

本研究の貢献

入力文から根拠を抽出し、その根拠を元に予測可能なニューラルテキスト分類の枠組みを提案

  • 先行研究のモデルは強化学習ベースのため学習が難しい
    • 強化学習を使わない枠組みでモデルを学習

      これまでの学習方法固有の複雑さを回避するために新たな学習手法を提案

  • 新たな学習手法 Faithful Rationale Extractionale from Saliency tHresholding (FRESH) を提案
    • 根拠を抽出する部分と根拠から予測する部分を別々に訓練可能にする (後述)

提案手法 FRESH に対して人手による評価を実施

導入: 深層学習モデルの予測に対する説明性

予測の説明性における”Faithfulness”と”Rationle”

Faithfulness (忠実)

“予測モデルによって示される根拠は、そのモデルが最終的にその予測に至るために使った情報を反映していれば 忠実 である” [Lipton Queue18] 入力文から取り出した一部分を根拠とし、それだけで正しく予測できるのなら、faithful な根拠と言える

Rationale (根拠)

“アノテータがテキストを分類する際にその判断に影響を与えた文字列を強調して表示するように求められる。このような手がかりを 根拠 と呼ぶ” [Zaidan+ NAACL07] 入力文から一部分を抽出して予測根拠としその根拠のみでどれくらい予測できるかを評価すべき

関連研究 | モデル説明手法における現状の問題点

  • 近年ではheatmapによる可視化が頻繁に利用されている
    • しかしこれらの手法は一般的に頑健ではなく忠実な説明を与えているとは言えない場合がある[Feng+ EMNLP18; Zhong+ 18; Jain+ NAACL19; Wiegreffe+ ACL19; Serrano+ EMNLP19; Brunner+ ICLR20; Pruthi+ ACL20]
  • 解釈可能性の文脈で分類・根拠提示モデルに求められるもの[Wiegreffe+ ACL19; Lei+ EMNLP16]
    • 分類モデル: 忠実さ (faltuful) & 尤もらしさ (plausibility)
    • 根拠提示モデル: 簡潔さ (short) & 一貫性 (coherent)
      • 加えて 包括性 (comprehensiveness) [Yu+ EMNLP19]
  • 忠実な根拠を示すようなモデルの提案 [Lei+ EMNLP16; Yu+ EMNLP19; Bastings+ ACL19]
    • 根拠を生成するgeneratorと根拠から予測するencoderをEnd-to-endで学習されるモデル➜ REINFORCEやRepara. trickを使う複雑なものばかり

関連研究 | 解釈可能性と説明可能性

  • “解釈可能性” の定義と特性に関する概要[Lipton Queue18; Doshi-Velez+ 17; Rudin NatureMI19]
  • モデルの予測に対する根拠の提示は次の3つに分けられる:[Lertvittayakumjorn+ EMNLP19]
    • 挙動を明らかにすること
    • 予測を正当化すること
    • 人間が不確実な予測を調査する際に支援すること
  • 人間に受け入れてもらえるような説明や解釈を与える手法
    • 非常にチャレンジングだが有益 [Rudin NatureMI19]
      • 忠実な説明は予測モデルモデルの根底にある意思決定プロセスを明らかにする手段を提供する

関連研究 | 人間による説明性の評価

  • 人間による評価
    • “ユーザーがある手法の結果を正しく予測できる場合、その手法は 解釈可能である と言える” [Kim+ NIPS16]
      • 人手による評価を実施している
    • 人間が根拠提示による合理性を好むかを検証 [Ehsan+ AIES18; Ehsan+ IUI19]

本研究ではこうした先行研究に倣って、根拠の解釈性や合理性について人手による評価を実施

Faithfulness through Discrete Rationale Selection

End-to-Endで予測根拠を抽出 [Lei+ EMNLP16]

先行研究: Rationalizing Neural Predictions [Lei+ EMNLP16]

  • GeneratorとEncoderによる予測根拠の抽出
    • Generator gen(xi): 入力テキスト xi から根拠 zi を抽出
    • Encoder enc(xi , zi): 入力テキストと根拠から予測
  • モデルの学習: REINFORCE [Williams ML92] で最適化
    • 考慮できる根拠の状態空間が大きいため分散が 大➜ 効率的に探索することは困難

提案手法: Faithful Rationale Extraction from Saliency tHresholding (FRESH)

End-to-Endで予測根拠を抽出しない枠組み

本研究: FRESH (Faithful Rationale Extraction from Saliency tHresholding)

  • REINFORCEによる学習の難しさを克服
    • あえてEnd-to-Endな枠組みにしないことで、一般的に困難な強化学習を元にした学習を回避する
  • 3つの独立したモデルから構成される枠組み
    • Supportモデル・Extractorモデル・Classifierモデル

End-to-Endで予測根拠を抽出しない枠組み

  • Supportモデル: supp(xi , yi)入力 xi と正解 yi から学習する。得られる重要度 si を取得
    • 様々な重要度算出手法が利用可能e.g., Attention, 勾配ベースの手法, LIME [Ribeiro+ KDD16]
  • Extractorモデル: ext(xi, si)
    • suppから得られた重要度を2値化しsnippet を取得➜ このsnippetを予測の根拠として扱う
      • 2値化はルールベースや学習モデルベースなどが適用可能
  • Classifierモデル: pred( )extから得られたsnippet を元に正解 yi を予測する➜ 本来の入力よりも短いテキストで予測可能

FRESHの実装

  • Supportモデル supp
    • ベースモデル: BERT, RoBERTa, SciBERT
    • 重要度算出手法: Attention, Gradient
  • Extractorモデル ext
    • 重要度を元に2つの根拠の取り出し方を考慮 (連続/非連続):
      • Contiguous (連続な根拠)
        • 重要度が最大になるよう連続したスパンを抽出
      • Top-k (非連続な根拠)
        • 重要度上位 k 個の単語を連続性関係なく抽出
  • Classifierモデル pred
    • すべてのモデルに共通して、BERT表現を使って分類

実験設定

  • 評価用データセット (5種)
    • Stanford Sentiment Treebank (SST): NLPer好きなやつ
    • AgNews: ニュース記事 (Science, Sports, Bussiness, World)
    • Evidence Inference (人手根拠有): 生体医療の科学記事
    • Movies (人手根拠有): 映画のレビュー
    • MultiRC (人手根拠有): 複数の正解があるデータセット
  • 学習方法の詳細
    • 比較手法はすべてBERTベースのモデルに変更
    • 異なるシード値で5回実験
      • 強化学習ベースのモデル (e.g., Lei+ EMNLP16) は性能の分散が大きいため

定量的評価 | 評価方法

  • 予測性能の評価
    • 比較手法
      • テキスト全文: 性能上限の目安。根拠を示す機構なし。
      • 提案手法: [CLS] のattentionを元に根拠部分を抽出
      • 強化学習モデルベース: [Lei+ EMNLP16]
      • 微分可能モデルベース: [Bastings+ ACL19]
    • 抽出する根拠の長さ
      • テキストから抽出する根拠部分が長くなるほど性能 大➜ 根拠の長さを k に固定して評価実験を実施
  • 性能変化: 根拠の長さ・人手による根拠の使用
    • 根拠の長さを変化させたときの性能評価
    • 人手による根拠を学習に使用したときの性能評価
      • 根拠を考慮した学習法 [Zhang+ EMNLP16; Strout+ BlackboxNLP19]

予測性能の評価

  • FRESHは入力文の10-30%程度でFull textに迫る予測精度
  • 抽出された根拠には予測を説明できる情報が含まれている
  • FRESHは先行研究 [Lei+ EMNLP16; Bastings+ ACL19] を超える予測精度
    • 性能の分散が小さく安定したパフォーマンス
  • Attentionベースの重要度スコアを用いたほうが精度は高い
  • 重要度スコアのtop-kを抽出するほうが精度は高い

根拠の長さを変化させたときの性能変化

  • FRESH と [Lei+ EMNLP16] を比較
    • 抽出する根拠の長さに関わらずFRESHが良い性能
    • 強化学習ベースの [Lei+ EMNLP16] は性能にばらつき有
      • 根拠の長さを長くすると提案手法と同程度
      • Evidence. Inv. においては性能悪化

人手による根拠を使用したときの性能変化

  • 人手による根拠の使用
    • Evidence InferenceとMultiRCは人手の根拠データが存在
      • ➜ この根拠を0%-100%使ったときの予測精度を比較
  • FRESH と [Lei+ EMNLP16] を比較
    • 人手根拠を多く使えば予測性能向上に多少寄与する可能性
    • 先行研究のモデルにおいても人手根拠は良い影響を与える

人手・Lei et al.・FRESHによる根拠抽出 in MultiRC

  • Query: What is the only difference between a reflection in a mirror and the actual image?
    • Answer: It is exactly the same.
    • Label: False
  • Human: You have seen your own reflection in a mirror. The person looking back at you looks just like you. Where does that reflected person appear to be standing ? Yes, they appear to be on the other side of the mirror. That is really strange to think about, but very cool. Have you ever waved at your reflection in a mirror? The reflected image will wave back at you. Here is something to try next time you stand in front of a mirror. Wave to your reflection with your right hand. What hand do you think the reflection will wave back with? The same hand? A different hand? You will notice something interesting. The reflection waves back with the hand on the same side as you, but it is their left hand. The image in a reflection is reversed. This is just like the image of the sign above. Light rays strike flat shiny surfaces and are reflected. The reflections are reversed.
  • Lei et al.: You have seen your own reflection in a mirror. The person looking back at you looks just like you. Where does that reflected person appear to be standing ? Yes, they appear to be on the other side of the mirror. That is really strange to think about, but very cool. Have you ever waved at your reflection in a mirror? The reflected image will wave back at you. Here is something to try next time you stand in front of a mirror. Wave to your reflection with your right hand. What hand do you think the reflection will wave back with? The same hand? A different hand? You will notice something interesting. The reflection waves back with the hand on the same side as you, but it is their left hand. The image in a reflection is reversed. This is just like the image of the sign above. Light rays strike flat shiny surfaces and are reflected. The reflections are reversed.
  • FRESH: You have seen your own reflection in a mirror. The person looking back at you looks just like you. Where does that reflected person appear to be standing ? Yes, they appear to be on the other side of the mirror. That is really strange to think about, but very cool. Have you ever waved at your reflection in a mirror? The reflected image will wave back at you. Here is something to try next time you stand in front of a mirror. Wave to your reflection with your right hand. What hand do you think the reflection will wave back with? The same hand? A different hand? You will notice something interesting. The reflection waves back with the hand on the same side as you, but it is their left hand. The image in a reflection is reversed. This is just like the image of the sign above. Light rays strike flat shiny surfaces and are reflected. The reflections are reversed.

人手評価

人手評価 | 評価視点と評価設定

人手評価の評価視点

  • Sufficiency
    • FRESHによる根拠を使って人間が予測できるか
  • Readability & Understandability
    • 仮定: 人間は単語レベルのばらばらな根拠よりも文レベルのまとまった根拠を好むのではないか
    • 一貫しているか・理解しやすいか

人手評価の設定

  • 評価データ
    • 人手根拠が予め付与されている Movies と MultiRC
    • 抽出した根拠に対して以下の質問をアノテータに示す:
      • 予測: Pos or Neg (Movie), True or False (MultiRC)
      • 確信度: 1 (not confident) ~ 4 (very confident)
      • 可読性: 1 (very difficult) ~ 5 (very easy)

人手評価 | 詳細

根拠の抽出方法

  • テストデータから100件ランダムに取得し根拠を抽出:
    • あらかじめ付与されている人手の根拠とする
    • 長さがkになるようランダムに選択して根拠とする
    • [Lei+ EMNLP16] で得られたものを根拠とする
    • FRESHで得られたものを根拠とする
  • アノテータによる人手評価の実施方法
    • Amazon Mechanical Turkを使用
    • アノテータ間のagreement
      • Movies: 84%, MultiRC: 89%
    • 1HITあたり0.24ドルでアノテータに依頼
      • 平均完了時間2分 (予備実験より) と時給7.20ドルに基づいて計算している
        • アノテータの英語力をテストして確認しているわけではない

人手評価 | Amazon Mechanical Turk上での評価

人手評価 | 評価結果

  • 人手根拠とモデルによる根拠が同等の精度を達成
  • 非連続な根拠 (non-contiguous) より、連続した根拠 (contiguous) を人間に見せたときに予測精度が高い➜ 人間は連続した根拠 (文) を強く好む傾向がある
  • FRESHのベストな結果は確信度や可読性が高い
  • FRESHは合理的な根拠 (faithful rationales) を示している

結論と所感

  • 予測モデルを説明可能にするFRESHを提案
    • さまざまな重要度算出手法が適用可能
    • シンプルな枠組みで先行研究の複雑なモデルを凌駕
    • FRESHによる根拠は人間にとっても良いものであった
  • 入力テキストのどの部分が重要かを示すことが可能
    • 根拠として抽出したテキストがタスクを解く上で重要であることを示せる
      • しかしなぜその部分が根拠として選ばれたかを解釈することはまだできていない

所感: Attentionに説明性はない (なくはない) の作者がattentionを重要度と見なして使っているのは筋が通っていない気がした タイトルでは “by Construction” だが 根拠を構築している感はなかった ➜ human in the loop 的なものを想像していた

参考文献

  • [Williams ML92] Williams, Ronald J. "Simple statistical gradient-following algorithms for connectionist reinforcement learning." Machine learning 8.3-4 (1992): 229-256.
  • [Zaidan+ NAACL07] Zaidan et al. "Using “Annotator Rationales” to Improve Machine Learning for Text Categorization." Proc. of NAACL-HLT 2007.
  • [Ribeiro+ KDD16] Ribeiro et al. "" Why should I trust you?" Explaining the predictions of any classifier." Proc. of KDD 2016.
  • [Zhang+ EMNLP16] Zhang et al. "Rationale-Augmented Convolutional Neural Networks for Text Classification." Proc. of EMNLP 2016.
  • [Lei+ EMNLP16] Lei et al. "Rationalizing Neural Predictions." Proc. of EMNLP 2016.
  • [Kim+ NIPS16] Kim, Been, Rajiv Khanna, and Oluwasanmi O. Koyejo. "Examples are not enough, learn to criticize! criticism for interpretability." Proc. of NIPS 2016.
  • [Doshi-Velez+ 17] Doshi-Velez et al. "Towards a rigorous science of interpretable machine learning." CoRR preprint arXiv:1702.08608 (2017).
  • [Lipton+ Queue18] Lipton, Zachary C. "The mythos of model interpretability." Queue 16.3 (2018): 31-57.
  • [Feng+ EMNLP18] Feng et al. "Pathologies of Neural Models Make Interpretations Difficult." Proc. of EMNLP 2018.
  • [Ehsan+ AIES18] Ehsan, Upol, et al. "Rationalization: A neural machine translation approach to generating natural language explanations." Proc. of AIES 2018.
  • [Strout+ BlackboxNLP19] Strout et al "Do Human Rationales Improve Machine Explanations?." Proc. of ACL Workshop BlackboxNLP2019.
  • [Ehsan+ IUI19] Ehsan et al. "Automated rationale generation: a technique for explainable AI and its effects on human perceptions." Proc. of IUI2019.
  • [Zhong+ 19] Zhong et al. "Fine-grained sentiment analysis with faithful attention." CoRR preprint arXiv:1908.06870 (2019).
  • [Rudin NatureMI19] Rudin, Cynthia. "Stop explaining black box machine learning models for high stakes decisions and use interpretable models instead." Nature Machine Intelligence 1.5 (2019): 206-215.
  • [Liu+ 19] Liu et al. "Roberta: A robustly optimized bert pretraining approach." arXiv preprint arXiv:1907.11692 (2019).
  • [Devlin+ NAACL19] Devlin, Jacob, et al. "BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding." Proc. of NAACL-HLT2019.
  • [Jain+ NAACL19] Jain et al. "Attention is not Explanation." Proc. of NAACL-HLT 2019.
  • [Lertvittayakumjorn+ EMNLP19] Lertvittayakumjorn et al. "Human-grounded Evaluations of Explanation Methods for Text Classification." Proc. of EMNLP-IJCNLP2019.
  • [Yu+ EMNLP19] Yu, Mo, et al. "Rethinking Cooperative Rationalization: Introspective Extraction and Complement Control." Proc. of EMNLP-IJCNLP19.
  • [Serrano+ ACL19] Serrano et al. "Is Attention Interpretable?." Proc. of ACL 2019.
  • [Bastings+ ACL19] Bastings et al. "Interpretable Neural Predictions with Differentiable Binary Variables." Proc. of ACL 2019.
  • [Wiegreffe+ EMNLP19] Wiegreffe et al. "Attention is not not Explanation." Proc. of EMNLP 2019.
  • [Brunner+ ICLR20] Brunner, Gino, et al. "On identifiability in transformers." Proc. of ICLR 2020.
  • [Pruthi+ ACL20] Pruthi et al. "Learning to deceive with attention-based explanations." Proc. of ACL 2020.

*1:論文を読んで理解した範囲であり、個人的な経験や主観が含まれている可能性があります。

【外部発表】Human Attention Maps for Text Classification: Do Humans and Neural Networks Focus on the Same Words?

こんにちは。@shunk031です。論文読み会で登壇したので、そのときの発表資料と概要、及び頂いた質問への回答*1を載せます。

イベント: ACL 2020 オンラインLT会

nlpaper-challenge.connpass.com

登壇概要

タイトル:Human Attention Maps for Text Classification: Do Humans and Neural Networks Focus on the Same Words?

Human Attention Maps for Text Classification: Do Humans and Neural Networks Focus on the Same Words?

  • Cansu Sen1, Thomas Hartvigsen2, Biao Yin2, Xiangnan Kong1,2, and Elke Rundensteiner1,2
    • 1Computer Science Department , Worcester Polytechnic Institute
    • 2Data Science Program, Worcester Polytechnic Institute

自己紹介

  • 北田 俊輔 法政大学大学院 理工学研究科 D1 彌冨研 所属 @shunk031 shunk031
    • 深層学習を元にした基礎・応用研究
      • 自然言語処理: 文字形状に着目・解釈性のあるモデル
        • YANS2019にて 奨励賞 を受賞
        • ACL2020 SRWにて共著の論文採択
      • 医用画像処理: 悪性黒色腫自動診断システムの構築
        • IPSJ2019にて 学生奨励賞 受賞
      • 計算機広告: 広告クリエイティブの評価・作成支援
        • KDD2019(データマイニングの最難関国際会議)にて論文採択
          • Attention可視化によるクリエイティブ作成支援

本論文を選択した理由

人間とニューラルネットワークは予測の際に同様の単語に焦点を当てているのかが気になった

  • Attention機構はモデルの予測の解釈にも使われてきた
  • しかし解釈性を疑問視する論文が複数登場してきた

    クラウドソーシングによる人手attentionがアノテーションされたデータセットに興味を持った

  • 学習済みattentionに対する解釈性を直接評価可能
  • 人手attentionを教師にして、よりhuman-friendlyな新しいモデル・学習法を模索可能

本研究の貢献

Yelpレビューデータセットを元にAttention mapを人手でアノテーション

  • Amazon Mechanical Turkを利用
  • データ収集方法を詳細に検討し、15,000件を収集・公開

人手のattentionと深層学習モデルのattentionを比較するための新たな評価指標を考案

  • 様々な指標で評価: 単語の重複度、語彙の分布 etc.

人手のattentionと深層学習モデルのsoft/hard attentionに対して比較・分析

  • 深層学習モデルのattentionは人間と似た説明を与える
  • 文の長さが長くなるほど異なった説明を与える

関連研究

Attention機構の解釈性

  • さまざまな先行研究で言及 [Choi+ NIPS16; Sha+ ACM-BCB17; Yang+ NAACL16]
  • その解釈性を疑問視する研究の出現 [Jain+ NAACL19; Serrano+ ACL19]
  • 一方attentionは入力単語とモデルの予測の間に意味のある関係性があることを指摘 [Wiegreffe+ EMNLP19]

Attentionの評価

  • VQAタスクにおけるattentionの評価 [Das+ EMNLP16]
  • ERASER [DeYong+ ACL20]

Preliminaries on Attention Maps

本研究で登場する Attention Map について

Human Attention Map (HAM)

  • 人間による2値のattention map (binary AM)

Machine Attention Map (MAM)

同一テキスト内の複数の異なるHAM

Consensus Attention Map (CAM)

  • bit-wise AND なHAMを計算したもの

Super Attention Map (SAM)

  • bit-wise OR なHAMを計算したもの

Human Attention Mapの収集と分析

概要: クラウドソーシングで収集

予備実験1: アノテーションの質の調査

  • 人間さまのアノテーションの質を調査
  • チートやズルをするアノテータがいないかどうか等

予備実験2: アノテーション方法の検討

read-firstデザイン

  • 文を先に読んでもらってから感情値を予測してもらうその後どの単語が重要かのアノテーションしてもらう

free-styleデザイン

Human Attention Mapの収集と分析

  • データ収集で用意したインターフェース

Human Attention Mapの収集と分析

  • レビュー文と感情値選択に寄与しそうな単語のアノテーション
  • レビューに対する感情値の選択
  • データ収集で用意したインターフェース

Human Attention Mapの収集と分析

予備実験1: アノテーションの質の調査

  • 2つの小規模データセット
    • Yelp datasetからランダムに50文取得
    • A: 50単語/文、B: 100単語/文
  • アノテーション時の数値感
    • 1文あたりのアノテーション時間
      • 44秒(50単語/文)、70秒(100単語/文)
    • 1文あたりの選択された単語数
      • 9単語(50単語/文)、13単語(100単語/文)
  • 1文あたりの単語数が増えるにつれてアノテーション時間・選択された単語数それぞれ増加する
    • アノテータがランダムにアノテーションしているわけではなさそうという結論

Human Attention Mapの収集と分析

予備実験2: アノテーション方法の検討

  • 2つのアノテーション方法
    • read-first と free-style
  • アノテーション時の数値感
    • アノテータ間のagreement
      • 73% (read-first)、69% (free-style)
    • ground truthとどれくらい似ているか
      • 3.30 (read-first)、3.10 (free-style)
    • cross-sentimentでノイジーなデータの量(選択した感情値と異なる場合のスコア)
      • 0.5 (read-first)、1.0 (free-style)

Human Attention Mapの収集と分析

最終的なhuman attention mapの収集方法と結果

Yelp Human Attention Dataset (YELP-HAT)

Attention Map Similarity Framework

人間と機械のattention mapに対する類似度評価

単語選択の重複度

  • 人間AMと機械AMの2つが似ている➜ 同様の箇所にattentionが当たっているかを評価

    語彙の分布

  • 感情の語彙的指標は品詞 (e.g., 名詞・動詞・形容詞) と一般的に関連していることが知られている [Marimuthu+’12]➜ 人間AMと機械AMの語彙的な類似度を評価

    感情値の文脈依存性

  • ネガティブなレビューの中にあるポジティブな言葉を考慮したり、逆もしかりな場合がある➜ 人間AMと機械AMに対して文脈を考慮して評価

人間と機械のattention mapに対する類似度評価

単語選択の重複度 (Behavioral similarity)

  • HAMとMAMで選択された単語重複度合いを計算

    語彙の分布 (Lexical similarity: LS)

  • HAMとMAMそれぞれで選択された品詞の分布間の相関ランダムなattention R を元に0-1となるように計算

人間と機械のattention mapに対する類似度評価

感情値の文脈依存性 (Cross-sentiment selection rate: CSSR)

  • 肯定的な文 (Y=1) のHAMが付与されている単語と否定的な文 (Y=0) のHAMが付与されている単語に着目
    • get_words() は条件に合う単語を取得
    • 肯定的な文に現れる否定的なな単語、否定的な文に現れる肯定的な単語の比率を比較

Is Machine Attention Similar to Human Attention?

機械の注意は人間の注意と似ているのか?

Machine attention mapの学習

  • Amazon Mechanical Turkを利用
  • データ収集方法を詳細に検討し、15,000件を収集・公開

文あたりの単語数で分けたときのモデルの精度

  • 単語数別に3つのデータセットを構築
    • Yelp-50、Yelp-100、Yelp-200

人間の注意と機械の注意の類似性分析

  • 単語選択の重複度
  • 語彙分布
  • 感情値の文脈依存性

機械の注意は人間の注意と似ているのか?

Machine attention mapの学習

  • 使用データセット
    • Yelp dataset
    • 0〜5の評価値が付与されている
  • データセットの前処理と分割
    • negative: 1〜2、positive: 4〜5 の2値分類設定
    • 2値が不均衡にならないように tng:val:tst = 8:1:1
  • モデル
    • RNN (soft attention)
      • uni-, bi-directional LSTM with additive attention
    • Rationale mechanisms (hard attention) [Lei+ EMNLP16; Bao+ EMNLP18]
      • ハイパーパラメータとして予測根拠となりうる箇所の個数やその特徴表現の近さを指定可能

機械の注意は人間の注意と似ているのか?

注意の可視化結果

  • 上から HAM, HAM, RNN, bi-RNN, Ratinales の順

機械の注意は人間の注意と似ているのか?

文あたりの単語数で分けたときのモデルの精度

  • 文長が長くなるほどhuman・machineともに精度減少
    • 文が長いと一回で文意を読み解くのは難しく、より集中して読み解かなくてはならないため
  • 双方向RNNはパフォーマンス的にhumanと近い傾向
    • テキスト読解の双方向性が人間に近い

単語選択の重複度の側面での分析

  • HAMと比べてConsensus Attention Mapの類似度が他と比べて高い
    • 複数のアノテータが重要だと判断した単語
    • 機械の注意でもそれらが重要だと予測
  • CAMと比べてSuper Attention Mapの類似度は低い
    • 人間の主観的な単語選択は常に機械から高い注目を受けているわけではない
  • もちろん人間同士の類似度は機械との類似度よりも高い
    • 完全に類似はしていない➜ それぞれ主観的な単語選択
    • 文が長くなればなるほど類似度は低くなっていく

機械の注意は人間の注意と似ているのか?

語彙分布の側面での分析

  • Bi-RNN Attentionが人間に近い注意を学習
    • 文が長くなればなるほどスコアは減少
  • どの語彙カテゴリが多く選ばれているか
    • 人間・機械ともに○: 形容詞、比較級形容詞、名詞
      • 人間 ○: 副詞
      • 機械 ○: 固有名詞(複数形)
    • 人間・機械ともに✘: 人称代名詞

機械の注意は人間の注意と似ているのか?

感情値の文脈依存性の側面での分析

  • 人間アノテータ
    • レビューが肯定的であれば、ほぼ肯定的な単語を選択
    • 否定的なレビューについては否定的な単語よりも肯定的な単語のほうが多く選択
  • RNN attention
    • 否定的な文脈での肯定的な単語の選択率が2倍以上
    • 肯定的なレビュー文において

結論と今後の展望

Yelpレビューデータセットを元にAttention mapを人手でアノテーション

  • Amazon Mechanical Turkを利用し、15,000件を収集

    人手のattentionと深層学習モデルのattentionを比較するための新たな評価指標を考案し、分析

  • 様々な指標で評価: 単語の重複度、語彙の分布 etc.

    深層学習モデルのattentionは人間と似た説明を与える

  • Attentionを教師ありで学習するモデルの検討
    • CV分野や一部のNLPタスクでは教師として注目領域を学習するモデルが提案 [Chen+ CVPRW17, Liu+ ACL17] ➜ NLP分野でも実現可能か?
  • 再現実験を準備中
    • shunk031/human-attention-map-for-text-classification 2分

33 Appendix

アノテータ間で選択された単語数の違い 34 多数アノテーションしているアノテータもいれば、ごく少数の単語にのみアノテーションしているアノテータもいる

参考文献

  • [Marimuthu+ ‘12] Marimuthu et al. "How Human Analyse Lexical Indicators of Sentiments-A Cognitive Analysis Using Reaction-Time." Proc. of the 2nd Workshop on Sentiment Analysis where AI meets Psychology. 2012.
  • [Lei+ EMNLP16] Lei et al. "Rationalizing Neural Predictions." Proc. of EMNLP 2016.
  • [Das+ EMNLP16] Das et al. "Human Attention in Visual Question Answering: Do Humans and Deep Networks look at the same regions?." Proc. of EMNLP 2016.
  • [Yang+ NAACL16] Yang et al. "Hierarchical attention networks for document classification." Proc. of NAACL-HLT 2016.
  • [Choi+ NIPS16] Choi et al. "Retain: An interpretable predictive model for healthcare using reverse time attention mechanism." Proc. of NIPS 2016.
  • [Sha+ ACM-BCB17] Sha et al. "Interpretable predictions of clinical outcomes with an attention-based recurrent neural network." Proc. of ACM-BCB 2017.
  • [Liu+ ACL17] Liu et al. "Exploiting argument information to improve event detection via supervised attention mechanisms." Proc. of ACL 2017.
  • [Chen+ CVPRW17] Chen et al. "Attending to distinctive moments: Weakly-supervised attention models for action localization in video." Proc. CVPR Workshops 2017.
  • [Bao+ EMNLP18] Bao et al. "Deriving Machine Attention from Human Rationales." Proc. of EMNLP 2018.
  • [Lipton Queue18] Lipton, Zachary C. "The mythos of model interpretability." Queue ACM 2018.
  • [Jain+ NAACL19] Jain et al. "Attention is not Explanation." Proc. of NAACL-HLT 2019.
  • [Serrano+ ACL19] Serrano et al. "Is Attention Interpretable?." Proc. of ACL 2019.
  • [Wiegreffe+ EMNLP19] Wiegreffe et al. "Attention is not not Explanation." Proc. of EMNLP 2019.
  • [DeYoung+ ACL20] DeYoung et al. "ERASER: A Benchmark to Evaluate Rationalized NLP Models." Proc. of ACL 2020.

*1:論文を読んで理解した範囲であり、個人的な経験や主観が含まれている可能性があります。

深層学習モデルの実装を爆速にするVSCodeの設定メモ

こんにちは。@shunk031です。 新型コロナウイルスが猛威を奮っていますね。 不要不急の外出は控えるのが大切そうです。 こういう時は引きこもって論文を読むのが一番です。

今回はコードエディタであるVSCodeで、深層学習モデルの実装を爆速にするための設定についてメモします。 深層学習モデルの実装をする際にはリモート上にあるGPUを搭載したサーバで実装をしたりデバッグすることが非常に多いです。 VSCodeはこうしたリモートでのコード編集およびデバッグを簡単に行える仕組みを多数揃えています。

本記事では、深層学習モデルの実装に頻繁に利用されるPythonを対象に、以下の観点からモデルの実装を爆速にする設定や機能について紹介します:

  • Pythonの開発環境の構築
  • リモートのGPUサーバに接続するための設定
  • 深層学習モデルの実装・デバッグを簡単にする機能
  • おすすめのショートカットキー・拡張機能・カスタマイズ

私自身これまで魔改造したEmacsに引きこもってコードを書いてきましたが、以下の本でVSCodeに入門することができました。 体系的に整理されており、他のエディタから乗り換えを検討している方にオススメできる内容です。

Visual Studio Code実践ガイド —— 最新コードエディタを使い倒すテクニック

Visual Studio Code実践ガイド —— 最新コードエディタを使い倒すテクニック

  • 作者:森下 篤
  • 発売日: 2020/02/21
  • メディア: 単行本(ソフトカバー)

VSCodeのインストール

WindowsMacOSともに公式サイトからダウンロード可能です。

code.visualstudio.com

MacOSにおいて brew がインストールされている場合、以下のコマンドでインストールが可能です:

$ brew cask install visual-studio-code

コマンドパレットによるコマンドの実行

以降、簡単のためVSCodeコマンドパレットWindows: alt + shift + p , MacOS: cmd + shift + p)からコマンドを実行します。 コマンドパレットやショートカットキーに慣れるとキーボードから手を離すことなく編集が可能になります。 テキスト編集の効率化のために慣れることをおすすめします。

settings.json によるVSCodeの設定

VSCodeGUIによる設定のほか、 settings.json による設定の記述が可能です。 コマンドパレットから > Preferences: Open Settings (JSON) で設定ファイルを開くことができます。 以降では私がおすすめする設定をこの settings.json の形式で紹介します。 最終的な全体の設定は後半のセクションに示します。

Pythonの開発環境の構築

VSCodeによるPythonの開発環境はPython拡張機能をインストールすることで殆ど設定不要でリッチな補完やリファクタリング機能が使用できます。

拡張機能のインストール

Pythonの開発環境のための拡張機能をインストールします。 コマンドパレットから > View: Show Extensions を選択して検索窓から python と入力することで、以下の拡張機能を見つけることができますので、インストールしてください。

marketplace.visualstudio.com

settings.json の設定例

以下にPython拡張機能に対するsettings.jsonの設定例を示します:

{
    "python.formatting.provider": "black",
    "python.linting.pylintEnabled": false,
    "python.linting.flake8Enabled": true,
    "python.linting.flake8Args": [
        "--ignore=E501,W503"
    ],
    "python.sortImports.args": [
        "-m 3"
    ],
    "python.jediEnabled": false
}
  • black : Formatter
    • blackによるソースコードの自動フォーマットを利用します。カスタマイズ不要で規約に沿ったフォーマットに整えてくれます。
  • flake8 : Linter
    • flake8による文法チェックを利用します。
    • blackと併用する際に E501 (一行が長すぎるとエラー) *1W503 (二項演算子の前に改行すると警告) *2 を無視する設定を追加します。
    • pylintはflake8と同様に文法チェッカーとして広く用いられていますが、今回紹介する設定例ではflake8を用いるため、offにします。
  • isort : import文のソート
    • isortによるimport文の自動整理を利用します。
    • import文を改行する際のスタイルを -m 3 のように指定します。
  • jedi : コード補完
    • jediはこれまで広くPythonのコード補完に用いられてきましたが、Microsoft製のコード補完がよりリッチに動作するため、今回紹介する設定例ではoffにします。

これらのパッケージは対象のPython環境にインストールされていない場合はインストールを促すポップアップが表示されます。指示に従うことで簡単にインストールが可能です。

Python環境の指定

pyenv 等を用いた仮想のPython環境が存在する場合、コマンドパレットから> Python: Select Interpreter を選択し、Python環境の切り替えが可能です。 対象の仮想環境を選択して切り替えを行ってください。

リモートGPUサーバに接続するための設定方法

VSCodeではRemote developmentの拡張機能をインストールすることにより、ローカルでテキスト編集しているのとほとんど同様の編集が可能になります。

拡張機能のインストール

リモートのサーバ上のテキストを編集するために拡張機能をインストールします。 コマンドパレットから > View: Show Extensions を選択して検索窓から remote と入力することで、以下の拡張機能を見つけることができますので、インストールしてください。

marketplace.visualstudio.com

リモートのサーバにVSCodeで接続

コマンドパレットから > Remote-SSH: Open configuration File を選択すると、sshの設定ファイルが開きます。こちらに接続先となるサーバの情報を以下のように記入しておきます:

Host <任意の名前>
    Hostname <サーバのIPアドレス>
    User <ログインしたいサーバ上のユーザ名>
    IdentityFile <ssh鍵の場所>

サーバに接続するには、コマンドパレットから > Remote-SSH: Connect to Host を選択すると、<任意の名前> として設定したサーバ名が選択肢に現れるので選択します。 そうすると新しいウィンドウが立ち上がり、サーバに接続された状態のVSCode画面が現れます。

リモートのサーバに拡張機能をインストール

これまで複数の拡張機能をインストールしてきました。 VSCodeでは、リモートのサーバにも同様の拡張機能をインストールする必要があることに注意してください。

予めインストールすることが決まっているPython拡張機能などは、以下のようにsettings.jsonに記述することによって自動でインストールすることができます:

{
   "remote.containers.defaultExtensions": [
        "ms-python.python",
        "christian-kohler.path-intellisense"
    ]
}

深層学習モデルの実装・デバッグを簡単にする機能

深層学習モデルの実装を行う上で一番時間がかかるのは「モデルの入出力をする部分」と「モデル内のテンソル形状を合わせる部分」だと思います。もうここらへんもエーアイでなんとかしたいですが、そう簡単にはいきません。VSCodeデバッグ機能はこうした微妙の修正を必要とする部分で力を発揮します。

VSCodeの強力なデバッグ機能

深層学習モデルの実装で度々用いられるPyTorchによる実装をデバッグしている様子が以下のツイートで取り上げられています。

VSCodeではPython拡張機能をインストールしただけで次のようなことが可能です:

  • テンソルの値や形状が自動的に表示される(左画面)
  • マウスカーソルを変数に合わせるだけでテンソルの値や形状、重みやデバイスタイプまで確認できる

このように、深層学習モデルのデバッグに必要不可欠な情報が簡単に確認可能です。 一般的にデバッグをする際にはpdbといったデバッガを使用したり、printデバッグ を駆使していると思いますが、マウスホバーのみでテンソルの値や形状を確認することができ、こうした労力がほぼ0になります。

Pythonスクリプトデバッグ

VSCodeによるデバッグの流れとして、デバッグの設定を記述した launch.json を作成します。 launch.jsonの設定例として、以下のサイトに各プログラミング言語の例が掲載されています。 74th.github.io

今回は特にPythonを対象としているので、以下のページを見て設定します。

74th.github.io

具体的なデバッグの詳細については割愛します。公式サイトのページが特に詳しく紹介されているので参考にしてください。

code.visualstudio.com

AllenNLPモデルのデバッグ

深層学習による自然言語処理モデルを実装する際、AllenNLPを用いる方も多いのではないでしょうか? VSCodeデバッグ機能を用いてAllenNLPで実装したモデルをデバッグするには以下のサイトが参考になります。

docs.allennlp.org

デバッグ時に呼び出すスクリプトを記述します。 あとは launch.json に同様の手順でデバッグの設定を記述するだけのみです。

余談

ここからは私自身がおすすめするVSCodeの各種設定について述べます。

おすすめのショートカットキー・拡張機能・カスタマイズ

おすすめのショートカットキー

テキスト編集を効率よくできるショートカットキーとして私が多用しているものを列挙します。 以下はMacOSを想定したショートカットキー記述ですが、Windowsの場合は cmdalt に読み替えてください。

  • コマンドパレットを開く
    • 最重要ショートカットです。本記事でも何度も登場しました。
    • cmd + shift + p
  • サイドバーを開閉する
    • 左にあるサイドバーを表示したり隠したりします。エディタ領域が狭くなるので隠します。
    • cmd + b
  • ファイルエクスプローラを開く
    • ファイル一覧を見るのに使います。
    • cmd + shift + e
  • マルチカーソル系
    • 複数カーソルを表示して変数等を編集するときに使います
      • すべて変更する系
        • 選択中の語句をすべて選択する
          • cmd + shift + l
      • 特定の語句のみを対象として変更する系
        • cmd + d

おすすめの拡張機能

おすすめのカスタマイズ

このセクションでは、これまでに登場してきたおすすめ設定の全体を示します。 これらの設定の反映はコマンドパレットから > Preferences: Open Settings (JSON)settings.json を開いてコピペすることで反映されます。

{
    "editor.cursorStyle": "block",
    "editor.formatOnSave": true,
    "editor.minimap.enabled": false,
    "editor.formatOnType": true,
    "editor.codeActionsOnSave": {
        "source.organizeImports": true
    },
    "files.watcherExclude": {
        "**/.git/objects/**": true,
        "**/.git/subtree-cache/**": true,
        "**/node_modules/**": true,
        "**/dataset/**/*.{png,zip,jpg,npz}": true,
    },
    "remote.containers.defaultExtensions": [
        "christian-kohler.path-intellisense",
        "davidhouchin.whitespace-plus",
        "JoeBerria.statusbarerror",
        "ms-python.python",
        "streetsidesoftware.code-spell-checker"
    ],
    "python.formatting.provider": "black",
    "python.linting.flake8Enabled": true,
    "python.linting.pylintEnabled": false,
    "python.jediEnabled": false,
    "python.linting.flake8Args": [
        "--ignore=E501,W503"
    ],
    "python.sortImports.args": [
        "-m 3"
    ],
    "statusbarerror.wholeLine.show": true,
    "window.zoomLevel": 0,
    "window.title": "${folderPath}${separator}${activeEditorShort}${separator}${rootName}",
    "workbench.colorTheme": "Solarized Dark+",
    "workbench.startupEditor": "newUntitledFile",
    "workbench.colorCustomizations": {
        "editorCursor.foreground": "#FFFF00"
    },
    "cSpell.userWords": [
        "conv",
        "cuda",
        "cudnn",
        "lstm",
        "ndarray",
        "numpy",
        "relu",
        "sklearn",
        "tqdm",
    ],
}

以下はこれまで紹介してこなかった設定についてコメントをいれます:

  • "editor.formatOnSave": true
    • ファイルを保存するときにフォーマッタを実行します。特にPythonのフォーマッタであるblackにより、常にコード規約に従った整ったコードを維持できます。
  • "editor.codeActionsOnSave"
    • "source.organizeImports": true
      • ファイルを保存するときにimport文を整理します。特にPythonのisortによって、import文が常に整理された形で維持できます。
  • "editor.minimap.enabled": false
    • ミニマップの表示をoffにします。これいります?
  • "files.watcherExclude"
    • 変更監視を除外するパターンを定義します。深層学習ではたくさんのファイルを扱うため、特に .jpg.png といった画像ファイルや .csv.csv といったテキストファイルを予め除外しておくことをおすすめします。
    • ディレクトリ構造に合わせて適宜変更することをおすすめします。
  • "cSpell.userWords"
    • スペルチェック時に除外する単語群を定義します。

Emacsから乗り換え

私はこれまでEmacsディストリビューションの1つであるSpacemacsを使っていました. 本記事を執筆するにあたり、これまで使ってきたEmacsの操作感にできるだけ近くなるようにいくつか設定しました。以下に詳細を紹介します。

代替となるVSCodeの機能や拡張機能

M-x から始まるコマンド実行

  • コマンドパレット
    • Emacsでは M-x から始まるコマンドが数え切れないほどあります。VSCodeのコマンドパレットはEmacsM-xと同様の立ち位置でして、本記事でもコマンド実行の際に様々な場面で登場してきました。

Emacsキーバインド

カラースキーマ

代替となるショートカットキー

これまで愛用してきたEmacsの操作感に近づけるためにキーバインドの追加や変更は必須です。 キーバインドの変更はコマンドパレットから > Preferences: Open Keyboard Shortcuts (JSON) を選択することで、keybindings.json が開きますので、こちらを追加していきます。 私は現在、以下のキーバインドを定義して使用しています:

[
    {
        "key": "ctrl+i",
        "command": "editor.action.indentLines",
        "when": "editorTextFocus && !editorReadonly"
    },
    {
        "key": "cmd+.",
        "command": "editor.action.revealDefinition",
        "when": "editorHasDefinitionProvider && editorTextFocus && !isInEmbeddedEditor"
    },
    {
        "key": "cmd+,",
        "command": "workbench.action.navigateBack"
    },
    {
        "key": "ctrl+x p",
        "command": "workbench.action.navigateBack"
    },
    {
        "key": "ctrl+x m",
        "command": "workbench.view.scm"
    },
    {
        "key": "ctrl+c ;",
        "command": "editor.action.commentLine",
        "when": "editorTextFocus && !editorReadonly"
    },
    {
        "key": "cmd+w",
        "command": "-workbench.action.closeWindow",
    },
    {
        "key": "cmd+w",
        "command": "-workbench.action.closeActiveEditor"
    },
    {
        "key": "cmd+w",
        "command": "-workbench.action.closeGroup",
    },
    {
        "key": "cmd+w",
        "command": "emacs-mcx.copyRegion",
        "when": "editorTextFocus"
    }
]

Emacsでは分割した画面を移動する際に C-x o (Ctrl + x o) を頻繁に利用しますが、この逆の操作 C-x p のようなもの*3VSCodeおよび追加したEmacsキーバインドの拡張にはありませんでした。 そこで次のような設定を定義することで操作を追加します:

{
    {
        "key": "ctrl+x p",
        "command": "workbench.action.navigateBack"
    }
}

代替できなかったEmacsの機能や拡張機能

VSCodeを使ってきて、EmacsにあってVSCodeに無くクリティカルに重要であった機能は今の所私のユースケースではなさそうです。しかしながらEmacs Lispには便利な拡張がたくさんあり、以下にいくつか紹介したいと思います。代替できそうな拡張機能をご存知ある方はぜひ @shunk031 までお知らせください。

dotfilesとして設定を管理する

これまでたくさんの拡張機能の導入や、それに伴った settings.jsonkeybindings.json の設定を行ってきました。 これらをGitHub等で管理することで、違うデバイスでも同じ環境でコードを書くことが可能です。

私はもともとGitHub上でdotfiles*4を管理しているため、VSCodeの設定ファイルもdotfilesに含めて管理しようと考えました。

github.com

具体的には、dotfilesディレクトリ内の settings.json および keybinding.json からもともとあった設定ファイルの場所にシンボリックリンクを張ります:

$ ln -sf ~/.dotfiles/.vscode.d/settings.json ~/Library/Application\ Support/Code/User/
$ ln -sf ~/.dotfiles/.vscode.d/keybindings.json ~/Library/Application\ Support/Code/User/

こうすることでGitHubで設定ファイルを管理する体制ができるわけですが、最新版ではVSCodeが設定ファイルの同期をサポートし始めました。

forest.watch.impress.co.jp

お好きな方法で設定ファイルを管理することをおすすめします。

おわりに

本記事では、深層学習モデルの実装に頻繁に利用されるPythonを対象に、深層学習モデルの実装を爆速にする設定や機能について紹介しました。 リモートにあるGPUサーバに簡単に接続が可能であり、またリモート上のコードの編集やデバッグが容易であることを確認しました。これらの機能をフル活用することにより、今まで以上に深層学習モデルの実装が高速に行える可能性があると考えています。

また、Emacsから乗り換えを検討している方たちに向けて、代替可能な拡張機能やショートカットキーを示し、代替ができていない拡張機能についても示しました。これらの拡張機能は自身で作ることが可能なので、少しずつ穴を埋められるような拡張機能を作れたらよいなと考えています。

参考記事

Windows向け

phst.hateblo.jp

*1:PEP 501 -- General purpose string interpolation | Python.org https://www.python.org/dev/peps/pep-0501/

*2:PEP 503 -- Simple Repository API | Python.org https://www.python.org/dev/peps/pep-0503/

*3:EmacsでC-x oの逆動作をC-x pに割り当てる - 拡張現実ライフ

*4:. (ドット) から始まる設定ファイルのことです。.bashrc や .zshrc 、tmux.conf 、.vimrc などを指します。