1. ERNIE简介
这里的ERNIE(包括后面介绍的都是指的ERNIE1.0)是指百度提出的知识增强的语义表示模型 ERNIE(Enhanced Representation from kNowledge IntEgration),而且发布了基于 PaddlePaddle 的开源代码与模型 。
ERNIE在结构上和BERT是一样的,只是改进了BERT的预训练阶段,增加了实体等先验知识,而且在大型中文语料(百度贴吧等)上进行了训练,因此对于中文任务来说比BERT要好。
关于ERNIE的介绍可以看机器之心的这篇博客,这里不再赘述。
2. 如何做相似度计算
ERNIE和BERT一样都提供了句对分类任务,输入为一对句子,输出为这对句子的类别。
2.1 输入输出
如果要做相似度计算,我们需要的输入输出应该有一些不同
-
输入
输入为一对句子。 -
输出
输出应该为这对句子的相似度得分。
2.2 改造思路
这里只说一下改造思路,具体可参考代码
-
改造输入
对于输入而言,源码提供的方式是从文件流中读取,这个费一点功夫可以改造为从参数中读取。 -
改造输出
做过分类任务的都了解,最终是通过softmax计算各个类别的概率,然后取概率最大的值所在的类别作为输出。
对于二分类任务而言,类别只有2个,假设为相似/不相似,即1/0,那么取类别为1的概率/置信度作为输出即可模拟相似度。 -
提供服务
如果需要作为服务提供,那么只需利用web框架,封装模型调用函数,并让其接受HTTP请求即可了。
p.s.百度官方提供了paddle serving用于部署模型(不需要人工改造),有兴趣的可以尝试一下
3. Demo
启动服务后,可以发起HTTP请求测试,下图为用postman的测试结果。
这里的输入和返回分别为:
# 输入为2个列表/数组,用来表示n个句子对
text_list1=[你好啊世界,你好啊世界]
text_list2=[再见了朋友,哈喽]
# 返回为2个列表/数组对应位置的1对句子的相似度得分
scores=[0.5018,0.5674]