环境要求:python版本>=3.5,tensorflow版本>=1.10
相关包的安装:
pip install bert-serving-server
pip install bert-serving-client
PS:笔者运行环境为win10。
在储存了预训练模型的目录启动bert-server。
由于是用来玩儿的,num_worker即进程数设为1。
C:\Users\piont\Documents\chinese_L-12_H-768_A-12> bert-serving-start -model_dir ./ -num_worker=1
from bert_serving.client import BertClient
bc = BertClient()
import numpy as np
def cosine_similarity(x, y, norm=False):
""" 计算两个向量x和y的余弦相似度 """
assert len(x) == len(y), "len(x) != len(y)"
zero_list = [0] * len(x)
if x == zero_list or y == zero_list:
return float(1) if x == y else float(0)
res = np.array([[x[i] * y[i], x[i] * x[i], y[i] * y[i]] for i in range(len(x))])
cos = sum(res[:, 0]) / (np.sqrt(sum(res[:, 1])) * np.sqrt(sum(res[:, 2])))
return 0.5 * cos + 0.5 if norm else cos # 归一化到[0, 1]区间内
a = bc.encode(['苹果','手机'])
cosine_similarity(list(a[0]),list(a[1]))
0.8230252538548513
a = bc.encode(['苹果','香蕉'])
cosine_similarity(list(a[0]),list(a[1]))
0.8124543082909037
a = bc.encode(['苹果','小米'])
cosine_similarity(list(a[0]),list(a[1]))
0.7989636380636165
a = bc.encode(['苹果','iPhone'])
cosine_similarity(list(a[0]),list(a[1]))
0.7937350611594554
a = bc.encode(['苹果','地震'])
cosine_similarity(list(a[0]),list(a[1]))
0.7509395711745872
a = bc.encode(['苹果','乔布斯'])
cosine_similarity(list(a[0]),list(a[1]))
0.8044330854027851
a = bc.encode(['苹果手机','小米手机'])
cosine_similarity(list(a[0]),list(a[1]))
0.914318037031853
a = bc.encode(['苹果发布新版','小米发布新版'])
cosine_similarity(list(a[0]),list(a[1]))
0.9425026228456902
a = bc.encode(['苹果公司','小米公司'])
cosine_similarity(list(a[0]),list(a[1]))
0.9127330498453399
a = bc.encode(['小米','雷军'])
cosine_similarity(list(a[0]),list(a[1]))
0.8804879619910109
a = bc.encode(['中国石化','宫保鸡丁'])
cosine_similarity(list(a[0]),list(a[1]))
0.7322778681441396
a = bc.encode(['苹果公司','财报'])
cosine_similarity(list(a[0]),list(a[1]))
0.8112871381526608
a = bc.encode(['苹果公司发布第三季度财报','我今天想吃生煎'])
cosine_similarity(list(a[0]),list(a[1]))
0.7449127843027605