ラベラー・ニアバイ

Table of Contents

私の最初のハッカソン

2022年の夏の後半、私は本当にワクワクするプロジェクトに取り組みたかった。大学を卒業したばかりで、ソフトウェアエンジニアとしてフルタイムで働いていた。サイドプロジェクトにコミットしたいと強く思っており、当時は十分な自由時間があった。何に取り組むべきか全く分からなかったが、2022年8月にDevpostというウェブサイトを見つけたのがきっかけだった。Devpostはハッカソンと呼ばれるソフトウェアコンペティションを開催するサイトだ。Devpostを閲覧していると、NEAR MetaBUILD IIIというハッカソンを見つけた。これはNEAR Protocol組織が主催するハッカソンだった。

NEARとは何か?

NEAR ProtocolはスマートコントラクトとNEAR暗号通貨をサポートするブロックチェーンです。主に取引手数料が非常に低いこと、スマートコントラクトをサポートしていること、公式のテストネットを持っていること、そしてRustやJavaScriptでスマートコントラクトを書けるため開発者環境が優れていることで知られています。NEAR Protocolの概要は、CoinGeckoの素晴らしい動画で確認できます:

この時期、Coinbaseは公式にNEAR Protocolを取引可能なコインとしてプラットフォームに追加しました。Coinbaseはサポートするコインを非常に選別することで知られているため、これは大きな出来事でした。これによりNEARはより信頼できるプラットフォームとなりました。現在でもCoinbaseでNEARを取引できます。

なぜコミットしたのか?

しばらく考えた結果、NEAR MetaBUILD IIIハッカソンに参加することに時間を割くことに決めました。その理由は次の通りです:

  • 暗号通貨はなくならず、今後も残る技術です。したがって、この技術を学ぶために時間を投資するのは理にかなっています。
  • ハッカソンには素晴らしい報酬があり、優勝者の一人になるとNEARで20,000ドルから100,000ドル相当が支払われます。
  • ハッカソンには明確な締め切りがあり、プロジェクトが数か月間引き延ばされることはありません。
  • このプロジェクトは学習体験としても、ハッカソンへの導入としても優れています。
  • 万が一の場合でも、ハッカソンで作った優れたプロジェクトを履歴書に掲載できます。

これらすべてを踏まえて、2022年8月26日に大学時代の親友に連絡し、ハッカソンの計画を立て始めました。ハッカソンは2023年9月23日に開始し、2022年11月21日に終了する予定でしたが、締め切りはハッカソン終了間際の2023年11月24日に延長されました。開始1か月前だったので、2か月間のハッカソンに向けて学習とブレインストーミングに時間を費やすことにしました。最初の1か月で、暗号通貨とブロックチェーンの概要を学び、NEARのテストネットを体験し、NEAR SDKを確認し、いくつかのスマートコントラクトをデプロイしました。

アイデア

ブロックチェーンとNEARの全体像を把握した後、アイデアのブレインストーミングを開始しました。このプロジェクトは単なる「ハッカソンプロジェクト」ではなく、他の人が利用でき、暗号通貨が単なる取引以外でも有用であることを示す製品になることを目指しました。

当初は、Unreal EngineのBlueprintのように、コードを書くことなくNEARブロックチェーン上でスマートコントラクトを簡単に作成・デプロイできるツールを作ろうと考えていました。しかし、ハッカソン開始1週間前にこのアイデアを破棄しました。なぜなら、実用的なユースケースがまだない状態で誰がわざわざ私たちのツールを使ってNEARスマートコントラクトを作成するのか、という疑問が生じたからです。必要とされないツールを開発するようなものです。

ハッカソン開始まで残り1週間となったとき、再びブレインストーミングを行い、次のアイデアに落ち着きました:

A decentralized platform where AI researchers can outsource
data labeling to labelers around the world

プロジェクト名は「Labeler NearBy」と名付けました。このアイデアを選んだ理由は以下の通りです:

  • AI開発にはデータの人手によるラベリングが必要です。
  • 特定のデータセットに対してラベリングできる熟練者を見つけ、管理するのは困難です。
  • 同様のアイデアはすでにScale AIという企業によって成功裏に実装されており、プロダクト・マーケット・フィットを達成しています。
  • Scale AIのような集中型サービスは、組織がデータをラベリング会社に送信し、同社が世界中の人間ラベラーに外注するというプロセスを伴います。ラベリング後、会社はラベル付けされたデータを組織に返しますが、これにより貴重な学習データの管理権が失われ、ラベリング会社が自社モデルの学習に利用できてしまいます。サービスを分散化することは論理的な解決策に思えました。
  • 分散型アプリ(dApp)領域でこのアイデアに取り組んでいるプロジェクトは極めて少なく、我々がこの分野でイノベーションを起こす機会があると判断しました。

