One - One Code All

Blog Content

利用bert-serving-server搭建bert词向量服务

自然语言处理 机器学习 Python   2019-01-19 11:47:18

Bert是去年谷歌发布的一款新模型,在11个主流NLP任务中都取得优异的结果,因此成为NLP领域最吸引人的一个模型。它的核心思想在于:作者认为语言表示存在一个通用模型,而具体到专业领域,可以对通用模型进行精炼(fine-tune)来实现更加好的效果。从技术角度而言,它采用了transformer等技术搭建了一个更深的深度网络。受限于作者能力,模型细节不能详细解释,大家可以参看官方介绍或51NLP Bert资料汇总.(https://www.52nlp.cn/tag/bert)


client调用server进行embedding

  在调用服务时,只需要引用BertClient模块,然后构造一个连接,既可进行embedding,下面是一个实例,得到的词向量为768维。如下示例:

# -*- coding:utf-8 -*-
from bert_serving.client import BertClient
from sklearn.metrics.pairwise import cosine_similarity


class Encoding(object):
    def __init__(self):
        self.server_ip = "127.0.0.1"
        self.bert_client = BertClient(ip=self.server_ip)

    def encode(self, query):
        tensor = self.bert_client.encode([query])
        return tensor

    def query_similarity(self, query_list):
        tensors = self.bert_client.encode(query_list)
        return cosine_similarity(tensors)[0][1]


if __name__ == "__main__":
    ec = Encoding()
    print(ec.encode("中国").shape)
    print(ec.encode("美国").shape)
    print("中国和美国的向量相似度:", ec.query_similarity(["中国", "美国"]))
    print("中国和地球的向量相似度:", ec.query_similarity(["中国", "地球"]))
    print("美国和地球的向量相似度:", ec.query_similarity(["美国", "地球"]))


上述代码的返回结果如下,最后两个相似度示例可以看出,由于中国和美国都是国家,所以他们的相似度要高于中国或美国和地球的相似度。


(1, 768)

(1, 768)

中国和美国的向量相似度: 0.9300134

中国和地球的向量相似度: 0.8481554

美国和地球的向量相似度: 0.837299


参考资料:

bert-as-service: https://bert-as-service.readthedocs.io/en/latest/source/client.html


上一篇:GitHub项目:自然语言处理领域的相关干货整理
下一篇:RASA安装,python3.7

The minute you think of giving up, think of the reason why you held on so long.