一个及时学习的开源框架。
概述•安装•如何使用•文档•纸•引文•性能•
./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 }
}我们感谢该项目的所有贡献者,欢迎更多的贡献者!