小数据福音!BERT在极小数据下带来显著提升的开源实现

640


作者丨金立达

单位丨笨鸟社交 AI Lab

学校丨英国帝国理工学院

研究方向丨自然语言处理、知识图谱


标注数据,可以说是 AI 模型训练里最艰巨的一项工作了。自然语言处理的数据标注更是需要投入大量人力。相对计算机视觉的图像标注,文本的标注通常没有准确的标准答案,对句子理解也是因人而异,让这项工作更是难上加难。 


但是,谷歌最近发布的 BERT [1] 大大地解决了这个问题!根据我们的实验,BERT 在文本多分类的任务中,能在极小的数据下带来显著的分类准确率提升。并且,实验主要对比的是仅仅 5 个月前发布的 State-of-the-Art 语言模型迁移学习模型 – ULMFiT [2],结果有着明显的提升。我们先看结果:


640

 图1. 实验结果对比,BERT在极少的数据集上表现非常出色


从上图我们可以看出,在不同的数据集中,BERT 都有非常出色的表现。我们用的实验数据分为 1000、 6700 和 12000 条,并且各自包含了测试数据,训练测试分割为 80%-20%。数据集从多个网页来源获得,并经过了一系列的分类映射。但 Noisy 数据集带有较为显著的噪音,抽样统计显示噪音比例在 20% 左右。


实验对比了几个模型,从最基础的卷积网络作为 Baseline,到卷积网络加上传统的词向量 Glove embedding, 然后是 ULMFiTBERT。为了防止过拟合,CNN 与 CNN+Glove 模型训练时加入了 Early stopping。


值得注意的是,这里用的 BERT 模型均为基础版本,“BERT-Base, Uncased”,12 层,110M 参数,对比的是 ULMFiT 调整过的最优化参数。可见 BERT 在此任务中的强大。 


然而,在 12000 条样本的数据集上,BERT 的结果相对 6700 条并没有显著的提升。数据分类不平衡可能是导致此结果的一大因素。



BERT 开源的多个版本的模型:


640

 图2. 开源的多个版本的BERT模型


接下来,我们直奔主题 – 如何在自己的机器上实现 BERT 的文本 25 分类任务。教程分为以下几部分:


  • 运行环境

  • 硬件配置

  • 下载模型

  • 输入数据准备

  • 实现细节



640


运行环境


TensorFlow 版本为 Windows 1.10.0 GPU,具体安装教程可以参考此链接:


https://www.tensorflow.org/install/pip?lang=python3


  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: BERT-CRF是一种基于深度学习的序列标注模型,可以实现对自然语言文本进行序列标注。在实现BERT-CRF模型时,需要准备一个数据集,用于训练和评估模型的性能。 数据集是BERT-CRF模型中非常重要的一部分,它决定了模型的性能和泛化能力。数据集应当包含一组有标注的样本,每个样本都应该是一个输入序列和其对应的标注序列。 对于自然语言处理任务,常用的数据集包括CoNLL-2003、OntoNotes、ACE2005等。这些数据集包含了大量的有标注文本数据,并被广泛应用于序列标注任务中。在准备数据集时,需要根据具体的任务和数据集格式对数据集进行处理。 对于CoNLL-2003数据集,其格式为每个词占据一行,每行包含9个字段,分别为:单词、词性、分块标签和4个NER标记。在处理数据集时,需要将每个样本中的文本与其对应的NER标签分离,并进行适当的编码和分割。 在BERT-CRF实现过程中,还需要考虑如何将输入向量化,并将其转换为能够被BERT模型接受的格式。一种常用的方法是使用bert-serving来将原始文本转换为BERT向量,然后将向量输入到CRF模型中进行标注。 总之,BERT-CRF实现需要准备一个有效的训练数据集,数据集应当包含有标注的样本,并符合模型的输入格式。同时,还需要针对具体的任务和数据集格式对数据集进行适当的预处理和编码。 ### 回答2: BERT-CRF是一种基于BERT模型和条件随机场(CRF)的序列标注模型。在实现bert-crf之前,我们需要一个数据集来进行训练和测试。数据集就是文本序列上每个词的标注结果,例如分句、分词、命名实体标注、词性标注等。下面我们来介绍一下如何准备一个数据集。 首先,选择一个合适的任务,例如中文命名实体识别(NER)。NER任务是指识别文本数据中具有特定意义的实体,如人名、组织机构名、地名等。选择该任务的原因是其具有广泛的应用场景,适合用来演示bert-crf模型的实现流程。 接下来是数据收集和预处理。我们需要收集一些包括实体标注信息的文本语料库,并进行预处理,例如分词、去除停用词、标注实体、划分训练集和测试集等。在这一步可以使用一些工具来简化操作,例如jieba分词、StanfordNLP、pyltp等。最终得到的文本序列和标注序列是该数据集的核心部分。 然后是特征工程,即将文本序列和标注序列转化为模型可接受的特征格式。具体来说,需要将文本序列中每个词转化为对应的BERT向量表达形式,同时将标注序列转化为one-hot编码形式。这些特征都可以通过使用相应的Python工具来进行处理。 最后是模型训练和测试。BERT-CRF模型的训练可以使用已经训练好的BERT权重作为初始值,并在预训练期的基础上进行finetuning。模型测试时可以使用在预处理阶段划分的测试集进行验证,最终将预测的标注序列与真实标注序列进行比较,并计算评价指标,如精度、召回率、F1值等。 总之,准备一个数据集是BERT-CRF模型实现的重要一步。数据集的质量将直接影响模型的表现效果和应用效果。因此,数据集的准确性和完备性都需要得到重视。 ### 回答3: BERT-CRF是一种自然语言处理技术,其基本思想是结合 BERT(Bidirectional Encoder Representations from Transformers)预训练模型和条件随机场(CRF)来完成对于自然语言序列标注的任务。 在这种技术中,BERT被用来对输入文本进行特征提取,并且将提取的特征序列作为CRF模型的输入,CRF负责对序列进行标注。 对于BERT-CRF,数据集的构建非常重要。数据集必须包含大量的标记数据,即标有正确标注的文本的数据,以确保CRF模型的准确性和效果。构建数据集的主要步骤如下: 1. 定义标记标准 在构建数据集之前,需要定义标记标准。在自然语言处理任务中,标记通常包含实体标记、词义标记、词性标记等。标志标准将大大影响数据集的构建和模型的学习效果,因此必须尽可能严格定义。 2. 选择文本样本 选择文本样本时,需要选择具有代表性的样本来训练模型,应尽可能覆盖各种文本类型和语言风格。这些文本样本应来自于各种来源,例如新闻报道、论坛、社交媒体等。 3. 标记数据 将选定的文本样本转换为适合模型学习的标记数据。还可以利用现成的标记工具进行标记化,例如Stanford NER、spaCy等。 4. 数据预处理 对标注好的数据进行清洗、切分、建立词典等预处理操作,使其适合于BERT-CRF模型进行学习和训练。这些任务可以使用Python等语言的自然语言处理库来完成。 5. 划分数据集 将数据集划分为训练集、开发集和测试集,通过不断调整模型参数和超参数,并在开发集上测试结果来优化模型,最终在测试集上进行评估。 总而言之,BERT-CRF技术在自然语言处理领域的应用,需要基于一组标记良好且具有代表性的数据集。通过上述步骤,我们可以建立一个完善的数据集来支持BERT-CRF模型的学习和训练。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值