# GPT-Sw3

## Tổng quan

Mô hình GPT-Sw3 lần đầu được đề xuất trong [Lessons Learned from GPT-SW3: Building the First Large-Scale Generative Language Model for Swedish](http://www.lrec-conf.org/proceedings/lrec2022/pdf/2022.lrec-1.376.pdf) của Ariel Ekgren, Amaru Cuba Gyllensten, Evangelia Gogoulou, Alice Heiman, Severine Verlinden, Joey Öhman, Fredrik Carlsson, Magnus Sahlgren.

Kể từ bài báo đầu tiên, các tác giả đã mở rộng công việc của mình và huấn luyện các mô hình mới trên các tập dữ liệu 1,2TB mới có tên là The Nordic Pile.

GPT-Sw3 là một bộ sưu tập các mô hình ngôn ngữ transformer chỉ có bộ giải mã (decoder-only) được huấn luyện trước, do AI Sweden phát triển với sự hợp tác của RISE và WASP WARA for Media and Language. GPT-Sw3 được huấn luyện trên một tập dữ liệu chứa 320B token bằng tiếng Thụy Điển, tiếng Na Uy, tiếng Đan Mạch, tiếng Iceland, tiếng Anh và mã lập trình. Mô hình được huấn luyện trước bằng mục tiêu mô hình hóa ngôn ngữ nhân quả (causal language modeling - CLM) sử dụng cài đặt NeMo Megatron GPT.

Mô hình này được đóng góp bởi [AI Sweden Models](https://huggingface.co/AI-Sweden-Models).

## Ví dụ sử dụng

```python
from transformers import AutoTokenizer, AutoModelForCausalLM

tokenizer = AutoTokenizer.from_pretrained("AI-Sweden-Models/gpt-sw3-356m")
model = AutoModelForCausalLM.from_pretrained("AI-Sweden-Models/gpt-sw3-356m", device_map="auto")

input_ids = tokenizer("Träd är fina för att", return_tensors="pt").to(model.device)["input_ids"]

generated_token_ids = model.generate(inputs=input_ids, max_new_tokens=10, do_sample=True)[0]

print(tokenizer.decode(generated_token_ids))
Träd är fina för att de är färgstarka. Men ibland är det fint
```

## Tài nguyên

- [Hướng dẫn cho tác vụ phân loại văn bản](../tasks/sequence_classification)
- [Hướng dẫn cho tác vụ phân loại token](../tasks/token_classification)
- [Hướng dẫn tác vụ mô hình hóa ngôn ngữ nhân quả](../tasks/language_modeling)

Cài đặt sử dụng `GPT2Model` kết hợp với `GPTSw3Tokenizer` của chúng tôi. Tham khảo [tài liệu GPT2Model](gpt2) để xem tham chiếu API và các ví dụ.

Lưu ý rằng sentencepiece là bắt buộc để sử dụng tokenizer của chúng tôi và có thể được cài đặt bằng `pip install transformers[sentencepiece]` hoặc `pip install sentencepiece`

## GPTSw3Tokenizer[[transformers.GPTSw3Tokenizer]]

#### transformers.GPTSw3Tokenizer[[transformers.GPTSw3Tokenizer]]

```python
transformers.GPTSw3Tokenizer(vocab_file, do_lower_case = False, remove_space = False, keep_accents = False, pad_token = None, unk_token = None, eos_token = None, bos_token = None, sp_model_kwargs: dict[str, typing.Any] | None = None, **kwargs)
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/models/gpt_sw3/tokenization_gpt_sw3.py#L21)

**Tham số:**

vocab_file (`str`) : tệp [SentencePiece](https://github.com/google/sentencepiece) (thường có phần mở rộng *.spm*) chứa từ vựng cần thiết để khởi tạo một tokenizer.

do_lower_case (`bool`, *tùy chọn*, mặc định là `False`) : Có nên chuyển đầu vào sang chữ thường khi phân tách token hay không.

remove_space (`bool`, *tùy chọn*, mặc định là `False`) : Có loại bỏ văn bản khi phân tách token (xóa các khoảng trắng thừa trước và sau chuỗi) hay không.

keep_accents (`bool`, *tùy chọn*, mặc định là `False`) : Có giữ dấu thanh khi phân tách token hay không.

pad_token (`str`, *tùy chọn*) : Token được sử dụng để đệm (padding), chẳng hạn khi xử lý các lô (batch) các chuỗi có độ dài khác nhau. Nếu không được cung cấp, giá trị mặc định sẽ là '' hoặc '' tùy thuộc vào kích thước của mô hình.

unk_token (`str`, *tùy chọn*) : Token không xác định. Token không có trong từ vựng không thể được chuyển đổi thành ID và sẽ được đặt thành token này thay thế. Nếu không được cung cấp, giá trị mặc định sẽ là ''.

eos_token (`str`, *tùy chọn*) : Token kết thúc chuỗi được nhìn thấy trong quá trình tiền huấn luyện. Nếu không được cung cấp, mặc định sẽ là '<|endoftext|>'

bos_token (`str`, *tùy chọn*) : Token bắt đầu chuỗi có thể được sử dụng cho tác vụ downstream, không được nhìn thấy trong quá trình pretraining. Nếu không được cung cấp, giá trị mặc định sẽ là '' hoặc '<|endoftext|>', tùy thuộc vào kích thước mô hình.

sp_model_kwargs (`dict`, *tùy chọn*) : Sẽ được truyền vào phương thức `SentencePieceProcessor.__init__()`. [Python wrapper for SentencePiece](https://github.com/google/sentencepiece/tree/master/python) có thể được sử dụng, trong số nhiều mục đích khác, để thiết lập:  - `enable_sampling`: Bật chuẩn hóa subword. - `nbest_size`: Tham số lấy mẫu cho unigram. Không hợp lệ cho BPE-Dropout.  - `nbest_size = {0,1}`: Không thực hiện lấy mẫu. - `nbest_size > 1`: lấy mẫu từ các kết quả nbest_size. - `nbest_size < 0`: giả định rằng nbest_size là vô hạn và lấy mẫu từ tất cả các giả thuyết (lattice) bằng thuật toán forward-filtering-and-backward-sampling.  - `alpha`: Tham số làm mượt cho việc lấy mẫu unigram, và xác suất dropout của các thao tác merge cho BPE-dropout.

sp_model (`SentencePieceProcessor`) : Bộ xử lý *SentencePiece* được sử dụng cho mọi phép chuyển đổi (chuỗi, token và ID).

whitespaces (`set`) : Các khoảng trắng được thay thế trong bước chuẩn hóa khoảng trắng ở tiền xử lý.

non_printing_characters_re (`Pattern`) : Biểu thức chính tắc đã biên dịch để loại bỏ các ký tự không in được trong tiền xử lý.

Xây dựng một tokenizer GPTSw3. Dựa trên [SentencePiece](https://github.com/google/sentencepiece).

Tokenizer này kế thừa từ [PreTrainedTokenizer](/docs/transformers/main/vi/main_classes/tokenizer#transformers.PythonBackend), lớp chứa hầu hết các phương thức chính. Người dùng nên tham khảo siêu lớp này để biết thêm thông tin về các phương thức đó.

Cách sử dụng ví dụ:
```python
>>> from transformers import GPTSw3Tokenizer

>>> tokenizer = GPTSw3Tokenizer.from_pretrained("AI-Sweden-Models/gpt-sw3-126m")
>>> tokenizer("Svenska är kul!")["input_ids"]
[1814, 377, 3617, 63504]
```

#### save_vocabulary[[transformers.GPTSw3Tokenizer.save_vocabulary]]

```python
save_vocabulary(save_directory: str, filename_prefix: str | None = None)
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/tokenization_utils_sentencepiece.py#L237)

**Tham số:**

save_directory (`str`) : Thư mục để lưu trữ từ vựng.

filename_prefix (`str`, *tùy chọn*) : Tiền tố tùy chọn để thêm vào tên của các tệp được lưu.

**Trả về:** `tuple(str)`

Đường dẫn đến các tệp đã lưu.

Lưu từ vựng sentencepiece (sao chép tệp gốc) vào một thư mục.

