专栏首页机器学习入门与实战BERT中文实战:文本相似度计算与文本分类

BERT中文实战:文本相似度计算与文本分类

在CV问题中,目前已经有了很多成熟的模型供大家使用,我们只需要修改结尾的FC层或根据实际场景添加softmax层,也就是我们常说的迁移学习。那在NLP领域是否有这样泛化能力很强的模型呢,答案是肯定的,BERT是一个已经事先采用大量数据进行过训练的模型,泛化能力极强,使用时只需要针对特定领域进行微调即可使用。对于NLP的正常流程来说,我们需要做一些预处理,例如分词、W2V等,BERT包含所有的预训练过程,只需要提供文本数据即可,接下来我们会基于NLP常用的文本相似度计算问题来介绍如何使用BERT。

BERT中文实战:文本相似度计算与文本分类

代码下载:

关注微信公众号 datanlp 然后回复 bert 即可获取下载链接。

下载预训练模型

谷歌提供了以下几个版本的BERT模型,每个模型的参数都做了简单的说明,中文的预训练模型在11月3日的时候提供了,这里我们只需要用到中文的版本

https://storage.googleapis.com/bert_models/2018_11_03/chinese_L-12_H-768_A-12.zip

下载下来的文件包括以下内容

  • TensorFlow 用来保存预训练模型的三个 checkpoint 文件(bert_model.ckpt.xxx)
  • 字典文件,用于做ID的映射 (vocab.txt)
  • 配置文件,该文件的参数是fine-tuning时模型用到的,可自行调整 (bert_config.json)

编写代码

模型准备好后就可以编写代码了,我们先把BERT的github代码clone下来,之后我们的代码编写会基于run_classifier.py文件,我们看下代码的结构

可以看到有好几个xxxProcessor的类,这些类都有同一个父类DataProcessor,其中DataProcessor提供了4个抽象方法,如图

顾名思义,Processor就是用来获取对应的训练集、验证集、测试集的数据与label的数据,并把这些数据喂给BERT的,而我们要做的就是自定义新的Processor并重写这4个方法,也就是说我们只需要提供我们自己场景对应的数据。这里我自定义了一个名叫SimProcessor的类,我们简单看一下

读取的数据需要封装成一个InputExample的对象并添加到list中,注意这里有一个guid的参数,这个参数是必填的,是用来区分每一条数据的。是否进行训练集、验证集、测试集的计算,在执行代码时会有参数控制,我们下文会讲,所以这里的抽象方法也并不是需要全部都重写,但是为了体验一个完整的流程, 建议大家还是简单写一下。

get_labels方法返回的是一个数组,因为相似度问题可以理解为分类问题,所以返回的标签只有0和1,注意,这里我返回的是参数是字符串,所以在重写获取数据的方法时InputExample中的label也要传字符串的数据,可以看到上图中我对label做了一个str()的处理。

接下来还需要给Processor加一个名字,让我们的在运行时告诉代码我们要执行哪一个Processor,如图我自定义的叫做sim

训练模型

ok,到这里我们已经把Processor编写好了,接下来就是运行代码了,我们来看下run_classifier.py的执行过程。

可以看到,在执行run_classifier.py时需要先输入这5个必填参数,这里我们对参数做一个简单的说明

当然还有一些其他的参数,这里给出官方提供的运行参数

这里再补充下以下三个可选参数说明

预测

执行以上的代码即可训练我们自己的模型了,如果需要使用模型来进行预测,可执行以下命令

当然,我们需要在data_dir下有测试数据,测试完成后会在output_dir路径下生成一个test_results.tsv文件,该文件包含了测试用例和相似度probabilities

总结

除了相似度计算,以上的代码完全能够用来做文本二分类,你也可以根据自己的需求来修改Processor,更多的细节大家可以参阅github源码。

本文分享自微信公众号 - 机器学习入门与实战(datanlp)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-12-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Attention注意力机制

    在“编码器—解码器(seq2seq)”⼀节⾥,解码器在各个时间步依赖相同的背景变量来获取输⼊序列信息。当编码器为循环神经⽹络时,背景变量来⾃它最终时间步的隐藏状...

    大数据技术与机器学习
  • 生成式模型与判别式模型

    从概率分布的角度看待模型。 给个例子感觉一下: 如果我想知道一个人A说的是哪个国家的语言,我应该怎么办呢?

    大数据技术与机器学习
  • 基于依存句法分析的关键短语抽取算法实战

    由于最近在做一些无监督的关键词短语(实体)抽取工作,其实最大的背景还是没有标注好的实体识别训练数据;所以想到采用无监督的关键短语抽取算法折中去抽取一些实体,于是...

    大数据技术与机器学习
  • Kaggle&TianChi分类问题相关纯算法理论剖析导读Bias-Variance-TradeofGBDT 理论剖析GBDT 实战剖析

    17/12/30-update :很多朋友私密我想要代码,甚至利用金钱诱惑我,好吧,我沦陷了。因为原始代码涉及到公司的特征工程及一些利益trick,所以我构造了...

    sladesal
  • OpenAI提出比GAN更具优势的可逆生成模型Glow

    Glow,一种使用可逆1×1卷积的可逆生成模型。它扩展了以前的可逆生成模型,简化了架构。模型可以生成逼真的高分辨率图像,支持高效采样,并发现可用于操纵数据属性的...

    AiTechYun
  • 判别模型 和 生成模型

    【摘要】 - 生成模型:无穷样本==》概率密度模型 = 产生模型==》预测 - 判别模型:有限样本==》判别函数 = 预测模型==》预测 【...

    机器学习AI算法工程
  • 【机器学习】机器到底在学习什么?

    机器识别手写数字的问题早已经解决,MNIST数据集http://yann.lecun.com/exdb/mnist/如今机器识别的准确率已经超过99%。事实上,...

    量化投资与机器学习微信公众号
  • 精炼鉴黄师背后的故事

    用AI来鉴别黄色图片,已经不是什么新鲜的事情。然而能够训练出一个可用的图像识别模型,其中所需要的细节知识还是值得学习的。

    代码医生工作室
  • 互联网运营增长的十个经典模型(2019年版)

    报名中:数据化营销与运营大课堂【2019年5月25日、26日上海,宋星大课堂】,点击查看详情。

    iCDO互联网数据官
  • 如何使用Keras集成多个卷积网络并实现共同预测

    在统计学和机器学习领域,集成方法(ensemble method)使用多种学习算法以获得更好的预测性能(相比单独使用其中任何一种算法)。和统计力学中的统计集成(...

    企鹅号小编

扫码关注云+社区

领取腾讯云代金券