複雑さを減らすため、Labeler NearByは当面画像データのみをサポートすることにしました。

提出

アイデアが決まり、ハッカソンが正式に始まると、友人と共にLabeler NearByの開発に取り掛かりました。2か月間プロジェクトに取り組み、2022年11月24日にDevpostへ最終稿を提出しました。Devpostにプロジェクトを提出したほか、GitHubにも提出物のコピーを作成しました。このブログはLabeler NearByのすべての技術的側面や開発プロセスを網羅しているわけではありません。Labeler NearByの仕組みを詳しく知りたい、または最終提出物を閲覧したい方は、以下のリンクをご覧ください:

Labeler NearByは2つのコードベース、ln-researcher と ln-labeler から構成されています。これらはMITライセンスの下で完全にオープンソース化されており、以下のリンクから閲覧できます:

以下はLabeler NearBy(LN)がどのように機能するかの概要です:

研究者はAIモデルの訓練に必要なラベル付き画像を必要とします。そのために研究者はLNを利用してデータをホストし、ラベラーがデータにラベル付けできる手段を提供します。これはln-researcherという自己ホスト型ウェブサービスで、API、研究者のスマートコントラクト、ローカルのPostgresデータベースで構成されています。ラベラー側にはウェブフロントエンドが(提供される予定で)用意され、研究者の画像にアクセスしてラベル付けできるようになります。ラベリングプロセスでは、1枚の画像が異なるラベラーによって3回ラベル付けされます。投票システムで最も優れたラベルを付けたラベラーだけがNEARコインで報酬を受け取ります。このプロセスを担うウェブアプリはln-labelerと呼ばれます。研究者は各ラベリング作業に資金を提供し、NEARコインはCoinbaseを通じて簡単にドルに換金できます。すべての取引ロジスティクスはNEAR Protocolブロックチェーン上のスマートコントラクトが処理します。

ハッカソン用のLabeler NearByデモ動画はこちらでご覧いただけます:

最大の成果

最も誇りに思う実装は、getImage()という関数です。この関数はln-researcherのAPIエンドポイントとして機能し、Labeler NearBy(LN)における研究者とラベラー間のデータパイプラインで重要な役割を果たします。

このAPIエンドポイントにより、研究者は画像を安全かつ確実にラベリング用に配布できます。ラベリングの割り当てはNEAR Protocolブロックチェーン上のスマートコントラクトで管理され、画像データはln-researcherを通じて研究者がホストします。

エンドポイントは、割り当てられたラベラーだけが画像にアクセスできるように複数のセキュリティチェックを実行します。リクエストの署名検証や、タスクの存在とラベラーへの割り当てを確認するためのスマートコントラクトチェックが含まれます。

リクエストが自己ホスト型ln-researcher APIで検証されると、関数はローカルのPostgresデータベースから画像を取得し、画像を暗号化して認可されたラベラーに配信します。ラベラーは画像を復号してラベル付けを行います。同時に、関数はデータベース内の画像ステータスを更新し、ラベリングの進捗を示します。このプロセスでは、研究者とラベラーの両方のRSA鍵が認証に使用され、画像の暗号化にはAESが使用されます。

このエンドポイントは、研究者からラベラーへの画像の安全かつ制御された配布を管理する上で重要な役割を果たします。データ転送の安全性を確保し、画像ラベリングプロセスを効果的に追跡・管理します。また、このプロセスは少なくともこのエンドポイントに関してはHTTPSの使用を不要にする可能性があります。

この特定のエンドポイント/関数はテスト済みで、機能が確認されています。以下はLabeler NearBy全体の機能を示す図で、上述のエンドポイント/関数の動作を明確に示しています:

結果

