こんにちは。先日まで開催されてた"LLM - Detect AI Generated Text"に参加してました。
個人の取り組みとしては参加期間も短くディスカッションも追いきれず、公開ノートを弄って終わりでした。
久しぶりの機械学習(特にNLP)ということで今コンペはどんなモデルや手法が使われてるのか軽くメモを残しておきます。
※想像以上に雑なクオリティになってしまいました。ごめんなさい。英語の読解が正しくできてない部分もあるかもしれません。ご承知おきください。
solution毎のメモはコチラに公開してあります。
概要
- LLMによって生成されたテキストを検出する
- 学生が書いたエッセイとさまざまな LLM によって生成されたエッセイを識別する
- エッセイは中学生、高校生が書いたものと大規模言語モデルが書いたもの
- どのLLMで生成したかは非公開
- 評価指標
- LLMで生成された確立を提出
Data
- 約10,000件のエッセイ
- trainデータは1378件与えられ、学生が書いたものが1375件、LLMが3件
- 残り約9,000件がpublicとprivateLB
- test data内の人とLLMの比率は非公開
- エッセイは7種のプロンプトのうち一つに応じて書かれている
- 各プロンプトで、学生は 1 つ以上の原文を読み、応答を書くように指示されました
- これと同じ情報が、エッセイの生成時に LLM への入力として提供される場合と提供されない場合がある(ここが意味わからなかった)
- train set は2つのプロンプトから構成されている
これが与えられた情報です。特徴としてはLLMのエッセイを識別したいのにLLMで生成したサンプルが3件しか与えられてないところだと思います。
参加者の調査によってもう少しデータについての情報が増えました。
図で表すとこのような感じになります。
public/privateでpromptが分かれていたため、publicにoverfitしていた人が大きくshakedownするということが起きました。
External data
上述の通りLLMが生成したデータが3件しかないため、参加者が作成した追加データセットを使用する人が多かったです。いろんな人が生成データを共有し、それをまとめる人がいたり、更新が止まったりとこの情報を追いかけることがすでに大変でした。
主要な公開データセットは @thedrcat 氏が公開していたデータセットv2,v3,v4あたりだと思います。上位の方々はこのデータを厳選したり、さらにエッセイを自作していたようです。
persuade_corpusということも特定されたので、人が書いたエッセイデータも参加者は追加で使用できました。
typo
本コンペで議論されていた大テーマの一つですが、今一つ実態を理解できてないので短く・・・(こんなんじゃコンペ参加してたと言えないですねごめんなさい
- 高速にtypoを直す(あくまで本データセットのtypo生成をハックした手法)
- 通常typoは隣接する文字などに間違うが、データをよく見ると完全にランダムに間違えられていた(link)
- 3割の確率でtypoを挿入/置換した(4th)
- tfidfでmin_df = 2 とすると単一のエッセイ内に発生するngramが削除される。二つの異なるエッセイで同じtypoが発生する確率は低いと考える
銀上位あたりまで公開ノートを微修正で行けた
私がこのコンペを見てなかった期間に、testdata(こっちのほうが公式ののLLMデータが多く含まれてる)を使ってtokenizerをつくって、TF-IDFで特徴量を作ってオンラインで学習、推測をするノートが投稿され、大半の公開ノートがこれの派生になってる状態でした。
終了後、各参加者の投稿を見ると公開されてたハイスコアノートを弄って銀メダルという方もいました。 catboostのweightを大きくしただけであったり、ランダムフォレストを追加した人もいたのが印象的でした。
また、上位の人もアンサンブルの種にはしていました。公開ノートはpublicにoverfitしていましたが手法としては有効なものだったように思います。
上位はtransformerモデルを学習していた
印象としては上記TF-IDFを使ったモデルにtransformerモデルをアンサンブルさせていた人が上位にいたように思います。
- mistral7BをQLoRA
- Deberta-v3-largeをLoRAでなく普通に学習
- deberta-v3-smallやdistilbertをsubmit時にtraining などがありました。
Pseudo-Label
- testデータに対する予測値で、自信をもって予測されてるものに疑似ラベルを付けて学習しなおす手法も多くのチームが採用していました。
- 気持ちとしては、自作したエッセイとhostが用意してるLLM産エッセイが同じクオリティとは言い切れないため、hostが用意したエッセイの情報を使った方が有効というところだと思います。
データセットをよくする方に注力した参加者が多かった
- 自分でたくさんエッセイを生成したり、有志で共有されてたデータセットのデータを吟味してるチームも多かった(こ、これがデータセントリック!?)
- 今後コンペで勝つには良質なデータを生成するスキルも身につけなきゃいけないのかなーということをひしひしと感じた。
- 英語わからんから良質かどうか判断つかないのがハンディキャップすぎる
その他
- llama 7b と tiny llama 1.1B を使用してghostbusterを実装(1st)
- 人間とAIのペアを作ってMargin Ranking Lossで学習(1st)
- promptを予測するサブタスクを用意し、そのタスクのlogitを特徴量として使用
- trainデータを少しずつ増やしていく(予測させて間違えたものをtrainに追加して学習など
- rankingでアンサンブル
- roberta-large-openai-detector(GPT-2の出力を検知するモデル)
- token sizeが512のモデルの場合、頭512tokenとお尻512tokenの2つを予測