程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

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

发布于2019-08-20 12:47     阅读(2267)     评论(1)     点赞(26)     收藏(0)


1. 环境及文件准备

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

  2. 相关包的安装:

pip install bert-serving-server
pip install bert-serving-client
  • 1
  • 2
  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
  • 1

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

from bert_serving.client import BertClient
  • 1
bc = BertClient()
  • 1
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]区间内
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
a = bc.encode(['苹果','手机'])
cosine_similarity(list(a[0]),list(a[1]))
  • 1
  • 2
0.8230252538548513
  • 1
a = bc.encode(['苹果','香蕉'])
cosine_similarity(list(a[0]),list(a[1]))
  • 1
  • 2
0.8124543082909037
  • 1
a = bc.encode(['苹果','小米'])
cosine_similarity(list(a[0]),list(a[1]))
  • 1
  • 2
0.7989636380636165
  • 1
a = bc.encode(['苹果','iPhone'])
cosine_similarity(list(a[0]),list(a[1]))
  • 1
  • 2
0.7937350611594554
  • 1
a = bc.encode(['苹果','地震'])
cosine_similarity(list(a[0]),list(a[1]))
  • 1
  • 2
0.7509395711745872
  • 1
a = bc.encode(['苹果','乔布斯'])
cosine_similarity(list(a[0]),list(a[1]))
  • 1
  • 2
0.8044330854027851
  • 1
a = bc.encode(['苹果手机','小米手机'])
cosine_similarity(list(a[0]),list(a[1]))
  • 1
  • 2
0.914318037031853
  • 1
a = bc.encode(['苹果发布新版','小米发布新版'])
cosine_similarity(list(a[0]),list(a[1]))
  • 1
  • 2
0.9425026228456902
  • 1
a = bc.encode(['苹果公司','小米公司'])
cosine_similarity(list(a[0]),list(a[1]))
  • 1
  • 2
0.9127330498453399
  • 1
a = bc.encode(['小米','雷军'])
cosine_similarity(list(a[0]),list(a[1]))
  • 1
  • 2
0.8804879619910109
  • 1
a = bc.encode(['中国石化','宫保鸡丁'])
cosine_similarity(list(a[0]),list(a[1]))
  • 1
  • 2
0.7322778681441396
  • 1
a = bc.encode(['苹果公司','财报'])
cosine_similarity(list(a[0]),list(a[1]))
  • 1
  • 2
0.8112871381526608
  • 1
a = bc.encode(['苹果公司发布第三季度财报','我今天想吃生煎'])
cosine_similarity(list(a[0]),list(a[1]))
  • 1
  • 2
0.7449127843027605
  • 1

参考文献

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


所属网站分类: 技术文章 > 博客

作者:83whjh

链接:https://www.pythonheidong.com/blog/article/49299/da3586e65f40735286c6/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

26 0
收藏该文
已收藏
  • #1楼    2021-04-20 10:38:34    whatluffy 回复

    请问有没有英文模型

评论内容:(最多支持255个字符)