日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Prompt-Learning

發布時間:2023/12/8 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Prompt-Learning 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Prompt-Learning

? ? Prompt Learning(提示學習)是指對輸入文本信息按照特定模板進行處理,把任務重構成一個更能充分利用預訓練語言模型處理的形式。Prompting使得預訓練模型和下游任務之間更加接近,這一點兒與fine-tuning不同,fine-tuning是使用預訓練模型做下游任務,prompt learning是各種下游任務適應預訓練模型,根據不同的預訓練模型重構下游任務。

不同的prompt learning學習任務

這里重點介紹基于清華大學公開的openprompt框架進行文本分類學習以及重點介紹幾個api的學習理解。
prompt learning包括Template,Verbalizer,PromptModel等。prompt learning將不同的nlp任務轉化為文本分類問題,但是和之前的bert finetuning的文本分類不一致。例如:
文本分類:
輸入:看這個娛樂節目不停的笑
輸出:正面或者負面

prompt learning下的文本分類,預測mask位置處的詞,向完形填空
輸入:看這個娛樂節目不停的笑,這個節目是一個mask的節目
輸出:有趣的或者無聊的
ManualTemplate
template_text = ‘{“placeholder”:“text_a”},該句子的意圖是:{“mask”}。’
prompt 的template 經過ManualTemplate后會生成一個text,類型為list,
[{‘add_prefix_space’: ‘’, ‘placeholder’: ‘text_a’}, {‘add_prefix_space’: ‘’, ‘text’: ‘,該句子的意圖是:’}, {‘add_prefix_space’: ‘’, ‘mask’: None},
{‘add_prefix_space’: ‘’, ‘text’: ‘。’}]
輸入的句子‘股票想變成標的證券要達到的條件很高吧’在模板下的text表示如下
‘text’的value為 [‘股票想變成標的證券要達到的條件很高吧’, ‘,該句子的意圖是:’, ‘’, ‘。’]
loss_ids:是標記mask的位置,[0,0,1,0]
shortenable: 1是input token,0是squence token,1是標記的placeholder或者shortenable的位置
在tokenizer中的對Template下的text的值進行tokenizer encoder,并在模版的開始和結束位置這兩個特殊符號,例如bert預訓練模型的特殊符號為cls和sep
loss_ids中的值根據tokenizer encoder的length進行擴充,1是表示mask的位置,加入的特殊編碼對應的值為–100,這里默認是-100
備注:
1.在tokenizer的過程中把shortenable_ids這個內容項刪掉了;loss_ids在后面的ManualVerbalize中計算label的概率會使用到,即預測mask的詞的概率
2.常用的template有:
sentence1 It was [MASK].
sentence1 ? [MASK], sentence2
sentence1 . [MASK], sentence2
sentence1 sentence2 [MASK]
sentence2 ? [MASK], sentence1
ManualVerbalizer
這個是對label的擴展相近的詞或者字進行編碼,tokenizer分別對這些擴展字詞進行tokenizer,統計tokenizer后的每個字詞的最大個數,以及每一個標準問擴展詞的tokenizer的最大長度,從而確定了擴展字詞的矩陣大小,這里是對label進行擴充,在模型分類中會使用這個矩陣,這里是與之前的fine tuning分類有區別的。
例如標準問的擴展字詞為[’ 支持’, ’ T’, ’ 類’, ’ 基’, ’ T0’, ’ 種類’, ’ 0’, ’ 申’, ’ 種’, ’ 持’, ’ 贖’, ’ 基金’, ’ 金’, ’ 支’],其中確定的每個詞的最大長度為4,擴展詞的最大長度為32,得到的padding結果為[[3118, 2898, 0, 0], [100, 0, 0, 0], [5102, 0, 0, 0], [1825, 0, 0, 0], [100, 0, 0, 0], [4905, 5102, 0, 0], [121, 0, 0, 0], [4509, 0, 0, 0], [4905, 0, 0, 0], [2898, 0, 0, 0], [6604, 0, 0, 0], [1825, 7032, 0, 0], [7032, 0, 0, 0], [3118, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]],
mask 矩陣為[[1, 1, 0, 0], [1, 0, 0, 0], [1, 0, 0, 0], [1, 0, 0, 0], [1, 0, 0, 0], [1, 1, 0, 0], [1, 0, 0, 0], [1, 0, 0, 0], [1, 0, 0, 0], [1, 0, 0, 0], [1, 0, 0, 0], [1, 1, 0, 0], [1, 0, 0, 0], [1, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
label擴展矩陣的mask矩陣[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
這里邊把字詞的編碼,mask,整個label的mask都作為了參數,tensor shape為[batch_size, 擴展詞的最大長度, 每個詞的最大長度],

  • 對BertForMaskedLM中的logtis進行計算[batch_size, max_seq_len, vocab_size],
  • 根據句子中mask的個數,得到mask位置處word的logits,如果只有一個mask,得到的shape為[batch_size,vocab_szie],如果是多個mask,得到的mask位置的logits為[batch_size,mask個數,vocab_size],這里maks的個數為1
  • 將mask的vocab 概率轉化為label擴展詞的logits[batch_size, label_num,擴展詞的最大長度, 每個詞的最大長度],然后根據label的擴展詞的mask矩陣在每個詞的最大長度這一個維度上進行計算,得到[batch_size, label_num, 擴展詞的最大長度],
    進行softmax得到概率[batch_size, label_num, 擴展詞的最大長度],再取log得到logtis(這個logits可以理解為對label的擴展詞的logits)
  • 聚合得到label的logits,根據label擴展詞的mask矩陣得到每一個label的logits[batch_size, label_num]

這里預測mask詞是label中擴展詞,從而得到label,從預訓練模型預測mask位置是vocab,轉化為預測label擴展詞,從而得倒label,這個是與直接分類的區別,這里使用的是mlm的方式

備注:

  • 這里面使用的是transformers中的BertForMaskedLM,不是BertModel,增加了wrapper,使用的是MLMTokenizerWrapper,BertForMaskedLM是預測mask掉的詞是單詞表中的哪一個詞,logits的shape為[batch_size, seq_len, vocab_size]
  • 這里的mask位置是從模板得到的,并不是每一個樣本進行隨機mask
  • 不同的template和不用的label擴展詞方式,對模型效果有影響
  • 筆者最近在學習prompt learning,如有理解錯誤的地方,請指正,謝謝

    總結

    以上是生活随笔為你收集整理的Prompt-Learning的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。