u++の備忘録

2021年をザッと振り返る

年末恒例の振り返り記事です。今年は4月に職場での部署異動があり、役割範囲も大きく変わりました。研究開発部署にて、案件を自分自身で創出・推進していくことに挑戦した一年でした。

論文

主著では査読付きの国際会議ワークショップ3報(WSDM 2021、SIGIR 2021、IEEE BigData 2021)、受賞1(人工知能学会全国大会優秀賞)でした。 Computation + Journalism Symposium 2021言語処理学会第27回年次大会ワークショップでも発表したほか、共著でも人工知能学会全国大会にも投稿しました。

コミュニティ活動

世界各国で出版・公開された書籍 "Approaching (Almost) Any Machine Learning Problem" の翻訳書として、マイナビ出版から8月に『Kaggle Grandmasterに学ぶ 機械学習 実践アプローチ』と題した書籍を出版しました。 2020年の『Kaggleスタートブック』(講談社)に引き続き、今年も商用出版を経験できました。 現在も共著で1冊を執筆中で、来年中の刊行を目指しています。

2019年末に始めた週次のニュースレターは、今年も休刊なく継続できました。 YouTubeチャンネルにも15の動画を投稿しました。

はてなブログは本記事を含めて30記事を公開しました。 論文や書籍の執筆に重きを置いた影響で、100記事以上を達成していた例年に比べると少ない数字になっています。 会社での技術ブログは7記事書きました。

運営に関わっているイベント「Sports Analyst Meetup」を、3回(第10〜12回)開催できました。 特に第11回では「ARCS IDEATHON」と題して、ラグビートップリーグ所属ラグビーチーム「NTTコミュニケーションズシャイニングアークス」と共同でアイディアソンも開催しました。

その他、以下のイベントに登壇する機会を頂きました。 PyCon JPに採択されたこと、母校の高校・大学で卒業生として登壇できたことが印象に残っています。 関係者の皆様に、改めてお礼申し上げます。

コンペ

Kaggleでは、チーム参加した自然言語処理コンペ「CommonLit Readability Prize」で25位の銀メダルでした。 Notebooksカテゴリでは、Masterの称号を獲得しました。 「Kaggle Days Championship」のニューデリー予選ではチームで3位に入り、来年秋にスペイン・バルセロナで開催予定の本戦進出が決まりました。

