ヒグマ

Like a Bear / Notes

🤘

2022年を振り返る

Life

2022 年も残りわずかとなりました。恒例となっている一年の振り返りをしていきます。今年も、学業やインターン、個人開発やら盛りだくさんだったような気がします。

1. 学業・研究

まずは学業・研究についてです。ここでは、私の本分でもある研究の今年取り組んだ内容を振り返ります

1.1 ダークパターンの自動検出

まずは、学部生の頃から LINE と共同で取り組んでいた Web 上の悪質な UI/UX であるダークパターンを自動検出するという研究についてです。テキストベースのデータセットを構築して、事前学習済み言語モデルを使い自動検出するという内容で、日本語と英語の論文を一本ずつ執筆し、英語の方に関しては、IEEE BigData の Workshop(査読付き国際学会)に採録されました。

Dark patterns in e-commerce: a dataset and its baseline evaluations ( Accepted: IEEE BigData Workshop 2022 🎉)

ショッピングサイトを対象としたダークパターン自動検出の試み ( DEIM2022 )

実装も公開しています。

yamanalab/ec-darkpattern

この研究、運よく国際学会に通すことができましたが、正直、研究成果に技術的な新規性があるわけではないです。そのことは教授にも何度も指摘されたので、次のテーマでは、もっと技術的な新規性の高い研究がしたいです。

1.2 新しいテーマ

ダークパターンの自動検出を通して、自分が深層学習や NLP にやっぱり興味があるんだな、という風に思いました。そのため、それに関連した新しいテーマのサーベイも始めています。まだまだふわっとしていますが、推薦とか情報検索系の論文を読んでいます。うまくいくのかな〜と不安は常にありますが。本当なら、IEEE BigData の採録が決定した 11 月くらいから始めたかったのですが、Camera Ready や Prerecording Video の準備やらで忙しく、開始がなんと年末になってしまいました。来年はこれで英語・日本語の論文が何本書けると良いですね。論文という形でなくても研究関連のアウトプットは増やしていきたいです。

研究は、先が見えず、形になるのかという不安もあり、しんどいなぁ〜となる場面も多々あり、去年の振り返りブログを見ても大分それで悩んでいたような気がします。しかし、論文を書き、きちんとアウトプットしてみると、知識面でも行動面でも自分が良い方向に変化させることができたように感じます。なので、なんだかんだ楽しかったし、来年はもっと頑張っていきたいですね。また、国際会議に通せた、ということでこの成果を和訳すればなんとか修士号くらいであれば取れそうです。(そのスタンスを教授が受け入れてくれるか問題はある。)

2. インターン・就活

そしてインターンと就活についてです。ここ数年の恒例行事みたくなっていますね。2021 年はフロントエンド中心で、リクルートや Wantedly、Cookpad 等にお世話になっていました。しかし、

もともと技術の興味範囲が広かった。

特定の技術領域のスペシャリストになりたければ、周辺領域もある程度分かってないとダメだと思う。

早い段階で自分が「~エンジニア」とカテゴライズされたくなかった

というか、いろんな技術できた方が作れるものの幅が広がって純粋に楽しいよね!

ということで、意識的に技術の幅を広げるようにしていました。単純に面白そうだと思ったインターンやプロジェクトに取り組んだだけかもしれませんが。一つ一つ振り返ってみましょう。

2.1 Sony(春インターン)

2 月に 3 週間ほどお世話になっていました。Twitter で「Sony のインターンはプレステのゲームを TypeScript で作れるヨ!」みたいな投稿を見て、後先考えずに反応的に応募していました。

しかし、プレステのコースは院生を対象にしていたらしく、結局、クラウドソフトウェア事業部というテレビ(Bravia)のバックエンドとかを作っている部署に配属されます。

業務では、Go で API サーバを書いたり、React でフロントエンドを書いたりしていました。(去年 Go で自作コンパイラ作ったこともあり、「Go で実務やりたいな〜」という機運が高まっていたので、丁度よかったですけど。)

