NLPタスクの多様なセットのプロンプトを作成するための勾配誘導検索に基づく自動化された方法。 AutoPromptは、マスクされた言語モデル(MLM)が感情分析、自然言語の推論、事実検索、および関係抽出を実行する生来の能力を持っていることを示しています。論文と詳細については、当社のウェブサイトをご覧ください。
conda create -n autoprompt -y python=3.7 && conda activate autoprompt
必要なパッケージをインストールします
pip install -r requirements.txt
また、Spacyモデルをダウンロードしてください
python -m spacy download en
感情分析、NLI、ファクト検索、および関係抽出のためのデータセットはこちらからダウンロードできます
事実検索と関係抽出のためのいくつかの異なるデータセットがありますので、それぞれの簡単な概要を次に示します。
original :Lamaが提供するT-Rexサブセットをテストセットとして使用し、トレインと開発セットに分割した元のT-Rexデータセットからさらに多くの事実を収集しましたoriginal_rob :各オブジェクトがBertとRobertaの両方の単一のトークンになるように、 originalでファクトをフィルタリングしましたtrex :収集された余分なT-REXデータ( originalの列車/バルセットの場合)を電車、開発、テストセットに分割しますoriginalデータセットをトリミングして、REベースラインとRobertaの両方を補正しました。また、REベースラインがそれらを考慮していないため、関係P527とP1376も除外しました。 プロンプトは、元の入力やトークンをトークンのようなものにマッピングすることで構築されます。
[CLS] {sub_label} [T] [T] [T] [P]. [SEP]
上記の例は、3つのトリガートークンを使用してファクト検索プロンプトを生成するためのテンプレートです。 {sub_label}は、実際に取得しているすべての(サブジェクト、リレーション、オブジェクト)トリプレットの主題のプレースホルダーです。 [P]言語モデルによる「空腹」に使用される特別な[MASK]トークンの配置を示します。すべてのプロンプトで共有されるトリガートークンのセットにある各トリガートークンは[T]で示されます。
言語モデル(つまり、BertまたはRoberta)に応じて、プロンプトを生成することを選択すると、特別なトークンは異なります。 BERTの場合、テンプレートの各端にスティック[CLS]と[SEP] 。 Robertaの場合、代わりに<s>および</s>を使用してください。
python -m autoprompt.create_trigger
--train glue_data/SST-2/train.tsv
--dev glue_data/SST-2/dev.tsv
--template '<s> {sentence} [T] [T] [T] [P] . </s>'
--label-map '{"0": ["Ġworse", "Ġincompetence", "ĠWorse", "Ġblamed", "Ġsucked"], "1": ["ĠCris", "Ġmarvelous", "Ġphilanthrop", "Ġvisionary", "Ġwonderful"]}'
--num-cand 100
--accumulation-steps 30
--bsz 24
--eval-size 48
--iters 180
--model-name roberta-large
python -m autoprompt.create_trigger --train SICK_TRAIN_ALL_S.tsv --dev SICK_DEV_ALL_S.tsv --template '<s> {sentence_A} [P] [T] [T] [T] [T] {sentence_B} </s>' --label-map '{"ENTAILMENT": ["u0120Taiwan", "u0120Ara", "abet"], "CONTRADICTION": ["u0120Only", "u0120Didn", "u0120BUT"], "NEUTRAL": ["icy", "oder", "agna"]}' --bsz 120 --model-name roberta-large
python -m autoprompt.create_trigger
--train $path/train.jsonl
--dev $path/dev.jsonl
--template '<s> {sub_label} [T] [T] [T] [P] . </s>'
--num-cand 10
--accumulation-steps 1
--model-name roberta-large
--bsz 56
--eval-size 56
--iters 1000
--label-field 'obj_label'
--tokenize-labels
--filter
--print-lama
python -m autoprompt.create_trigger
--train $path/train.jsonl
--dev $path/dev.jsonl
--template '[CLS] {context} [SEP] {sub_label} [T] [T] [T] [P] . [SEP]'
--num-cand 10
--accumulation-steps 1
--model-name bert-base-cased
--bsz 32
--eval-size 32
--iters 500
--label-field 'obj_label'
--tokenize-labels
--filter
--print-lama
--use-ctx
感情分析用
python -m autoprompt.label_search --train ../data/SST-2/train.tsv --template '[CLS] {sentence} [T] [T] [T] [P]. [SEP]' --label-map '{"0": 0, "1": 1}' --iters 50 --model-name 'bert-base-cased'
nliの場合
python -m autoprompt.label_search --train ../data/SICK-E-balanced/3-balance/SICK_TRAIN_ALL_S.tsv --template '<s> {sentence_A} [P] [T] [T] [T] [T] {sentence_B} </s>' --label-map '{"ENTAILMENT": 0, "CONTRADICTION": 1, "NEUTRAL": 2}' --iters 50 --model-name roberta-large
Lama Repoのフォークをクローンし、指示に従ってAutoprompt Repoの外側にセットアップします。さまざまな依存関係と要件のために、ラマ向けに別のコンドラ環境を作成することをお勧めします。
autopromptデータフォルダーをlamaのdataディレクトリにコピーするか、 scripts/run_experiments.pyでdata_path_preカスタムデータの場所に設定します。
ラマにロベルタと連携するために、次のコマンドを実行します。
mkdir pre-trained_language_models/roberta
cd pre-trained_language_models/roberta
curl -O https://dl.fbaipublicfiles.com/fairseq/models/roberta.large.tar.gz
tar -xvzf roberta.large.tar.gz
独自の自動生成プロンプトを使用してdata/relations.jsonlファイルを更新します
評価設定を変更するには、 scripts/run_experiments.pyに移動し、それに応じて構成可能な値を更新します。注:構成可能な各設定には、 [CONFIGURABLE]コメントが付いています。
LMsリストの他のLM設定で評価したいLMの設定を解除するcommon_vocab_filenameフィールドを適切なファイルに更新します。 BertとRobertaの両方を評価するには、通常のcommon_vocab_cased.txtの代わりに、このフィールドがcommon_vocab_cased_rob.txtである必要があります。use_ctx Trueに設定しますsyntheticをTrue設定するget_TREx_parameters関数では、 data_path_pre対応するデータパスに設定します(例:関係抽出のための"../data/relation_extraction" )評価コードを実行します
python scripts/run_experiments.py
次のエラーが発生した場合はPYTHONPATHを設定します: ModuleNotFoundError: No module named 'lama'
export PYTHONPATH="${PYTHONPATH}:/path/to/the/AutoPrompt/repo"
@inproceedings{autoprompt:emnlp20,
author = {Taylor Shin and Yasaman Razeghi and Robert L. Logan IV and Eric Wallace and Sameer Singh},
title = { {AutoPrompt}: Eliciting Knowledge from Language Models with Automatically Generated Prompts },
booktitle = {Empirical Methods in Natural Language Processing (EMNLP)},
year = {2020}
}