その他のプラットフォームでは、以下のような成績でした。

  • Nishika 判例の個人情報の自動マスキング 7th (Solo), 2021.
  • NLP若手の会 (YANS) 第16回シンポジウム ハッカソン, 2nd (Team), 2021.
  • SIGIR eCom'21 Data Challenge Purchase Intent Prediction, 3nd (Team), 2021.
  • Solafune: 夜間光データから土地価格を予測 6th (Solo), 2021.
  • 言語処理学会第27回年次大会(NLP2021)ワークショップ2 AI王 〜クイズAI日本一決定戦〜 ライブコンペティション 5th (Team), 2021.
  • ACM WSDM Workshop on Web Tourism (WSDM Webtour'21), 6th (Team), 2021.

おわりに

今年は試行錯誤を重ねながら、自分の幅を広げる活動に取り組んだ一年だったと感じます。 年末にかけて原稿・研究などさまざま仕込んでいる段階なので、来年以降にお披露目できるのが楽しみです。

【Weekly Kaggle News 2周年】クリック記事ランキング2021

Kaggle Advent Calendar」 の20日目の記事です。

ニューズレター「Weekly Kaggle News」が本日2周年を迎えました。日本語で、Kaggleをはじめとするデータ分析コンペティションに関する話題を取り扱っています。週次で毎週金曜日に更新しており、今年11月12日の号で第100回を迎え、最新号は第105回になっています。

購読者数は、ありがたいことに着実に増加しています。下図の赤は購読者数、青はユニークな開封数です。

f:id:upura:20211205002116p:plain

それでは、今年発行のWeekly Kaggle News経由でクリックされたURLのランキング結果を紹介します。単純なクリック回数なので、購読者数が増えている直近の回が有利な条件になっています。なお昨年もランキングを公開しています。

第1位に輝いたのは、ダントツでKaggle公式の機械学習入門講座「30 Days of ML」でした。多くの読者の琴線に触れたようです。第2位には、12月10日に配信したばかりの号から『ゼロから作るDeep Learning ❹』の公開レビューが登場しました。強化学習を題材にした書籍で、Kaggleでも近年コンペが開催されています。第3、4位は、近年飛躍的な成果が報告されているニューラルネットワークの「Transformer」機構についての記事でした。第5、7位には深層学習ライブラリ「PyTorch」に関する話題が入ったのも近年の流行を感じさせます。第6位は、今年Kaggle Competitions Masterになった方による入門者向けの記事でした。

見落としていた記事があれば、ぜひご覧ください。「Weekly Kaggle News」は、来年も発行を続けていく予定です。引き続き、どうぞよろしくお願いいたします。

1位: 第84回、202クリック

www.kaggle.com

2位: 第104回、142クリック

tree-radius-a8e.notion.site

3位: 第72回、140クリック

4位: 第56回、109クリック

blog.brainpad.co.jp

5位: 第58回、108クリック

www.amazon.co.jp

6位: 第76回、102クリック

note.com

7位: 第74回、90クリック

www.ohmsha.co.jp

7位: 第97回、90クリック

qiita.com

「Sports Analyst Meetup #12」をオンラインで開催しました #spoana

「Sports Analyst Meetup #12」*1を、12月19日に開催しました。通常回としては6月の「Sports Analyst Meetup #10」*2以来です。なお第11回としては「ARCS IDEATHON (Sports Analyst Meetup #11)」*3と題したアイディアソンを8月に開催しました。

togetter

togetter.com

発表内容

今回は「年末のライトニングトーク(LT)祭り」ということで、LTが7本という構成でした。イベント後には、懇親会も実施しました。

f:id:upura:20211219184402p:plain

アーカイブ

オンライン開催の利点を活かして、発表者の許諾が得られた内容については、YouTubeアーカイブを掲載していく予定です。

www.youtube.com

おわりに

今回も多くの方にご参加・ご発表いただき、誠にありがとうございました。 今回が2021年の最終回となります。 今年はプロスポーツチームと共同でアイディアソンを開催するなど、新たな展開にも挑みました。 来年以降も、可能な範囲で「spoana」の取り組みを継続していきたいと考えております。

「Kaggle Days Championship」の紹介

Kaggle Advent Calendar 2021」の2枚目の16日目の記事です。

機械学習コンテストのプラットフォーム「Kaggle」は、今年11月〜来年10月にかけて「Kaggle Days Championship」と題した一連のイベントを開催しています。本記事ではこのイベントについて、概要を紹介します。

Kaggle Days

Kaggle Days」は、普段はオンライン上で腕を競い合っているKaggle参加者(Kaggler)が、物理的に一堂に会するイベントです。2018年にワルシャワ開催を皮切りに、2019年12月には東京でも開催されました。当時の運営発表によると、240の参加枠に対し12カ国以上から、8人のGrandmaster、37人のMasters、65人のexpertsを含む465もの応募があったそうです。Kaggle Days では、有名なKagglerによる発表に加えて、数時間でのコンテスト開催が一般的でした。

Kaggle Days Championship

2020年以降の新型コロナウイルス感染症の流行に伴ってしばらくは物理イベントが開催されず、オンラインでのイベントが開催されていました。「Kaggle Days Championship」が予告されたのは2021年10月です。東京を含む12の地域でオンラインイベントを開催し、各イベントで開催されるコンテストの上位3チームが来年10月にスペイン・バルセロナに集結し対決するという旨が発表されました*1

オンラインイベントは11月の上海から始まり、約3週間に一度のペースで各地を転々とします。東京では4月21日に開催予定です。「オンラインイベントなのに開催地?」という疑問は至極妥当で、実質的には発表者選びやタイムゾーンのみに影響しています。各イベントのタイムテーブルは「AGENDA」として公開されており、それぞれの現地時刻で開催されています。

f:id:upura:20211214090830p:plain
図は https://kaggledays.com/championship/meetups/ から引用

各イベントの受け付けは、上記のページで開催日の3週間前ごろ始まります。参加者は12のオンラインイベントのうち何度でも申し込み可能です*2

コンテストの詳細

Kaggle Days Championshipのオンラインイベントでは、わずか4時間の制限時間でコンテストが開催されます。課題は毎回コンテスト開始と同時に発表され、全12回でそれぞれ異なるタスクが出題されるそうです。チーム人数は最大4人で、当日のコンテスト進行の流れで検討することも可能ですが、短期間のため事前にチームを組んでいる方々も多いように感じます。

11月18日に上海の枠で開催されたイベントでは、日本からはKaggle GrandmasterのlyakaapさんKFさんらを擁するDeNAチームが3位に入りました。

そして12月9日のニューデリーの枠では、私が知人と「re:wodori」という名で参加したチームが3位に入りました。 先日、チームメイトもKaggle Days Championshipの紹介記事を公開したので、ご関心あればぜひご覧ください。

おわりに

本記事では、Kaggle Days Championshipの概要を紹介しました。 来年無事にスペイン・バルセロナに参戦できるのを楽しみにしています。

*1:現時点では来年9月もしくは10月と記載されています

*2:厳密には「とある時点より後に開催される一つのイベントのみに申し込みが可能」ですが、イベントは3週間ごと開催のため実質すべてに参加可能だと考えられます

TF-IDFを用いた「Kaggle流行語大賞2021」

Kaggle Advent Calendar 2021 の2枚目の5日目の記事です。

2018〜2020年に引き続き、今年もTF-IDFを用いた「Kaggle流行語大賞」を算出します。具体的には、2021年に公開されたNotebookのタイトル情報から、今年特に際立って登場した単語は何かをランキング形式でまとめました。

2018年2019年は「探索的データ分析(Explanatory Data Analysis, EDA)」、昨年は突如現れた「covid」が1位となりました。「COVID19 Global Forecasting (Week 1)」コンペや「OpenVaccine: COVID-19 mRNA Vaccine Degradation Prediction」コンペなど、COVID-19を題材にしたコンペが複数開催されたのが要因だと考えられます。

それでは今年の結果を見ていきましょう。

集計方法

昨年と同様の方法を採用しました。一連の処理はKaggleのNotebookにて公開しています。

www.kaggle.com

データセット

Meta Kaggle」のデータセット「Kernels.csv」を利用しました。公開されているNotebookの公開日・URLなどの情報が格納されています。

NotebookのURLは、ユーザが付けたタイトルに基づいて決まります。下図のように「MoA: LGBM Benchmark」というタイトルの場合は「https://www.kaggle.com/sishihara/moa-lgbm-benchmark]」となります。「sishihara」はユーザIDです。大文字を小文字に変換し、空白・記号なども一定の規則で処理してくれるので分析するのに非常に都合がよくなっています。

f:id:upura:20211204233948p:plain

Notebookの絞り込み

一定の評価を受けたNotebookに絞り込むため、次の処理を実施して「Voteを1以上得たNotebook」に集計対象を限定します。

kernels = kernels.query('TotalVotes > 0')

年ごとに分割

「公開年」別に集計すると、次のようになりました。公開されたNotebookは年々増加していますが、伸びの勢いは収まってきている印象です。

kernels['Date'] = pd.to_datetime(kernels['MadePublicDate'])
kernels['Date'].dt.year.value_counts().plot.bar()

f:id:upura:20211204234117p:plain

TF-IDFを計算

最後に、年を文書、タイトルを文の単位として捉えて「TF-IDF」を計算します。詳細は割愛しますが、多くの年で出現する語(一般的な語)は重要度が下がり、特定の年にしか出現しない単語の重要度は上がるような計算を施すことになります。あらかじめnltk.corpus内の英語のstopwordsを指定して、a, the, ofなどの一般的すぎる単語は取り除いています。

注)2019年までの記事では筆者の判断でKaggle特有の一般的な単語やコンペのタイトル名に含まれる単語などを除外していましたが、2020年の記事からは恣意性を排除するために特別な処理は止めました。

