# PhoBERT

## نظرة عامة

قُدِّم نموذج PhoBERT في [PhoBERT: Pre-trained language models for Vietnamese](https://huggingface.co/papers/2003.00744) من قِبل Dat Quoc Nguyen وAnh Tuan Nguyen.

المستخلص من الورقة البحثية هو كالتالي:

*نقدّم PhoBERT بإصدارين، هما PhoBERT-base وPhoBERT-large، وهما أول نماذج لغوية أحادية اللغة واسعة النطاق متاحة للعامة ومُدرَّبة مسبقاً للغة الفيتنامية. تُظهر النتائج التجريبية أن PhoBERT يتفوق باستمرار على أفضل نموذج متعدد اللغات المُدرَّب مسبقاً حديثاً وهو XLM-R (Conneau et al., 2020)، ويُحسّن مستوى الأداء الحالي في مهام معالجة اللغة الطبيعية الفيتنامية المحددة، بما في ذلك وسم أجزاء الكلام، وتحليل الاعتمادية، والتعرف على الكيانات المسمّاة، والاستدلال اللغوي الطبيعي.*

تمت مساهمة هذا النموذج من قِبل [dqnguyen](https://huggingface.co/dqnguyen). يمكن العثور على الكود الأصلي [هنا](https://github.com/VinAIResearch/PhoBERT).

## مثال على الاستخدام

```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 هو نفسه تنفيذ BERT، باستثناء عملية تقسيم الرموز. راجع [توثيق BERT](bert) للحصول على معلومات حول فئات التهيئة ومعاييرها. موثّق مُقسّم الرموز الخاص بـ PhoBERT أدناه.

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

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/models/phobert/tokenization_phobert.py#L49)

**المعاملات:**

vocab_file (`str`) : مسار ملف المفردات.

merges_file (`str`) : مسار ملف الدمج.

bos_token (`str`، *اختياري*، القيمة الافتراضية `"<s>"`) : رمز بداية التسلسل الذي تم استخدامه أثناء التدريب المسبق. يمكن استخدامه كرمز مصنف التسلسل. عند بناء تسلسل باستخدام الرموز الخاصة، هذا ليس الرمز المستخدم لبداية التسلسل. الرمز المستخدم هو `cls_token`.

eos_token (`str`، *اختياري*، القيمة الافتراضية `"</s>"`) : رمز نهاية التسلسل. عند بناء تسلسل باستخدام الرموز الخاصة، هذا ليس الرمز المستخدم لنهاية التسلسل. الرمز المستخدم هو `sep_token`.

sep_token (`str`، *اختياري*، الافتراضي هو `"</s>"`) : رمز الفاصل، الذي يُستخدم عند بناء تسلسل من عدة تسلسلات، مثل تسلسلين لتصنيف التسلسلات، أو نص وسؤال للإجابة على الأسئلة. كما يُستخدم كآخر رمز في تسلسل مبني برموز خاصة.

cls_token (`str`، *اختياري*، القيمة الافتراضية `"<s>"`) : رمز التصنيف الذي يُستخدم عند إجراء تصنيف التسلسل (تصنيف التسلسل بأكمله بدلاً من تصنيف كل رمز على حدة). وهو الرمز الأول في التسلسل عند بناؤه باستخدام الرموز الخاصة.

unk_token (`str`، *اختياري*، القيمة الافتراضية `"<unk>"`) : رمز المجهول. الرمز غير الموجود في قاموس الكلمات لا يمكن تحويله إلى معرّف، لذا يُعيَّن هذا الرمز بدلاً منه.

pad_token (`str`، *اختياري*، القيمة الافتراضية هي `"<pad>"`) : الرمز المستخدم للتعبئة، على سبيل المثال عند تجميع تسلسلات ذات أطوال مختلفة.

mask_token (`str`، *اختياري*، القيمة الافتراضية `"<mask>"`) : الرمز المستخدم لإخفاء القيم. هذا هو الرمز المستخدم عند تدريب هذا النموذج باستخدام نمذجة اللغة المقنّعة. وهو الرمز الذي سيحاول النموذج التنبؤ به.

إنشاء مُجزِّئ PhoBERT. يعتمد على ترميز زوج البايت.

يرث هذا المُجزِّئ من [PreTrainedTokenizer](/docs/transformers/main/ar/main_classes/tokenizer#transformers.PythonBackend) التي تحتوي على معظم الطرق الرئيسية. ينبغي للمستخدمين الرجوع إلى هذه الفئة الأصلية لمزيد من المعلومات حول تلك الطرق.

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

```python
add_from_file(f)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/models/phobert/tokenization_phobert.py#L325)

يحمّل قاموسًا موجودًا مسبقًا من ملف نصي ويضيف رموزه إلى هذه النسخة.

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

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/models/phobert/tokenization_phobert.py#L144)

**المعاملات:**

token_ids_0 (`list[int]`) : قائمة بالمعرّفات التي ستُضاف إليها الرموز الخاصة.

token_ids_1 (`list[int]`، *اختياري*) : قائمة ثانية اختيارية من المعرّفات لأزواج التسلسلات.

**يعيد:** `list[int]`

قائمة [معرفات الإدخال](../glossary#input-ids) مع الرموز الخاصة المناسبة.

PhoBERT

- تسلسل واحد: `<s> X </s>`
- زوج من التسلسلات: `<s> A </s></s> B </s>`

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

```python
convert_tokens_to_string(tokens)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/models/phobert/tokenization_phobert.py#L291)

يحوّل تسلسل الرموز (نص) إلى نص واحد.

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

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/models/phobert/tokenization_phobert.py#L198)

**المعاملات:**

token_ids_0 (`list[int]`) : قائمة من المعرّفات.

token_ids_1 (`list[int]`، *اختياري*) : قائمة ثانية اختيارية من المعرّفات لأزواج التسلسلات.

**يعيد:** `list[int]`

قائمة من الأصفار.

أنشئ قناعًا من التسلسلين المُمرَّرين لاستخدامه في مهمة تصنيف أزواج التسلسلات. لا يستخدم PhoBERT معرّفات أنواع الرموز، لذلك يُعاد قائمة من الأصفار.

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

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/models/phobert/tokenization_phobert.py#L170)

**المعاملات:**

token_ids_0 (`list[int]`) : قائمة من المعرّفات.

token_ids_1 (`list[int]`، *اختياري*) : قائمة ثانية اختيارية من المعرّفات لأزواج التسلسلات.

already_has_special_tokens (`bool`، *اختياري*، القيمة الافتراضية `False`) : ما إذا كانت قائمة الرموز مُنسّقة مسبقًا برموز خاصة للنموذج أم لا.

**يعيد:** `list[int]`

قائمة من الأعداد الصحيحة في المدى [0, 1]: 1 للرمز الخاص، و0 لرمز التسلسل.

استرجاع معرّفات التسلسل من قائمة رموز لم تُضف إليها رموز خاصة. يُستدعى هذا الأسلوب عند إضافة رموز خاصة باستخدام أسلوب `prepare_for_model` في tokenizer.

