u++の備忘録

YANS2022 ハッカソン参加録:ランク学習による商品レビュー評価

※ 「Kaggle Advent Calendar 2022」の 12 日目の記事です。

今年 8 月に「NLP 若手の会 (YANS) 第 17 回シンポジウム」(YANS2022)内で開催されたハッカソンに参加しました。 特定の評価指標での性能を競うハッカソンで、今年はアマゾンウェブサービスジャパン合同会社の協力のもと、Amazonの商品レビューデータを分析しました。

コンペ概要

  • 特徴量:商品名、商品概要、レビュー内容、レビュー時刻、レーティングなど
  • 目的変数:「役に立つ投票数」
  • 評価指標:NDCG@5
  • 運営による BERT ベースライン

チーム解法

このハッカソンでは過去の開発経験を基に、運営によって参加者が約 4 人ごとのチームに振り分けられました。 Slack や Zoom を駆使して、初対面の方とチーム開発をするのは刺激的で面白かったです。

チーム解法の概要は、下図に示す通りです。 テキスト情報からは Bag-of-Words や TF-IDF、質的変数・量的変数からは掛け合わせで特徴量を抽出し、LightGBM に投入しました。 評価指標を鑑み、ランク学習を利用して予測値ではなく予測順位を基に学習したのが大きな工夫点です。

具体的には、LightGBM の「LambdaMART」を利用し、評価指標に ndcg@5 を用いて early stopping を設定しました。 CatBoost のランク学習「YetiRank」も試しましたが、アンサンブルによる性能改善が確認できなかったため、最終的な提出には反映しませんでした。 その他の試行錯誤を含めて、ソースコードGitHub で公開しています。

Training until validation scores don't improve for 200 rounds
[200]   training's ndcg@5: 0.801038     valid_1's ndcg@5: 0.698077
[400]   training's ndcg@5: 0.82988      valid_1's ndcg@5: 0.705027
[600]   training's ndcg@5: 0.848765     valid_1's ndcg@5: 0.70778
[800]   training's ndcg@5: 0.864104     valid_1's ndcg@5: 0.707484
Early stopping, best iteration is:
[774]   training's ndcg@5: 0.862187     valid_1's ndcg@5: 0.70911

より具体的な詳細は、以下の発表資料を参照してください。

終結

幸運なことに、チームとして最終評価で 1 位を獲得し、アマゾンウェブサービスジャパン合同会社からの「Applied Scientist賞」も受賞できました。 開催期間中の暫定の順位表も 1 位で終えることができたので、これ以上ない満足な結果となりました。 参加した各チームの解法や順位などは、公式の開催報告ブログにまとまっています。

yans.anlp.jp

おわりに

本記事では、YANS2022 のハッカソンの概要とチーム解法を紹介しました。 ご関心あれば、ソースコードや発表資料もぜひ眺めてみてください。

予測に寄与しそうな特徴量を作っていくことでスコアが伸びていく、優れた設計のハッカソンだと感じました。 個人的に利用頻度が少なかった LightGBM や CatBootst のランク学習を試す良い機会にもなりました。 最終的な提出には全く役立ちませんでしたが、Transformer 系列のモデルのファインチューニングの試行錯誤も勉強になりました。

最後に、運営・参加者・スポンサーの皆さんに改めてお礼申し上げます。 アマゾンウェブサービスジャパン合同会社からも先日ブログ記事が公開されています。