見出し画像

YANSハッカソンにデータセットを提供して分かったこと

こんにちは。筑波大博士課程の中山(@nlpingu)です。
理研の常勤雇用職員でもあります。所謂社会人Dです。
自己紹介をどちらの所属で言えばいいのかいつも悩みます。

この度、理化学研究所言語情報アクセス技術チームではNLP若手の会第16回シンポジウム(YANS2021)で同時開催されたハッカソンにデータセットを提供させていただきました。
結果として17名5チームに参加いただきいろいろと貴重なご意見等いただけました。今後ハッカソンを開催するもしくは来年以降のYANSハッカソンにデータセットの提供を考えている方に向けてtipsをまとめておこうと思います。

記事の要点

お忙しい方のためにデータセット提供に関して得られた知見を簡潔にまとめておきます。

・少し難しめなタスクデータセットを提供すると良い。初学者が多いYANSにおいてハッカソンは勉強の機会としての意味合いが強いようで、あまり安直すぎないデータセットが喜ばれるようです。YANSのチームは自然言語歴が偏らないように組まれているため、少々難しめでも熟練者のフォローアップが期待できます。
・日本語のタスクを選択すると良いYANSハッカソンでのデータセット募集は、埋もれた日本語データセットの発掘といった目的があるようです。また、日本人が多いコミュニティーですので日本語の研究を促進するのは非常に意義があります。
・ベースラインを公開すると良いハッカソンという短い期間では特に重宝されます。計算資源が少ない場合でも動くように最小のハイパラセットを指定しておくと良いでしょう。また、適切なコメントや型ヒント等を追加しましょう。
・ベースラインの動作環境構築ファイルを公開すると良いDockerfileやpipのrequirements.txt等があると親切です。
・ベースラインのチュートリアル記事を公開すると良い参加チームの理解度を揃えるために役立ちます。READMEを充実させても良いと思います。
・シンプルなスコアラーを公開すると良い運営の方々の助けにもなります。が、あまり色々追加すると逆に煩雑で使ってもらえないため必要最低限の機能を簡単に動かせるようにすると良いでしょう。
・使用できるデータは1つのページにまとめておくと良い既にあったデータセットを転用する場合は、ハッカソン専用のページを作ると分かりやすい場合があります。
・データセットは多すぎないようにすると良いあまりに多いと、計算資源の差がそのままスコアに直結してしまいます。特にハッカソンは期間が短いため、競技性が犠牲にならないようなサイズが好ましいでしょう。

所々端折っているので、時間がある時に以下も読んでいただければと思います。

YANS2021ハッカソン

YANSハッカソンではデータセットを一般募集するといった取り組みは今年が初めてのようです。
埋もれた日本語データセットを掘り起こすことが一般募集の目的であると運営の方から伺いました。
また、特殊な点として参加者を集めたのちに、データセットの内容が公開されるといったような流れとなっています。
参加者は簡単なアンケートをもとに運営によりチームに振り分けられ、その後は通常のハッカソンと同様に進められます。

今回提供したデータセット

弊チームでは、毎年森羅プロジェクトという名前の共有タスクを開催しており、そのうちの日本語構造化タスクで使用しているデータセットを提供させていただきました。これは所謂情報抽出データセットです。
タスクの内容を簡単に説明すると、Wikipediaの各記事から事前定義された属性に対応する値を抽出するタスクです。
例えば以下の例のように、記事から木村拓哉の職業(属性)して俳優、歌手、タレント(属性値)を抽出するといったイメージです。

森羅例

この属性リストは、各記事に付与されたカテゴリーに紐づけられています。
現在80近いカテゴリーが対象となっていますが、2週間程度のハッカソンには大きすぎるため、「企業名」と「市区町村」のカテゴリーのみを対象としました。

森羅プロジェクトでは、ハッカソンのような共有タスクで得られた結果をそのままリソースとして公開しています。
今回のハッカソンで得られたデータは、Wikipediaを構造化した知識ベースとして公開される予定です。
このような特殊な特性上、参加者に配布されるターゲットデータ(最終的に予測して提出する必要があるデータ)は非常に多く、各カテゴリー数万記事にも及びます。このうちの50記事が評価データとなっています。
2週間のハッカソンではこの予測データは多すぎたため、締め切り直前に各カテゴリー1万件まで減らすことになりました。

参加者アンケート

ハッカソン終了後にアンケートを取ったところ、10名の方にご回答いただけました。ありがとうございました。アンケートの回答ベースで、今後のハッカソンに活かせそうな知見をまとめていきます。

😄「情報抽出の勉強になった」(7名)
YANSは若手のコミュニティーであるため、特に初学者の方が多く参加しています。そのため、他のハッカソンより学習の機会としての役割が大きいようです。
そのため単純なテキスト分類等ではなく、情報抽出やQA、要約や翻訳等少々難しめなタスクを選択すると良いと思います。
YANSハッカソンでは、チーム決めを行う際にチームの能力が均等になるように振り分けられる、少々難しいタスクでも熟練の方のフォローアップが期待できます。

😄「ベースラインが公開されいた/コードがわかりやすかった」(2名)
偶然、来年の森羅プロジェクトのために開発していたベースラインがあったので、そのまま転用しました。
特にハッカソンのように短期で集中的に取り組む場合は、ベースラインのようなたたき台となるコードが公開されていると、少なくともデータ処理まわりは引き継げるため、参加者がスムーズに取り組めるかと思います。
ウォーミングアップや並列化・Mixed Precisionと言った実装やテクニックの勉強にもつながったようです。

😄「ベースラインのチュートリアル記事が分かりやすかった」(2名)
こちらのチュートリアルも来年用に偶然作成していたものです。
チーム内の自然言語処理等に詳しい人に負担をかけずにチーム内での理解度を揃えることができます。

