bert4keras加载BERT模型并获取文本字向量、句向量CLS

该博客介绍了如何使用bert4keras库加载预训练的BERT模型,进行文本编码、预测,并展示了如何保存和加载模型。同时,讨论了直接使用CLS向量和词向量平均获取句向量的优缺点,指出可能需要领域适应和考虑语序信息。
摘要由CSDN通过智能技术生成

bert4keras加载BERT模型并获取文本字向量、句向量CLS

环境依赖

tensorflow2.3+
bert4keras

开源BERT模型下载

BERT模型https://github.com/ymcui/Chinese-BERT-wwm ,BERT-wwm-ext, Chinese TF版
模型解压后文件目录如下:
bert_config.json:保存的是BERT模型的一些主要参数设置
bert_model.ckpt.xxxx:这里有多个文件,但导入模型只需要bert_model.ckpt这个前缀就可以了
vocab.txt:用来预训练时的词典

BERT模型导入

# 设置TF_KERAS = 1,表示使用tf.keras
import os
os.environ["TF_KERAS"] = '1'

import numpy as np
from tensorflow.keras.models import load_model
from bert4keras.models import build_transformer_model
from bert4keras.tokenizers import Tokenizer
from bert4keras.snippets import to_array

# 模型保存路径
checkpoint_path = r"XXX\chinese_roberta_wwm_ext_L-12_H-768_A-12\bert_model.ckpt"
dict_path = r"XXX\chinese_roberta_wwm_ext_L-12_H-768_A-12\vocab.txt"
config_path = r"XXX\chinese_roberta_wwm_ext_L-12_H-768_A-12\bert_config.json"

# 加载预训练模型
bert = build_transformer_model(
    config_path=config_path,
    checkpoint_path=checkpoint_path,
    model='bert',
)

BERT模型预测

tokenizer = Tokenizer(dict_path, do_lower_case=True)  # 建立分词器

# 编码测试
token_ids, segment_ids = tokenizer.encode(u'语言模型')
token_ids, segment_ids = to_array([token_ids], [segment_ids])

# 模型预测
print('\n ===== predicting =====\n')
print(bert.predict([token_ids, segment_ids]))

# 模型保存与加载
print('\n ===== reloading and predicting =====\n')
bert.save('test.model')

del bert
bert = load_model('test.model')
print(bert.predict([token_ids, segment_ids]))

字向量、句向量获取

tokenizer分词器对每句文本进行转换,获取文本的映射 ids 列表,其中首位CLS为句向量,末尾SEP为间隔符。
在这里插入图片描述
使用以下方式获得CLS句向量:其中文本长度为10,返回长度为12的矩阵,即包含首尾CLS、SEP向量
在这里插入图片描述

个人思考

  • 该开源BERT模型是在通用语料库上训练的,因此不具有领域偏向性。
  • 直接使用CLS向量进行文本相似度计算时,效果并不好,需在领域语料库上fine-tune
  • 如果直接使用句中词向量平均来得到句向量,该句向量就失去了语序特点,如 “张三请李四吃饭。” 和 “李四请张三吃饭。”具有高度相似性,如下图。但这种方式可用于寻找使用相同含义词汇的句子(无需考虑语序)。
    在这里插入图片描述

参考博客:bert4keras、transformers 加载预训练bert模型、句向量cls,字向量提取

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值