🚀 敵対的データ生成のためのターゲット指向パラフレーズモデル
このリポジトリは、論文「Finding a Needle in the Adversarial Haystack: A Targeted Paraphrasing Approach For Uncovering Edge Cases with Minimal Distribution Distortion.」で発表された研究の一環として開発された、(非)ターゲット指向パラフレーズモデルを提供します。
このモデルは、流暢性、多様性、関連性を向上させた高品質なパラフレーズを生成するように設計されており、敵対的データ生成のアプリケーションに特化しています。
📚 目次
- パラフレーズデータセット
- モデルの説明
- アプリケーション
- 引用
📦 パラフレーズデータセット
学習プロセスでは、7つの高品質なソースから収集された560,550のパラフレーズペアからなるデータセットが使用されました。
- APTデータセット (Nighojkar and Licato, 2021)
- Microsoft Research Paraphrase Corpus (MSRP) (Dolan and Brockett, 2005)
- PARANMT - 50M (Wieting and Gimpel, 2018)
- TwitterPPDB (Lan et al., 2017)
- PIT - 2015 (Xu et al., 2015)
- PARADE (He et al., 2020)
- Quora Question Pairs (QQP) (Iyer et al., 2017)
高品質で多様なデータを確保するために、以下のフィルタリングステップが適用されました。
- ユニグラムの重複率が50%を超えるペアを削除し、語彙の多様性を向上させました。
- 共通の単語の並び替え率が50%未満のペアを削除し、構文の多様性を確保しました。
- 「all - MiniLM - L12 - v2」モデルのコサイン類似度スコアを利用して、意味的類似度が50%未満のペアをフィルタリングしました。
- トライグラムの重複率が70%を超えるペアを削除し、多様性を高めました。
精製されたデータセットは96,073のサンプルから構成され、学習用(76,857)、検証用(9,608)、テスト用(9,608)のサブセットに分割されています。
🧠 モデルの説明
パラフレーズモデルはFLAN - T5 - largeをベースに構築され、フィルタリングされたデータセットで9エポックのファインチューニングが行われました。主な特徴は以下の通りです。
- 性能:F1 BERT - Scoreが75.925%を達成しており、優れた流暢性とパラフレーズ能力を示しています。
- タスク特化:関連するペアに焦点を当てた学習により、タスク固有の高品質な出力が保証されます。
- 生成能力の向上:エンティティやオブジェクトに関する新しい情報を導入したパラフレーズを生成し、全体的な生成品質を向上させます。
🛠️ アプリケーション
このモデルは主に、機械学習モデルのエッジケースを効果的に発見し、分布の歪みを最小限に抑えた敵対的学習サンプルを作成するために設計されています。
さらに、このモデルは一般的なパラフレーズ目的にも適しており、様々なコンテキストで高品質なパラフレーズを生成する汎用的なツールとなります。Parrotパラフレーズライブラリと互換性があり、シームレスな統合と使用が可能です。以下は、Parrotライブラリを使用してモデルを使う例です。
📥 インストール
Parrotライブラリをインストールするには、以下のコマンドを実行します。
pip install git+https://github.com/PrithivirajDamodaran/Parrot_Paraphraser.git
💻 使用方法
Transformersでの使用
from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
model_name = "alykassem/FLAN-T5-Paraphraser"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSeq2SeqLM.from_pretrained(model_name)
input_text = "Paraphrase: How are you?"
inputs = tokenizer(input_text, return_tensors="pt")
outputs = model.generate(**inputs)
decoded_output = tokenizer.decode(outputs[0], skip_special_tokens=True)
print("生成されたテキスト:", decoded_output)
Parrotでの使用
from parrot import Parrot
import torch
import warnings
warnings.filterwarnings("ignore")
parrot = Parrot(model_tag="alykassem/FLAN-T5-Paraphraser", use_gpu=True)
phrases = [
"Can you recommend some upscale restaurants in New York?",
"What are the famous places we should not miss in Russia?"
]
for phrase in phrases:
print("-" * 100)
print("入力フレーズ: ", phrase)
print("-" * 100)
para_phrases = parrot.augment(input_phrase=phrase)
for para_phrase in para_phrases:
print(para_phrase)
📖 引用
この研究やモデルが役に立った場合は、以下の論文を引用してください。
@inproceedings{kassem-saad-2024-finding,
title = "Finding a Needle in the Adversarial Haystack: A Targeted Paraphrasing Approach For Uncovering Edge Cases with Minimal Distribution Distortion",
author = "Kassem, Aly and
Saad, Sherif",
editor = "Graham, Yvette and
Purver, Matthew",
booktitle = "Proceedings of the 18th Conference of the European Chapter of the Association for Computational Linguistics (Volume 1: Long Papers)",
month = mar,
year = "2024",
address = "St. Julian{'}s, Malta",
publisher = "Association for Computational Linguistics",
url = "https://aclanthology.org/2024.eacl-long.33/",
pages = "552--572",
}
📄 ライセンス
このプロジェクトはApache - 2.0ライセンスの下で公開されています。