1. BERT 语义相似度
BERT的全称是Bidirectional Encoder Representation from Transformers,是Google2018年提出的预训练模型,即双向Transformer的Encoder,因为decoder是不能获要预测的信息的。模型的主要创新点都在pre-train方法上,即用了Masked LM和Next Sentence Prediction两种方法分别捕捉词语和句子级别的representation。
有一个这样的场景,QA对话系统,希望能够在问答库中找到与用户问题相似的句子对,然后把答案返回给用户。这篇就是要解决这个问题的。
关于 BERT 的原理知识请访问: http://mantchs.com/2019/09/28/NLP/BERT/
下面介绍一个封装好的 BERT 工具,利用该工具能够快速的得到词向量表示。该工具的名称叫做: bert-as-service,从名称就可以看出作者是把 BERT 作为一种服务了,只要调用该服务就能够得到我们想要的向量表示,得到向量以后,就可以通过余弦相似度的计算公式计算向量之间的相似度。
bert-as-service 源码详见: https://github.com/hanxiao/bert-as-service
bert-as-service 使用文档: https://bert-as-service.readthedocs.io/en/latest/index.html
步骤如下:
- 安装 bert-as-service 的服务端和客户端。
- 预训练 BERT 模型。
- 客户端编写代码请求服务端得到句向量。
- 句子与句子向量之间计算相似度,并返回 top_k 个结果。
2. 安装 bert-as-service
-
环境要求:
Python版本 >= 3.5,Tensorflow版本 >= 1.10
(本人环境,Python = 3.7 Tensorflow = 1.13.1)
-
安装服务端和客户端
pip install -U bert-serving-server bert-serving-client
3. 启动 BERT 服务
-
下载预训练模型
Google AI发布的经过预训练的BERT模型。这里我们下载 BERT-Base, Chinese,12-layer, 768-hidden, 12-heads, 110M parameters。
链接:
https://pan.baidu.com/s/1jJudiTj__vbFb0WkEQUxWw
密码:mf4p
-
启动服务
解压缩后,运行如下命令进行启动,目录换成解压后的路径。(-num_worker指定使用多少个CPU)
bert-serving-start -model_dir /Users/mantch/Downloads/chinese_L-12_H-768_A-12 -num_worker=4
运行后会看到如下结果:
http_max_connect = 10 http_port = None mask_cls_sep = False max_batch_size = 256 max_seq_len = 25 model_dir