残念ながら、悲しい現実として、ハッカソンの締め切りまでにこのプロジェクトを完全に完了することができませんでした。プロジェクトの大部分は完了しており、例えば ln-researcher などは完成しましたが、フロントエンド(ln-labeler)は完成せず、ライブデモをデプロイできませんでした。バックエンド(ln-researcher)はほぼ完成していたものの、適切に動作するフロントエンドやライブデモがなかったため、誰も Labeler NearBy のアイデアを試すことができませんでした。さらに、審査員もプロジェクトを試すことができず、提出物を読んだり、コードを確認したり、あるいは自分で実行しようとしなければなりませんでした。その結果、優勝の可能性は事実上ゼロパーセントにまで下がってしまいました。このことは、2022年12月15日にハッカソンの受賞者が発表されたときに確認され、私たちはその中に入っていませんでした。

敗北

このハッカソンの最終結果が落胆させるものであったことは隠しません。このプロジェクトには数か月を投資し、研究者に非常に有用なツールを提供できると考えて大きなビジョンを抱いていました。

私が取り組むプロジェクトには明確な基準があります:成功するか失敗するかのどちらかで、中間はありません。したがって、このプロジェクトは締め切りまでに完全に完了せず、潜在的なユーザーがアクセスできなかったため、失敗と言えます。

しかし、失敗は人生の自然な一部であることを忘れてはなりません。私たちの成功は失敗から学んだ教訓の上に築かれています。このハッカソンの結果は落胆させるものでしたが、プロジェクトや製品の開発に関して貴重な洞察を提供してくれました。

学んだ教訓

この経験から得た主な教訓は以下の通りです:

  1. 私たちが選んだプロジェクトは、反復を行う前に多くの機能を事前に構築する必要がありました。これはどういう意味かというと、このプロジェクトはアイデアのほぼすべてのコンポーネントを構築しなければ、アイデアさえテストできなかったということです。機能するために必要なコンポーネントが少ないプロジェクトを選んだ方が理にかなっていました。そうすれば、必須のコンポーネントをより早く構築し、プロジェクトを早く反復できたでしょう。その結果、締め切りをより容易に守り、シンプルながらもより完成度の高いプロジェクトにできたはずです。テックスタートアップアクセラレータの YC は、すぐにリリースし、ユーザーと対話し、反復することを強調しています。私たちもこのハッカソンのプロジェクトでそれを行うべきでした。
  2. 私たちはこのプロジェクトの構築に要する時間を過小評価していました。これは私たちにとって初めてのハッカソンであり、分散型アプリケーション(dapp)を作る初めての経験でした。さらに、私はソフトウェアエンジニアとしてフルタイムで働き、友人は修士課程を修了していました。それでも、2か月で十分だと考えていました。プロジェクトのスコープを縮小するか、作業負荷を軽減できるチームメンバーをもう一人見つける方が理にかなっていたでしょう。
  3. ウィンストン・チャーチルは有名に「完璧は進歩の敵だ」と述べました。私はこのプロジェクトをビジネス・ツー・カスタマー(B2C)製品のように扱っていましたが、実際にはハッカソンのプロジェクトであり、最大でも最小限の実用的製品(MVP)に過ぎませんでした。そのため、初期段階でコア機能を十分に動作させることに時間を割くべきだったのに、小さなディテールに過剰に時間を費やしてしまいました。

これらの貴重な教訓に加えて、個人のサイドプロジェクトやプロフェッショナルな取り組みの両方で非常に役立つ新しいスキルを習得しました。これらのスキルは以下の通りです:

  1. Node.js、JavaScript、Express.js を使用した API の開発
  2. データ管理のための PostgreSQL の設定と使用
  3. PG のようなパッケージを使用して、API 開発に PostgreSQL を組み込むこと。
  4. データセキュリティ向上のために RSA(非対称暗号)と AES(対称暗号)を活用する。

結論

全体として、最終結果に失望したものの、このハッカソンに参加できたことを嬉しく思います。Labeler NearBy に取り組む中で得た貴重な教訓とスキルに感謝しており、これらは私をより優れた開発者にし、次のプロジェクトである Notify-Cyber の開発に大きく貢献しています。

その他の注意点

  • Labeler NearBy に再び取り組むかもしれませんが、当面はこのプロジェクトは「長期休止中」です
  • 現在、Labeler NearBy は NEAR のテストネットでのみ実行すべきです。さらなる開発、テスト、監査が必要です