この記事について
この記事では、プログラミング初心者の大学生である(であった)私が試行錯誤しながらなんとかスター数300越えのOSSライブラリを作った過程をまとめたものです。ライブラリ自体はまだまだ発展中のためこの記事も適宜更新してく予定です。ライブラリ自体の詳細というよりも、自作OSSの認知度を上げで他の人に使ってもらうために有用そうな知見をまとめていこうと思います。
ライブラリの概要
今私が作っているのは、AIJackという、機械学習モデルがもつセキュリティ・プライバシー上の脆弱性についての各種攻撃・防御手法を実験するためのPythonツールです。既存のライブラリの多くは特定の種類の攻撃や防御に特化したものが多く、複数のタイプの攻撃・防御を組み合わせて実験するためにはいくつものライブラリを組み合わせる必要がありました。そこでAIJackでは、できる限り統一的なAPIで様々な攻撃・防御手法を実装することを目標にしています (まだ道半ばですが...)。
具体的な手法としては、差分プライバシー (Differential Privacy)・準同型暗号 (Homomorphic Encryption)・K-匿名化 (K-anonymity)・連合学習 (Federated Learning)などの防御手法や、Evasion Attack・Poisoning Attack・Model Inversion Attackなどの攻撃手法をサポートしています。
この記事を書いている時点で、GitHub上のスター数が300、フォーク数が60、ダウンロード数が3000を超えており、外部のコントリビューターが5人、5本の論文と1冊の書籍で使用されていることを確認しています。
認知度の挙げ方
主に以下の媒体でOSSの宣伝をしてみました。
- Paper With Code: 主に機械学習関連の論文の実装をまとめたサイトです。誰でも自由に自分の実装を登録することができます。AIJackも20本以上の論文を実装してPaper With Codeに登録しており、現在ではトラフィックの最も多い流入元となっています。
- Reddit: 英語版2チャンネルと呼ばれることもある交流サイトです。人の多いチャンネル (上位1%くらい) に投稿するたびに、2~3日の内はかなり人が流入してスター数が急増する傾向があります。ただし、チャンネルによっては自分のプロジェクトの宣伝が制限されている場合もあるので、注意が必要です。
- Hacker News: アメリカのベンチャーキャピタルによって運営されているニュース投稿サイトです。他の人の記事によるとかなり効果があるそうですが、自分が何回か投稿した限りではあまり人は流入してきませんでした。
- DEV Community: 英語版Qiitaのようなものです。めちゃくちゃ爆速で使いやすいサイトで、いくつかAIJackに関する記事を書いてみたのですが、あまり効果はありませんでした。
ドキュメント・CI/CDの整備
他のユーザーに使ってもらったり、OSSに貢献してもらうためには分かりやすいドキュメントや使いやすいCI/CDパイプラインを整備しておくことが大事です。AIJackでは以下のツールを使っています。
-
Sphinx: ドキュメント自動生成ツールです。コードのドクストリングなどから自動でAPIドキュメントを作ってくれます。個人的には、jupyterノートブックの取り込みやすさや見やすさの点から、
sphinx_book_theme
がおすすめです。
- Codacy: コードのフォーマット・脆弱性などの問題点を自動で検出してくれるサービスです。GitHubのPublicレポジトリに対しては無料で使うことができます。重複しているコードの検知、不安定な数値計算を改善する方法などまで提案してくれるので、とても重宝しています。
- black: pythonのコードのフォーマットを自動で直してくれます。シンプルに神。
- isort: pythonのimportの順番をいい感じにしてくれます。blackとの連携でたまにおかしくなりますが、ググればなんとかなります。
- pytest: python用の単体テストツールです。
- googletest: C++用の単体テストツールです。
- GitHub Actions: 上記のようなツールを一つづつ実行するのは面倒なので、GitHub Actionsを使って自動化しました。workflowは他のプロジェクトにも流用できるかもしれません。
OSSを頑張ってよかったこと
- インターンの面接のときに受けが良くなった。
- laprasのスコアが爆上がりした (GitHubスコア4.1、技術力スコア3.81)。
- 機械学習関連の論文をたくさん実装したことで、AI・ML周りの技術力・数学力が上がった(気がする)。
- 修士を経由せず、学部から直接の応募だったが、米国トップスクールのコンピューターサイエンス博士課程に複数合格できた。自分自身が運営しているOSSのスター数がそこそこ多いことや、第三者の論文・書籍で採用されているという話は、面接でもそれなりに受けていた気がします。出願した研究室の論文もいくつかAIJackに実装されていたことも大きかったかもしれません。