今年行けなかった国内・海外旅行を供養する
こんにちは @shunk031です。GPUマシンで暖を取る季節になってきましたね。まずは実験を回しましょうか。
この記事は 法政大応情 Advent Calendar 2020 2日目の記事です。
去年、所属研究室で 彌冨研 Advent Calendar 2019 をやっていた頃と世界情勢がまるっきり変化してしまいました。 その影響もあり、今年行く予定であった国内・海外旅行がキャンセルになることが多かったです。
この記事では、今年行く予定であったが行けなかった国内・海外旅行を列挙し、今後の世界情勢が良くなったときに行けるようにメモとして残します。
海外旅行
今年は国際会議での学会発表の他、東京オリンピックから逃げるための旅行を予定していました。
アメリカ・シアトル
7月の中旬1週間程度滞在予定でした。 この期間はACL2020がシアトルで行われる予定でした。 留学生と書いた論文が採択されたため付いていく予定でしたが、オンライン発表になってしまいました。
アメリカ・ハワイ
8月最初の1週間程度滞在予定でした。 当初は8月初めの灼熱のなか東京オリンピックが開催される予定になっており、逆張りのオタクこと私は東京にいるより海外に居たほうが良いと考えて適当にハワイへの飛行機を取っていました。
アメリカ・サンディエゴ
8月の後半1週間程度滞在予定でした。 この期間はKDD2020がサンディエゴで行われる予定でした。 残念ながら投稿した論文が採択されなかったのでおそらく行けなかったのですが、とても楽しみな旅行でした。
中国・蘇州
12月の初旬に1週間程度滞在予定でした。 この期間はAACL-IJCNLP2020が蘇州で行われる予定でした。 後輩と書いた論文が採択されたため付いていく予定でしたが、オンライン発表になってしまいました。
国内旅行
国内旅行もベースは学会発表ですが、推しのライブへ行くための遠征の予定もありました。
金沢
3月初旬の1週間程度滞在予定でした。 この期間は情報処理学会 第82回全国大会 が金沢工業大学で行われる予定でした。 後輩の発表を見に行く予定でしたがオンライン発表になり、この予定をキャンセルしました。
茨城
3月中旬の1週間程度滞在予定でした。 この期間は言語処理学会 第26回年次大会 が茨城大学で行われる予定でした。 論文を発表予定でしたがオンライン発表になり、この予定をキャンセルしました。
京都
5月23-24日で滞在予定でした。 この期間は小倉 唯 LIVE TOUR 2020『#LOVEcall』京都公演がロームシアター京都で行われる予定でしたが、公演中止のためこの予定をキャンセルしました。
名古屋
5月30-31日で滞在予定でした。 この期間は小倉 唯 LIVE TOUR 2020『#LOVEcall』愛知公演が一宮市民会館で行われる予定でしたが、公演中止のためこの予定をキャンセルしました。
矢場とんの味噌カツが食べたいです(以下は1年前に昔訪れたときのツイート)。
明らかな美味しさを感じた (@ 矢場とん 名古屋駅エスカ店 in Nagoya, 愛知県) https://t.co/pNGFnpjKir pic.twitter.com/qMp5l2qmJ7
— しゅんけー (@shunk031) 2019年3月11日
熊本
6月の中旬1週間程度滞在予定でした。 この期間は人工知能学会 第34回全国大会 が熊本城ホールで行われる予定でした。 論文発表と招待講演を予定していましたがオンライン発表になり、この予定をキャンセルしました。
おまけ: Go To キャンペーンで行った旅行
金沢
8月17-21日でGo Toキャンペーンを利用して滞在しました。 3月に金沢へ行く予定のリベンジでした。
情報処理学会(金沢開催予定だったやつ) (@ 北陸新幹線 金沢駅 in 金沢市, 石川県) https://t.co/tskFqvLIT2
— しゅんけー (@shunk031) 2020年8月18日
論文投稿後の能登牛は美味い!!!! (@ 牛や 榮太郎 片町本店 in 金沢市, 石川県) https://t.co/2SdOwRG9Md pic.twitter.com/rw09f7pXZP
— しゅんけー (@shunk031) 2020年8月18日
誰もいない。時間はゆっくり pic.twitter.com/Wc02Xa06Dm
— しゅんけー (@shunk031) 2020年8月19日
京都
11月16-20日でGo Toキャンペーンを利用して滞在しました。 5月に京都へ行く予定のリベンジでした。
後輩が京都に来ているのでノリで来た(フッ軽博士) (@ 京都駅 in 京都市, 京都府 w/ @hitoshu_iyatomy) https://t.co/ztVenOCJot
— しゅんけー (@shunk031) 2020年11月16日
密 (@ 清水寺 in 京都市, 京都府) https://t.co/h2LyoEVDi9 pic.twitter.com/dc1NQf3Fgm
— しゅんけー (@shunk031) 2020年11月16日
おわりに
今年1年で国内・海外含めさまざまな地域へ旅行する予定でしたが、半数以上がキャンセルになってしまいました。Go Toキャンペーンを利用して旅行をしましたが、果たして 旅行をする
ことが正しかったのかは正直自信はありません。このキャンペーンを通じて観光地の方たちの力になれたら幸いです。気持ちよく旅行できる世界が来る日に向けて個人でできることをやっていきたいです。
【外部発表】Learning to Faithfully Rationalize by Construction
こんにちは。@shunk031です。論文読み会で登壇したので、そのときの発表資料と概要、及び頂いた質問への回答*1を載せます。
このツイートのスレッドにてACL2020オンライン読み会で発表した "Learning to Faithfully Rationalize by Construction" に関する質問に回答します。 #ACL2020読み会
— しゅんけー (@shunk031) 2020年9月6日
Q. データセットやタスクによって根拠部分の長さkが変わりそうだが、なにか言及はあったか?
— しゅんけー (@shunk031) 2020年9月6日
A. おっしゃるとおりで、タスクによってかわります。提案手法のハイパラはこのkだけなので、チューニングも苦ではなさそうです。
Q. 付与されている人手による根拠はどれぐらい尤もらしいのか
— しゅんけー (@shunk031) 2020年9月6日
A. このデータセットは ERASER [ACL20](https://t.co/GF2CUNSEBL)で提案されているもので詳細は確認できていませんが、がんばって集めてそうです(そしてERASERの研究チームと紹介した論文の研究チームが同じチームっぽいです)
イベント: ACL 2020 オンライン読み会
登壇概要
タイトル: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 彌冨研 所属
本論文を選択した理由
“Attention is not Explanation” と “Attention is not not Explanation” の著者らによる夢のコラボレーション
Attentionに説明性があるかを解析した論文[Jain+Wallace NAACL19; Wiegreffe+Pinter EMNLP19] の著者による深層学習モデルの予測に対する根拠を学習する手法を提案
本文から根拠を抽出してその根拠を元にタスクを解く新たな枠組みの提案
- 予測の根拠をどのように抽出するかが気になった
- 根拠抽出により短くなったテキストでどれくらいの精度でタスクを解くことができるのか
本研究の貢献
入力文から根拠を抽出し、その根拠を元に予測可能なニューラルテキスト分類の枠組みを提案
- 先行研究のモデルは強化学習ベースのため学習が難しい
- 強化学習を使わない枠組みでモデルを学習
これまでの学習方法固有の複雑さを回避するために新たな学習手法を提案
- 強化学習を使わない枠組みでモデルを学習
- 新たな学習手法 Faithful Rationale Extractionale from Saliency tHresholding (FRESH) を提案
- 根拠を抽出する部分と根拠から予測する部分を別々に訓練可能にする (後述)
提案手法 FRESH に対して人手による評価を実施
- Amazon Mechanical Turkで提案手法の示す根拠を評価
導入: 深層学習モデルの予測に対する説明性
予測の説明性における”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]
- 忠実な説明は予測モデルモデルの根底にある意思決定プロセスを明らかにする手段を提供する
- 非常にチャレンジングだが有益 [Rudin NatureMI19]
関連研究 | 人間による説明性の評価
- 人間による評価
- “ユーザーがある手法の結果を正しく予測できる場合、その手法は 解釈可能である と言える” [Kim+ NIPS16]
- 人手による評価を実施している
- 人間が根拠提示による合理性を好むかを検証 [Ehsan+ AIES18; Ehsan+ IUI19]
- “ユーザーがある手法の結果を正しく予測できる場合、その手法は 解釈可能である と言える” [Kim+ NIPS16]
本研究ではこうした先行研究に倣って、根拠の解釈性や合理性について人手による評価を実施
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値化はルールベースや学習モデルベースなどが適用可能
- suppから得られた重要度を2値化しsnippet を取得➜ このsnippetを予測の根拠として扱う
- Classifierモデル: pred( )extから得られたsnippet を元に正解 yi を予測する➜ 本来の入力よりも短いテキストで予測可能
FRESHの実装
- Supportモデル supp
- ベースモデル: BERT, RoBERTa, SciBERT
- 重要度算出手法: Attention, Gradient
- Extractorモデル ext
- 重要度を元に2つの根拠の取り出し方を考慮 (連続/非連続):
- Contiguous (連続な根拠)
- 重要度が最大になるよう連続したスパンを抽出
- Top-k (非連続な根拠)
- 重要度上位 k 個の単語を連続性関係なく抽出
- Contiguous (連続な根拠)
- 重要度を元に2つの根拠の取り出し方を考慮 (連続/非連続):
- Classifierモデル pred
- すべてのモデルに共通して、BERT表現を使って分類
実験設定
- 評価用データセット (5種)
- 学習方法の詳細
- 比較手法はすべてBERTベースのモデルに変更
- 異なるシード値で5回実験
- 強化学習ベースのモデル (e.g., Lei+ EMNLP16) は性能の分散が大きいため
定量的評価 | 評価方法
- 予測性能の評価
- 性能変化: 根拠の長さ・人手による根拠の使用
- 根拠の長さを変化させたときの性能評価
- 人手による根拠を学習に使用したときの性能評価
- 根拠を考慮した学習法 [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%使ったときの予測精度を比較
- Evidence InferenceとMultiRCは人手の根拠データが存在
- 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ドルに基づいて計算している
- アノテータの英語力をテストして確認しているわけではない
- 平均完了時間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を載せます。
このツイートのスレッドにてACL2020オンラインLT会で発表した "Human Attention Maps for Text Classification: Do Humans and Neural Networks Focus on the Same Words? " に関する質問に回答します。 #xpaperchallenge
— しゅんけー (@shunk031) 2020年8月17日
Q. Qualification Test を通過したアノテータのみにタスクに取り組んでもらう、というようなことは行っていないのでしょうか?
— しゅんけー (@shunk031) 2020年8月17日
A. 論文上では直接言及はされていませんでしたが、複数のアノテーション設定から適切そうなものを選んで最終的な収集方法を決定しているのでまぁ良いか…ぐらいな気持ちです
Q. この分野では感情分析が主なベンチマークなのでしょうか?
— しゅんけー (@shunk031) 2020年8月17日
A. レストラン(今回のYelp)や映画(e.g., IMDB)、Amazonなどのレビューを元にした感情分析はよくあると思います。予測の結果もわかりやすく好まれる傾向がありそうです
Q. 文が長くなるほどsentiment analysisが当たらなくなるというのは、情報量は増えているという点で直観に反する気もするのですが、その辺り何か言及はありましたか?
— しゅんけー (@shunk031) 2020年8月17日
A. 特にattentionの観点では、attentionが薄くなりがち(単語列に対するattentionの合計=1なので)ということは一つ言えそうですね
Q. LSTMの出力に対しての重みを利用していますが、LSTMの各出力が各単語に完全に対応している根拠ってあるんですかね。
— しゅんけー (@shunk031) 2020年8月17日
A. attentionが必ずしも単語に対応していないかもしれませんが、文脈からどの位置の特徴を通すかという点で重要度と言えると思います(この重要度が説明を与えるかはまた別)
イベント: 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
本論文を選択した理由
人間とニューラルネットワークは予測の際に同様の単語に焦点を当てているのかが気になった
- 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]
- Computer Vision (CV) 分野で頻繁に使用されるように➜ NLP分野ではこのようなデータセットが不足
- ERASER [DeYong+ ACL20]
- 小規模だが人手による根拠がアノテーションされている
Preliminaries on Attention Maps
本研究で登場する Attention Map について
Human Attention Map (HAM)
- 人間による2値のattention map (binary AM)
Machine Attention Map (MAM)
- 機械 (ニューラルネット) によるattention map
- Soft AM: 注意の確率分布
- Hard AM: 2値のattention map
同一テキスト内の複数の異なるHAM
Consensus Attention Map (CAM)
- bit-wise AND なHAMを計算したもの
Super Attention Map (SAM)
- bit-wise OR なHAMを計算したもの
Human Attention Mapの収集と分析
概要: クラウドソーシングで収集
- 対象データセット: Yelp dataset
- アノテーション方法: Amazon Mechanical Turk
予備実験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文あたりのアノテーション時間
- 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)
- アノテータ間のagreement
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]
- ハイパーパラメータとして予測根拠となりうる箇所の個数やその特徴表現の近さを指定可能
- RNN (soft attention)
機械の注意は人間の注意と似ているのか?
注意の可視化結果
- 上から 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を教師ありで学習するモデルの検討
- 再現実験を準備中
- 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を対象に、以下の観点からモデルの実装を爆速にする設定や機能について紹介します:
私自身これまで魔改造したEmacsに引きこもってコードを書いてきましたが、以下の本でVSCodeに入門することができました。 体系的に整理されており、他のエディタから乗り換えを検討している方にオススメできる内容です。
Visual Studio Code実践ガイド —— 最新コードエディタを使い倒すテクニック
- 作者:森下 篤
- 発売日: 2020/02/21
- メディア: 単行本(ソフトカバー)
VSCodeのインストール
Windows・MacOSともに公式サイトからダウンロード可能です。
MacOSにおいて brew
がインストールされている場合、以下のコマンドでインストールが可能です:
$ brew cask install visual-studio-code
コマンドパレットによるコマンドの実行
以降、簡単のためVSCodeの コマンドパレット(Windows: alt + shift + p
, MacOS: cmd + shift + p
)からコマンドを実行します。
コマンドパレットやショートカットキーに慣れるとキーボードから手を離すことなく編集が可能になります。
テキスト編集の効率化のために慣れることをおすすめします。
settings.json によるVSCodeの設定
VSCodeはGUIによる設定のほか、 settings.json
による設定の記述が可能です。
コマンドパレットから > Preferences: Open Settings (JSON)
で設定ファイルを開くことができます。
以降では私がおすすめする設定をこの settings.json
の形式で紹介します。
最終的な全体の設定は後半のセクションに示します。
Pythonの開発環境の構築
VSCodeによるPythonの開発環境はPythonの拡張機能をインストールすることで殆ど設定不要でリッチな補完やリファクタリング機能が使用できます。
拡張機能のインストール
Pythonの開発環境のための拡張機能をインストールします。
コマンドパレットから > View: Show Extensions
を選択して検索窓から python
と入力することで、以下の拡張機能を見つけることができますので、インストールしてください。
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
: Formatterflake8
: Linterisort
: import文のソート- isortによるimport文の自動整理を利用します。
- import文を改行する際のスタイルを
-m 3
のように指定します。- これ以外のスタイルは Multi line output modesを参照してください。
jedi
: コード補完
これらのパッケージは対象のPython環境にインストールされていない場合はインストールを促すポップアップが表示されます。指示に従うことで簡単にインストールが可能です。
Python環境の指定
pyenv 等を用いた仮想のPython環境が存在する場合、コマンドパレットから> Python: Select Interpreter
を選択し、Python環境の切り替えが可能です。
対象の仮想環境を選択して切り替えを行ってください。
リモートGPUサーバに接続するための設定方法
VSCodeではRemote developmentの拡張機能をインストールすることにより、ローカルでテキスト編集しているのとほとんど同様の編集が可能になります。
拡張機能のインストール
リモートのサーバ上のテキストを編集するために拡張機能をインストールします。
コマンドパレットから > View: Show Extensions
を選択して検索窓から remote
と入力することで、以下の拡張機能を見つけることができますので、インストールしてください。
リモートのサーバに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による実装をデバッグしている様子が以下のツイートで取り上げられています。
Microsoft VSCode integrates deeply with PyTorch out of the box.
— PyTorch (@PyTorch) 2018年11月26日
As @aerinykim highlights:
1. It shows values inside tensors. (Left panel)
2. By simply mousing over, you can see the variable's shape, weight, bias, dtype, device, etc.https://t.co/GFsRNkfXtC pic.twitter.com/voxEO50bl7
VSCodeではPython拡張機能をインストールしただけで次のようなことが可能です:
このように、深層学習モデルのデバッグに必要不可欠な情報が簡単に確認可能です。
一般的にデバッグをする際にはpdbといったデバッガを使用したり、printデバッグ
を駆使していると思いますが、マウスホバーのみでテンソルの値や形状を確認することができ、こうした労力がほぼ0になります。
Pythonスクリプトのデバッグ
VSCodeによるデバッグの流れとして、デバッグの設定を記述した launch.json
を作成します。
launch.jsonの設定例として、以下のサイトに各プログラミング言語の例が掲載されています。
今回は特にPythonを対象としているので、以下のページを見て設定します。
具体的なデバッグの詳細については割愛します。公式サイトのページが特に詳しく紹介されているので参考にしてください。
AllenNLPモデルのデバッグ
深層学習による自然言語処理モデルを実装する際、AllenNLPを用いる方も多いのではないでしょうか? VSCodeのデバッグ機能を用いてAllenNLPで実装したモデルをデバッグするには以下のサイトが参考になります。
デバッグ時に呼び出すスクリプトを記述します。 あとは launch.json
に同様の手順でデバッグの設定を記述するだけのみです。
余談
ここからは私自身がおすすめするVSCodeの各種設定について述べます。
おすすめのショートカットキー・拡張機能・カスタマイズ
おすすめのショートカットキー
テキスト編集を効率よくできるショートカットキーとして私が多用しているものを列挙します。
以下はMacOSを想定したショートカットキー記述ですが、Windowsの場合は cmd
を alt
に読み替えてください。
- コマンドパレットを開く
- 最重要ショートカットです。本記事でも何度も登場しました。
cmd + shift + p
- サイドバーを開閉する
- 左にあるサイドバーを表示したり隠したりします。エディタ領域が狭くなるので隠します。
cmd + b
- ファイルエクスプローラを開く
- ファイル一覧を見るのに使います。
cmd + shift + e
- マルチカーソル系
- 複数カーソルを表示して変数等を編集するときに使います
- すべて変更する系
- 選択中の語句をすべて選択する
cmd + shift + l
- 選択中の語句をすべて選択する
- 特定の語句のみを対象として変更する系
cmd + d
- すべて変更する系
- 複数カーソルを表示して変数等を編集するときに使います
おすすめの拡張機能
- Path Intellisense - Visual Studio Marketplace
- ファイルパスを補完してくれる拡張機能です。パスのタイポなど微妙なミスを抑制できます。
- Statusbar error - Visual Studio Marketplace
- vscode-icons - Visual Studio Marketplace
- Code Spell Checker - Visual Studio Marketplace
- Bracket Pair Colorizer 2 - Visual Studio Marketplace
- 括弧に分かり易く色を付ける拡張機能です。特にCommon LispやEmacs Lispの拡張を書くときに重宝します。
- YAML - Visual Studio Marketplace
- Whitespace+ - Visual Studio Marketplace
- なにかの拍子で混入してしまう空文字を見やすく可視化してくれる拡張機能です。
おすすめのカスタマイズ
このセクションでは、これまでに登場してきたおすすめ設定の全体を示します。
これらの設定の反映はコマンドパレットから > 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キーバインド
カラースキーマ
- Solarized - Visual Studio Marketplace
- これまでsolarized darkのカラースキーマを使用していたので、代わりにこちらを使っています。
代替となるショートカットキー
これまで愛用してきた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
のようなもの*3はVSCodeおよび追加したEmacsキーバインドの拡張にはありませんでした。
そこで次のような設定を定義することで操作を追加します:
{ { "key": "ctrl+x p", "command": "workbench.action.navigateBack" } }
代替できなかったEmacsの機能や拡張機能
VSCodeを使ってきて、EmacsにあってVSCodeに無くクリティカルに重要であった機能は今の所私のユースケースではなさそうです。しかしながらEmacs Lispには便利な拡張がたくさんあり、以下にいくつか紹介したいと思います。代替できそうな拡張機能をご存知ある方はぜひ @shunk031 までお知らせください。
- GitHub - ainame/smart-newline.el: The smart-newline.el provide a stress-less newline command for programmer.
- コードを書くための改行の入力をエンターキー1つで快適に行うためのEmacs Lisp拡張です。コードを書く際にカーソルの位置によって、いい感じに改行やインデントをしてくれる素晴らしい拡張です。
- こちらと同様の機能を見つけられておりません。
- GitHub - emacsorphanage/import-popwin: Pop up buffer near by import statements with popwin
- 各種言語の import文付近を popupするEmacs Lisp拡張です。コードを書いていてimport文追加したいなというタイミングでバッファをポップアップさせて、追加したら閉じるというカジュアルな感じのものです。
- こちらも同様の機能を見つけられておりません。
- EmacsWiki: Undo Tree
- Undo の履歴を木構造としてもって、それを辿る事ができるEmacs Lisp拡張です。とても便利なのですが、VSCodeにはなさそうです。
- GitHub - davidshepherd7/electric-operator: An emacs minor mode to automatically add spacing around operators
- GitHub - tam17aki/ace-isearch: A seamless bridge between isearch, ace-jump-mode, avy, and helm-swoop.
- isearch(インクリメンタルサーチ)を超強化するEmacs Lisp拡張です。検索する文字数に応じてace-jump-mode、isearch、helm-swoopをシームレスに選択して検索してくれるとても便利な拡張で、呼吸するように使っていまいた。
- ace-jump-modeの代替としてはCode Ace Jumperが良さそうですが、やぱりace-isearchのような検索体験を得ることは難しそうです。
dotfilesとして設定を管理する
これまでたくさんの拡張機能の導入や、それに伴った settings.json
や keybindings.json
の設定を行ってきました。
これらをGitHub等で管理することで、違うデバイスでも同じ環境でコードを書くことが可能です。
私はもともとGitHub上でdotfiles*4を管理しているため、VSCodeの設定ファイルもdotfilesに含めて管理しようと考えました。
具体的には、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が設定ファイルの同期をサポートし始めました。
お好きな方法で設定ファイルを管理することをおすすめします。
おわりに
本記事では、深層学習モデルの実装に頻繁に利用されるPythonを対象に、深層学習モデルの実装を爆速にする設定や機能について紹介しました。 リモートにあるGPUサーバに簡単に接続が可能であり、またリモート上のコードの編集やデバッグが容易であることを確認しました。これらの機能をフル活用することにより、今まで以上に深層学習モデルの実装が高速に行える可能性があると考えています。
また、Emacsから乗り換えを検討している方たちに向けて、代替可能な拡張機能やショートカットキーを示し、代替ができていない拡張機能についても示しました。これらの拡張機能は自身で作ることが可能なので、少しずつ穴を埋められるような拡張機能を作れたらよいなと考えています。
参考記事
Windows向け
*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 などを指します。
2019年の振り返り
こんにちは。@shunk031です。クリスマスにニューラルネットワーク"力"をお願いしましたが、何も貰えませんでした。サンタさんはHinton先生ではないみたいです。毎年同じお願いをしている気がします。
驚くべきことに2019年も今日で終わりみたいです。 この1年何をやってきたか振り返りも兼ねて、思い出せるイベントについてその時のツイートと共に残しておこうと思います。
自己紹介
法政大学理工学研究科応用情報工学専攻2年です。深層学習を主とした自然言語処理を研究しています。Gunosyで研究にフォーカスしたリサーチインターンをやっています。
1月
1月は主に1月中に締め切りがある国内学会用の論文2本と、2月頭に締め切りがある国際学会用の論文1本を書くハードスケジュールをこなしていました。これらは自然言語処理と医用画像処理、そして計算機広告というそれぞれ異分野の論文を並行で執筆していました。その途中に逆求人イベントや機械学習のコンペに参加していたりと、2019年始まった最初の月が今年で一番大変だった月だったと記憶しています。
情報処理学会 論文締め切り
1月11日締切の情報処理学会全国大会用の論文を書いていました。こちらは以前書いたSkin lesion classification with ensemble of squeeze-and-excitation networks and semi-supervised learningという論文の追加実験を行った結果をメインに執筆を行なっていました。
言語処理学会 論文締め切り
1月16日締切の言語処理学会全国大会用の論文を書いていました。こちらはGunosyでのリサーチインターンの成果をメインに執筆を行なっていました。
アカリクITイベント in 東京
2020年卒だったので、一応就活を意識していました。まずは自分の現在持っている技術や経験がどれくらい企業の方に評価していただけるのかを知るために、以下の逆求人イベントに参加しました。
参加されている方々は素晴らしい実績を持っている方々ばかりだったようで、Twitter等でもよくお見かけする方々とも交流できたのでとても良い経験になりました。
逆求人のフィードバックコメントを受け取りました!面談していただいた各企業さま、ありがとうございました。あまりにポジティブなフィードバックばかりでオタクの涙を流しております😭 #acaricit
— しゅんけー (@shunk031) 2019年2月1日
この逆求人イベントで声を掛けていただいた企業様を中心に就活を進めたので、とても有意義だったと考えています。
DeNAデータ解析コンペイベント
もともと交流があり、Kaggler軍団を有するDeNAさんが機械学習コンペをやるということで、怖いもの知らずでしたが参加してきました。
イベント開催中のPublic LBがあまり芳しくなく、ぜんぜんスコア上がらないと落ち込んでいたのですが、なぜかPrivate LBで1位でした。優勝者として名前が呼ばれたことにとても驚いたことを覚えています。
DeNAデータ解析コンペイベント優勝しました🎉🎉 Public LB全然良くなかったので名前呼ばれたときに驚きました😅 pic.twitter.com/J0ceeabmhb
— しゅんけー (@shunk031) 2019年1月27日
2月
2月はKDDの締め切りがあったあと少しゆっくりしていました。その間にChainerハンズオンのチューターに参加したり、機械学習のコンペを後輩たちと一緒にチームを組んでやっていたりしました。
KDD 論文締め切り
2月3日締切のKDD2019用の論文を書いていました。初めてのロングペーパーで、初めてのACMフォーマットで9ページ書ききるのがとても辛かったです。データマイニングのトップカンファレンスで採択率も低いこともあり、このときはKDDに採択されると思っておらず、リジェクトされたらCIKM2019に再度提出してみようという戦略でした。
Chainer Beginner's Hands-on Course チューター参加
突然ですが私はChainerが大好きです。研究でも使っていましたし、再現実装等もそれなりに多く公開してきました。しかしこれまでChainer本体に何もコントリビュートできていませんでした。 ちょうどChainerのハンズオンが開催されるタイミングがあり、そこでチューターとして参加させていただきました。
コードでコントリビュートしろと言われればそれまでですが、実際使っている方や使っている中で困っている方を助けることが出来たと考えており、コミュニティに対してコントリビュートできたのかな、と当時思っていました*1。
Chainerハンズオンお疲れ様でした!
— しゅんけー (@shunk031) 2019年2月16日
微力ながらお手伝いさせて頂きました😭
オレオなドロイド君とChainer Tシャツ貰えてゴキゲンのオタク君です! (at @GoogleJapan in 港区, 東京都) pic.twitter.com/CWuJBd3mW2
FDC締め切り
忙しかった1月の中旬頃から、こちらも機械学習コンペであるFintech Data Championship (FDC) に参加していました。こちらは株価を予測するコンペであり初手で闇コンペみを感じていましたが、コンペ運営も少しガバめであったこともあり闇x闇という素晴らしいコンペでした。
AIを専攻していないので分かりませんが、何かのバグを踏んでしまい3000億稼ぐエーアイを爆誕させて大喜びしていたのを覚えています。
ということで弊研の優秀同期と後輩たちで組んでモデリングした結果、3900億の利益を出し無事優勝です(?) #fintechdc pic.twitter.com/nXyOhCFGjZ
— しゅんけー (@shunk031) 2019年2月22日
3月
3月、それとなく就活ムーブをしてみたり、学会をはしごして発表したりしていました。移動距離が結構長くて移動している感を感じました。
就活
何の苦しみもなく就活をしていた気がします。応募するときも人事の方がいい感じにやってくれていたり、面接に行くとだいたいお知り合いだったのも気持ちが楽でした。ESは特に書いた記憶がなく、それっぽいCVを送るだけで良かったです。よく聞く就活辛い話は特になく、運の良い学生だったかなと今は思います。
言語処理学会2019 in 名古屋
名古屋大学で開催された言語処理学会2019全国大会にて、以下の発表を行いました。
- 北田俊輔, 彌冨仁, 関喜史, "広告クリエイティブ自動生成にむけたマルチタスク学習と Conditional Attention による CVR 予測", 言語処理学会第 25 回年次大会, 2019.
言語処理学会での発表の様子は以下のブログに譲ります。
情報処理学会2019 in 福岡
福岡大学で開催された情報処理学会2019全国大会にて、以下の発表を行いました。
- 北田俊輔, 彌冨仁, "頑健な皮膚腫瘍診断支援のための body hair augmentation", 情報処理学第 81 回会全国大会, 2019.
言語処理学会での発表を終えて次の日には福岡に移動しました。新幹線の中で某社の採用課題をやって提出しました。その時はモデルのチューニングを考えたくなかったのでoptuna*2でハイパラ探索をさせていたのを記憶しています。
ありがたいことに学生奨励賞をいただくこともできました。
情報処理学会の「画像編集/GAN」セッションにて発表した「頑健な皮膚腫瘍診断支援のためのbody hair augmentation」で学生奨励賞を頂きました🎉お聞き頂きありがとうございました! #IPSJ #IPSJ2019 pic.twitter.com/w9Wnfz0Cyv
— しゅんけー (@shunk031) 2019年3月15日
大学のホームページに乗ると、実家の家族も驚いてくれるので*3ありがたいです。
Gunosy DM 発表
私のインターン先であるGunosyでは毎週論文読み会を開催しています。私自身も発表に参加させていただいています。ちょうどWSDM2019の論文を読む週だったので、以下の論文をチョイスして紹介しました。
卒業式
お世話になった先輩方や、お世話をした後輩たちが卒業していきました。みなさん社会で活躍しているので弊研出身者凄いなという気持ちです。
FDC 結果発表
株価予測は運。
4月
3月に引き続き就活っぽいことをしつつ、推し事をやるために全国を飛び回っていました。 採用インターンでDe社さんにお世話になっており、とても楽しくインターンさせていただきました。
小倉唯ライブ
推し事をやりました。
全通しました。大阪、滋賀、愛知、新潟、仙台、幕張2daysを1ヶ月でやりました。
KDD論文採択
4月28日にKDDの論文採択通知が来ました。ちょうどゴールデンウィークで実家に帰省していたのと、あまり期待していなかったため適当な生活をしていたのですが、共著者の関さんから連絡が来てメールを確認したら採択されてました。今でもあの嬉しさは忘れられないです。何も理解がない実家で一人ありえん喜んでいたので、とうとう息子は壊れてしまったのかと心配されました。
Very happy to announce that our paper "Conversion Prediction Using Multi-task Conditional Attention Networks to Support the Creation of Effective Ad Creatives" has been accepted at #KDD2019 !! Super thanks with my co-author @YoshifumiSeki
— しゅんけー (@shunk031) 2019年4月29日
論文採択までのいろいろは以下のブログでまとめています。
5月
5月はKDDに採択された論文のカメラレディを用意したり、プロモーションビデオを用意したりしていました。これが微妙に大変で忙しかったです。
KDD camera ready 締め切り
こちらがcamera ready版の論文です。いい感じに仕上がりました。
https://dl.acm.org/doi/10.1145/3292500.3330789dl.acm.org
研究室運動会
弊研恒例の研究室運動会でした。このときは3年間参加してきた運動会もラストか〜と個人的にエモい感じになっていました。
6月
6月は比較的のんびりしていた気がします。ぽつぽつと就活案件も入っていたようです。
Cpaw LTで登壇
所属サークルであるCpawでLTをしました。
私はPyTorchのC++フロントエンドであるlibtorchとgolangのwebアプリフレームワークであるginを組み合わせた高速な深層学習APIサーバの構築について話しました*4。
日付変わって今日の #CpawLT の資料作りを開始した(遅い)(レポジトリはまだ公開できる状態にない😭) pic.twitter.com/Ns24EBSf3E
— しゅんけー (@shunk031) 2019年6月7日
実装は以下に公開しています。
ICML/KDD 2019 Pre-conference sessionで登壇
KDDの採択を受けて、同時期にICMLに採択されたLAPRASさんからお声がけいただき、以下の勉強会で発表してきました。
LAPRAS @lapras_inc さんでICML/KDD採択者によるプレ発表会をやってきました!僕からもKDDで発表する内容を軽く説明させていただき、ポスターセッションでも議論させていただきました!素晴らしい会にお声がけくださったLAPRASの方々には感謝です。聞いてくださった皆様もありがとうございました😊 pic.twitter.com/UjXuW5mYjR
— しゅんけー (@shunk031) 2019年6月3日
クローズドな勉強会で登壇
Gunosy社内で複数社合同のクローズドな勉強会が開催されたときにKDDに採択された内容を発表させていただきました。ちょうどこのときガウス過程と機械学習 の著者の大羽先生の講演も聞くことができ、とても刺激を受けました。
エムスリーインターン
ある勉強会でエムスリーの西場さんのお話を聞く機会があり、かねてより気になっていたのでインターンに応募させていただきました。エムスリー社内で私のことを知ってくださっている方も多く、次に連絡をもらったときにはもうインターンとして採用決定している旨を聞き、スピード感に驚きました。
電話一本で時給2000円の某インターンに行くことになったんですが、圧倒的な決定速度でビビる(一瞬お世話になりますmm)
— しゅんけー (@shunk031) 2019年5月29日
エムスリーでは主に医療論文のレコメンドサービスをイチから立ち上げる経験をしました。アルゴリズム部分は私自身が選定し、実装しました。インターンが終わった後も私が実装したものをベースに改善されていっているようです*5。
ちなみに西場さんの エムスリーにおけるAI・機械学習チームの立ち上げと機械学習プロダクト開発
がとても良かったです。医療論文のレコメンドサービス Pauli
についても言及されています。
同時期にご一緒させていただいていたインターン生がありえないぐらい強かったです。
エムスリーインターン、左にICCV通した方、僕はKDD、右にNeurIPS通した方と謎布陣でワイワイコード書いてたの貴重な体験だったのでは
— しゅんけー (@shunk031) 2019年10月12日
7月
8月頭のKDDへの発表に向けて準備していたり、8月終わりのYANSにむけたネタ集めをしていた時期でした。
Gunosy DM 発表
ちょうどWWW2019の論文を読む週だったので、以下の論文をチョイスして紹介しました。
フロリダ大学からの来客
指導教員の友人がフロリダ大学からいらっしゃいました。以下は彼が当時研究していたものです。-VAEにおける はチューニングするのが難しいですが、以下ではそうした問題を克服するための手法を提案しています。
リサーチインターンに対するインタビュー
Gunosyでのリサーチインターンの成果について、メンターである関さんとインタビューを受けました。いつも面倒を見てくださっている関さんからとても嬉しい言葉をいただけたので、ここに引用しておきます。
頭で考えてから実装までのスピードがとても速いです。これはとても重要な能力だと思います。我々が取り組んでいるような機械学習の応用に関する研究ではどれだけ頭で考えていても、実装の結果を見ないと分からないことが多いです。北田君は考察しながら手を動かし、限られた時間で目覚ましい成果を出しているので、素晴らしいと感じています。 あとは、コミュニケーションを容易に取れる所も助かっています。僕が言った内容を理解し、それ以上の情報を返してくれる優秀さに驚いています。研究チームに北田君を誘ったのも、僕がメディアの研究や推薦システムの部分を行い、広告の研究を北田君に一任したいと考えていたからです。実際、広告技術部にいた彼だからこそ得意な分野を活かして良い研究に仕上げられたと感じています。
研究職インターンが活躍する環境とは~論文がトップカンファレンスに採択されるまでの軌跡 - Gunosiru(グノシル) | はたらくを知り、 Gunosyを知る。
特別賞受賞
リサーチインターンの成果が評価され、Gunosyでの締め会でCEO特別賞をいただくことができました。社員以外での受賞はこれが初めてのようです。たくさんの社員さんに協力して論文を書かせていただいたので、受賞できて嬉しかったです。
CEO特別賞(多大な業績に貢献した社員のみに贈られる賞) こちらの賞は従来の賞とは別に、多大な業績に貢献した社員が居る場合のみ贈られます。今回は、データマイニングに関する国際会議「KDD2019」に論文が採択された関さんと北田さんの2名が受賞しました。
飛躍に向けた全力助走~『Gunosy 第7期 下半期締会』の様子をレポート - Gunosiru(グノシル) | はたらくを知り、 Gunosyを知る。
8月
8月はKDDでアラスカ、お盆の帰省で長野、YANSで北海道と移動し、比較的涼しいところで過ごした夏でした。1年の中でも特に充実した1ヶ月でした。
KDD2019 in アラスカ
アラスカで開催されたKDD2019にて、以下の発表を行いました。
- Shunsuke Kitada, Hitoshi Iyatomi, Yoshifumi Seki. "Conversion Prediction Using Multi-task Conditional Attention Networks to Support the Creation of Effective Ad Creatives." Proceedings of the 25th ACM SIGKDD International Conference on Knowledge Discovery & Data Mining, 2019.
初めての本会議で初めてのトップカンファレンスということもあり、学会の規模の大きさに驚きました。ポスター発表では名だたるテック企業の方々がポスター発表を聞きに来てくださり、とても刺激的なディスカッションをすることができました。
ポスターデプロイした!よろしくお願いします🙇 (@ Dena'ina Civic & Convention Center - @denainacenter in Anchorage, AK) https://t.co/kxmbyopdDV pic.twitter.com/YKF8dtly1j
— しゅんけー (@shunk031) 2019年8月7日
Gunosy DM 発表
SIGIR2019の論文を読む週だったので、以下の論文をチョイスして紹介しました。
オープンキャンパス
夏といえばオープンキャンパスです。今年は弊研究室が公開されました。私たちが普段研究している内容についての展示や説明を行いました。
YANS2019
北海道札幌市で開催されたYANS2019にて、以下の発表を行いました。今回は初めて弊研から複数人参加であり、共著としての発表も増えました。
- 北田俊輔,彌冨仁, "解釈性向上のための注意機構と損失勾配に対する関連損失の導入",NLP 若手の会 (YANS) 第 14 回シンポジウム, 2019.
- 長澤駿太,北田俊輔,彌冨仁, "日本語の文字体系を考慮した文書分類モデルの提案",NLP 若手の会 (YANS) 第 14 回シンポジウム, 2019.
- Daif Mahmoud, Shunsuke Kitada, Hitoshi Iyatomi, "Image Based Character Embeddings for Arabic Document Classification",NLP 若手の会 (YANS) 第 14 回シンポジウム, 2019.
以下はKDD2019でもらったTシャツを来てYANSで発表した様子です。
KDDのTシャツ着てるオタクと握手✌️ pic.twitter.com/0fZ9GtNWHT
— しゅんけー (@shunk031) 2019年8月27日
ありがたいことに奨励賞をいただくことができました。投票していただいたみなさんのおかげで受賞できたので、これを励みにまた頑張ろうという気持ちが強かったです。
奨励賞を頂くことができました🎉
— しゅんけー (@shunk031) 2019年8月28日
ありがとうございます! #yans2019 pic.twitter.com/TZtixhoJVO
繰り返しになりますが、大学のホームページに乗ると、実家の家族も驚いてくれるので*6ありがたいです。
9月
8月は出ずっぱりで発表しまくり月間でしたが、9月も引き続き発表する機会に恵まれました。研究室合宿でゆっくりしたかったですが、ありえん遊んでしまいました。
研究室合宿
毎年恒例弊研の合宿です。B4の子たちの中間発表に向けた発表練習が中心で、その後はいい感じに遊びました。
法政大学 科学技術フォーラム
弊学の理系学部の研究・技術の内容・成果を展示などで披露するフォーラムに弊研が選ばれました。弊研究室が行っている研究をポスターにまとめ、来場者の方に説明を行ったり、デモを披露したりしました。
本日は弊学の科学技術フォーラムにて彌冨研究室における、深層学習を中心とした研究取り組みについて発表させていただきます!植物病害自動診断システムのデモや、データマイニングの最難関国際会議に採択された研究の解説をします。ぜひお越しください https://t.co/dlD8qaFV6N
— しゅんけー (@shunk031) 2019年9月14日
弊研でやってる研究を詰め込んだ渾身のポスターをデプロイした! pic.twitter.com/D0xMYEYZhf
— しゅんけー (@shunk031) 2019年9月15日
PyConJP 2019
PyConJPは私がB3の頃から参加しています。当時はM2の先輩と一緒に参加し、とても楽しかった記憶があります。今年は私がM2で、B3, B4, M1の後輩たちと発表を聞きました。機械学習を中心とした発表が多く、Pythonのカンファレンスではなく機械学習のカンファレンスでは?という感想を抱きました。機械学習のカンファレンスでも私は聞いていて楽しいのでよいですが。
テキストアナリティクスシンポジウム 依頼講演
KDDの採択を受けて、テキストアナリティクスシンポジウムでリサーチインターンはどういうものなのか講演していただきたいというとてもありがたい依頼を受けまして、発表させていただきました。海外では一般的になりつつあるリサーチインターンですが、国内ではまだまだ発展途上であり、私がリサーチインターンをやっていく中でどのように論文採択までに至ったかについて発表しました。パネルディスカッションタイムでは、CyberAgentの方々や共著者でメンターの関さんと白熱したディスカッションができました。
10月
10月はそれなりにゆっくりしていた1ヶ月だった気がします。あまり記憶がないです。
Gunosy DM 発表
KDD2019の論文を読む週だったので、以下の論文をチョイスして紹介しました。この発表は私たちがKDDでポスター発表していたちょうど目の前で同じくポスター発表していたもので、論文の内容もそうですが、とても親近感が湧きました。
京都旅行
なぜか京都に行きたくなったので行ってきました。適当に京都に行くの普通に最高ですね。
オタク w/ 金閣 pic.twitter.com/YcYz48GdRm
— しゅんけー (@shunk031) 2019年10月21日
11月
11月は論文執筆がメインの1ヶ月でした。
論文執筆
12月初旬に締め切りのある学会に向けて論文を書いていました。今回の今までキツキツだった執筆スケジュールと異なり、それなりに余裕のあるスケジュールで執筆をすすめることができました。
12月
12月は引き続き論文執筆をしていました。後半は温泉に行ったりアドベントカレンダーを書いたりしました。
論文締め切り
それなりに余裕があるなと思いながら執筆していましたが、直前はやっぱり色々ドタバタしますよね。なんとかサブミット出来ました。
Gunosy DM 発表
RecSys2019の論文を読む週だったので、以下の論文をチョイスして紹介しました。
草津旅行
後輩がcall for 草津温泉をやっていたので乗りました。
狂うほど蟹食べてる pic.twitter.com/C0TLUo97pL
— しゅんけー (@shunk031) 2019年12月16日
強そう (@ 草津熱帯圏 - @nettaiken932 in 草津町, 群馬県 w/ @hitoshu_iyatomy) https://t.co/DzSD4MCqru pic.twitter.com/O5Ofu5vdRW
— しゅんけー (@shunk031) 2019年12月17日
アドベントカレンダー執筆
実は密かに研究室アドベントカレンダーをやりたいと夢見ていました。
たしかにw あの頃言ってたけどこういうアウトプットできる人材が少なかっだからなぁ(辛辣) 今は良い後輩がいっぱいあって良い雰囲気だねー
— Chihiro@休養中 (@encry1024) 2019年11月29日
今年はアウトプットできる人材も増えてきたので、みんなを巻き込んでアドベントカレンダーをやりました。弊学の学部1年生から4年生、修士1,2年やOBOGを巻き込みました。隣の研究室の子も巻き込んだりして壮絶な感じになりましたが、無事完走したので良かったです。嬉しかったです。夢を叶えました。
ちなみに私が書いた記事は以下の4つです。なんだかんだアウトプットするのって大変なので強制的にアウトプットできるこの機会はありがたいです。
番外編
番外編として美味しいご飯や飲んだタピオカミルクティー、綺麗な景色のツイートを貼ります。
美味しいごはん
KDD執筆に向けてメンターさんが連れて行ってくださった馬刺しや寿司です。美味すぎて馬になりました。
いつものお世話になっているメンターさん&P社のお兄さんたちと謎の場所で馬肉を摂取させていただきました🐎人生のSoTAを更新しました🐴🐴🐴 pic.twitter.com/EFgPDddTJk
— しゅんけー (@shunk031) 2019年1月24日
世の中にはバイト中に論文書いてトップカンファに投稿すると高級寿司を無限に食わせてくれるメンターさんがいます。ご存知ですか? pic.twitter.com/Bmonv1d8Xt
— しゅんけー (@shunk031) 2019年2月20日
タピオカミルクティー
タピオカミルクティーにどハマリした一年でした。飲んだタピオカミルクティーを順不同で適当に貼ります。
1Lのタピオカミルクティー、State of the Artみを感じる。デカい pic.twitter.com/VsCDGP8e8R
— しゅんけー (@shunk031) 2019年10月5日
後輩たち10人でタピった🤗 (@ 吉龍糖 in 渋谷区, 東京都 w/ @tetsu316naga) https://t.co/MU27Jh3l8t pic.twitter.com/fBHKbT7xx4
— しゅんけー (@shunk031) 2019年12月19日
ホットにした一芳の黒糖タピオカラテ、世界一美味いのでオススメです😭😭😭 (@ 一芳 台湾水果茶 in 武蔵野市, 東京都) https://t.co/Kj19uFkXlf pic.twitter.com/a0LdN4BYTg
— しゅんけー (@shunk031) 2019年12月14日
くら寿司タピオカミルクティー (@ くら寿司 - @mutenkurasushi in 小金井市, 東京都) https://t.co/EGCy3R1odX pic.twitter.com/DE1AV0vbNy
— しゅんけー (@shunk031) 2019年11月4日
一芳フルーツティー美味しい😌 (@ 一芳 台湾水果茶 - @yifangteajp in 渋谷区, 東京都) https://t.co/hJNfLgR5qP pic.twitter.com/zH6v4bVOi4
— しゅんけー (@shunk031) 2019年10月25日
夜飯 / All the teams above me are overfitting with bubble tea. (@ 一芳 台湾水果茶 in 武蔵野市, 東京都) https://t.co/Yh58FAQ1b2 pic.twitter.com/3F48YMwLZf
— しゅんけー (@shunk031) 2019年10月15日
「まだタピオカミルクティーとか言ってるの?」と言われたので、ホットのタピオカミルクティーの良さにおける幸せの最大化問題について議論しています pic.twitter.com/r5ejWn0jVD
— しゅんけー (@shunk031) 2019年12月28日
期間限定の鉄観音ミルクスムージー、ミルクフォーム+タピオカx2、ウンメェ〜(完飲)(昼ごはんはこれだけ) (@ Gong cha 貢茶 - @gongcha_japan in 武蔵野市, 東京都) https://t.co/3WaleRNl8z pic.twitter.com/DCiiKJ4vXk
— しゅんけー (@shunk031) 2019年7月29日
美人と飲むゴンチャは体に良い pic.twitter.com/lcYtrpHons
— しゅんけー (@shunk031) 2019年12月8日
カンパ〜〜〜イ🍻 (@ Gong cha 貢茶 - @gongcha_japan in 新宿区, 東京都) https://t.co/YfJWoSOcsu pic.twitter.com/GViEVsbzeB
— しゅんけー (@shunk031) 2019年9月28日
綺麗な景色
綺麗な景色は綺麗でした。初めて六本木ヒルズの頂上に行きました。
ガーデンプレイスから見える六本木ヒルズと東京タワーです(綺麗) pic.twitter.com/wtPUJjhWsy
— しゅんけー (@shunk031) 2019年12月21日
綺麗すぎるな???? (@ スカイデッキ - @tokyo_cityview in 港区, 東京都) https://t.co/3GKrrcpYK6 pic.twitter.com/t1QNAEi8Cl
— しゅんけー (@shunk031) 2019年12月25日
まとめ
トップカンファレンスに論文が採択されたことにより、半ば人生が変わってしまいました。楽しさが単調増加していた1年でした。素晴らしい人たちとコラボして研究をしたりインターンをしたりできたので、より幸せだったと思います。
ありがたいことに来年も色んな方々とコラボできる話が進んでおり、とても楽しみです。「こいつと組んでみたい」と思ってもらえるように研鑽を積んでいきます。そのほかコラボしていただける方や企業さま、@shunk031にご連絡いただければと思います。では良いお年を。
*1:Preferred Networks、深層学習の研究開発基盤をPyTorchに移行 | 株式会社Preferred Networks https://preferred.jp/ja/news/pr20191205/
*2:optuna/optuna: A hyperparameter optimization framework https://github.com/optuna/optuna
*3:実家に帰るとエーアイとかいうわけわからん研究してないで早く就職してくれとよく言われます。
*4:こちら資料は公開していません。もしもご興味がありましたらご連絡いただければ…
*5:Content-Based Citation Recommendation - ACL Anthology https://www.aclweb.org/anthology/N18-1022/
*6:勉学にあまり理解のない家族の人たちにも、流石に複数回受賞していると遊んでいるんじゃなくてちゃんと研究してる感が伝わるようです。
Allentuneを用いたAllenNLPモデルのハイパーパラメータのチューニング
こんにちは@shunk031です。
この記事は彌冨研 Advent Calendar 2019 20日目の記事です。
前回の記事は「期待検証性能(expected validation performance)」をもとにしたパラメータ探索の検証についてでした。
今回の記事はallentuneを用いたAllenNLPモデルのハイパーパラメータチューニングについて紹介します。このallentuneには 期待検証性能
によるハイパーパラメータ探索の検証が行える手法が実装されています。
AllenNLPはPyTorchで構築されたリサーチにフォーカスしたオープンソースのNLPライブラリです。
アルゴリズム
ハイパーパラメータのサンプリング手法
ハイパーパラメータ探索のアルゴリズムとして、random search
と grid search
が実装されています。これらは Rayが提供しているものを使用しています。
期待検証性能によるパラメータ探索の検証
allentuneのアルゴリズムは以下の論文が元になっています。
使い方
基本的にはallentuneのREADMEを参考に手順を踏むと実行可能ですが、依存しているパッケージのバージョンまわりで少しハマりポイントがあります。
インストール
レポジトリからクローンしてきてpipでインストールします。
$ git clone https://github.com/allenai/allentune.git $ cd allentune $ pip install --editable .
2019年12月現在の情報
このとき、普通にインストールすると依存でTensorflowの最新版(2019年12月現在v2.0.0が入ります)がインストールされますが、Rayが2系に対応していないため、Tensorflow 1.xxx系 を使ってください。
モデルの設定
学習を行うモデルの設定を記述します。例として classifier.jsonnet
として定義しています (公式の設定例)。
ハイパーパラメータとなる値は環境変数を通じて設定されるので std.extVar
等のjsonnetのメソッドを通じて流れるように設定ファイルを記述する必要があります。
通常のAllenNLPでのjsonnetでは相対パスが読み込めますが、allentuneの場合はjsonnetに相対パスを書いている場合は相対パスが解決できずエラーで読み込めなくなります。絶対パスを書く必要がありそうです。
探索範囲の指定
search_space.json
(公式の設定例) を作成して、探索範囲を指定します。allentuneでは以下のサンプリング手法がサポートしています:
choice
- 指定した要素群から選択する手法
integer
- 指定した範囲内で整数をランダムにサンプルする手法
uniform
- 指定した範囲内で一様分布に従った浮動小数点数をサンプルする手法
loguniform
- 指定した範囲内で対数一様分布に従った浮動小数点数をサンプルする手法
ハイパーパラメータとして与えたい変数と、そのハイパーパラメータのサンプリング手法、そしてその範囲を与える形です。
実行方法
パラメータの探索範囲をと探索方法を指定する search_space.json
とモデルの設定ファイル classifier.jsonnet
が用意できたら、以下のように allentune
コマンドを用いてハイパーパラメータ探索を開始できます。
$ allentune search \ --experiment-name classifier_search \ --num-cpus 56 \ --num-gpus 4 \ --cpus-per-trial 1 \ --gpus-per-trial 1 \ --search-space examples/search_space.json \ --num-samples 30 \ --base-config examples/classifier.jsonnet
--num-gpus
に50を渡すと50GPUに対してハイパーパラメータ探索が実行されます。あとは実行して最強のハイパーパラメータを探してもらうだけです。論文でも読んで待ちましょう。
探索結果の確認
ハイパーパラメータの探索結果を確認する場合、以下のコマンドを実行することで performance-metric
に指定したメトリックに対してベストなハイパーパラメータを確認することが可能です。
$ allentune report \ --log-dir logs/classifier_search/ \ --performance-metric best_validation_accuracy \ --model cnn
期待検証性能の可視化
ハイパーパラメータの探索施行数と期待検証性能の関係図をプロットすることが可能です。 期待検証性能がサチってきていることがわかれば、それ以上探索しなくてもよくなります。
$ allentune plot \ --data-name IMDB \ --subplot 1 1 \ --figsize 10 10 \ --result-file logs/classifier_search/results.jsonl \ --output-file classifier_performance.pdf \ --performance-metric-field best_validation_accuracy \ --performance-metric accuracy
所感
allentuneを用いたAllenNLPモデルのハイパーパラメータチューニングについて紹介しました。 ちょうどこのブログを書いていたときにallentuneでハイパーパラメータ探索を実行していました。
こんにちは@shunk031です。 Geforce RTX 2080Tiを50枚ほど使うとぽかぽかします。みなさんもぜひ試してみてください。
ハイパーパラメータ探索のライブラリでは hyperopt
や optuna
、GPyOpt
等がありますが、AllenNLPで実装したモデルに対して簡単にチューニングを実行できるallentuneはNLPの研究者や技術者には必須のものであると考えています。ぜひみなさん使ってみてください。
「期待検証性能(expected validation performance)」をもとにしたパラメータ探索の検証
こんにちは@shunk031です。 温泉は素晴らしいですが、ホテルのインターネットが遅いと生きた心地がしないので人生難しいと感じています。
この記事は彌冨研 Advent Calendar 2019 19日目の記事です。
今回はAllenAiから公開されているハイパーパラメータ探索allentuneに実装されているアルゴリズムであるShow Your Work: Improved Reporting of Experimental Resultsを紹介します。
背景および導入
自然言語処理の研究において、しばしば提案手法が先行研究よりも優れたテストスコアを出すことによって提案手法の良さを実証するというロジックで論文が書かれます。この論文では、こうしたテストデータに対するスコアだけで手法の良し悪しを判断するのは難しいことを述べています。また、validationデータを用いたモデルの訓練で得られるスコアに焦点を当てて検証を行っています。
本論文では computation budget
(例えばハイパーパラメータの探索回数やモデル全体の訓練時間) を関数として、ベストなモデルを発見するに至るまでの expected validation performance
(期待検証性能) を示しています。こうした指標に従って筆者らが先行研究の再検証を行った結果、より多くの時間を掛けてモデルを訓練することで、報告されているスコアとは異なるスコアになる場合があることを表しています。
期待検証性能
異なるハイパーパラメータ を割り当てられた複数のモデル の集合 を考えます。 あるハイパーパラメータ で訓練されたモデルを とします。 ハイパーパラメータを探索するにはたくさんの計算リソースが必要です。今回はそのリソースを表すような関数を computation budget として定義しておきます。
最適なハイパーパラメータ が見つかったときに、そのパラメータを設定した に対してテストデータにおけるスコアを論文に書きます。 ここで、 個のハイパーパラメータがある場合のベストなvalidationスコアは以下のように定義できます:
ここで、はtrainデータで学習させたモデル群とそのハイパーパラメータ群におけるvalidデータに対するvalidationスコアを返す関数です。
上記の式をもとに、異なるハイパーパラメータで何度も繰り返しvalidationスコアを計算したときに、の分布が得られます。 従って、期待性能 ]として推定可能になります。
本論文では、実験結果を得るために必要な計算コストを概算する方法を導入します。 個のハイパーパラメータにおける期待性能は以下のように定義できます。
この指標を用いることで、あるスコアに到達するまでに必要な計算コストについて知ることができます。
特にvalidationスコアに対する期待性能を 期待検証性能
と呼んでいます。
ハイパーパラメータ探索を行う際の推奨事項
ハイパーパラメータの値を決める手法として、 grid search
や uniform sampling
が一般的に使われます。また適応的にハイパーパラメータをサンプリングするベイズ最適化も有名です。
こうしたハイパーパラメータ探索を検証するために、実験の再現性を担保するためのチェックリストが示されています。
特に本論文で導入されている 期待値検証性能
を基にしたパラメータ探索の検証を行うために必要な項目もあります。
再現性を担保するためのチェックリスト
研究者が報告する実験結果の再現性の向上のために、以下のようなチェックリストが論文内で提供されています。
- 実験結果の報告について
- 計算リソースについて
- 各アプローチの平均実行時間
- train/validationの分割の詳細情報
- 報告された各test結果に対応するvalidationのパフォーマンス
- 実装の公開リンク
- ハイパーパラメータサーチについて
- 各ハイパーパラメータの探索域
- ベストモデルにおけるハイパーパラメータのセッティング
- ハイパーパラメータ探索の試行回数
- ハイパーパラメータのサンプリング手法
- validationのパフォーマンスの期待値
EMNLP2018におけるチェックリストの集計結果
以下は上記のチェックリストに対する有無のパーセンテージを示しています。
- 実験結果の報告について
- 計算リソースについての有無: 18%
- 各アプローチの平均実行時間の有無: 14%
- train/validationの分割の詳細情報の有無: 92%
- 報告された各test結果に対応するvalidationのパフォーマンスの有無: 24%
- 実装の公開リンクの有無: 30%
- ハイパーパラメータサーチについて
- 各ハイパーパラメータの探索域の有無: 8%
- ベストモデルにおけるハイパーパラメータのセッティングの有無: 74%
- ハイパーパラメータ探索の試行回数の有無: 10%
- ハイパーパラメータのサンプリング手法の有無: 14%
- validationのパフォーマンスの期待値: 10%
特にハイパーパラメータの探索域や試行回数が論文中に記述されない場合が多いようです。最近は実装が公開されている論文も多く見られるように感じますが、それでも30%程度であることも驚きでした。
おわりに
今回、allentuneに実装されているShow Your Work: Improved Reporting of Experimental Resultsで提案されている 期待検証性能
について触れました。計算コストの観点から期待できる性能をもとに検証を行っていました。
ハイパーパラメータ探索の再現性を担保するために、計算リソースの規模やハイパーパラメータ探索関連の設定等のチェックリストが示されていました。 より大規模化するモデルとそのハイパーパラメータ探索をより再現しやすくするために、こうしたプロトコルで適切に評価し、再現できるような世界になるとよいですね。私自身もこうした点に注意したいと思います。