Skip to content

Latest commit

 

History

History
208 lines (169 loc) · 11.5 KB

README_zh.md

File metadata and controls

208 lines (169 loc) · 11.5 KB

English | 中文

概要

这是我们论文 NSP-BERT: A Prompt-based Zero-Shot Learner Through an Original Pre-training Task —— Next Sentence Prediction 的源码. 我们利用了一个 句子级别(sentence-level) 的预训练任务 NSP (下一句预测,Next Sentence Prediction) 来实现不同的NLP下游任务, 例如 单句分类(single sentence classification), 双句分类(sentence pair classification), 指代消解(coreference resolution), 完形填空(cloze-style task), 实体链接(entity linking), 实体类型识别(entity typing).

FewCLUE benchmark评测集上的部分任务中, 我们的 NSP-BERT性能远超其他 zero-shot 方法 (GPT-1-zero and PET-zero). 我们希望 NSP-BERT 能够成为一个可以辅助其他语言模型的一个无监督工具.

新闻

2022/10/12 (忘记在中文里面更新了) 请移步至https://github.com/sunyilgdx/Prompts4Keras ,包含NSP-BERT的小样本代码,还有PET、EFL、Fine-tuning的中英文版本实现,均是基于bert4keras的 2022/08/10 即将更新Few-shot部分代码。

2021/10/11 我们上传了几个英文分类任务的代码,AG’s News, DBPedia, Amazon and IMDB,经过简单的测试(1K测试样本),准备率大约为81.8, 70.9, 71.9 和 70.7。十分感谢Shengding Hu和他的KnowledgeablePromptTuning.

目录

章节 描述
开发环境 开发环境
下载 NSP-BERT使用模型的下载方式
演示样例 中文和英文Demo
评测方法 对NSP-BERT进行评测的代码
基线模型 基线模型介绍
模型比较 模型评测结果比较
策略细节 不同任务的策略
探讨展望 对论文的探讨和展望
鸣谢 鸣谢苏神

开发环境

开发环境如下所示:

Python 3.6
bert4keras 0.10.6
tensorflow-gpu 1.15.0

下载

模型下载

需要下载不同预训练模型的checkpoints. vocab.txtconfig.json 已经在我们的仓库里了 repository.

发布组织 模型名称 模型参数 下载链接 Tips
Google BERT-uncased L=12 H=769 A=12 102M Tensorflow
BERT-Chinese L=12 H=769 A=12 102M Tensorflow
HFL BERT-wwm L=12 H=769 A=12 102M Tensorflow
BERT-wwm-ext L=12 H=769 A=12 102M Tensorflow
UER BERT-mixed-tiny L=3 H=384 A=6 14M Pytorch *
BERT-mixed-Small L=6 H=512 A=8 31M Pytorch *
BERT-mixed-Base L=12 H=769 A=12 102M Pytorch *
BERT-mixed-Large L=24 H=1024 A=16 327M Pytorch *

* 我们需要使用 UER的转换工具 将 UER pytorch 模型转换成 Original Tensorflow.

数据集下载

在论文的实验部分,我们使用 FewCLUE 评测集和 DuEL2.0 (CCKS2020).

数据集 下载链接
FewCLUE https://github.com/CLUEbenchmark/FewCLUE/tree/main/datasets
DuEL2.0 (CCKS2020) https://aistudio.baidu.com/aistudio/competition/detail/83
enEval https://github.com/ShengdingHu/KnowledgeablePromptTuning

将数据集放在 NSP-BERT/datasets/下.

演示样例

尝试使用 ./demos/nsp_bert_classification_demo.py and ./demos/nsp_bert_classification_demo_en.py 来完成分类任务. 编辑自己的 LabelsSamples, 创造 Prompt Templates, 就可以进行文本你分类了.

...
label_names = ['娱乐', '体育', '音乐', '电竞', '经济', '教育']
patterns = ["这是一篇{}新闻".format(label) for label in label_names]
demo_data_zh = ['梅西超越贝利成为南美射手王',
                 '贾斯汀比伯发布新单曲',
                 '比心APP被下架并永久关闭陪玩功能',
                 '徐莉佳的伦敦奥运金牌氧化了',
                 '10元芯片卖400元!芯片经销商被罚',
                 '北京首批校外培训机构白名单公布']
...

输出

Sample 0:
Original Text: 梅西超越贝利成为南美射手王
Predict label: 体育
Logits: [0.67886037, 0.98553574, 0.16819017, 0.6733272, 0.29652277, 0.07275329]

