深層学習

自然言語データ拡張

文の意味やラベルを壊さない範囲で表現を変え、少ないテキストから学習例を増やす手法と適用限界を整理します。

  • B|標準
  • 深層学習

数式の記号で止まったら 記号の読み方 (∂・⊙・転置・上付き添字を、読み方から)

ひとことで言うと

自然言語データ拡張は、元の文に小さな変形を加え、同じラベルの学習例を増やす方法です。画像の微小な移動と違い、単語を少し変えただけで否定や固有名詞が変わり、文の意味そのものが変わります。

同じ設計意図を保ったまま仕様書の言い回しを変える作業に似ています。語順や語を変えられる箇所はありますが、部品番号や「禁止」の一語を変えると別の仕様になります。

なぜ必要か

テキストは収集・ラベル付けの費用が高く、少数データではモデルが表面的な語に過適合しやすくなります。EDAは分類文に対し、同義語置換、ランダム挿入、ランダム交換、ランダム削除の4操作を組み合わせます。原論文は5つの分類タスクでCNNとRNNを評価し、小規模データで特に効果が強いと報告しました。

ただし、増やした文が本当に同じラベルかを確認する工程は省けません。「この映画は良い」と「この映画は良くない」は、1語の追加で反対になります。ラベルが文全体の話題や感情なら軽いノイズが許されても、ラベルが語の位置や境界に結び付くタスクでは許容範囲が狭くなります。

変形回数を増やせばデータの質も上がるわけではありません。元のラベルを保つ確率が下がる操作を大量に混ぜると、データ不足を補う代わりに誤ラベルを増やします。

仕組み

文を単語列 x=(x1,…,xT)\mathbf{x}=(x_1,\ldots,x_T)、ラベルを yy、拡張操作を gg とすると、作りたい例は (g(x),y)(g(\mathbf{x}),y) です。ここで TT は単語数、gg は同義語置換などの変換です。前提は gg の後もラベルが変わらないことですが、自然言語ではそれを機械的に保証できません。

操作変えるもの典型的な限界
同義語置換語を同義語候補へ置換文脈・否定・専門用法で同義にならない
挿入語の同義語を別位置へ追加不自然な文や意味の強調を生む
入れ替え2語の位置を交換語順が意味を担う言語では破壊的
削除語を取り除く否定語・条件語・重要語を落とす

同義語置換や挿入は語彙の揺らぎを増やしますが、辞書上の同義語は常に文脈上の同義語ではありません。交換や削除は意味を保つ可能性のあるノイズとして使えても、強度を上げるほど文法と意味の破綻が増えます。したがって、操作名を覚えるだけでなく、ラベル不変という条件を検証する必要があります。

逆翻訳は別の考え方です。単言語の目的言語文 tt を翻訳モデルで入力言語へ戻し、合成文 s′s' と元の tt を対訳 (s′,t)(s',t) として加えます。元文を単語単位で壊すのではなく、翻訳という文全体の写像を通すため、語順や言い換えを含む別表現を得やすくなります。SennrichらはNMTの訓練でこの合成対訳を混ぜる方法を示しましたが、効果は逆翻訳モデルの品質やデータの量・テストデータとの類似度に依存すると述べています。

試験でどう問われるか

問われ方正解に寄る条件引っかけ
EDAの構成要素置換・挿入・交換・削除の4操作逆翻訳をEDAの4操作に含める
操作の適用判断ラベル不変を確認し、強度を調整するどの文にも同じ確率で適用する
逆翻訳の流れ単言語文を反対方向へ翻訳し、元文と対にする元文を削除して翻訳文だけ学習する
固有表現抽出への適用スパン境界とラベルを壊さないかを確認する語を削除・挿入しても常に同じラベルだとする

実装で確かめる

単語列を配列として扱えば、交換と削除がどのように入力を変えるかを再現できます。実運用では、この後にラベル不変性の検査を置きます。

import numpy as np

tokens = np.array(["この", "映画", "は", "良い"])
rng = np.random.default_rng(0)
i, j = rng.choice(len(tokens), 2, replace=False)
tokens[[i, j]] = tokens[[j, i]]
keep = rng.random(len(tokens)) > 0.25
augmented = tokens[keep]
assert len(augmented) >= 0

取り違えやすいもの

手法自然言語での役割判断の軸
同義語置換・挿入語彙の揺らぎを増やす文脈上の意味とラベルが保たれるか
交換・削除局所的なノイズを加える語順・否定・条件を壊さないか
逆翻訳文全体を別表現にして対訳を増やす翻訳品質とドメイン適合性
通常の正則化モデル側の過適合を抑える入力データ自体は増えない

固有表現抽出では、ラベルが文全体ではなく「どの語の範囲が人名・組織名か」に付いています。たとえば固有表現の内部語を同義語に置換すると、表記として別の名前になり得ます。前後に挿入・削除を行えば、BIOタグの境界や隣接関係もずれます。このため分類で使えたEDAを、そのまま系列ラベリングへ移す判断はできません。

想起チェック

EDAの4操作は何か

同義語置換、ランダム挿入、ランダム交換、ランダム削除です。

逆翻訳が単語のランダム変形より意味を保ちやすい理由は何か

文全体を翻訳する写像を通して、語順や言い換えを含む表現を作るためです。ただし翻訳品質に依存します。

固有表現抽出で機械的な削除が危険な理由は何か

ラベルが文全体でなく語のスパン境界に付くため、語の削除や挿入で境界とタグの対応が崩れるからです。

出典