bert的使用

1.预测词
很容易实现,预测定理性的词语效果比较好,预测句子中间的词语效果比较好。
当预测其他领域的语句和句子末尾的词的时候,效果比较差。
实现如下:

import sys
import codecs
import numpy as np
from keras_bert import load_trained_model_from_checkpoint, Tokenizer

config_path, checkpoint_path, dict_path ='/home/h/models/chinese_L-12_H-768_A-12/bert_config.json',\
'/home/h/models/chinese_L-12_H-768_A-12/bert_model.ckpt','/home/h/models/chinese_L-12_H-768_A-12/vocab.txt'

model = load_trained_model_from_checkpoint(config_path, checkpoint_path, training=True)

token_dict = {}
with codecs.open(dict_path, 'r', 'utf8') as reader:
    for line in reader:
        token = line.strip()
        token_dict[token] = len(token_dict)
token_dict_inv = {v: k for k, v in token_dict.items()}

tokenizer = Tokenizer(token_dict)

text = '怎么添加农历初一、十五的提醒'
test_str="提醒"
pos = text.index(test_str)
index=[_+pos+1 for _ in range(len(test_str))]
print("index:",index)

tokens = tokenizer.tokenize(text)
for s in index:
    tokens[s]='[MASK]'



indices = np.array([[token_dict[token] for token in tokens] + [0] * (512 - len(tokens))])
segments = np.array([[0] * len(tokens) + [0] * (512 - len(tokens))])
masks = np.array([[0]*index[0]+[1, 1] + [0] * (512 - index[0]-2)])

predicts = model.predict([indices, segments, masks])[0].argmax(axis=-1).tolist()
print('Fill with: ', list(map(lambda x: token_dict_inv[x], predicts[0][index[0]:index[0]+len(test_str)])))

第二段中,不断修改第一二行,就可以实现各种预测和对应结果。

  1. 预测下一个句子
    词语预测的都是不是特别好,预测句子更不靠谱。
    我不太明白为什么示例句子中都是先给好了要预测的句子,如果把这种信息传进去还谈什么预测呢。

3.生成句向量,供下游任务使用
我在判断句子相似度上使用bert生成的句向量,然后用余弦相似度计算相似性,替换每个词为近义词的句子,相似度为96%,无关的句子也有90%、91%。不知道是不是我的衡量方式不好,还是应该之选取最大的就可以了。
再试试其他衡量形似度的方法。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前面的文章主要从理论的角度介绍了自然语言人机对话系统所可能涉及到的多个领域的经典模型和基础知识。这篇文章,甚至之后...
    我偏笑_NSNirvana阅读 14,106评论 2 64
  • 本文上两篇系列 NLP的巨人肩膀(上) NLP的巨人肩膀(中) 4.6 Bidirectional Encoder...
    weizier阅读 6,566评论 1 22
  • 本文另两篇系列 NLP的巨人肩膀(上) NLP的巨人肩膀(下) 3. 梯子的一级半 除了在word级别的embed...
    weizier阅读 6,691评论 0 18
  • BERT发展史(三)全方位多角度理解Word2Vec 建议先阅读之前两篇文章: BERT发展史(一)从词嵌入讲起 ...
    LITD阅读 3,495评论 0 13
  • 越是碎片化时代,越是要进行系统化学习,现在临近E战特训营尾声,每天都不舍,觉得有很多很多的知识还没有掌握,还有很多...
    小小yoyo姐阅读 507评论 0 0