Sample 1:
Original Text: 贾斯汀比伯发布新单曲
Predict label: 音乐
Logits: [0.95801944, 0.4572674, 0.9918983, 0.35939765, 0.3782271, 0.12813713]

Sample 2:
Original Text: 比心APP被下架并永久关闭陪玩功能
Predict label: 娱乐
Logits: [0.40367377, 0.23919956, 0.1673808, 0.20248286, 0.29829133, 0.122355804]
...

评测方法

通过运行不同的 python 文件对 NSP-BERT 进行评测.

NSP-BERT
    |- datasets
        |- clue_datasets
           |- ...
        |- DuEL 2.0
           |- dev.json
           |- kb.json
        |- enEval
           |- agnews
           |- amazon
           |- dbpedia
           |- imdb
    |- demos
        |- nsp_bert_classification_demo.py
        |- nsp_bert_classification_demo_en.py
    |- models
        |- uer_mixed_corpus_bert_base
           |- bert_config.json
           |- vocab.txt
           |- bert_model.ckpt...
           |- ...
    |- nsp_bert_classification.py             # Single Sentence Classification
    |- nsp_bert_sentence_pair.py              # Sentence Pair Classification
    |- nsp_bert_cloze_style.py                # Cloze-style Task
    |- nsp_bert_coreference_resolution.py     # Coreference Resolution
    |- nsp_bert_entity_linking.py             # Entity Linking and Entity Typing
    |- utils.py
Python 文件 任务 数据集
nsp_bert_classification.py Single Sentence Classification EPRSTMT, TNEWS, CSLDCP, IFLYTEK
AG’s News, DBPedia, Amazon, IMDB
nsp_bert_sentence_pair.py Sentence Pair Classification OCNLI, BUSTM, CSL
nsp_bert_cloze_style.py Cloze-style Task ChID
nsp_bert_coreference_resolution.py Coreference Resolution CLUEWSC
nsp_bert_entity_linking.py Entity Linking and Entity Typing DuEL2.0

基线模型

参考 FewCLUE, 我们选择了3个场景, fine-tuning, few-shot and zero-shot. 对于机型模型我们采用 Chineses-RoBERTa-Base 和 Chinses-GPT-1 作为骨干预训练模型.

算法

场景 算法
Fine-tuning BERT, RoBERTa
Few-Shot PET, ADAPET, P-tuning, LM-BFF, EFL
Zero-Shot GPT-zero, PET-zero

下载

发布组织 模型名称 模型参数 下载链接
huawei-noah Chinese GPT L=12 H=769 A=12 102M Tensorflow
HFL RoBERTa-wwm-ext L=12 H=769 A=12 102M Tensorflow

模型比较


Main Results

策略细节


Strategies

探讨展望

  • 由于 NSP-BERT 是一个句子级的 prompt-learning 模型, 相比于 GPT-zero and PET-zero, 其在 Single Sentence Classification 等任务上 (TNEWS, CSLDCP and IFLYTEK)有着显著的提高. 同时, 可以很好地完成 实体链接 任务 (DuEL2.0), 且不受限于不同长度地实体描述, 这是 GPT-zero 和 PET-zero 所不能做到的.
  • 但是, 其在 词级别 的任务上, 例如 完形填空实体类别识别 上效果一般.
  • 在将来的工作中, 可以继续将其应用在Few-Shot场景中.

鸣谢

  • 我们的代码基于苏剑林老师的bert4keras开源项目.
  • 感谢苏剑林老师, 他的系列博客科学空间, 以及他的开源精神, 启发和激励了我的论文写作过程.

引用

@misc{sun2021nspbert,
    title={NSP-BERT: A Prompt-based Zero-Shot Learner Through an Original Pre-training Task--Next Sentence Prediction},
    author={Yi Sun and Yu Zheng and Chao Hao and Hangping Qiu},
    year={2021},
    eprint={2109.03564},
    archivePrefix={arXiv},
    primaryClass={cs.CL}
}
@inproceedings{sun-etal-2022-nsp,
    title = "{NSP}-{BERT}: A Prompt-based Few-Shot Learner through an Original Pre-training Task {---}{---} Next Sentence Prediction",
    author = "Sun, Yi  and
      Zheng, Yu  and
      Hao, Chao  and
      Qiu, Hangping",
    booktitle = "Proceedings of the 29th International Conference on Computational Linguistics",
    month = oct,
    year = "2022",
    address = "Gyeongju, Republic of Korea",
    publisher = "International Committee on Computational Linguistics",
    url = "https://aclanthology.org/2022.coling-1.286",
    pages = "3233--3250"
}