# PhoBERT

## Genel Bakış

PhoBERT modeli, Dat Quoc Nguyen ve Anh Tuan Nguyen tarafından [PhoBERT: Pre-trained language models for Vietnamese](https://huggingface.co/papers/2003.00744) makalesinde önerilmiştir.

Makalenin özeti aşağıdaki gibidir:

*PhoBERT'i, PhoBERT-base ve PhoBERT-large olmak üzere iki sürümle sunuyoruz; bunlar, Vietnamlıca için ön eğitilmiş ilk kamuya açık büyük ölçekli tek dilli dil modelleridir. Deneysel sonuçlar, PhoBERT'in yakın zamanda en iyi ön eğitilmiş çok dilli model olan XLM-R'ı (Conneau ve ark., 2020) tutarlı bir şekilde geride bıraktığını ve Vietnamlıca'ya özgü çok sayıda NLP görevinde, bunlara dilbilgisi işaretleme (Part-of-speech tagging), bağımlılık ayrıştırma (Dependency parsing), ad varlığı tanıma (Named-entity recognition) ve doğal dil çıkarımı (Natural language inference) dahil olmak üzere, en iyi performansı (state-of-the-art) geliştirdiğini göstermektedir.*

Bu model [dqnguyen](https://huggingface.co/dqnguyen) tarafından katkıda bulunmuştur. Orijinal kod [burada](https://github.com/VinAIResearch/PhoBERT) bulunabilir.

## Kullanım örneği

```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
```

PhoBERT uygulaması, tokenizasyon dışında BERT ile aynıdır. Yapılandırma sınıfları ve parametreleri hakkında bilgi için [BERT belgeleri](bert)ne başvurun. PhoBERT'e özgü tokenizer aşağıda belgelenmiştir.

## 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)
```

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

**Parametreler:**

vocab_file (`str`) : Sözlük dosyasının yolu.

merges_file (`str`) : Birleştirme dosyasının yolu.

bos_token (`str`, *isteğe bağlı*, varsayılan `"<s>"`) : Ön eğitim sırasında kullanılan dizinin başlangıç jetonu. Bir dizi sınıflandırıcı jetonu olarak kullanılabilir. Özel jetonlar kullanılarak bir dizi oluşturulduğunda, dizinin başlangıcı için kullanılan jeton bu değildir. Kullanılan jeton `cls_token`'dur.

eos_token (`str`, *isteğe bağlı*, varsayılan `"</s>"`) : Sıra sonu belirteci. Özel belirteçler kullanılarak bir sıra oluşturulduğunda, sıra sonu için kullanılan belirteç bu değildir. Kullanılan belirteç `sep_token`'tur.

sep_token (`str`, *isteğe bağlı*, varsayılan `"</s>"`) : Birden fazla diziden bir dizi oluşturulurken kullanılan ayraç belirteci, örneğin dizi sınıflandırması için iki dizi veya soru cevaplamada bir metin ve bir soru için. Özel belirteçlerle oluşturulan bir dizinin son belirteci olarak da kullanılır.

cls_token (`str`, *isteğe bağlı*, varsayılan `"<s>"`) : Sıralı sınıflandırma (token başına sınıflandırma yerine tüm sıranın sınıflandırılması) yapılırken kullanılan sınıflandırıcı jetonu. Özel jetonlarla oluşturulduğunda sıranın ilk jetonudur.

unk_token (`str`, *isteğe bağlı*, varsayılan `"<unk>"`) : Bilinmeyen token. Sözlükte yer almayan bir token, bir kimliğe dönüştürülemez ve bunun yerine bu token olarak ayarlanır.

pad_token (`str`, *isteğe bağlı*, varsayılan `"<pad>"`) : Dolgu için kullanılan jeton, örneğin farklı uzunluklardaki dizileri toplu işleme (batching) sırasında.

mask_token (`str`, *isteğe bağlı*, varsayılan `"<mask>"`) : Değerleri maskelemek için kullanılan belirteç. Bu, modelin maskeli dil modelleme ile eğitildiğinde kullanılan belirteçtir. Modelin tahmin etmeye çalışacağı belirteç budur.

PhoBERT tokenizer'ı oluşturun. Byte-Pair-Encoding tabanlıdır.

Bu tokenizer, ana yöntemlerin çoğunu içeren [PreTrainedTokenizer](/docs/transformers/v5.23.0/tr/main_classes/tokenizer#transformers.PythonBackend) sınıfından devralır. Kullanıcıların bu yöntemler hakkında daha fazla bilgi için bu üst sınıfa başvurması gerekir.

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

```python
add_from_file(f)
```

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

Mevcut bir sözlüğü bir metin dosyasından yükler ve sembollerini bu örneğe ekler.

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

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

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

**Parametreler:**

token_ids_0 (`list[int]`) : Özel jetonların ekleneceği kimliklerin listesi.

token_ids_1 (`list[int]`, *isteğe bağlı*) : Sıralı çiftler için isteğe bağlı ikinci kimlik listesi.

**Dönüş:** `list[int]`

Uygun özel jetonlarla [girdi kimlikleri](../glossary#input-ids) listesi.

Sıralı sınıflandırma görevleri için bir dizi veya dizi çiftinden model girdilerini birleştirerek ve özel jetonlar ekleyerek oluşturun. Bir PhoBERT dizisi aşağıdaki biçime sahiptir:

- tek dizi: `<s> X </s>`
- dizi çifti: `<s> A </s></s> B </s>`

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

```python
convert_tokens_to_string(tokens)
```

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

Bir dizi belirteci (dizgi) tek bir dizgide birleştirir.

#### 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[int], token_ids_1: list[int] | None = None)
```

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

**Parametreler:**

token_ids_0 (`list[int]`) : Kimlik listesi.

token_ids_1 (`list[int]`, *isteğe bağlı*) : Sıralı çiftler için isteğe bağlı ikinci kimlik listesi.

**Dönüş:** `list[int]`

Sıfırlar listesi.

Sıralama çifti sınıflandırma görevinde kullanılacak şekilde, iletilen iki diziden bir maske oluşturun. PhoBERT, token türü kimliklerini kullanmadığından, sıfırlardan oluşan bir liste döndürülür.

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

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

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

**Parametreler:**

token_ids_0 (`list[int]`) : Kimlik listesi.

token_ids_1 (`list[int]`, *isteğe bağlı*) : Sıralı çiftler için isteğe bağlı ikinci kimlik listesi.

already_has_special_tokens (`bool`, *isteğe bağlı*, varsayılan `False`) : Token listesinin, model için özel token'larla zaten biçimlendirilmiş olup olmadığı.

**Dönüş:** `list[int]`

[0, 1] aralığında tamsayıların bir listesi: özel bir jeton için 1, bir dizi jetonu için 0.

Özel token eklenmemiş bir token listesinden dizi kimliklerini alır. Bu yöntem, tokenizer'ın `prepare_for_model` yöntemi kullanılarak özel token eklenirken çağrılır.

