transformers 操作面试

transformers 操作篇

    • 1. 如何 利用 transformers 加载 Bert 模型?
    • 2. 如何 利用 transformers 输出 Bert 指定 hidden_state?
    • 3. BERT 获取最后一层或每一层网络的向量输出
    • 致谢

  1. 如何 利用 transformers 加载 Bert 模型?
    import torch
    from transformers import BertModel, BertTokenizer
    # 这里我们调用bert-base模型,同时模型的词典经过小写处理model_name = 'bert-base-uncased'
    # 读取模型对应的tokenizer
    tokenizer = BertTokenizer.from_pretrained(model_name) # 载入模型
    model = BertModel.from_pretrained(model_name) # 输入文本
    input_text = "Here is some text to encode" # 通过tokenizer把文本变成 token_id
    input_ids = tokenizer.encode(input_text, add_special_tokens=True) # input_ids: [101, 2182, 2003, 2070, 3793, 2000, 4372, 16044, 102]
    input_ids = torch.tensor([input_ids]) # 获得BERT模型最后一个隐层结果
    with torch.no_grad():
    last_hidden_states = model(input_ids)[0] # Models outputs are now tuples
    """ tensor([[[-0.0549, 0.1053, -0.1065, ..., -0.3550, 0.0686, 0.6506],
    [-0.5759, -0.3650, -0.1383, ..., -0.6782, 0.2092, -0.1639],
    [-0.1641, -0.5597, 0.0150, ..., -0.1603, -0.1346, 0.6216],
    ...,
    [ 0.2448, 0.1254, 0.1587, ..., -0.2749, -0.1163, 0.8809],
    [ 0.0481, 0.4950, -0.2827, ..., -0.6097, -0.1212, 0.2527],
    [ 0.9046, 0.2137, -0.5897, ..., 0.3040, -0.6172, -0.1950]]])
    shape: (1, 9, 768)
    """

    可以看到,包括import在内的不到十行代码,我们就实现了读取一个预训练过的BERT模型,来
    encode我们指定的一个文本,对文本的每一个token生成768维的向量。如果是二分类任务,我们
    接下来就可以把第一个token也就是[CLS]的768维向量,接一个linear层,预测出分类的logits,或 者根据标签进行训练。
  2. 如何 利用 transformers 输出 Bert 指定 hidden_state?
    Bert 默认是 十二层,但是有时候预训练时并不需要利用全部利用,而只需要预训练前面几层即可,此时该怎么做呢?
    下载到bert-base-uncased的模型目录里面包含 配置文件 config.json, 该文件中包含
    {
    "architectures": [
    "BertForMaskedLM"
    ],
    "attention_probs_dropout_prob": 0.1,
    "hidden_act": "gelu",
    "hidden_dropout_prob": 0.1,
    "hidden_size": 768,
    "initializer_range": 0.02,
    "intermediate_size": 3072,
    "max_position_embeddings": 512,
    "num_attention_heads": 12,
    "num_hidden_layers": 12,
    "type_vocab_size": 2,
    "vocab_size": 30522
    }
    output_hidden_states,可以利用该参数来设置 编码器内隐藏层层数
  3. BERT 获取最后一层或每一层网络的向量输出
  • last_hidden_state:shape是(batch_size, sequence_length, hidden_size), hidden_size=768,它是模型最后一层输出的隐藏状态 pooler_output:shape是(batch_size, hidden_size),这是序列的第一个
    token(classification token)的最后一层的隐藏状态,它是由线性层和Tanh激活函数进一步处理的,这个输出不是对输入的语义内容的一个很好的总结,对于整个输入序列的隐藏状态序列的平均化或池化通常更好。
    hidden_states:这是输出的一个可选项,如果输出,需要指定config.output_hidden_states=True,它也是一个元组,它的第一个元素是embedding,其余元 素是各层的输出,每个元素的形状是(batch_size, sequence_length, hidden_size) attentions:这也是输出的一个可选项,如果输出,需要指定config.output_attentions=True,它也是一个元组,它的元素是每一层的注意力权重,用于计 算self-attention heads的加权平均值
    transformer 最后一层输出的结果
  • 获取每一层网络的向量输出

outputs.pooler_output

## hidden_states,包括13层,第一层即索引0是输入embedding向量,后面1-12索引是每层的输出向量

hidden_states = outputs.hidden_states embedding_output = hidden_states[0] attention_hidden_states = hidden_states[1:]

### 关于AI面试官项目的实现方案与教程 #### AI面试官的核心技术架构 构建一个完整的AI面试官系统通常涉及多个关键技术模块,包括自然语言处理(NLP)、语音识别、情感分析以及机器学习模型训练等。这些技术共同作用以模拟真实的面试场景并评估候选人的表现[^2]。 #### 数据收集与预处理 数据是任何人工智能应用的基础,在开发AI面试官之前需准备好大量高质量的数据集用于训练算法。这可能包括但不限于过往真实招聘过程中积累下来的视频录像、音频记录及其对应的评分标准等内容作为输入源材料来进行后续操作前的准备工作阶段——即所谓的“清洗”过程【注】此处并非特指某单一方法而是泛指一系列必要的前期步骤比如去除噪声干扰项等等[^1]。 #### 自然语言理解(NLU)组件设计 为了让计算机能够读懂人类的语言表达方式从而做出恰当反应,则需要特别关注如何建立有效的自然语言理解机制。该部分主要依赖深度神经网络结构如循环单元(LSTM/GRU),或者更先进的Transformer系列架构完成句子级别的语义解析任务;同时还需要考虑上下文环境因素影响下的动态调整策略等问题解决方案[^4]。 #### 用户交互界面(UI/UX) 设计原则 除了后台逻辑运算外前端展示效果同样重要。良好的用户体验可以有效缓解应聘者的紧张情绪,并引导他们顺利完成整个测试流程。因此在规划视觉风格的同时也要充分考虑到不同设备兼容性和无障碍访问需求等方面的要求[^3]。 ```python import speech_recognition as sr from transformers import pipeline def transcribe_audio_to_text(file_path): recognizer = sr.Recognizer() with sr.AudioFile(file_path) as source: audio_data = recognizer.record(source) text = recognizer.recognize_google(audio_data, language="en-US") return text nlp_model = pipeline('sentiment-analysis') sample_input = transcribe_audio_to_text('./interviewee_response.wav') result = nlp_model(sample_input) print(result) ``` 上述代码片段展示了简单的语音转文字功能以及基于Hugging Face Transformers库的情感分类器调用实例。这是构建完整AI面试平台中的两个基础组成部分之一。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI Echoes

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值