配属先の人がとても優しく、生意気な学生の言う事も「うんうん」と聞いてくださったおかげで、最後まで、楽しく過ごせました(本当にありがたい)。 Web 系ではなく、メーカーでソフトウェアエンジニアとして働くということがどういうことなのかぼんやり分かり、「これはこれで楽しそうだよな〜」と思ったりしました。

2.2 メルカリ(春インターン, not 就業型)

3 月に一週間お世話になりました。ジェネリクスをはじめ、割と大きな変更が入る Go1.18 がリリースされるタイミングで、その機能を手を動かしながら学ぼう!という tenntenn さん主催のインターンです。

Go が書きたかったので、宣伝を見かけて、こちらも反応的に応募。内容は、前半:講義、後半:開発(競うわけではない)みたいな感じでした。

開発パートでは、開発期間が 2 日と限られていた事もあり、今の知識でガッと作れるものを、という事で、「Go でニューラルネットをスクラッチ実装」しました。(気のせいかもしれないが、反応結構よかった気がする。)

https://github.com/YadaYuki/deeplearning-golang

ちゃんと学習を回せば、手書き文字分類(MNIST)タスクで 95%の Accuracy が出ます。同じ世代の学生と交流する機会が意外と少なかったりしたので、これもとても楽しかった。(時給が 2500 円でしたが、「いやお金払って受けるレベルのコンテンツだろ…」と同じチームの人と話したり。)

2.3 GritTech

2020 年の 7 月にインターンとして入社したスタートアップの GRIT Tech を 2022 年の 5 月に辞めました。ここで何をやったのか、何を学んだのか、については、一章では足りないくらいたくさんあります。

「Pull Request?何それ?」「型無しの JS しか書いた事ないぃ」「フォルダ構成、インフラ構成、それそんな大事ですか?」そんなレベルだった何も知らない大学生が、曲がりなりにも色んな会社でインターンとして働けるようになった(もちろんミスや失敗はある)のは、この会社で色んなことを学んだことによる面が大きいです。

スタートアップで新規プロダクトの開発がやれたことはとても楽しかったし、その過程でハード面・ソフト面の両面で色んなことを学べたと思います。

なぜ辞めたのか?? 本当に楽しかったのですが、自分の技術的な興味(機械学習・MLOps とか、規模感の大きめなサーバサイドとか、システム設計とか)がスタートアップで得られる経験とずれてきたためです。

