Bert的简单使用

本文介绍了一个简单的BERT模型使用案例,展示了如何将文本输入转化为向量表示,并将输出的矩阵保存到文件中。通过实例,文章详细说明了BERT模型的输入准备、调用及输出处理过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简单使用了一下Bert,并输出对应的矩阵到文件中。

import torch
from transformers import BertConfig, BertModel, BertTokenizer

def bert_output(texts, name):#texts包含三句话
    tokens, segments, input_masks =[], [], []
    for text in texts:
        tokenized_text = tokenizer.tokenize(text)
        indexed_tokens = tokenizer.convert_tokens_to_ids(tokenized_text)
        tokens.append(indexed_tokens)
        segments.append( [0]*len(indexed_tokens) )
        input_masks.append( [1]*len(indexed_tokens) )

    max_len = max([len(single) for single in tokens])  # 最大的句子长度

    for j in range(len(tokens)):
        padding = [0] * (max_len - len(tokens[j]))
        padding_other = [1] * (max_len - len(tokens[j]))
        tokens[j] += padding
        segments[j] += padding
        input_masks[j] += padding_other

    # device = torch.cuda.current_device()

    tokens_tensor = torch.tensor(tokens)
    segments_tensors = torch.tensor(segments)
    input_masks_tensors = torch.tensor(input_masks)

    # output = model(tokens_tensor)
    output = model(tokens_tensor, segments_tensors, input_masks_tensors)
    sequence_output = output[0]
    pooled_output = output[1] # CLS
    torch.set_printoptions(edgeitems=768)#矩阵全部显示,不隐藏

    with open(name, 'a', encoding='utf-8') as f:
        # f.write("sequence_output:")
        # f.write(str(sequence_output))
        # f.write('\n')
        f.write("pooled_output:")
        f.write(str(pooled_output))
    # return pooled_output,sequence_output#输出CLS、与其他向量

if __name__ == '__main__':
    tokenizer = BertTokenizer.from_pretrained('./bert-base-uncased')
    model_config = BertConfig.from_pretrained('./bert-base-uncased')#model_config.hidden_size=768
    model = BertModel.from_pretrained('./bert-base-uncased',config=model_config)


    texts_atis =  ["[CLS] i want to fly from baltimore to dallas round trip [SEP]",
                   "[CLS] show me the flights arriving baltimore on june fourteenth [SEP]",
                   "[CLS] which airlines fly from boston to washington via other cities [SEP]"]
    texts_snips = ["[CLS] what the weather in my current spot the [SEP]",
                   "[CLS] what the weather like in the city frewen [SEP]",
                   "[CLS] what the weather supposed to be like today [SEP]"]
    # texts_snips = ["[CLS] what the weather supposed to be like today [SEP]"]

    atis = 'atis.txt'
    snips = 'snips.txt'

    bert_output(texts_snips, snips)
    #bert输出向量CLS+others
    #atis_out_CLS,atis_out_others = bert_output(texts_atis, atis)#CLS二维矩阵,other三维矩阵
   


### 如何使用 BERT 模型进行自然语言处理 BERT 是一种基于 Transformer 的预训练语言模型,广泛应用于各种自然语言处理任务。以下是关于如何使用 BERT 模型的具体方法以及其工作流程。 #### 使用 BERT 模型的工作流 使用 BERT 模型通常分为两个主要阶段:**预训练** 和 **微调**[^5]。 - 预训练阶段涉及在大量无标签数据集上训练模型以获取通用的语言表示。 - 微调阶段则是在特定的下游任务(如分类、命名实体识别等)中标记数据的基础上进一步调整模型参数。 #### 实现代码示例 下面是一个简单的 Python 示例,展示如何加载并使用 Hugging Face 提供的 `transformers` 库中的 BERT 模型来进行情感分析: ```python from transformers import BertTokenizer, BertForSequenceClassification import torch # 加载预训练的 BERT tokenizer 和 model tokenizer = BertTokenizer.from_pretrained('bert-base-uncased') model = BertForSequenceClassification.from_pretrained('bert-base-uncased') # 输入文本 text = "I love using the Transformers library!" # 将输入文本转换为 token IDs inputs = tokenizer(text, return_tensors="pt", padding=True, truncation=True) # 获取模型输出 with torch.no_grad(): outputs = model(**inputs) # 输出 logits 并解析结果 logits = outputs.logits predicted_class_id = logits.argmax().item() print(f"Predicted class ID: {predicted_class_id}") ``` 此代码片段展示了如何利用已有的 BERT 模型完成基本的情感分类任务。注意,实际应用中需要根据具体任务对模型进行微调。 #### 关键技术细节 1. **双向编码器结构**: 不同于 GPT 的单向语言建模方式,BERT 利用了双向上下文信息来构建更丰富的词嵌入表示[^3]。 2. **掩码语言模型 (MLM)**: 在预训练过程中引入 MLM 技术,随机遮蔽部分单词让模型去预测这些缺失的内容,从而增强其理解复杂句法的能力[^4]。 3. **下一句预测 (NSP)**: 此外还加入了 NSP 训练目标帮助捕捉句子间的关系,尽管该机制后来被认为效果有限但仍保留作为原始设计的一部分。 #### 局限性和改进方向 虽然 BERT 取得了巨大成功但也存在一些局限性,比如计算成本高、难以扩展至超大规模语料库等问题。针对这些问题后续出现了许多优化版本如 RoBERTa、DistilBERT 等更加高效或强大的变体[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值