# PhoBERT

## Resumen

El modelo PhoBERT fue propuesto en [PhoBERT: Pre-trained language models for Vietnamese](https://huggingface.co/papers/2003.00744) por Dat Quoc Nguyen y Anh Tuan Nguyen.

El resumen del artículo es el siguiente:

*Presentamos PhoBERT en dos versiones, PhoBERT-base y PhoBERT-large, los primeros modelos de lenguaje monolingües a gran escala preentrenados para el vietnamita. Los resultados experimentales muestran que PhoBERT supera de forma consistente al mejor modelo multilingüe preentrenado reciente, XLM-R (Conneau et al., 2020), y mejora el estado del arte en varias tareas de PLN específicas del vietnamita, como la etiquetación de categorías gramaticales, el análisis dependiente, el reconocimiento de entidades nombradas y la inferencia de lenguaje natural.*

Este modelo fue aportado por [dqnguyen](https://huggingface.co/dqnguyen). El código original se puede encontrar [aquí](https://github.com/VinAIResearch/PhoBERT).

## Ejemplo de uso

```python
import torch

from transformers import AutoModel, AutoTokenizer

phobert = AutoModel.from_pretrained("vinai/phobert-base", device_map="auto")
tokenizer = AutoTokenizer.from_pretrained("vinai/phobert-base")

# INPUT TEXT MUST BE ALREADY WORD-SEGMENTED!
line = "Tôi là sinh_viên trường đại_học Công_nghệ ."

input_ids = torch.tensor([tokenizer.encode(line)])

with torch.no_grad():
    features = phobert(input_ids)  # Models outputs are now tuples
```

La implementación de PhoBERT es la misma que la de BERT, excepto por la tokenización. Consulte la [documentación de BERT](bert) para obtener información sobre las clases de configuración y sus parámetros. El tokenizador específico de PhoBERT se documenta a continuación.

## PhobertTokenizer[[transformers.PhobertTokenizer]]

#### transformers.PhobertTokenizer[[transformers.PhobertTokenizer]]

```python
transformers.PhobertTokenizer(vocab_file, merges_file, bos_token = '<s>', eos_token = '</s>', sep_token = '</s>', cls_token = '<s>', unk_token = '<unk>', pad_token = '<pad>', mask_token = '<mask>', **kwargs)
```

[Fuente](https://github.com/huggingface/transformers/blob/main/src/transformers/models/phobert/tokenization_phobert.py#L49)

**Parámetros:**

vocab_file (`str`) : Ruta al archivo de vocabulario.

merges_file (`str`) : Ruta al archivo de fusiones.

bos_token (`str`, *opcional*, valor predeterminado `"<s>"`) : El token de inicio de secuencia que se utilizó durante el preentrenamiento. Puede usarse como token de clasificador de secuencias. Al construir una secuencia con tokens especiales, este no es el token que se utiliza para el inicio de la secuencia. El token que se utiliza es `cls_token`.

eos_token (`str`, *opcional*, valor predeterminado `"</s>"`) : El token de fin de secuencia. Al construir una secuencia con tokens especiales, este no es el token que se utiliza para el fin de secuencia. El token que se utiliza es `sep_token`.

sep_token (`str`, *opcional*, valor predeterminado `"</s>"`) : El token separador, que se utiliza al construir una secuencia a partir de varias secuencias, por ejemplo, dos secuencias para la clasificación de secuencias o un texto y una pregunta para la respuesta a preguntas. También se utiliza como el último token de una secuencia construida con tokens especiales.

cls_token (`str`, *opcional*, valor predeterminado `"<s>"`) : El token clasificador que se utiliza al realizar clasificación de secuencias (clasificación de la secuencia completa en lugar de clasificación por token). Es el primer token de la secuencia cuando se construye con tokens especiales.

unk_token (`str`, *opcional*, valor predeterminado `"<unk>"`) : El token desconocido. Un token que no está en el vocabulario no se puede convertir en un ID y se establece como este token en su lugar.

pad_token (`str`, *opcional*, valor predeterminado `"<pad>"`) : El token utilizado para el relleno, por ejemplo, al agrupar secuencias de diferentes longitudes.

mask_token (`str`, *opcional*, valor predeterminado `"<mask>"`) : El token utilizado para enmascarar valores. Este es el token que se emplea al entrenar este modelo con modelado de lenguaje enmascarado. Es el token que el modelo intentará predecir.

Construye un tokenizador PhoBERT. Basado en Byte-Pair-Encoding.

Este tokenizador hereda de [PreTrainedTokenizer](/docs/transformers/main/es/main_classes/tokenizer#transformers.PythonBackend), que contiene la mayoría de los métodos principales. Los usuarios deben consultar esta superclase para obtener más información sobre dichos métodos.

#### add_from_file[[transformers.PhobertTokenizer.add_from_file]]

```python
add_from_file(f)
```

[Fuente](https://github.com/huggingface/transformers/blob/main/src/transformers/models/phobert/tokenization_phobert.py#L325)

Carga un diccionario existente desde un archivo de texto y añade sus símbolos a esta instancia.

#### build_inputs_with_special_tokens[[transformers.PhobertTokenizer.build_inputs_with_special_tokens]]

```python
build_inputs_with_special_tokens(token_ids_0: list, token_ids_1: list[int] | None = None)
```

[Fuente](https://github.com/huggingface/transformers/blob/main/src/transformers/models/phobert/tokenization_phobert.py#L144)

**Parámetros:**

token_ids_0 (`list[int]`) : Lista de IDs a los que se les añadirán los tokens especiales.

token_ids_1 (`list[int]`, *opcional*) : Lista opcional de IDs para pares de secuencias.

**Devuelve:** `list[int]`

Lista de [ID de entrada](../glossary#input-ids) con los tokens especiales apropiados.

Construye las entradas del modelo a partir de una secuencia o de un par de secuencias para tareas de clasificación de secuencias, concatenándolas y añadiendo tokens especiales. Una secuencia de PhoBERT tiene el siguiente formato:

- secuencia única: `<s> X </s>`
- par de secuencias: `<s> A </s></s> B </s>`

#### convert_tokens_to_string[[transformers.PhobertTokenizer.convert_tokens_to_string]]

```python
convert_tokens_to_string(tokens)
```

[Fuente](https://github.com/huggingface/transformers/blob/main/src/transformers/models/phobert/tokenization_phobert.py#L291)

Convierte una secuencia de tokens (cadena) en una sola cadena.

#### create_token_type_ids_from_sequences[[transformers.PhobertTokenizer.create_token_type_ids_from_sequences]]

```python
create_token_type_ids_from_sequences(token_ids_0: list, token_ids_1: list[int] | None = None)
```

[Fuente](https://github.com/huggingface/transformers/blob/main/src/transformers/models/phobert/tokenization_phobert.py#L198)

**Parámetros:**

token_ids_0 (`list[int]`) : Lista de IDs.

token_ids_1 (`list[int]`, *opcional*) : Lista opcional de IDs para pares de secuencias.

**Devuelve:** `list[int]`

Lista de ceros.

Crea una máscara a partir de las dos secuencias pasadas para usarla en una tarea de clasificación de pares de secuencias. PhoBERT no utiliza ids de tipo de token, por lo que se devuelve una lista de ceros.

#### get_special_tokens_mask[[transformers.PhobertTokenizer.get_special_tokens_mask]]

```python
get_special_tokens_mask(token_ids_0: list, token_ids_1: list[int] | None = None, already_has_special_tokens: bool = False)
```

[Fuente](https://github.com/huggingface/transformers/blob/main/src/transformers/models/phobert/tokenization_phobert.py#L170)

**Parámetros:**

token_ids_0 (`list[int]`) : Lista de IDs.

token_ids_1 (`list[int]`, *opcional*) : Lista opcional de IDs para pares de secuencias.

already_has_special_tokens (`bool`, *opcional*, valor predeterminado `False`) : Indica si la lista de tokens ya está formateada con tokens especiales para el modelo.

**Devuelve:** `list[int]`

Una lista de enteros en el rango [0, 1]: 1 para un token especial, 0 para un token de secuencia.

Obtiene los ids de secuencia de una lista de tokens a la que no se le han añadido tokens especiales. Este método se llama al añadir tokens especiales mediante el método `prepare_for_model` del tokenizer.

