一個及時學習的開源框架。
概述•安裝•如何使用•文檔•紙•引文•性能•
./tutorial/9_UltraChat.py 。pip install openprompt及時學習是將預訓練的語言模型(PLM)調整為下游NLP任務的最新範式,它使用文本模板修改輸入文本,並直接使用PLMS來執行預訓練的任務。該庫提供了一個標準,靈活且可擴展的框架,以部署及時的學習管道。 OpenPrompt直接從HuggingFace Transformers支持加載PLM。將來,我們還將支持其他庫實施的PLM。有關及時學習的更多資源,請查看我們的紙質清單。

注意:請使用Python 3.8+進行OpenPrompt
我們的存儲庫已在Python 3.8+和Pytorch 1.8.1+上進行測試,使用PIP安裝openPrompt如下:
pip install openprompt要播放最新功能,您也可以從源頭安裝OpenPrompt。
從GitHub克隆存儲庫:
git clone https://github.com/thunlp/OpenPrompt.git
cd OpenPrompt
pip install -r requirements.txt
python setup.py install修改代碼
python setup.py develop
PromptModel對象包含一個PLM ,A(或多個) Template和A(或多個) Verbalizer ,其中定義了Template類,以用模板包裝原始輸入,而Verbalizer類是在當前詞彙中構造標籤和目標單詞之間的投影。 PromptModel對象實際上參與了培訓和推理。
借助OpenPrompt的模塊化和靈活性,您可以輕鬆開發及時的學習管道。
第一步是確定當前的NLP任務,考慮一下您的數據是什麼樣子以及您想要的數據!也就是說,此步驟的本質是確定任務的classes和InputExample 。為簡單起見,我們以情感分析為例。 tutorial_task。
from openprompt . data_utils import InputExample
classes = [ # There are two classes in Sentiment Analysis, one for negative and one for positive
"negative" ,
"positive"
]
dataset = [ # For simplicity, there's only two examples
# text_a is the input text of the data, some other datasets may have multiple input sentences in one example.
InputExample (
guid = 0 ,
text_a = "Albert Einstein was one of the greatest intellects of his time." ,
),
InputExample (
guid = 1 ,
text_a = "The film was badly made." ,
),
]選擇一個PLM來支持您的任務。不同的模型具有不同的屬性,我們鼓勵您使用OpenPrompts探索各種PLM的潛力。 OpenPrompt與HuggingFace上的型號兼容。
from openprompt . plms import load_plm
plm , tokenizer , model_config , WrapperClass = load_plm ( "bert" , "bert-base-cased" ) Template是原始輸入文本的修飾符,這也是及時學習中最重要的模塊之一。我們在步驟1中定義了text_a 。
from openprompt . prompts import ManualTemplate
promptTemplate = ManualTemplate (
text = '{"placeholder":"text_a"} It was {"mask"}' ,
tokenizer = tokenizer ,
)在及時學習中, Verbalizer是另一個重要(但不是必需的),哪個將原始標籤(我們已將其定義為classes ,記住了?)將其投射到一組標籤單詞上。這是一個示例,我們將negative類別投射到“壞”一詞上,並將positive類別投影到好,奇妙,偉大的一詞。
from openprompt . prompts import ManualVerbalizer
promptVerbalizer = ManualVerbalizer (
classes = classes ,
label_words = {
"negative" : [ "bad" ],
"positive" : [ "good" , "wonderful" , "great" ],
},
tokenizer = tokenizer ,
)鑑於任務,現在我們有了一個PLM ,一個Template和一個Verbalizer ,我們將它們組合成一個PromptModel 。請注意,儘管該示例天真地結合了這三個模塊,但您實際上可以定義它們之間的一些複雜的相互作用。
from openprompt import PromptForClassification
promptModel = PromptForClassification (
template = promptTemplate ,
plm = plm ,
verbalizer = promptVerbalizer ,
)PromptDataLoader基本上是Pytorch DataLoader的及時版本,其中還包括Tokenizer , Template和TokenizerWrapper 。
from openprompt import PromptDataLoader
data_loader = PromptDataLoader (
dataset = dataset ,
tokenizer = tokenizer ,
template = promptTemplate ,
tokenizer_wrapper_class = WrapperClass ,
)完畢!我們可以進行與Pytorch中其他過程相同的培訓和推斷。
import torch
# making zero-shot inference using pretrained MLM with prompt
promptModel . eval ()
with torch . no_grad ():
for batch in data_loader :
logits = promptModel ( batch )
preds = torch . argmax ( logits , dim = - 1 )
print ( classes [ preds ])
# predictions would be 1, 0 for classes 'positive', 'negative'有關更多詳細信息,請參考我們的教程腳本和文檔。
我們在dataset/文件夾中提供了一系列下載腳本,請隨時使用它們下載基準。
由OpenPrompt提供了太多可能的組合。我們正在盡最大努力盡快測試不同方法的性能。性能將不斷更新到表中。我們還鼓勵用戶為自己的任務找到最佳的超參數,並通過提出拉請求來報告結果。
將來的重大改進/增強。
如果您在工作中使用OpenPrompt,請引用我們的論文
@article { ding2021openprompt ,
title = { OpenPrompt: An Open-source Framework for Prompt-learning } ,
author = { Ding, Ning and Hu, Shengding and Zhao, Weilin and Chen, Yulin and Liu, Zhiyuan and Zheng, Hai-Tao and Sun, Maosong } ,
journal = { arXiv preprint arXiv:2111.01998 } ,
year = { 2021 }
}我們感謝該項目的所有貢獻者,歡迎更多的貢獻者!