philosophy.mdx 5.37 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
<!--Copyright 2020 de The HuggingFace Team. Todos los derechos reservados

Con licencia bajo la Licencia Apache, Versi贸n 2.0 (la "Licencia"); No puedes usar este archivo excepto de conformidad con la Licencia.
Puedes obtener una copia de la Licencia en

http://www.apache.org/licenses/LICENSE-2.0

Al menos que sea requrido por la ley aplicable o acordado por escrito, el software distribuido bajo la Licencia es distribuido sobre una BASE "AS IS", SIN GARANTIAS O CONDICIONES DE
NING脷N TIPO. Ver la Licencia para el idioma espec铆fico que rige los permisos y limitaciones bajo la Licencia.
-->

# Filosof铆a

馃 Transformers es una biblioteca construida para:

- Los investigadores y educadores de NLP que busquen usar/estudiar/extender modelos transformers a gran escala 
- Profesionales que quieren optimizar esos modelos y/o ponerlos en producci贸n 
- Ingenieros que solo quieren descargar un modelo preentrenado y usarlo para resolver una tarea NLP dada. 

La biblioteca fue dise帽ada con dos fuertes objetivos en mente:

- Que sea tan f谩cil y r谩pida de utilizar como sea posible:

  - Hemos limitado enormemente el n煤mero de abstracciones que el usuario tiene que aprender. De hecho, no hay casi abstracciones,
    solo tres clases est谩ndar necesarias para usar cada modelo: [configuration](main_classes/configuration),
    [models](main_classes/model) y [tokenizer](main_classes/tokenizer).
  - Todas estas clases pueden ser inicializadas de forma simple y unificada a partir de ejemplos pre-entrenados mediante el uso de un m茅todo
    `from_pretrained()` com煤n de solicitud que se encargar谩 de descargar (si es necesario), almacenar y cargar la solicitud de clase relacionada y datos asociados
    (configurations' hyper-parameters, tokenizers' vocabulary, and models' weights) a partir de un control pre-entrenado proporcionado en
    [Hugging Face Hub](https://huggingface.co/models) o de tu propio control guardado.
  - Por encima de esas tres clases est谩ndar, la biblioteca proporciona dos APIs: [`pipeline`] para usar r谩pidamente un modelo (junto a su configuracion y tokenizer asociados)
    sobre una tarea dada, y [`Trainer`]/`Keras.fit` para entrenar u optimizar de forma r谩pida un modelo dado.
  - Como consecuencia, esta biblioteca NO es una caja de herramientas modular de bloques individuales para redes neuronales. Si quieres extender/construir sobre la biblioteca,
    usa simplemente los m贸dulos regulares de Python/PyTorch/TensorFlow/Keras y emplea las clases est谩ndar de la biblioteca como punto de partida para reutilizar funcionalidades
    tales como abrir/guardar modelo.
    
- Proporciona modelos modernos con rendimientos lo m谩s parecido posible a los modelos originales:

  - Proporcionamos al menos un ejemplo para cada arquitectura que reproduce un resultado proporcionado por los autores de dicha arquitectura.
  - El c贸digo normalmente es parecido al c贸digo base original, lo cual significa que alg煤n c贸digo Pytorch puede no ser tan 
    *pytorchic* como podr铆a ser por haber sido convertido a c贸digo TensorFlow, y viceversa. 

Unos cuantos objetivos adicionales:

- Exponer las caracter铆sticas internas de los modelos de la forma m谩s coherente posible:

  - Damos acceso, mediante una sola API, a todos los estados ocultos y pesos de atenci贸n.
  - Tokenizer y el modelo de API base est谩n estandarizados para cambiar f谩cilmente entre modelos.

- Incorporar una selecci贸n subjetiva de herramientas de gran potencial para la optimizaci贸n/investigaci贸n de estos modelos:

  - Una forma sencilla/coherente de a帽adir nuevos tokens al vocabulario e incrustraciones (embeddings, en ingl茅s) para optimizaci贸n.
  - Formas sencillas de camuflar y reducir "transformer heads".

- Cambiar f谩cilmente entre PyTorch y TensorFlow 2.0, permitiendo el entrenamiento usando un marco y la inferencia usando otro.

## Conceptos principales 

La biblioteca est谩 construida alrededor de tres tipos de clases para cada modelo:

- **Model classes** como [`BertModel`], que consisten en m谩s de 30 modelos PyTorch ([torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module)) o modelos Keras ([tf.keras.Model](https://www.tensorflow.org/api_docs/python/tf/keras/Model)) que funcionan con pesos pre-entrenados proporcionados en la
  biblioteca.
- **Configuration classes** como [`BertConfig`], que almacena todos los par谩metros necesarios para construir un modelo. 
  No siempre tienes que generarla tu. En particular, si estas usando un modelo pre-entrenado sin ninguna modificaci贸n,
  la creaci贸n del modelo se encargar谩 autom谩ticamente de generar la configuraci贸n (que es parte del modelo).
- **Tokenizer classes** como [`BertTokenizer`], que almacena el vocabulario para cada modelo y proporciona m茅todos para
  codificar/decodificar strings en una lista de 铆ndices de "token embeddings" para ser empleados en un modelo.          

Todas estas clases pueden ser generadas a partir de ejemplos pre-entrenados, y guardados localmente usando dos m茅todos:

- `from_pretrained()` permite generar un modelo/configuraci贸n/tokenizer a partir de una versi贸n pre-entrenada proporcionada ya sea por
  la propia biblioteca (los modelos compatibles se pueden encontrar en [Model Hub](https://huggingface.co/models)) o
  guardados localmente (o en un servidor) por el usuario. 
- `save_pretrained()` permite guardar un modelo/configuraci贸n/tokenizer localmente, de forma que puede ser empleado de nuevo usando
  `from_pretrained()`.