from nltk.corpus import stopwords
from sklearn.feature_extraction.text import TfidfVectorizer


stopWords = stopwords.words("english")
vectorizer = TfidfVectorizer(stop_words=stopWords)

結果発表

2021年のTF-IDFの値で降順にソートした上位10件を以下に示します。2021年の首位には「eda」が返り咲きました。昨年首位の「covid」は10位まで順位を落としています。一方で「eda」のスコアは常に右肩上がりになっています。

初学者向けコンペの「titanic」は常に上位を維持していますが、今年は「tps」が一気に迫ってきているのも注目です。「tps」とは「Tabular Playground Series」の略で、今年1月から毎月開催されている以下のような位置づけのテーブルデータのコンペです。

These competitions will be great for people looking for something in between the Titanic Getting Started competition and a Featured competition.

f:id:upura:20211204234415p:plain

f:id:upura:20211204234705p:plain

おわりに

本記事では昨年に引き続き、TF-IDFを用いた「Kaggle流行語大賞」を算出しました。「eda」が相変わらずの人気ぶりを示しつつ、王道コンペとして「titanic」に次ぐ「tps」が出現した結果となりました。 今年1年も存分に楽しませてもらったKaggleに感謝しつつ、来年もKaggleを楽しんでいきたいです。

「NHKハッカソン- 教育×シビックテック×ニュース」参加録