😄「データの一覧をまとめたページが分かりやすかった」(1名)
今回は、大規模なデータセットの一部を使ったため、ハッカソン専用のデータページを用意していました。
複数データのダウンロードや必須ではないが使えるデータ等がある場合は、分かりやすくまとめておくと参加者のより良いシステム構築につながります。

😄「日本語のデータでエラー分析がしやすかった」(1名)
日本のコミュニティー向けのハッカソンで、日本語の研究をするといった取り組みは大変意義があると考えています。これは運営の意向でもあるため、日本語のタスクを用意できることが好ましいです。

😕「データセットが大きすぎた/計算が重すぎた」(7名)
参加者は自前の計算資源を使うことになるため、学習データが多すぎると計算資源の差が最終的な結果に直結してしまい競技性が失われてしまいます。
参加者の気持ちになってGoogle Colab等でタスクを解いてみると肌感がわかるかもしれません。
森羅は都合上ターゲットデータが非常に多いのですが、参加者から「テストデータだけ先に提出して、その他のデータは後日提出を求める」と言った形はどうかとアドバイスいただきました。今後の森羅タスクの際に参考にさせていただきます。

😕「ベースラインが重い」(2名)
ベースラインでデフォルトで指定していたepochやバッチサイズが大きすぎたようです。Google Colabで動くくらいのハイパラセットを指定しておくと良いと思います。必要な空間的・時間的リソース(GPU1080 Ti 4枚で5時間,等)も明記しておくと良いようです。

😕「ベースラインの理解に時間がかかった」(2名)
適切な量のコメントやtype hintingの追加等、可能な限り分かりやすくする必要があります。
実際にタスクを知らない方にベースラインを使ってもらって試してはいましたが、より時間的な制約をかけて試した方が、分かりにくい点をより洗い出せたかもしれません。

😕「ベースラインの環境構築に時間がかかった」(1名)
依存パッケージの明示(Dockerfile, requirements.txt, Pipfile, pyproject.toml 等)しておくべきでした。

😕「スコアラーを動かすのに時間がかかった」(1名)
出力形式の確認等、細かな機能を追加しすぎたようです。システム出力と正解データを入力すればスコアが出るといった最低限の機能を使うための道筋をコマンド等でしっかりと示す必要があります。

😕「開始直後のベースラインにバグがあった」(1名)
申し訳ありませんでした。何度も言いますが時間勝負な都合上、すぐに始められることが何より重要です。

😕「正答データに一部誤りが見られた」(1名)
今回ハッカソンのために新しく正答データを作成しましたが、作成期間が短かったため、少々粗が目立ったようです。これは次回以降気をつけたいと思います。

参加者との交流で聞いた話

YANSハッカソン終了後に参加者と交流する機会があったので、そこで聞いた話を簡潔にまとめておこうと思います。

作業時間について : 社会人の方は、ハッカソンに1日1時間くらい労力を割いてくださっていたそうです。所属組織によっては業務時間内での作業が認められている場合もあるようです。学生の中では3~4日フルコミットしてくださった方もいました。
計算資源について : 学生の方は研究室のGPUを使用できたりするため、社会人より研究資源が豊富な場合も見られました。しかし、Google Colabのみを使って作業する必要があったチームもあったようなので、チーム分けの際に参加者のGPU資源等も考慮する必要があるようです。
開催期間について : 2週間といった期間はちょうどよかったようです。今回はタスクやデータセットが少々重すぎたため、時間が足りない場合が散見されましたが、これ以上開催期間が長いと疲れるといったコメントもありました。2週間といった期間にちょうどいいタスク、データセットサイズを考えるのがベストかと思います。
・参加者間の交流について : チームによっては毎日のようにSlackが動いていたり、頻繁にMTGをしていたりするようです。所属期間を超えてチームが決められるといった今回のハッカソンの仕組みは、その他の共有タスクにも応用できるかもしれません。

このように、参加者のモチベーションや期間や計算資源といったリソースに関して様々な知見が得られました。
私自身、森羅プロジェクトで共有タスクを運営している身でもあるため、とても勉強になるいい機会でした。

終わりに

当初、私は森羅プロジェクトの宣伝のつもりでYANSハッカソンにデータセットを提供させていただきました。
開催後のアンケートでは「今後森羅プロジェクトの情報をお送りしても良いか」といった質問に対し10名中8名からYESと回答をいただくことができました。また、「来年度以降の森羅プロジェクトに参加いただけるか」といった点では、4名から「説明会に出てから決めたい」といった回答をいただきました。
人によって興味のある分野が違うことを思うと、この結果は非常によかったのではないかと考えています。
YANSハッカソンはデータセットやタスクの宣伝の機会として非常に良いと言えるでしょう。
来年度以降もこの取り組みが続く場合は、データセットやタスク案をお持ちの皆様ぜひご検討いただければと思います。

また、データセット提供側の立場として、様々な意見を参加者から聞くことができ様々な知見が得られました。
特に若手の会は初学者が多いため、そのような方の躓きポイントを洗い出せたのは非常に良かったです。
振り返ってみるとデータセットを提供に割いたリソースより、得られた知見の方が圧倒的に大きかったと思います。
このような機会を下さったYANSハッカソン運営の皆様、並びに本ハッカソンに参加下さった皆様、本当にありがとうございました。

p.s.
色々と書き溢していることがあるかもしれません。もし来年以降のハッカソンに対してデータセット提供を考えている方がいましたら個人的に連絡をくだされば、色々お答えできるかと思います。

この記事が気に入ったらサポートをしてみませんか?