es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Mapeo de tokens de Huggingface al texto original de entrada.

¿Cómo puedo mapear los tokens que obtengo de Huggingface DistilBertTokenizer a las posiciones del texto de entrada?

Por ejemplo: Tengo una nueva GPU -> ["tengo", "una", "nueva", "gp", "##u"] -> [(0, 1), (2, 6), ...]

Me interesa esto porque supongamos que tengo algunos valores de atención asignados a cada token, me gustaría mostrar a qué parte del texto original realmente corresponde, ya que la versión tokenizada no es fácil de entender para las personas que no trabajan en aprendizaje automático.

Todavía no he encontrado ninguna solución para esto, especialmente cuando hay un token [UNK]. Cualquier sugerencia sería apreciada. ¡Gracias!

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para mapear los tokens obtenidos de DistilBertTokenizer a las posiciones del texto de entrada, se puede utilizar el método tokenizer.encode_plus(), el cual retorna un diccionario con varias pares clave-valor, incluyendo input_ids y token_type_ids (para tareas de clasificación de secuencia), entre otros.

    El input_ids representa la secuencia tokenizada del texto con tokens especiales como [CLS], [SEP], etc., mientras que token_type_ids se utiliza para diferenciar entre las dos secuencias en tareas de clasificación de secuencia.

    Luego se puede utilizar el método tokenizer.convert_ids_to_tokens() para convertir el input_ids de vuelta a los tokens correspondientes. Finalmente, se pueden utilizar algoritmos de coincidencia de cadenas como Knuth-Morris-Pratt (KMP) o el algoritmo de Rabin-Karp para alinear los tokens con sus posiciones en el texto original.

    En caso de tokens [UNK], se pueden reemplazar con un símbolo especial como <unk> antes de convertirlos de vuelta a tokens. Alternativamente, se puede utilizar el método tokenizer.decode() para obtener las palabras reales para los tokens [UNK] basado en el vocabulario del tokenizer. Sin embargo, esto puede no ser siempre preciso especialmente para palabras raras o fuera-del-vocabulario (OOV).

Comments are closed.