ACL 2022ペーパーのソースコード「コヒーレンスブースト:事前に除外された言語モデルが十分に注意を払っていないとき」(ARXIV、ACLアンソロジー)
長距離セマンティックコヒーレンスは、自動言語生成と理解における課題のままです。大規模な言語モデルでは、次のトークン予測に対する遠い単語の効果を十分に学習していないことを実証します。コヒーレンスブーストを提示します。これは、LMの長いコンテキストへの焦点を増やす推論手順です。生成された通常のテキストとダイアログ応答の分布分析により、コヒーレンスが前提型モデルで高まる利点を示します。また、さまざまなゼロショットNLPタスクの最先端モデルを使用してコヒーレンスを高めると、追加のトレーニングなしでパフォーマンスの向上が得られます。
論文とコードが便利だと思う場合は、このレポを主演して論文を引用してください。本当にありがとう!
@inproceedings { malkin-etal-2022-coherence , title = " Coherence boosting: When your pretrained language model is not paying enough attention " , author = " Malkin, Nikolay and Wang, Zhen and Jojic, Nebojsa " , booktitle = " Proceedings of the 60th Annual Meeting of the Association for Computational Linguistics (Volume 1: Long Papers) " , month = may, year = " 2022 " , address = " Dublin, Ireland " , publisher = " Association for Computational Linguistics " , url = " https://aclanthology.org/2022.acl-long.565 " , doi = " 10.18653/v1/2022.acl-long.565 " , pages = " 8214--8236 " }既存の事前訓練を受けたLMSのコヒーレンスの欠如を示すデモプログラムを提示します。このようなエラーは、提案されたコヒーレンスブーストによって解決できます。これは、完全なコンテキストと部分的なコンテキストからの2つの分布を対数線形混合することにより、次のトークンを対照的に予測します。
> >> from cb_demo import contrasting > >> contrasting ( model_name = 'gpt2' , context = ' Ballad metre is "less regular and more conversational" than common metre' , - - partial_length = 8 , - - alpha = 0.5 ) [ out ] Top tokens based on full context : Ballad metre is "less regular and more conversational" than common Rank Tokens Logprobs Probs - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1 Ġsense - 2.405 9.03 % 2 Ġin - 3.900 2.02 % 3 . - 3.978 1.87 % 4 , - 4.097 1.66 % 5 Ġpractice - 4.287 1.37 % ... ... ... ... 13 Ġmetre ** - 5.098 0.610609 % * * Target Token Top tokens based on partial context : regular and more conversational " than common Rank Tokens Logprobs Probs - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1 Ġsense - 2.547 7.83 % 2 ĠEnglish - 3.352 3.50 % 3 . - 3.427 3.25 % 4 Ġconversation - 3.445 3.19 % 5 , - 3.634 2.64 % ... ... ... ... 14103 Ġmetre ** - 13.450 0.000144 % * * Target Token Contrastive next token prediction : Rank Tokens Logprobs Probs - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1 Ġmetre ** - 0.923 39.74 % 2 Ġsense - 2.334 9.69 % 3 Ġmeter - 2.785 6.17 % 4 Ġin - 3.210 4.03 % 5 Ġfoot - 3.220 3.99 % * * Target Token次のコードで、論文の図1のいくつかの例の結果を再現できます:
python cb_demo . py - - context = ' Ballad metre is "less regular and more conversational" than common metre' - - model_name = 'gpt2' - - partial_length = 8 - - alpha = 0.5 python cb_demo . py - - context = ' Isley Brewing Company: Going Mintal — a minty milk chocolate stout' - - model_name = 'gpt2' - - partial_length = 8 - - alpha = 0.5 python cb_demo . py - - context = ' Other times anxiety is not as easy to see, but can still be just as debilitating' - - model_name = 'gpt2' - - partial_length = 8 - - alpha = 0.5ランバダタスクは、モデルがいくつかの文の文章の最終的な単語を予測すると予想される上記の例に似ています。このデータセットは、最新のランゲージモデルを評価するための標準ベンチマークです(例)。
さらに重要なことに、このタスクは、広範な文脈を明示的に推論する必要があります。人間は、通路全体を与えられたときに最後の単語を確実に推測できますが、最後の文だけが与えられた場合ではありません。このようなプロパティにより、このベンチマークは、提案されたコヒーレンスブーストの有効性を評価するための完璧なテストベッドになります。
ランバダ実験を実行するには、次のコマンドを実行するだけです
python main . py - - tasks = 'lambada' - - models = 'gpt2-small' - - use_val = False - - alpha_start = 1 - - alpha_end = 1 - - alpha_step = 0.1 - - slen_start = 10 - - slen_end = 10python main.py --helpを使用してください。
--models :事前に訓練された言語モデルの名前。たとえば、 'gpt2-small;gpt2-medium'など、複数のモデルを同時に実行する場合はセミコロンによって分離されています。 GPT-3モデルを使用する場合は、GPT-3に関するメモを参照してください。--use_val :検証セットを使用して2つのハイパーパラメーター、 alphaとslenを選択するかどうか、部分コンテキストのブースト係数と長さを表します--alpha_start 、 --alpha_end 、 --alpha_step : alphaハイパーメーター--slen_start 、 --slen_end 、-slen_end、-slen_ent for --slen_stepのアルファハイパーメーターslenのグリッド検索パラメーターハイパーパラメーター;両方のハイパーパラメーターセットアップがランバダタスクの推論速度に影響することに注意してください以下のNLUタスクで提案されたコヒーレンスブーストを評価します。
| タスク | クローズタスク | 質問に答える | テキスト分類 | nli | Fact Knowledge Tretrieval |
|---|---|---|---|---|---|
| Datasets | StoryCloze Hellaswag Copa | Commonsenseqa openbookqa アークイージー/チャレンジ PIQA | SST-2/5 Trec Agnews | Rte CB ブールクラマ | |
ほとんどのデータセットは、Hugginfaceのデータセットでロードできます。コードを実行したときに指示を求めて手動でダウンロードする必要があるのはそのうちのほんのです。
NLU実験を実行するには、次のコマンドを実行するだけです
python main . py - - tasks = 'storycloze;csqa;openbookqa' - - models = 'gpt2-small;gpt2-medium;gpt2-large' - - alpha_start = 2 - - alpha_end = - 3 - - alpha_step = 0.01python main.py --help
--use_val slen alpha--models 'gpt2-small;gpt2-medium'実行する場合はセミコロンによって分離さ--alpha_step --alpha_end --alpha_start : alphaハイパーパラメーターのグリッド検索パラメーター。コードは中間結果をキャッシュし、GPT-3モデルを実行する場合はGPT-3について一度に推論を実行した後、これらのパラメーターを自由に変更できますapi_key.txt、新しいマルチ選択データセットをミニール努力に組み込むのに十分な柔軟性があります(オープンソースプロジェクトに触発されたLM-Evaluation-Harness)。約3つのステップがあります。
tasksフォルダーに__init__.pyに新しいデータセットを登録します。MultipleChoiceTaskクラスを継承する新しいクラスを作成します(例: load_data 、 standardize )get_contrast_ctxです。
私たちはgeneration/generation.pyのハグイングtransformersライブラリと互換性のある世代モデルラッパーを提供します。サンプルスクリプトでクラスを使用して、任意の自己回帰LMのコヒーレンスブーストバリアントを作成できます:
> >> boosted_model = generation . BoostedModel ( base_model , k = 8 , alpha_long = 1.5 , alpha_short = - 0.5 )boosted_modelは、 generate関数
> >> ins = T . LongTensor ([ tokenizer . encode ( 'Once upon a midnight dreary,' )]) > >> outputs = boosted_model . generate ( input_ids = ins , do_sample = True , max_length = 100 , top_p = 0.95 ) > >> tokenizer . decode ( outputs [ 0 ]) "Once upon a midnight dreary, while I pondered over these things, I suddenly became aware of a strange and terrible noise. I turned round, and saw that the old man was standing near me. He was wearing a black suit, with a black tie, and a black hat. He had a long, thin, black beard, and his eyes were black. His hair was of a dark brown colour, and was very long. His face was rather large, and his lips were somewhat"。 boosted_model.k負のプレフィックス長に動的に設定することにより、短いコンテキストが現在生成されているテキストが特定の長さのプレフィックス(たとえば、会話の前のターン)を差し引いたシナリオに適合します。
いくつかの条件付き生成出力を提示します。表1に示す評価メトリックは、最初の4列のこのリポジトリのコードを使用して、または導入した新しい長距離コヒーレンスメトリックのコードを使用して評価できます。
質問がある場合は、お気軽にKolya(nikolay.malkin at mila.quebec)およびZhen(wang.9215 at osu.edu)にお問い合わせください。