BERT预训练模型简单应用(中文句子向量相关性分析)

目录

一、BERT简单认识

二、Google BERT以及中文模型下载

1、Google BERT源码下载

2、bert-as-server 框架下载

3、中文预训练模型下载

三、bert生成中文句子向量

1、启动BERT服务

2、中文句子向量编码

四、cosine相似度计算

五、完整实验代码


一、BERT简单认识

Google BERT预训练模型在深度学习、NLP领域的应用已经十分广泛了,在文本分类任务达到很好的效果。相比传统的词嵌入word2vec、golve,使用bert预训练得到的效果有更好地提升。

这篇不会很深入复杂地分析bert的原理以及高级应用,而是从零开始,定位于初学者对BERT的简单认识和应用,使用bert框架 bert-as-server(CS架构)。

二、Google BERT以及中文模型下载

1、Google BERT源码下载

Google BERT的完整源码下载地址:https://github.com/google-research/bert

官方给出BERT的解释:

BERT是一种预先训练语言表示的方法,这意味着我们在一个大型文本语料库(如Wikipedia)上训练一个通用的“语言理解”模型,然后将该模型用于我们关心的下游NLP任务(如回答问题)。BERT优于以前的方法,因为它是第一个无监督的,深度双向的预训练自然语言处理系统。

源码的应用在以后学习过程可以进一步研究,现在入门阶段可以使用框架更加简单。

2、bert-as-server 框架下载

pip install bert-serving-server   #server
pip install bert-serving-client   #client

3、中文预训练模型下载

google下载地址:https://storage.googleapis.com/bert_models/2018_11_03/chinese_L-12_H-768_A-12.zip

哈工大下载地址:https://pan.iflytek.com/link/A2483AD206EF85FD91569B498A3C3879 (密码07Xj

解压之后文件目录如下,包括bert配置文件、预训练模型和词汇表。

三、bert生成中文句子向量

1、启动BERT服务

bert-serving-start -model_dir D:\PyCharm_Project\bert-use-demo-master\chinese_bert_chinese_wwm_L-12_H-768_A-12 -max_batch_size 10 -max_seq_len 20 -num_worker 1

 文件目录为上一步解压的中文预训练模型,参数可以自行设置。

启动成功效果:

2、中文句子向量编码

from bert_serving.client import BertClient
import numpy as np



def main():
    bc = BertClient()
    doc_vecs = bc.encode(['今天天空很蓝,阳光明媚', '今天天气好晴朗', '现在天气如何', '自然语言处理', '机器学习任务'])

    print(doc_vecs)


if __name__ == '__main__':
    main()

得到每个句子的向量表示为:

[[ 0.9737132  -0.0289975   0.23281255 ...  0.21432212 -0.1451838
  -0.26555032]
 [ 0.57072604 -0.2532929   0.13397914 ...  0.12190636  0.35531974
  -0.2660934 ]
 [ 0.33702925 -0.27623484  0.33704653 ... -0.14090805  0.48694345
   0.13270345]
 [ 0.00974528 -0.04629223  0.48822984 ... -0.24558026  0.09809375
  -0.08697749]
 [ 0.29680184  0.13963464  0.30706868 ...  0.05395972 -0.4393276
   0.17769393]] 

四、cosine相似度计算

def cos_similar(sen_a_vec, sen_b_vec):
    '''
    计算两个句子的余弦相似度
    '''
    vector_a = np.mat(sen_a_vec)
    vector_b = np.mat(sen_b_vec)
    num = float(vector_a * vector_b.T)
    denom = np.linalg.norm(vector_a) * np.linalg.norm(vector_b)
    cos = num / denom
    return cos

实验结果:

句子:

'今天天空很蓝,阳光明媚', '今天天气好晴朗'

相似度:0.9508827722696014

句子:

'自然语言处理', '机器学习任务'

相似度:0.9187518514435784

句子:

'今天天空很蓝,阳光明媚', '机器学习任务'

相似度:0.7653104788070156

五、完整实验代码

from bert_serving.client import BertClient
import numpy as np


def cos_similar(sen_a_vec, sen_b_vec):
    '''
    计算两个句子的余弦相似度
    '''
    vector_a = np.mat(sen_a_vec)
    vector_b = np.mat(sen_b_vec)
    num = float(vector_a * vector_b.T)
    denom = np.linalg.norm(vector_a) * np.linalg.norm(vector_b)
    cos = num / denom
    return cos


def main():
    bc = BertClient()
    doc_vecs = bc.encode(['今天天空很蓝,阳光明媚', '今天天气好晴朗', '现在天气如何', '自然语言处理', '机器学习任务'])

    print(doc_vecs)
    similarity=cos_similar(doc_vecs[0],doc_vecs[4])
    print(similarity)


if __name__ == '__main__':
    main()

 

这篇简单介绍了BERT的基本应用,使用bert框架对中文句子进行编码,生成句子向量,同时可以进行句子语义的相关性分析。

Google BERT预训练模型在深度学习、NLP领域的应用已经十分广泛了,在文本分类任务达到很好的效果。相比传统的词嵌入word2vec、golve,使用bert预训练得到的效果有更好地提升。

可以看到BERT的基础使用相对简单,这篇没有很深入复杂地分析bert的原理以及高级应用,而是从零开始,定位于初学者对BERT的简单认识和应用,使用bert框架 bert-as-server(CS架构),也算是为之后深入的学习研究做了一点基础功课。

如果觉得不错欢迎“一键三连”哦,点赞收藏关注,有问题直接评论,交流学习!

我的CSDN博客:https://blog.csdn.net/Charzous/article/details/113824876

  • 52
    点赞
  • 76
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 16
    评论
BERT(Bidirectional Encoder Representations from Transformers)是一种预训练模型,可以用于文本特征提取。BERT模型通过在大规模文本数据上进行无监督的预训练来学习通用的文本表示,在此基础上可以进行各种下游任务的微调或特征提取。 要使用BERT模型抽取文本特征,首先需要将输入的文本转换为BERT所需的格式。对于英文文本,可以使用WordPiece标记化方法将文本拆分为词片段,并添加特殊的标记(如[CLS]和[SEP])来表示句子的开始和结束。对于中文文本,可以使用字级别的标记化方法。 然后,将标记化后的文本输入到BERT模型中,获取模型的隐藏状态。BERT模型通常有多层Transformer编码器,每层都会输出相应的隐藏状态。可以选择使用最后一层的隐藏状态,或者将多个层的隐藏状态进行融合,得到最终的文本特征表示。 一种常用的方法是将最后一层的隐藏状态与特定位置的标记(如[CLS])进行连接,得到表示整个句子的特征向量。这个特征向量可以用作文本分类、句子相似度计算等下游任务的输入。 除了最后一层的隐藏状态,BERT模型还可以提供其他层的隐藏状态,这些隐藏状态可以更细粒度地表示文本的各个方面。可以根据具体的任务需求选择相应的隐藏状态进行特征提取。 需要注意的是,由于BERT模型参数较多,对大规模文本数据进行完整的特征提取可能会比较耗时。为了提高效率,可以使用批量化技术对多个文本样本进行并行处理,或者使用模型压缩等方法减少模型的大小和计算量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陆海潘江小C

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值