wobert用法记录

# 安装需要的包
# pip install git+https://github.com/JunnYu/WoBERT_pytorch.git
# pip install jieba


import jieba
str1 = "国家食药监管总局近日发布《食品召回管理办法》,明确:食用后已经或可能导致严重健康损害甚至死亡的,属一级召回,食品生产者应在知悉食品安全风险后24小时内启动召回,且自公告发布之日起10个工作日内完成召回。"
seg_list = jieba.cut(str1, cut_all=False)
print(*seg_list)



import torch
from transformers import BertForMaskedLM as WoBertForMaskedLM
from wobert import WoBertTokenizer

pretrained_model_or_path_list = [
    "junnyu/wobert_chinese_plus_base", "junnyu/wobert_chinese_base"
]
for path in pretrained_model_or_path_list:
    text = "国家食药监管总局近日发布《食品召回管理办法》,明确:食用后已经或可能导致严重健康损害甚至死亡的,属一级召回,食品生产者应在知悉食品安全风险后24小时内启动召回,且自公告发布之日起10个工作日内完成召回。"
    tokenizer = WoBertTokenizer.from_pretrained(path)
    model = WoBertForMaskedLM.from_pretrained(path)
    inputs = tokenizer.tokenize(text, return_tensors="pt")
    print(inputs)
    outputs_sentence =tokenizer.convert_tokens_to_ids(inputs)
    print(outputs_sentence)
    outputs =tokenizer.convert_ids_to_tokens(outputs_sentence, skip_special_tokens=True)
    print(outputs)



import jieba
str1 = "国家食药监管总局近日发布《食品召回管理办法》,明确:食用后已经或可能导致严重健康损害甚至死亡的,属一级召回,食品生产者应在知悉食品安全风险后24小时内启动召回,且自公告发布之日起10个工作日内完成召回。"
seg_list = list(jieba.cut(str1, cut_all=False))
print(seg_list)

with open(r'/kaggle/input/stopwords/hit_stopwords.txt','r') as fr:
    stopwords_list = fr.read().split()
token_list = []
for i in seg_list:
    if i in stopwords_list:
        continue
    token_list.append(i)
print(token_list)


import torch
from transformers import BertForMaskedLM as WoBertForMaskedLM
from wobert import WoBertTokenizer

pretrained_model_or_path_list = [
    "junnyu/wobert_chinese_plus_base", "junnyu/wobert_chinese_base"
]
for path in pretrained_model_or_path_list:
    text = "国家食药监管总局近日发布《食品召回管理办法》,明确:食用后已经或可能导致严重健康损害甚至死亡的,属一级召回,食品生产者应在知悉食品安全风险后24小时内启动召回,且自公告发布之日起10个工作日内完成召回。"
    tokenizer = WoBertTokenizer.from_pretrained(path)
    model = WoBertForMaskedLM.from_pretrained(path)
    inputs = tokenizer(text, return_tensors="pt")
    with torch.no_grad():
        outputs = model(**inputs).logits[0]
    outputs_sentence = ""
    for i, id in enumerate(tokenizer.encode(text)):
        if id == tokenizer.mask_token_id:
            tokens = tokenizer.convert_ids_to_tokens(outputs[i].topk(k=5)[1])
            outputs_sentence += "[" + "||".join(tokens) + "]"
        else:
            outputs_sentence += "".join(
                tokenizer.convert_ids_to_tokens([id],
                                                skip_special_tokens=True))
    print(outputs_sentence)
# RoFormer    今天[天气||天||心情||阳光||空气]很好,我[想||要||打算||准备||喜欢]去公园玩。
# PLUS WoBERT 今天[天气||阳光||天||心情||空气]很好,我[想||要||打算||准备||就]去公园玩。
# WoBERT      今天[天气||阳光||天||心情||空气]很好,我[想||要||就||准备||也]去公园玩。

### WoBERT微调教程及相关参数设置 WoBERT 是一种基于 BERT 的中文预训练模型,适用于多种自然语言处理任务。以下是关于如何对 WoBERT 进行微调的具体方法以及参数设置的指导。 #### 1. 环境准备 为了成功运行 WoBERT 并对其进行微调,需先安装必要的依赖库并配置环境。推荐使用 TensorFlow 1.x 版本作为框架支持[^1]。可以通过以下命令安装所需的基础包: ```bash pip install tensorflow==1.14 bert-for-tf2 wobert ``` #### 2. 数据集准备 在进行微调之前,数据应被整理成适合输入到模型中的格式。通常情况下,这涉及将原始文本转换为 token ID 序列,并生成对应的 attention mask 和 segment IDs。可以利用 `bert-for-tf2` 提供的数据处理器完成此操作。 #### 3. 构建模型结构 构建一个包含 WoBERT 预训练权重的新模型用于特定任务(如分类或回归)。下面是一个简单的例子展示如何加载预训练好的 WoBERT 权重文件并将其嵌入到新的架构中: ```python import tensorflow as tf from transformers import TFWoBertModel, BertTokenizer tokenizer = BertTokenizer.from_pretrained('wobert-base-chinese') model = TFWoBertModel.from_pretrained('wobert-base-chinese') input_ids = tokenizer.encode("你好世界", add_special_tokens=True) inputs = {"input_ids": tf.constant([input_ids])} outputs = model(inputs) last_hidden_states = outputs.last_hidden_state print(last_hidden_states.shape) # 输出形状 (batch_size, sequence_length, hidden_size) ``` 上述代码片段展示了如何通过 Hugging Face Transformers 加载 WoBERT 模型及其分词器。 #### 4. 定义优化目标与损失函数 对于不同的下游任务,可能需要调整最终层的设计来适配具体的预测需求。例如,在二元情感分析场景下,可以在最后一层加入全连接网络配合 softmax 函数计算类别概率;而在序列标注任务里,则可采用 CRF 层实现标签路径解码。 假设我们正在执行的是多类别的文本分类问题,那么可以这样设计输出部分: ```python output_layer = Dense(num_labels, activation='softmax')(last_hidden_states[:,0,:]) custom_model = Model(model.input, output_layer) loss_fn = tf.keras.losses.SparseCategoricalCrossentropy() optimizer = tf.keras.optimizers.Adam(learning_rate=5e-5) custom_model.compile(optimizer=optimizer, loss=loss_fn, metrics=['accuracy']) ``` 这里设置了 Adam 优化算法的学习率为 \(5 \times 10^{-5}\),这是许多 NLP 实验中常用的初始学习率之一。 #### 5. 训练过程管理 由于 TensorFlow 1.x 默认静态图模式工作流较为复杂,因此建议借助内置 Trainer 或者手动编写 fit 方法控制整个迭代流程。如果选择后者的话,记得保存每轮结束后的最佳性能版本以便后续部署应用。 另外需要注意的是,在实际项目开发过程中,还应该考虑引入早停机制防止过拟合现象发生的同时节省算力资源消耗。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值