[探索]Google Bert 安装及余弦相似度测试

1. 环境及文件准备

  1. 环境要求:python版本>=3.5,tensorflow版本>=1.10

  2. 相关包的安装:

pip install bert-serving-server
pip install bert-serving-client
  1. 预先训练好的中文模型:
    https://storage.googleapis.com/bert_models/2018_11_03/chinese_L-12_H-768_A-12.zip
    或者百度网盘:
    链接:https://pan.baidu.com/s/1NpjRKhbN8MPU_LcYSdG7Qg
    提取码:39au

PS:笔者运行环境为win10。

2. server初始化

在储存了预训练模型的目录启动bert-server。

由于是用来玩儿的,num_worker即进程数设为1。

C:\Users\piont\Documents\chinese_L-12_H-768_A-12> bert-serving-start -model_dir ./ -num_worker=1

3. Client 准备及余弦相似度测试

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

参考文献

  1. 使用BERT获取中文词向量
  2. 余弦相似度及基于python的三种代码实现、与欧氏距离的区别

你可能感兴趣的:(探索,Bert)