たかいとの備忘録

自然言語処理や機械学習のことについて学んだことを忘れないように書いていけたらと思います.

LLM - Detect AI Generated Textの振り返り

はじめに

2023年11月1日(水)〜2024年1月23日(火)に開催されたLLM - Detect AI Generated Textというkaggleのコンペに参加し,参加者5,264人,4,358のチームが参加する中で単独14位の順位で終えることができました.

この記事では,主にコンペの整理と,一部ではありますが自身の取り組みを効いたかどうかに関わらず,お気持ちとともに残しておけたらと思っております.

役立つ情報は少ないかもしれませんが,何かの参考になれば幸いです.

LLM - Detect AI Generated Textはどんなコンペだったのか

このコンペはコンペ名の通り,与えられたテキストが人によって書かれたものか,生成AIによって書かれたものかを判定する精度を競う大会でした.

このコンペの最大の特徴は,提供されている学習データに生成AIによって書かれたデータが1378件中,3件しかないことかと思います.

したがって本来であれば,参加者は多額のお金を消費してChatGPTなどで自動生成されたテキストを準備したり,パワフルなGPU環境で自動生成されたテキストを準備する必要がありました. (MFゴーストのアニメが秋から始まっていたこともあり,リッチマンズレギュレーションが始まってしまうのかと思いました.)

実際には,多くの方が生成したテキストのデータセットを公開してくれたことで,この点で大きな差がついてしまうということはありませんでした. (500 LLM generated essays specifically for this competition![LLM] A "7 Prompts" training datasetなど)

もちろん,上位入賞チームでは追加してオリジナルの自動生成されたテキストを作成しているチームもありましたが,自身含めkaggleのディスカッションやデータセットで公開されているパブリックなデータのみを用いて入賞している方もいました.

このコンペのもう一つの特徴は,DAIGT V2 Train Datasetを利用した,非常に強力なLBスコアを達成することができる,TF-idfという単語の頻度情報を用いて予測を行うnotebookが公開され,それを微修正したnotebookが次々に投稿された点です.

これらのnotebookのLBは非常に強力であったものの,LBに過剰フィットしている懸念も抱えていたため,多くの参加者の悩みのタネだったのではないかと思います.

実際に多くの方がこのnotebookに振り回されて,最終順位で順位を落とす結果となり,また多くの方が公開されているLBスコアを超えることができず,脱落していったのではないかと思います.

自身の取り組み

生成テキストの準備

当たり前ではありますが,自身も如何に他の参加者と差を出すために生成テキストを様々な方法で作成しておりました.

例えば,シンプルなpromptを与えたものは公開されていたものでカバーできていたので,人手で書かれたものを入力した上で,「同じ内容,同じ単語数になるように書き換えを行ってください.」のような方法で生成したりしておりました.

しかし,こういった方法で作成したものを用いても残念ながらLBスコアに改善が見られず,不発に終わりました.

10月後半の音楽自動生成の大会で,Jackさん(@sakata_ryuji)は与えられたデータのみを使って闘うという制約のもと優勝しており,そのことを思い出し,割り切って後半はデータの生成ではなく,他のことに多くの時間を割くようにしました.

BERT系モデルの使用

だいぶ初期の時点から,頻度ベースの特徴量を用いたnotebookが注目を集めていたこともあり,多くの参加者がそちらに飛びついていたのではないかと思います. (実際に強力だったのは間違いないです.)

ここではまず,なぜ頻度ベースのnotebookが強かったかに関して,簡単にまとめます.

今回のデータは手元でモデルの学習をするとわかるのですが,すぐにCVでハイスコアに到達します.(頻度ベース,BERT系モデルのどちらでも.)

しかし,これらのモデルによる推論ではLBスコアで高いスコアが出ませんでした.(自身は,たいてい0.75~085あたりでした.)

これは,手元のデータに過学習していることを意味しており,公開ハイスコアnotebookではその対策として,テストデータに出現する単語に対象を絞って,特徴量を作成し,その特徴量を用いてnotebook内でモデルを学習させておりました.

極端な例ではありますが,手元のデータでは,「xxxx」という単語があれば生成モデルによって生成されたテキストであると判定ができるため,モデルは「xxxx」という単語の有無で判定するように学習してしまいますが,テストデータで「xxxx」という単語がほとんど出ないのであれば,このモデルはほとんど寄与しないことになります.

したがって,BERT系モデルのチューニングは,過学習対策を丁寧に行うか,テストデータに非常に類似したデータセットを構築する必要があります.

自身は後者の比重を少なくしていたため,過学習対策をしつつ,様々なモデルを学習し,LBの傾向を見ておりました.

