赞
踩
目录
Google BERT预训练模型在深度学习、NLP领域的应用已经十分广泛了,在文本分类任务达到很好的效果。相比传统的词嵌入word2vec、golve,使用bert预训练得到的效果有更好地提升。
这篇不会很深入复杂地分析bert的原理以及高级应用,而是从零开始,定位于初学者对BERT的简单认识和应用,使用bert框架 bert-as-server(CS架构)。
Google BERT的完整源码下载地址:https://github.com/google-research/bert
官方给出BERT的解释:
BERT是一种预先训练语言表示的方法,这意味着我们在一个大型文本语料库(如Wikipedia)上训练一个通用的“语言理解”模型,然后将该模型用于我们关心的下游NLP任务(如回答问题)。BERT优于以前的方法,因为它是第一个无监督的,深度双向的预训练自然语言处理系统。
源码的应用在以后学习过程可以进一步研究,现在入门阶段可以使用框架更加简单。
- pip install bert-serving-server #server
- pip install bert-serving-client #client
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-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
文件目录为上一步解压的中文预训练模型,参数可以自行设置。
启动成功效果:
- 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]]
- 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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。