Explicación detallada de la implementación de Bert de la incrustación de palabras y sus parámetros.

Pasos de implementación

  1. Cargue el modelo y el tokenizador previamente entrenados de BERT.
    Si ha descargado el modelo previamente entrenado de BERT localmente, puede cargarlo localmente.
tokenizer = BertTokenizer.from_pretrained('/home/wu/david/demo/bert_base_chinese')
model = BertModel.from_pretrained('/home/wu/david/demo/bert_base_chinese')

Si no hay descarga, también puedes cargarla online.

tokenizer = BertTokenizer.from_pretrained('bert_base_chinese')
model = BertModel.from_pretrained('bert_base_chinese')
  1. Convierta cada texto al formato de entrada BERT usando tokenizer.encode_plus
inputs = tokenizer.encode_plus(
        text,
        add_special_tokens=True,
        max_length=512,
        padding='max_length',
        truncation=True,
        return_attention_mask=True,
        return_tensors='pt',
    )

Explique el significado de cada parámetro:

  • texto: la cadena de texto que se va a codificar.
  • add_special_tokens: indica si se deben agregar tokens especiales (como [CLS] y [SEP]) en la codificación. El valor predeterminado es Verdadero. En BERT, se utilizan tokens especiales para identificar el principio y el final de las oraciones, así como separadores en las tareas de pares de oraciones.
  • max_length: la longitud máxima después de la codificación. Si el texto excede este valor, será truncado. El valor predeterminado es Ninguno, lo que significa que no se realiza ningún truncamiento.
  • relleno: indica si se debe rellenar la codificación hasta max_length. El valor predeterminado es Falso. Si se establece en 'max_length', el texto se completará hasta max_length. El relleno se utiliza a menudo en el procesamiento por lotes para garantizar que todas las muestras del lote tengan la misma longitud.
  • Truncamiento: indica si se trunca el texto a max_length. El valor predeterminado es Falso. Si se establece en Verdadero, el texto se truncará a longitud_máxima.
  • return_attention_mask: indica si se debe devolver la máscara de atención. El valor predeterminado es Falso. Si se establece en True, se devuelve un tensor que representa la máscara de atención. La máscara de atención identifica qué tokens son entradas reales y cuáles están rellenados para que el modelo ignore los tokens rellenados durante el procesamiento.
  • return_tensors: especifica el tipo de tensor del resultado de codificación devuelto. Los valores opcionales son "tf" (devuelve un tensor de TensorFlow) o "pt" (devuelve un tensor de PyTorch). El valor predeterminado es Ninguno, lo que significa que se devuelve una lista estándar de Python.

El valor de retorno de las entradas tiene tres partes:

  • input_ids: una lista de ID de token de texto codificado, que el modelo puede utilizar directamente.
  • atención_mask: (opcional) Si return_attention_mask=True, devuelve una lista que representa la máscara de atención. Esta lista identifica qué tokens de la codificación deben ser atendidos por el modelo y cuáles deben ignorarse.
  • token_type_ids: (opcional) Si return_token_type_ids=True, devuelve una lista que representa los tipos de oraciones. En la tarea de pares de oraciones, identifica a qué oración pertenecen las fichas de diferentes oraciones.
  1. Incrustación usando el modelo BERT
        #调用模型,传入上一步得到的inputs
        outputs = model(**inputs)
        # 获取最后一个隐藏层表示,其形状为 [batch_size, sequence_length, hidden_size]
        last_hidden_state = outputs.last_hidden_state 
        print(last_hidden_state.shape)
        token_embeddings = torch.squeeze(last_hidden_state, dim=0) #去掉batch_size这个维度,得到BERT模型编码后的每个令牌的隐藏状态表示

Nota:

  • last_hidden_state representa la representación codificada del texto de entrada por el modelo BERT, y sus dimensiones son [batch_size, secuencia_length, hide_size], donde batch_size representa el número de muestras en el lote; secuencia_length representa la longitud de secuencia de cada muestra, es decir, el número de tokens del texto de entrada; hiden_size representa el tamaño de la dimensión del estado oculto del modelo BERT, que suele ser uno de los parámetros del modelo previamente entrenado.
  • torch.squeeze() es una función de PyTorch que elimina de un tensor las dimensiones de dimensión 1. Por lo tanto, token_embeddings es el último tensor de estado oculto después de comprimir, con forma [sequence_length, Hidden_size], que representa la codificación del modelo BERT La representación del estado oculto de cada ficha después

código completo

import torch
import torch.nn as nn
from transformers import BertTokenizer, BertModel
import pandas as pd
from torch.utils.data import Dataset,DataLoader

# 本地加载BERT模型和tokenizer
tokenizer = BertTokenizer.from_pretrained('/home/wu/david/demo/bert_base_chinese')
model = BertModel.from_pretrained('/home/wu/david/demo/bert_base_chinese')

# 在线加载BERT模型和tokenizer
# tokenizer = BertTokenizer.from_pretrained('bert_base_chinese')
# model = BertModel.from_pretrained('bert_base_chinese')

data=["欢迎学习bert!","万丈高楼平地起,成功只能靠自己","希望我们都有一个光明的未来!"]

for index,text in enumerate(data):
    print("对第",index,"个文本进行词嵌入...")

    # tokenizer.encode_plus负责将每个文本转换为BERT输入格式
    inputs = tokenizer.encode_plus(
        text,
        add_special_tokens=True,
        max_length=512,
        padding='max_length',
        truncation=True,
        return_attention_mask=True,
        return_tensors='pt',
    )
    with torch.no_grad():
        # 使用BERT模型进行嵌入
        outputs = model(**inputs)
        # 获取最后一个隐藏层表示,其形状为 [batch_size, sequence_length, hidden_size]
        last_hidden_state = outputs.last_hidden_state
        print(last_hidden_state.shape)
        token_embeddings = torch.squeeze(last_hidden_state, dim=0)

Supongo que te gusta

Origin blog.csdn.net/David_house/article/details/131013361
Recomendado
Clasificación