Módulo de tokenización de texto
El módulo de tokenización de texto convierte cadenas en secuencias de ID de tokens que pueden usar los modelos.
Esta capa solo realiza tokenización, codificación y decodificación inversa; no ejecuta inferencias de modelos. El flujo habitual consiste en codificar primero el texto como MLMultiArray o onnxruntime.tensor y después pasar el resultado al ejecutor CoreML u ONNX Runtime correspondiente.
El objetivo de este módulo es ofrecer lo necesario para la inferencia en el dispositivo:
WordPieceofrece la mayor compatibilidad y es adecuado para modelos comoBERTyCN-CLIPBPEySentencePieceusan estrategias ligeras compatibles, adecuadas para la mayoría de los escenarios de codificación en el dispositivo- El tiempo de ejecución no incorpora el entrenamiento complejo de tokenizadores, el muestreo ni todo el comportamiento del ecosistema original
Disponible en versiones posteriores a 20260319
Crear un tokenizador
coreml.new_text_tokenizer(opts)
tokenizador, información_del_error = coreml.new_text_tokenizer({
type = tipo,
vocab_path = ruta_de_vocabulario,
merges_path = ruta_de_merges,
model_path = ruta_del_modelo_SentencePiece,
pattern = expresión_regular,
context_length = longitud_de_contexto,
do_lower_case = convertir_a_minúsculas,
vocab_limit = límite_del_vocabulario,
clean_text = limpiar_el_texto,
add_bos = añadir_token_inicial,
add_eos = añadir_token_final,
bos_token = texto_del_token_inicial,
eos_token = texto_del_token_final,
pad_token = texto_del_token_de_relleno,
unk_token = texto_del_token_desconocido,
})
Valores de type
wordpiece/bert/cn_clipbpe/gpt2_bpe/clip_bpesentencepiece/spmregex/patternbyte/byteswhitespace/spacecharacter/char
El valor predeterminado es wordpiece.
Si el primer argumento de coreml.new_text_tokenizer(...) no es una tabla, se usa la construcción rápida de wordpiece, equivalente a coreml.new_wordpiece_tokenizer(vocab_path).
Parámetros habituales
vocab_path: ruta del archivo de vocabulario.merges_path: ruta del archivo merges para tokenizadoresBPE.model_path: ruta del archivo.modelcompatible con SentencePiece.pattern: expresión regular del tokenizador Regex.context_length: longitud de salida de tokens.do_lower_case: booleano opcional; indica si se debe convertir primero a minúsculas.clean_text: booleano opcional; indica si se debe realizar primero una limpieza básica del texto antes de tokenizarlo.vocab_limit: límite opcional del vocabulario WordPiece.add_bos / add_eos: booleanos opcionales; añaden tokens especiales inicial y final.bos_token / eos_token / pad_token / unk_token: textos opcionales de los tokens especiales.
Requisitos y valores predeterminados:
wordpiece: admite una ruta de vocabulario directa o una tabla; exigevocab_path;context_length=52,do_lower_case=true,vocab_limit=21128 y los tokens[PAD],[UNK],[CLS],[SEP].bpe: solo tabla; exigevocab_pathymerges_path; longitud 77, sin minúsculas, limpieza, BOS ni EOS por defecto.sentencepiece: solo tabla; exigevocab_pathomodel_path; longitud 77, limpieza activada y tokens<s>,</s>,<pad>,<unk>.regex: solo tabla; exigevocab_pathypattern; longitud 77, sin minúsculas y con limpieza.whitespace/character/byte: solo tabla; exigevocab_path; longitud 77, sin minúsculas y con limpieza.
Detalles adicionales de wordpiece: acepta vocab_path como cadena o dentro de una tabla, exige que exista, usa context_length = 52, do_lower_case = true y vocab_limit = 21128 de forma predeterminada, y necesita [PAD], [UNK], [CLS] y [SEP] en el vocabulario.
Detalles adicionales de bpe: solo acepta una tabla de opciones, exige vocab_path y merges_path, y usa context_length = 77, do_lower_case = false, clean_text = false, add_bos = false y add_eos = false de forma predeterminada.
Detalles adicionales de sentencepiece: solo acepta una tabla de opciones, exige vocab_path o model_path, y usa context_length = 77, do_lower_case = false, clean_text = true, bos_token = "<s>", eos_token = "</s>", pad_token = "<pad>" y unk_token = "<unk>" de forma predeterminada.
Detalles adicionales de regex: solo acepta una tabla de opciones, exige vocab_path y pattern, y usa context_length = 77, do_lower_case = false y clean_text = true de forma predeterminada.
Detalles adicionales de whitespace, character y byte: solo aceptan una tabla de opciones, exigen vocab_path y usan context_length = 77, do_lower_case = false y clean_text = true de forma predeterminada.
Sugerencias de selección:
- Si el modelo usa
vocab.txt + WordPiece, eligewordpiece - Si el modelo usa
vocab.json + merges.txt, eligebpe - Si el modelo usa
.vocabo.model, eligesentencepiece - Considera
regex,whitespace,characterybytesolo para necesidades de tokenización con reglas sencillas
Valor de retorno
- tokenizador de texto: objeto; si falla, devuelve
nil. - información_del_error: texto; es
nilcuando tiene éxito y contiene el error cuando falla.
Descripción
- Conviene crear el tokenizador una vez y reutilizarlo; no se recomienda reconstruirlo para cada codificación.
- La creación fija el algoritmo, el origen del vocabulario y la longitud de salida.
- Si el resultado del modelo es incorrecto, comprueba el tipo, el vocabulario, los tokens especiales y
context_length. - WordPiece es la implementación más completa; BPE y SentencePiece priorizan la compatibilidad en el dispositivo.
BPEy SentencePiece priorizan la compatibilidad de codificación en el dispositivo y no prometen reproducir todos los detalles de las implementaciones originales.
Constructores rápidos
Todas las funciones constructoras rápidas son esencialmente reenvíos a coreml.new_text_tokenizer(...); son útiles cuando ya se conoce el tipo de tokenizador que se necesita.
coreml.new_wordpiece_tokenizer(opts)
- Es un alias de
coreml.new_text_tokenizer({ type = "wordpiece", ... }). - Es adecuado para modelos de texto de estilo
WordPiece, comoBERTyCN-CLIP. - También acepta directamente una ruta de vocabulario:
coreml.new_wordpiece_tokenizer(vocab_path).
coreml.new_bpe_tokenizer(opts)
- Es un alias de
coreml.new_text_tokenizer({ type = "bpe", ... }). - También cubre modelos
gpt2_bpeyclip_bpedel tipovocab.json + merges.txt.
coreml.new_sentencepiece_tokenizer(opts)
- Es un alias de
coreml.new_text_tokenizer({ type = "sentencepiece", ... }). - Usa una implementación ligera compatible orientada a la inferencia en el dispositivo.
- Admite
.vocaby.model.
coreml.new_regex_tokenizer(opts)
- Es un alias de
coreml.new_text_tokenizer({ type = "regex", ... }). - Es adecuado para tokenización basada en reglas y asignaciones sencillas de vocabulario.
coreml.new_byte_tokenizer(opts)
- Es un alias de
coreml.new_text_tokenizer({ type = "byte", ... }). - Convierte primero el texto en un flujo de bytes
UTF-8y después busca cada byte en el vocabulario.
coreml.new_whitespace_tokenizer(opts)
- Es un alias de
coreml.new_text_tokenizer({ type = "whitespace", ... }). - Es adecuado para modelos de texto ligeros que dividen por espacios y buscan directamente en el vocabulario.
coreml.new_character_tokenizer(opts)
- Es un alias de
coreml.new_text_tokenizer({ type = "character", ... }). - Es adecuado para modelos de texto a nivel de caracteres.
Comprobar el tipo
coreml.is_text_tokenizer(value)
es_tokenizador = coreml.is_text_tokenizer(valor_a_comprobar)
Comprueba si un valor es un objeto coreml_text_tokenizer_object.
Métodos del objeto
:encode(text[, opts])
resultado_codificado, información_del_error = tokenizador:encode(texto)
o
resultado_codificado, información_del_error = tokenizador:encode(texto, {
output = "table" o "MLMultiArray" o "ort_tensor",
data_type = tipo_de_datos,
pair_text = texto_par,
max_length = longitud_máxima,
padding = estrategia_de_relleno,
truncation = estrategia_de_truncado,
return_attention_mask = devolver_attention_mask,
return_token_type_ids = devolver_token_type_ids,
return_special_tokens_mask = devolver_special_tokens_mask,
})
Codifica un texto en una secuencia de tokens.
:encode_batch(texts[, opts])
resultados, información_del_error = tokenizador:encode_batch(textos, opciones)
o
resultados, información_del_error = tokenizador:encode_batch(textos, {
output = "table" o "MLMultiArray" o "ort_tensor",
data_type = tipo_de_datos,
pair_text = texto_par_o_matriz_de_textos,
max_length = longitud_máxima,
padding = estrategia_de_relleno,
truncation = estrategia_de_truncado,
return_attention_mask = devolver_attention_mask,
return_token_type_ids = devolver_token_type_ids,
return_special_tokens_mask = devolver_special_tokens_mask,
})
Codifica varios textos y devuelve secuencias por lotes.
:decode(ids)
texto, información_del_error = tokenizador:decode(ids)
Decodifica una sola secuencia de IDs.
idspuede ser una matriz Lua,MLMultiArrayu objeto tensorial de ORT.batch_idstambién puede ser cualquier userdata que implementeshape()yto_table().- Si recibe datos por lotes, devuelve un error y solicita
decode_batch().
:decode_batch(batch_ids)
textos, información_del_error = tokenizador:decode_batch(batch_ids)
Decodifica un lote de secuencias en una matriz de textos.
batch_idspuede ser una matriz Lua anidada,MLMultiArrayu objeto tensorial de ORT.- También puede ser cualquier userdata que implemente
shape()yto_table().
:vocab_size()
tamaño = tokenizador:vocab_size()
Devuelve el tamaño del vocabulario.
:context_length()
longitud = tokenizador:context_length()
Devuelve la longitud fija de salida a la que se rellena o trunca cada codificación.
Codificación y resultados
-
outputes"MLMultiArray"por defecto y es adecuado para pasarlo directamente a un modelo CoreML. -
output = "table"devuelve una tabla Lua para inspección o compatibilidad. -
output = "MLMultiArray"devuelve un tensor nativo para CoreML. -
output = "ort_tensor"devuelve un tensor para ONNX Runtime. -
output = "ort_tensor"requiererequire("onnxruntime"). -
output = "ort_tensor"solo está disponible en iOS 13+. -
Para compatibilidad con scripts antiguos, el campo
multi_array_outputtodavía se lee; el código nuevo debería usaroutput. -
data_typeparaMLMultiArrayadmite"int32","float32","float16"y"double";"float64"es un alias de"double"y el predeterminado es"int32". Paraort_tensoradmite"float16","float32","uint8","int8","int32","int64","double"y"bool"; el predeterminado es"int64". -
Para
output = "MLMultiArray", eldata_type"int32"es el valor predeterminado (data_type = "int32"). -
Para
output = "MLMultiArray", también admite"float16"y"double". -
Para
output = "ort_tensor",data_type = "int64"es el valor predeterminado. -
Para
output = "ort_tensor", también admite"uint8","int8"y"bool".
Reglas de data_type
Los valores booleanos literales true y false se pueden usar donde se indique que se acepta un booleano.
padding y truncation aceptan booleanos o cadenas: true equivale respectivamente a "max_length" y "longest_first"; false equivale a "do_not_pad" y "do_not_truncate". pair_text puede ser un texto individual o, en lotes, una matriz del mismo tamaño.
padding / truncation
padding y truncation aceptan valores booleanos o cadenas.
padding = trueequivale a"max_length".padding = falseequivale a"do_not_pad".truncation = trueequivale a"longest_first".truncation = falseequivale a"do_not_truncate".
pair_text
pair_text puede ser un texto individual o, en lotes, una matriz del mismo tamaño.
encode()acepta un solopair_text.encode_batch()acepta un solopair_texto una matriz de textos del tamaño del lote.
Resultado estructurado
return_attention_maskañadeattention_maskal resultado.return_token_type_idsañadetoken_type_idsal resultado.return_special_tokens_maskañadespecial_tokens_maskal resultado.
Los resultados estructurados suelen incluir:
-
input_ids -
length -
attention_mask -
token_type_ids -
special_tokens_mask -
Si
return_attention_mask,return_token_type_idsoreturn_special_tokens_maskestrue,encode()/encode_batch()devuelve una tabla de resultados estructurada, no solo la secuencia de tokens sin formato. -
En la codificación por lotes,
output = "table"conserva la longitud de cada muestra;output = "MLMultiArray"/"ort_tensor"rellena el lote hasta formar una matriz regular.
Ejemplo
local tokenizer = assert(coreml.new_text_tokenizer({
type = "wordpiece",
vocab_path = XXT_HOME_PATH.."/models/demo/vocab.txt",
context_length = 52,
}))
local ids = assert(tokenizer:encode("星星", {
output = "MLMultiArray",
data_type = "int32",
}))
local structured = assert(tokenizer:encode("星星", {
output = "table",
return_attention_mask = true,
return_token_type_ids = true,
}))
local ort = require("onnxruntime")
local input_ids = assert(tokenizer:encode("星星", {
output = "ort_tensor",
data_type = "int64",
}))
local batch = assert(tokenizer:encode_batch({
"星星",
"月亮",
}, {
output = "ort_tensor",
}))
print(tokenizer:decode(structured.input_ids))
print(tokenizer:vocab_size())
print(tokenizer:context_length())