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