こんにちは。レトリバの飯田(@HIROKIIIDA7)です。TSUNADE事業部 研究チームのリーダーをしており、分類エンジンの開発・マネジメント、検索分野の研究、チームマネジメントを行っています。今回は、教師なしの文表現作成手法DiffCSEを紹介します。なお、日本語のより詳しい資料はこちらにありますので、合わせて参考にしてください。
前置き
丁度1年ほど前に、BERTを使った教師なし文表現としてSimCSEをご紹介しました。こちらの発展系として、DiffCSEをご紹介します。以下の図は、コメントがない限り、DiffCSE: Difference-based Contrastive Learning for Sentence Embeddingsより引用しています。
手法
発想の背景
この手法は、画像分野で提案されたEquivariant Contrastive Learningに影響を受けています。自己教師あり学習では、Inputするデータにある種の変換を行い、それらが不変(invariant)であることを対象学習を用いて学習します。その際、ある種の変換を不変であるとすることは、モデルの性能を劣化させる場合があることが知られています。そこで、ある種の変換については不変ではなく同変(equivariant)であることを学習させるということで、性能を向上させるというものです。
ちなみにこの論文中では、不変であるとは入力が潜在空間上で同変になることとしており、データを、潜在空間へのエンコーダをとして、データの変換をとすると、で表される関係としています。つまり、変換前と変換後のデータが潜在空間上で同じになることということです。また、同変であるとはに対応する潜在空間上での変換をとすると、で表される関係としています。こちらは、変換前と変換後のデータが潜在空間上である種の変換によって表現可能であることを表しています。実質的には、分類タスクとして変換を予測することでこれを解いています。詳細は、当該論文をご覧ください。
DiffCSE
DiffCSEはこれとELECTRAの発想を取り入れたものになります。模式図は以下の通りです。まず、SimCSEと同様に対象学習は行います(下図の左半分)。同時に、同変であるという学習を入れ替えたトークンを当てるタスクによって行います。トークンの入れ替えは、入力時に一部トークンをマスクして、それをGeneratorによって推定した単語に入れ替えます。最後に、Discriminatorで各トークンが変換されたものかそうでないかを推定します(図の右半分)。また、この時文表現を冒頭に入力することによって、文表現の学習を行います。
著者らの実験結果は以下の通りです。文類似度タスクで、SimCSEからの性能向上が見られています。詳細や他タスクの実験結果等が気になる方は、著者らの論文をご覧ください。
実験
文類似度タスクによる検証
それでは、日本語のモデルを使用して実験を行います。学習には、AI王データセットで作成されるwikipediaのパラグラフからランダムに取得した1M件のデータを用いました。評価にはJSTSタスクのvalidationデータを用いて実験を行いました。なお、訓練中で最適なモデルを用いるための開発データとして、JSTSタスクの訓練データから冒頭1000件を取得して用いました。使用した、エンコーダのモデルはcl-tohoku/bert-base-japanese(表中のv1)とcl-tohoku/bert-base-japanese-v2(表中のv2)を使用しています。Generatorはbert-base-japaneseを用いる場合は、DistilBERTを用いており、bert-base-japanese-v2を使用する場合は、bert-base-japanese-v2を使用しました。また、pooling方法はCLSトークンを使用する場合と、全トークンの平均を用いる場合を試しています。類似度はcos類似度です。評価方法は、spearman相関係数を用いた評価とこちらの論文に従い、評価データ中で類似度が上位25%のデータで作成された文集合に対して、1文をクエリとしてcos類似度で順位づけをし、元々のペアがtop1に来ている割合(Hit@1)を用いています。
結果は以下の通りです。Hit@1がもっとも良かったケースのみを載せています。付録に全結果を載せています。どちらの指標においても、若干の改善が見られました。SentenceBERTとは異なり、CLSトークンを用いる方が良い結果を示すようです。
文表現 | model | pooler | spearman | Hit@1 |
---|---|---|---|---|
BERT | v2 | AVG | 0.707 | 0.102 |
SimCSE | v2 | CLS | 0.771 | 0.143 |
DiffCSE | v2 | CLS | 0.778 | 0.153 |
クラスタリングによる実験
次に、livedoorコーパスを用いた、クラスタリングによる結果を掲載します。それぞれ文類似度タスクによる検証でベストだったパラメータを使用しています。クラスタリングアルゴリズムはk-meansを使用しています。評価尺度については、前回のSimCSEの記事をご覧ください。
結果は、k-meansを使用したクラスタリングにおいては、変わらずBERTをそのまま用いた方が良いようです。ただ、DiffCSEの方がSimCSEより良い結果となっており、様々な場面で使い回すには、DiffCSEの方が良いと思われます。
文表現 | ACC | ACI | V-measure |
---|---|---|---|
BERT | 0.640 | 0.446 | 0.530 |
SimCSE | 0.580 | 0.383 | 0.467 |
DiffCSE | 0.629 | 0.430 | 0.508 |
結論
本記事では、教師なし文表現を作成するDiffCSEという手法について、日本語での再検証を行いました。また、下流タスクとしてクラスタリングを行いました。文類似度については、概ね論文で言われていることが再現しました。一方、クラスタリングについては、BERTの方が良い結果となり、Hit@1が良ければ下流タスクが良いという結果と矛盾する結果となりました。Hit@1を提唱した論文は下流タスクが分類タスクであることが多く、クラスタリングが若干異なる性質を必要としているのかもしれません。
付録:文類似度タスクにおける全パラメータの結果
文表現 | model | pooler | spearman | Hit@1 |
---|---|---|---|---|
BERT | v1 | CLS | 0.360 | 0.045 |
BERT | v1 | AVG | 0.685 | 0.102 |
BERT | v2 | CLS | 0.473 | 0.050 |
BERT | v2 | AVG | 0.707 | 0.102 |
SimCSE | v1 | CLS | 0.752 | 0.132 |
SimCSE | v1 | AVG | 0.720 | 0.116 |
SimCSE | v2 | CLS | 0.771 | 0.143 |
SimCSE | v2 | AVG | 0.757 | 0.144 |
DiffCSE | v1 | CLS | 0.759 | 0.150 |
DiffCSE | v1 | AVG | 0.712 | 0.118 |
DiffCSE | v2 | CLS | 0.778 | 0.153 |
DiffCSE | v2 | AVG | 0.755 | 0.140 |