この取り組みによって,ある程度の精度までは出せるのですが,公開LBに到達できるような精度を出すことができず,非常に困っておりました.

それでも,BERT系モデルの活用に躍起になっていたのは,頻度ベースのモデルは,あくまで単語の頻度しか見ておらず,その出現順序の情報を捨ててしまっているため,この捨てている情報分に勝機を見出していたからです.

いろいろなモデルを試している中で,fine-tuningをしなくてもそこそこのCV,LBスコアを出すことができるモデルを見つけることができました. (roberta-large-openai-detector [1])

こちらをfine-tuningしたものを単純にアンサンブルしても良かったのですが,元からそこそこのLBスコアを出すことができたため,自身は過学習を警戒して,このモデルの出力結果を特徴量として追加することにしました.

これが非常に強力で,今回の順位に大きな影響を与えました.

高速化とメモリの節約

ここまでである程度の方向は決まっていたので,あとは勾配ブースティングのモデルなどを詰め込んでいくことにしました.

その上でメモリ制約の問題や学習もnotebook内で行う関係上,高速化にも気を使いました.

一番最初に,LightGBMで単語頻度の特徴量とBERT系モデルの出力の特徴量を用いてモデルを学習させ,単語頻度の特徴量で寄与していないものを削除しました.

実際,手元の学習でもほとんど分類に寄与していない単語が大量にあったことを確認済みで,それらを除いても問題ないことは確認済みでした.

このデータ削減によって,xgboostなどのモデルを,GPUで高速に学習させることができました.

Pseudo Labeling(擬似ラベリング)

実は蓋を開ければPrivateスコアにそこまで大きなインパクトはなく,なくても十分金圏に入るスコアが出ておりました.

ただ,今回のような特殊な状況になっているコンペにおいて,こちらは最終subを選ぶ上でかなり参考になりました.

というのも,LBを計算するのに使用しているデータに過剰にフィッティングし,最終順位のスコアを決めるのに使用しているデータが散々な結果になっている場合,Pseudo Labelingを行うことで著しくLBスコアが悪化する可能性が高くなります.

しかし,実際にはLBスコアは悪化することなく,ある程度は最終順位のスコアを決めるデータにもフィッティングしていることに確信を持つことができました.

また,ちょっとした工夫ではありますが,テストデータは5つのトピックで構成されており,トピックの出現頻度や分類の難易度によってモデルが重視しているトピックに偏りが生じ,単純なスコアの上位,下位を取得してしまうとトピックの割合に偏りが生じることが懸念されたので,各トピックごとに,上位,下位のものを取得し,疑似ラベルの割り当てを行い,学習するのに追加しました.

感想

最終的な提出物はかなりシンプルな方法になっておりますが,ここに書ききれない大量の試行錯誤手元のデータを用いた様々な分析の賜物でもあります.

正直,公開noteook強すぎて,心が折れかけている局面も多かったですが,これまで学んだことを一つ一つ検証しながら,最後まで粘ったことと,多少の運が味方してくれたことにより,今回の成果につながったと思っております.

これまで参加してきた多くのコンペでディスカッションを読ませていただき,またコンペ終了後には多くの方がsolutionを公開してくれているおかげで,自身も成長できました.

また,対面でのイベントでもこれまで多くの方とディスカッションさせていただき,また応援していると励ましの言葉をいただいたおかげで,ようやく一つの目標としていたソロ金に到達することができました.

ただ,今回publicでは良い結果が出せなかったこと,まだ上位とは大きなスコア差が残っていることは事実であり,まだまだ不足している能力ばかりなので,引き続きコンペに参加しながら,引き出しを増やしていくことができたらと思います. (理想としては,力の入れたコンペでは50位あたりに当たり前のように入れるようになりたいなと思っております.)

また,自身がそうであったように,今後始める方に向けて積極的にディスカッションへ投稿したり,solutionなども公開していけたらと思います.

おわりに

自身が今日までデータ分析コンペを続けることができたのは,たくさんの方の応援があったからです.

一部の天才を除き,「継続は力なり」で継続して少しずつでも成長し続けることが大事だと思いますので,今後も継続していけたらと思います.

また,多くの方が参加しているからこそ学びが多いと思っておりますので,今後も皆様とコンペで切磋琢磨できるのを楽しみにしております!

モチベーション低下時には,以下の記事を見返すようにしているので,皆様もモチベーションが低下したときにご活用ください. takaito0423.hatenablog.com

それでは良いコンペライフを!

[1] Solaiman, I., Brundage, M., Clark, J., Askell, A., Herbert-Voss, A., Wu, J., … & Wang, J. (2019). Release strategies and the social impacts of language models. arXiv preprint arXiv:1908.09203.