Home

Awesome

中文说明 | English

<p align="center"> <br> <img src="./assets/GuwenBERT.png" width="500"/> <br> </p> <p align="center"> <a href="https://github.com/ethan-yt/guwenbert/issues"><img alt="GitHub issues" src="https://img.shields.io/github/issues/ethan-yt/guwenbert"></a> <a href="https://github.com/ethan-yt/guwenbert/stargazers"><img alt="GitHub stars" src="https://img.shields.io/github/stars/ethan-yt/guwenbert"></a> <a href="https://github.com/Ethan-yt/guwenbert/blob/main/LICENSE"><img alt="GitHub license" src="https://img.shields.io/github/license/ethan-yt/guwenbert"></a> </p>

GuwenBERT是一个基于大量古文语料的RoBERTa模型。

在自然语言处理领域中,预训练语言模型(Pre-trained Language Models)已成为非常重要的基础技术。 目前互联网上存在大量的现代汉语BERT模型可供下载,但是缺少古文的语言模型。 为了进一步促进古文研究和自然语言处理的结合,我们发布了古文预训练模型GuwenBERT

对于古文的常见任务:断句,标点,专名标注,目前通常采用序列标注模型。这类模型非常依赖预训练的词向量或者BERT,所以一个好的语言模型可以大幅提高标注效果。经过实验,在古文NER任务中我们的BERT比目前最流行的中文RoBERTa效果提升6.3%,仅仅300步就可以达到中文RoBERTa的最终水平,特别适合标注语料不足的小数据集。使用我们的模型也可以减少数据清洗,数据增强,引入字典等繁琐工序,在评测中我们仅仅用了一个BERT+CRF的模型就可以达到第二名。

相关项目

在线体验

古文预训练语言模型

<p align="center"> <a href="https://huggingface.co/ethanyt/guwenbert-base"> <img width="601" alt="image" src="https://user-images.githubusercontent.com/9592150/131475589-7b007f0f-3391-4f98-924e-d6dee4178c75.png"></a> </p>

点击图片或这里跳转。第一次计算可能需要加载模型,请多等一会。

古文自然语言处理流水线

<p align="center"> <a href="https://cclue.top/guwen-models.html"><img width="888" alt="image" src="https://user-images.githubusercontent.com/9592150/131475298-793b9693-bcba-4a2c-8ad2-8036d6171957.png"></a> </p>

点击图片或这里跳转。

新闻

2021/7/25 和下游任务相关的模型、代码已经上传,欢迎star:https://github.com/Ethan-yt/guwen-models

2020/10/31 CCL2020会议分享:基于继续训练的古汉语语言模型 slides

2020/10/25 我们的模型已接入Huggingface Transformers,查看使用说明

2020/9/29 我们的模型获得2020年“古联杯”古籍文献命名实体识别评测大赛 二等奖

使用说明

Huggingface Transformers

依托于Huggingface Transformers,可轻松调用以下模型

代码如下

from transformers import AutoTokenizer, AutoModel

tokenizer = AutoTokenizer.from_pretrained("ethanyt/guwenbert-base")

model = AutoModel.from_pretrained("ethanyt/guwenbert-base")

Note: 由于本工作使用中文语料,RoBERTa原作Tokenizer是基于BPE算法的,对中文不太友好,所以这里使用BERT的分词器。这个配置已经写入config.json,所以直接使用AutoTokenizer会自动加载BertTokenizer, AutoModel会自动加载RobertaModel

模型下载

我们提供的模型是PyTorch版本,如果需要tensorflow版本请自行通过Transformers提供的转换脚本进行转换。

直接下载

通过huggingface官网直接下载:

https://huggingface.co/ethanyt/guwenbert-base

https://huggingface.co/ethanyt/guwenbert-large

拉到最下方点击"List all files in model" → 在弹框中下载每个文件。

镜像

中国大陆境内用户如果无法直接下载huggingface hub的模型,可以使用以下镜像:

模型名称大小百度网盘
guwenbert-base235.2M链接 提取码: 4jng
guwenbert-large738.1M链接 提取码: m5sz

评测结果

2020年“古联杯”古籍文献命名实体识别评测大赛-第二名

本评测任务由古联(北京)数字传媒科技有限公司举办。古籍文献的整理和分析对数字人文研究和中华文化传承具有重要意义。命名实体识别在古籍文献处理过程中极为重要,是其他工作得以顺利开展的关键。该项工作会影响到古文自动标点、文白翻译等一系列自动化处理工作,因此,能够从古籍文献中自动识别出专名信息是一项非常重要且有价值的工作。

具体任务为:根据给定的古籍篇章,将候选篇章中的命名实体提取出来,并且按照既定类别进行归并。提取出来的实体名称大致分为两类:书名和其他专名(含人名、地名、朝代名、民族名等)。

数据集方面:分为训练数据和评测数据,涉及经、史、子、集等1900多篇古籍文本。训练数据为带有标签的文本文件,共计1063291字符(计空格),含11068组书名,10040组专名。

实体类型PrecisionRecallF1
书名77.5073.7375.57
其他专名85.8589.3287.55
平均值83.8885.3984.63

FAQ

有任何问题可以直接在Issue区留言,或者直接邮件联系我。这里会总结一些常见问题。

Q: “古联杯”评测数据集可以公开吗?

A: 和主办方通过邮件询问了一下,主办方表示不能公开,如有需要可以联系zhucuiping@ancientbooks.cn

Q: 预训练时,阶段1和阶段2使用的是相同的语料吗?阶段1训练时是否掺入了现代汉语的语料?

A: 两个阶段的语料、任务相同,唯一不同的只是第一阶段冻结了Transformer层,以便学习embeddings

使用建议

预训练过程

Note: 本节介绍的是预训练的过程,微调不要参考本节配置

模型首先由hfl/chinese-roberta-wwm-ext初始化,然后按照以下两步训练:第一步,模型只更新Embedding层;第二步,所有参数共同更新。模型在 4 块 V100 上训练 120K 步(第一步 20K, 第二步 100K)。

<p align="center"> <br> <img src="./assets/pre-train-work-flow.png"/> <br> </p>

详细的超参数设置如下:

NameValue
Batch size2,048
Seq Length512
OptimizerAdam
Learning Rate2e-4(base), 1e-4 (large)
Adam-eps1e-6
Weight Decay0.01
Warmup5K steps, linear decay of learning rate after.

引用

如果本文中的内容对你的研究工作有所帮助,欢迎在论文中引用本工作。由于论文尚未发表,可以暂时以脚注的形式

\footnote{GuwenBERT \url{https://github.com/ethan-yt/guwenbert}}.

免责声明

报告中所呈现的实验结果仅表明在特定数据集和超参组合下的表现,并不能代表各个模型的本质。 实验结果可能因随机数种子,计算设备而发生改变。 该项目中的内容仅供技术研究参考,不作为任何结论性依据。使用者可以在许可证范围内任意使用该模型,但我们不对因使用该项目内容造成的直接或间接损失负责。

感谢

本工作是基于中文BERT-wwm继续训练的。