また、1 年半に亘り、ずっと手塩にかけて育ててきた不動産投資シミュレーションアプリ UnderWriting( https://www.grittech.jp/service )をリリースでき、良い区切りだな、と思ったことも大きいです。

「いつでも戻ってきていいよ」的な言葉で送り出してくれたので、良い会社に恵まれたなぁ〜、と心から思います。

2.4 日本経済新聞社

GRIT Tech からの転職先です。大規模なサービスを運営していて、データもたくさん持っていそう(NLP が好きなので特に言語データ)で、技術発信等を拝見して、技術的にも優秀な人がたくさん在籍している会社という事で転職先として選びました。

実は日経なのですが、今まで 3 回(記者職 2 回含む)、書類選考でフラれており、今回もダメかな〜、とダメ元で出したら、思いの外トントン拍子でインターンとして雇ってもらえることになりました。

リリース前なので、内容は明かせませんが、当初希望していた、サーバサイドの実装もデータ分析も大規模なデータ処理もわりかし全部できるタスクを担当できて、楽しくやれています。

ただ、慣れない技術があったこと、プロダクトの背景知識が少なかったこと、機械学習・DS のスキルがまだまだ低いこと、研究や他社のインターンで稼働時間が減る時期が多くあったこと等の理由から、まだアウトプットが出せていないことが悔しい部分です。来年はしっかりとアウトプットをして、事業とチームに貢献していきたいですね。

2.5 サイボウズ( 夏インターン )

さて、ここからは夏インターンです。8 月にサイボウズで一週間ほどお世話になりました。配属になったのはフロントエンドエキスパートチームというチーム。Web フロントをやっている人の中でこのチームの存在を知らない人はあまりいないのではないでしょうか。過去のインターン参加ブログを拝見していて、いつか参加してみたいなぁ〜〜、とずっと思っておりました。

こちらもダメ元くらいなイメージで応募しましたが、なんとか合格。合格者は僕一人だったそうです。背筋が伸びますね。

このインターンでは、styled-components でスタイリングされた React コンポーネントを別の CSS in JS に自動置換する extract-styled という CLI ツールを開発していました。なお、これに関しては Zenn に割としっかりとした技術記事を書いています。Zenn でトレンド一位取ったり、界隈の有名人が拡散してくれたり、結構バズった?と自分では認識しています。

一週間(5 日間)という短い期間でしたが、知識豊富なフロントエンドのエキスパート達のおかげで、本当に楽しく過ごすことができました。アウトプットを出せた事も良かったし、一生役に立たないと思っていた自作コンパイラの AST 云々みたいな知識が役に立ち、結構感動です。

フロントエンドは大好きな領域なので、来年は個人でのアウトプットもやっていきたいですね(サービス作ろうかしら)

2.6 Preferred Networks ( 夏インターン )

8 月 ~ 9 月にかけては Preferred Networks という会社でインターンをしていました。“Learn or Die”という強そうなカルチャーを持つ強い会社です。圧倒的技術力の会社というイメージが強くあったので、「もしかしたら自分にはご縁がないかもな」と思っていましたが、こちらもなんとかインターンに合格することができました。

フロントエンドエンジニアとしての採用でしたが、「研究で Deep 触っているから Deep もやりたいんですよね〜」と事前面談でなんとなく伝えたら、インターン初日に CVPR 2022 の Oral で発表された深層学習(アクティブラーニング)の論文を渡され、いい意味で度肝を抜かれました。

コンピュータビジョンもアクティブラーニングもほぼ知らなかったので、やり切れるのか?という不安も正直大きかったですが、「最新の深層学習モデルの組み込まれたシステム・Web サービスが作れるぞ!!」と結構ワクワクしていた記憶があります。

作ったものは VeloxLabel という物体認識・セマンティックセグメンテーション用の AI アノテーション機能を搭載したアノテーションツールです。

背景や内部実装、理論等について詳細に説明したいところですが、とてもブログ一章分では収まらないので、興味がある方は以下のブログをご覧ください。

https://tech.preferred.jp/ja/blog/efficient-annotation-tool-using-active-learning/

1 ヶ月半という期間で、論文調査・再現実験・システム設計・モデルの作成・Web デザイン・バックエンド(FastAPI/Python)・フロントエンド(React/TypeScript)と広い領域に触れ、アウトプットを出すことができたのは、PFN の優秀な人と高性能なコンピュータというリソースを存分に利用できる環境が与えられてたからだと思います。最後まで伸び伸び楽しく開発ができたので本当に感謝しています。

2.7 就活

そして、就活です。

こちらも相対的にはややスローペースかもしれませんが進めています。これは、中々センシティブな話題ですね。正直とても怖いです。うまくいくかどうか、そもそも何を持って「うまくいく」なのか、わからないことも多いですが、結果に一喜一憂せず、素直に臨んで、ダメだったら、ご縁がなかったのだと、それを次に繋げていく。結局は、就活もインターンも面白がって楽しく臨むことが大事なのかな、と思います。辛い場面もありますが、学生を苦しめたい企業や人がいないことは間違いないと思うので。

3.個人開発

さてさて、個人開発も振り返っていきます。

3.1 Python/PyTorch による自作 Transformer

研究で言語モデルに触ったりした事もあり、NLP 系の深層学習、個人開発で何かやりたいな〜、と思っていたため作成しました。また、PyTorch も理解がゆるふわな部分が多々あったので、その勉強も兼ねています。

Transformer は 2017 年に発表され、BERT や ViT など近年の SoTA 的な手法に多く用いられる深層学習モデルです。そのため、PyTorch や Tensorflow にも公式実装が存在しますが、あえて再発明しました。

記事も執筆しています。

余談ですが、この記事、今年 zenn に僕が投稿した記事の中で最も読まれた回数が多かったらしいです(いいねも反響も一番少なかったのでとても意外。)。

転職先の Data Scientist の人にも好評いただけて、Transformer に対する理解度もググッと高まったのでやって良かったなぁ〜、と心から思います。来年は個人でも研究でもたくさんモデルの実装をしたいですね。

3.2 Go 製 全文検索エンジン Omochi

研究で NLP を触って情報検索に興味が湧いたことや Sony のインターンで「Go でコンパイラは作ったことあってもサーバサイド結構わかってないやん…」となり、Go でサーバサイドの練習がしたくなったことなどを動機として取り組みました。

Omochi は Go で転置インデックスを用いた全文検索をスクラッチ実装しています。転置インデックスの作成や圧縮・解凍、TfIdf による検索文書のスコアリング、形態素解析・分かち書き等、検索エンジンを構成する要素を Go で結構、丁寧に実装しました。なお設計は DDD しています。

こちらも記事を書きました。

完全趣味で作ったものでしたが、これも Zenn でトレンド一位とったり、有名人が拡散してくれたり、中々反響があり、驚きました。

あ、あと技育展というやつにもこれで登壇しました。(賞とかは貰えなかったですけどね)

自分が作ったものが同業のエキスパートに褒められるというのは、なんとも言えず嬉しいもんです。

何がウケそうとかは基本的に邪念にしかならないと思っているので、これからも、自分が素直に面白いと思ったもの作りや記事執筆、研究を続けていきたいですね。

3.3 競プロ (AtCoder)

最後に競プロです。レートの変化は

578 → 929

という感じです。今年中に水色になんとしてもなりたい!!と思っていましたが、自分の努力不足でその目標には達することはできませんでした(大反省)。

しかし、緑を超えたあたりからコーディング試験で苦労することはほぼなくなりました。元々コーディング試験のために…とはじめた競プロでしたが、最早楽しくなってきた(レートが落ちると心が折れそうにもなりますが…)のと、以前お世話になっていた大学の先輩に宣言してしまった手前、どうしても水色にはなりたいという意地もあるので、来年の 3 月くらいまでには絶対に水色になりたいです。

4.見た映画・本 (技術書以外)

読んだ本

見た映画

これも今年の反省ですがコロナ以後、映画や本に触れる機会がめっきり減ってしまったなぁ、という感覚があります。映画も商業映画しか見てないですしね。来年、一度、評論でも小説でもなんでも良いので、ガッツリアウトプットする時間を設けて、自分の中の興味に変化を生みたいなと思います。

5. まとめ・反省

今年はありがたいことに、研究でも一定の成果が出たり、幅広い領域のインターンに参加できたりと、様々な機会に恵まれ、エンジニアとしての幅が広がったような感覚があります。一方で反省点もあります。

その多くは達成できなかった目標ですが、もう少し早く行動していれば、もう少し自分のタイムマネジメント力が長けていれば、規則正しい習慣が身に付いており作業時間を増やすことができれば、達成できたものばかりです。来年はこうした悔いを可能な限り残さないようにしたいです。

6. 2023 年の目標

さて、ここまでで、今年一年を振り返ってきましたが、最後は 2023 年の目標で締めたいと思います。例年通り目標を「習慣」「長期的努力」「瞬発的行動」の 3 つに分けています。

習慣

長期的な努力

瞬発的行動

それでは、皆様、良いお年を。