運営に関わる知人に誘われ、この週末に開催された「NHKハッカソン- 教育×シビックテック×ニュース」に参加してきました。以下がイベントページから抜粋した本イベントの概要です。NHKのニュース関連のAPIを用いて開発できる貴重な機会でした。

今回は「NHK for School」「NHK NEWS WEB」などのデータを活用し、試験的にサービスやアプリケーションを開発することを通して、新たな学びの可能性を探ります。コロナ禍で教育現場や子どもたちの日常に大きな変化が起きている今、新しいサービスやコンテンツのアイデアが本イベントの中で生まれ、カタチとして表現されることを期待しています。

NHK for Schoolは子どもや先生向けに学びのための動画コンテンツが集まっているサイト、NHK NEWS WEBNHKの一般的なニュースサイトです。APIを通じて、動画・画像・テキスト・ジャンルなど各種情報を取得できました。

日程は10月22、23日の2日間でした。初日冒頭の企画立案で、全員が取り組みたい内容をスライド1枚にまとめ、内容が類似した参加者同士でチームを組みました。私を含めた3人のチームの題材は「学びとニュースを繋ぐ」になりました。実装したのは、NHK for Schoolで学びのための動画を観た後、関連する話題についてのNHK NEWS WEBのニュースが表示されるウェブサービスです。学んだことと世の中との繋がりを実感できることが、より主体的・積極的な学びを促すことを期待しました。

具体的な処理の流れを以下に示します。

  1. ユーザから検索語を受け取る
  2. 検索語を含む「NHK for School」の動画クリップを一つ表示
  3. 表示した動画クリップのタイトルや説明文を形態素解析ツール「MeCab」で処理し、名詞部分を「キーワード」として抽出(各キーワードは「TF-IDF」で重要度を計算しておく)
  4. それぞれの名詞で「NHK NEWS WEB」の記事を検索し、重複を排除した記事群を「関連記事」とする
  5. 関連記事は、各記事に含まれるキーワードを用いてスコア付けし、降順で表示

言語はチームメンバーが共通で利用可能だったPythonを選び、フロントエンドの実装には「Streamlit」を使いました。最終発表時などは「ngrok」を使って、実際に触ってもらえるような環境を整えました。ハッカソンの参加は久々でしたが、日頃の業務経験も生かして、円滑に開発を進められたと思います。

NHKが自社のAPIを(参加者限定とはいえ)社外の参加者に公開し、このようなハッカソンを開催していることに、良い意味で非常に驚きました。ドキュメントもきちんと用意されており、特に不自由なく開発を進められました。参加同意書によると成果物も公開可能とのことで、問題のない範囲で下記リポジトリにまとめました。

github.com

【書籍メモ】『Software Design 2021年11月号』Kaggleで知る機械学習(技術評論社)

Kaggle特集に惹かれ、今月の『Software Design』を購入しました。

gihyo.jp

特集の目次は、以下のとおりです。

第1特集 Kaggleで知る機械学習 前処理から学習モデルの構築,スコアの上げ方までわかる

  • 第1章:Kaggleにエントリーしよう 登録からSubmitまでブラウザ上で完結
  • 第2章:自然言語処理のコンペに挑戦① データの前処理・学習・推論の流れ
  • 第3章:自然言語処理のコンペに挑戦② モデル変更でスコアを底上げする
  • 第4章:くずし字認識のコンペに挑戦① パラメータチューニングの奥深さに触れる
  • 第5章:くずし字認識のコンペに挑戦② さらなるスコアアップのためにKagglerがやっていること

まずは、広くソフトウェアエンジニア向けの雑誌にKaggleの特集が掲載されたのが印象的でした。その中で第1章では、Kaggleの概要や機能をスクリーンショットと共に紹介しています。

第2・3章では実際にコンペに取り組んでいきますが、題材は良くあるテーブル形式のデータセットではなく自然言語処理でした。モデルとしても、既に近年の標準になっているBERTを採用しており、昨今のKaggleの情勢を反映した入門記事になっていると感じました。単にライブラリを使うだけでなく、BERTにおける文字列の処理がソースコードともに記述されている点も好印象でした。

第4章では、画像認識に踏み込みます。ここでもモデルとして、かなり新しいEfficientNetV2を用いてベースラインを作成しています。データ拡張などの頻出処理を紹介しつつ、第5章ではAdaBelief・Gradient Accumulation・Sharpness-Aware Minimization(SAM)・Snapshot Ensemblingなど、日本語の紙媒体ではなかなか見かけない技法が次々と登場して、とても楽しく読み進められました。技法の有無による性能の変化も表でまとめられており、丁寧に書かれた特集で面白かったです。