【LLM論文を読む】テキスト分類のためのデータ拡張(Data Augmentation)

  • LLMに知識を追加するためのファインチューン手法を調べていたところ、限られたデータセットを量的に拡張する「データ拡張/Data Augmentation」という研究領域があることを知りました。
  • 簡単に見てみると、データ拡張はテキストAIよりも画像AI・音声AIなどの分野で先行して注目されてきたそうです。
    • 例えば「画像データの左右を反転させてデータ数を2倍にする」などStableDiffusionのLoRA学習でお馴染みの方法も、一種のデータ拡張と位置付けられるようです。
  • 今回は言語モデルの学習におけるデータ拡張について知りたかったので、以下のサーベイ論文を斜め読みしてみました。

arxiv.org

  • 最近のチャット用途の言語モデル学習ではなく、テキスト分類用途の学習の観点でデータ拡張の概要がまとめられているので、ちょっと目的がずれている部分はありますが、それなりに参考になりそうです。

概要(機械翻訳

データ拡張(Data Augmentation)とは、機械学習のための学習データを変換によって人工的に作成することであり、機械学習の分野を超えて広く研究されている分野である。モデルの汎化能力を向上させるのに有用である一方、限られた学習データ量の克服、目的の正則化、プライバシー保護のための使用データ量の制限など、他の多くの課題や問題にも対処することができる。本サーベイでは、データ補強の目的と応用に関する正確な説明と、既存の研究成果に関する分類法に基づき、テキスト分類のためのデータ補強手法に関するサーベイを行い、研究者と実務家のために簡潔で包括的な概要を提供することを目的とする。分類法から派生して、100以上の手法を12の異なるグループに分け、どの手法が非常に有望であるかを互いに関連付けながら解説する最先端の参考文献を提供する。最後に、将来の研究のためのビルディングブロックを構成する可能性のある研究展望を提供する。

メモ

  • このサーベイでは、既存のデータ拡張手法を特徴空間における手法とデータ空間における手法に大別し、さらに個々の手法について細かく列挙しています。
  • 自分のファインチューンに役立ちそうなデータ空間の拡張手法に絞って、簡単にメモします。

  • 文字レベルのデータ拡張
    • Noise Induction(ノイズ導入):例えば、単語の文字を入れ替えたり、大文字と小文字を切り替えたりする。翻訳タスクでは性能を悪化させうるが、分類タスクでは効果がある。
    • Rule-based Transformations(ルールベースの変形):例えば省略形(I am>I'm)に変換したりする。
  • 単語レベルのデータ拡張
    • Noise Induction(ノイズ導入):Unigram noising(一定頻度で単語を置き換える)、Blank noising(_で置き換える)など。Easy Data Augmentation(ランダムな単語の置き換え/削除)は簡単で人気の手法だが、文意が意図せず変わるリスクがある。
    • Synonym Replacement(同義語による置換):メジャーな手法。
    • Embedding Replacement(埋め込みによる置換):有効だが文意を誤って変換する可能性がある。
    • Replacement by Language Models(言語モデルによる置換):言語モデルを使って単語を置き換えさせる。
  • 語句・文レベルのデータ拡張
    • Structure-based Transformation(構造ベースの変形):例えば、文章を主語と目的語に限定して短縮したりする。
    • Interpolation(補間):タグラベル?の置き換えなど。
  • 文書レベルのデータ拡張
    • Round-trip Translation(往復翻訳):例えば英語からフランス語に訳したものを英語に訳し戻す。これにより文意は同じだが細かい表現が変わったテキストを得られる。ただしSNSのテキストなどは崩れた表現が多いので文意の保存に失敗しやすい。
    • Generative Methods(生成メソッド):最近の言語モデルの高性能化により、多様で変化にとんだテキストを再生成できるようになっている。

雑感

  • LLMの領域では、論文などまとまった情報をLLMに与えて、チャットファインチューンに適した対話形式のデータセットに変換する方法はよく使われています。これも一種のデータ拡張と言えるのかもしれません。
  • このサーベイで触れられていた手法だと「Round-trip Translation」は実用性が高そうに思えました。単に多言語に翻訳展開するだけでなく、もう一度それを英語に戻すというのは簡単で使い勝手がよさそうです。
  • 前回の記事で触れた「プロンプトフォーマットを変えることでデータ拡張する(例えばAlpacaからChatML)」という発想に近いものは見当たりませんでしたが、実際に試してみる価値はあるかなと感じています。