File size: 10,762 Bytes
26e96ad
 
01b5257
 
 
 
 
 
 
 
 
 
 
26e96ad
 
01b5257
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
---
library_name: transformers
datasets:
- vilm/OpenOrca-Viet
- bkai-foundation-models/vi-alpaca
- 5CD-AI/Vietnamese-395k-meta-math-MetaMathQA-gg-translated
- 5CD-AI/Vietnamese-Locutusque-function-calling-chatml-gg-translated
- 5CD-AI/Vietnamese-1m5-kaist-CoT-gg-translated-unrefined
- 5CD-AI/Vietnamese-mabryCodes-tiny-cot-alpaca-gg-translated
- 5CD-AI/Vietnamese-nampdn-ai-tiny-webtext-gg-translated
- 5CD-AI/Vietnamese-Openorca-Multiplechoice-gg-translated
- 5CD-AI/Vietnamese-Multi-turn-Chat-Alpaca
- 5CD-AI/Visocial-Instructions
---

<div align="center">
  <img src="viet-sailor-4b-logo.png" width="700"/>
</div>

[Sailor-4B](https://huggingface.co/sail/Sailor-4B) 🌊 is a model that has undergone additional pre-training on datasets from Southeast Asian countries 🌏, resulting in impressive performance 🚀. Building on this foundation, we have fine-tuned the model with a specific focus on Vietnamese language capabilities 🇻🇳.

This is a good choice for models under 7B parameters on the VMLU leaderboard 📊.

## Training details 📚

The **1,000,000 samples** fine-tuning training dataset was meticulously sampled in part from the following datasets:
- [OpenOrca-Viet 🐋](https://huggingface.co/datasets/vilm/OpenOrca-Viet)
- [vi-alpaca 🦙](https://huggingface.co/datasets/bkai-foundation-models/vi-alpaca)
- [Vietnamese-395k-meta-math-MetaMathQA-gg-translated 📐](https://huggingface.co/datasets/5CD-AI/Vietnamese-395k-meta-math-MetaMathQA-gg-translated)
- [Vietnamese-Locutusque-function-calling-chatml-gg-translated 🧠](https://huggingface.co/datasets/5CD-AI/Vietnamese-Locutusque-function-calling-chatml-gg-translated)
- [Vietnamese-1m5-kaist-CoT-gg-translated-unrefined 🧵](https://huggingface.co/datasets/5CD-AI/Vietnamese-1m5-kaist-CoT-gg-translated-unrefined)
- [Vietnamese-mabryCodes-tiny-cot-alpaca-gg-translated 🧠](https://huggingface.co/datasets/5CD-AI/Vietnamese-mabryCodes-tiny-cot-alpaca-gg-translated)
- [Vietnamese-nampdn-ai-tiny-webtext-gg-translated 🧠](https://huggingface.co/datasets/5CD-AI/Vietnamese-nampdn-ai-tiny-webtext-gg-translated)
- [Vietnamese-Openorca-Multiplechoice-gg-translated 🐋](https://huggingface.co/datasets/5CD-AI/Vietnamese-Openorca-Multiplechoice-gg-translated)
- [Vietnamese-Multi-turn-Chat-Alpaca 💬](https://huggingface.co/datasets/5CD-AI/Vietnamese-Multi-turn-Chat-Alpaca)
- [Visocial-Instructions 💬](https://huggingface.co/datasets/5CD-AI/Visocial-Instructions)

## Benchmarks 📈

We evaluated our model using the VMLU leaderboard:

<div align="center">
  <img src="vmlu.png" width="1000"/>
</div>

| #  | MODEL                | CREATOR          | BASE MODEL          | STEM  | SOCIAL SCIENCE | HUMANITIES | OTHERS | AVG   |
|----|----------------------|------------------|---------------------|-------|----------------|------------|--------|-------|
| 1  | VNPTAI.IO-14B        | VNPT AI          | Qwen1.5-14B-Chat    | 51.64 | 61.75          | 58.09      | 54.51  | 55.83 |
| 2  | SeaLLM-7B-v2.5       | DAMO Academy     | llama-2-7b          | 49.35 | 60.66          | 55.95      | 49.05  | 53.30 |
| 3  | MI4uLLM-7B-Chat      | ML4U             | Mistral-7B-v0.1     | 44.72 | 58.69          | 56.86      | 52.36  | 52.08 |
| 4  | Vistral-7B-Chat      | UONLP x Ontocord | Mistral-7B-v0.1     | 43.32 | 57.02          | 55.12      | 48.01  | 50.07 |
| 5  | SDSRV-7B-chat        | SDSRV teams      | Mistral-7B-v0.1     | 36.29 | 60.55          | 55.95      | 49.05  | 48.55 |
| 6  | Arcanic Cono 1.5     | Arcanic AI       | Mistral-7B-v0.1     | 45.11 | 52.44          | 51.97      | 45.36  | 47.45 |
| 7  | SeaLLM-7b-v2         | DAMO Academy     | llama-2-7b          | 39.95 | 52.02          | 49.38      | 45.27  | 45.79 |
| <b>8  | <b>Viet-Sailor-4B-Instruct | <b>5CD-AI        | <b>Sailor-4B       | <b>36.83 | <b>49.13 | <b>48.18   | <b>41.76 | <b>43.24</b> |
| 9  | bloomz-7b1           | BigScience       | Bloom-7b1           | 32.63 | 45.73          | 41.85      | 39.89  | 38.87 |
| 10 | T-llama-7b           | FPTU HCM         | llama-2-7b          | 32.2  | 43.15          | 40.31      | 36.57  | 37.28 |
| 11 | vbd-llama2-7b-50b... | Vin BigData      | llama-2-7b          | 31.45 | 40.34          | 40.24      | 39.62  | 36.98 |
| .. | ......               | .....             | ....               | ...   | ...            | ...        | ...    | ...   |


## Examples
Function-calling
```
<|im_start|>system
Bạn là một trợ lý hữu ích với quyền truy cập vào các chức năng sau. Sử dụng chúng nếu cần thiết -{
    "name": "search_movies",
    "description": "Search for movies based on title or genre",
    "parameters": {
        "type": "object",
        "properties": {
            "title": {
                "type": "string",
                "description": "The title of the movie"
            },
            "genre": {
                "type": "string",
                "description": "The genre of the movie"
            }
        }
    }
}<|im_end|>
<|im_start|>question
Bạn có thể tìm cho tôi một bộ phim có tựa đề "Inception" được không?<|im_end|>
<|im_start|>answer
<function-call> {"name": "search_movies", "arguments": {"title": "Inception"}}<|im_end|>
<|im_start|>question
<function-response> {"movies": [{"title": "Inception", "genre": "Science Fiction", "director": "Christopher Nolan", "release_year": 2010}]}<|im_end|>
<|im_start|>answer
Tôi đã tìm thấy một bộ phim có tựa đề "Inception". Đó là một bộ phim Khoa học viễn tưởng của đạo diễn Christopher Nolan và được phát hành vào năm 2010.<|im_end|>
```
Sentiment analysis
```
<|im_start|>system
Bạn là trợ lý AI hữu ích<|im_end|>
<|im_start|>question
Bạn là trợ lý AI. Hãy phân loại cảm xúc của bình luận sau theo từng khía cạnh của chủ thể.
Bình luận: về cách ăn mặc của cô thì quá 😡 😡 . nhưng về cách nói chuyện thì rất 😍.<|im_end|>
<|im_start|>answer
Cảm xúc của bình luận này có thể được phân loại như sau: 
- Cảm xúc tiêu cực đối với cách ăn mặc của cô ấy: 😡
- Cảm xúc tích cực đối với cách nói chuyện của cô ấy: 😍<|im_end|>
```
Simple math
```
<|im_start|>system
Bạn là một trợ lý AI hữu ích. Một nhà toán học.<|im_end|>
<|im_start|>question
Trên sân có 2 con vịt và 9 con bò hỏi tổng cộng có mấy cái chân ?<|im_end|>
<|im_start|>answer
Tổng số chân trên sân là 11. Mỗi con vịt có 2 chân và mỗi con bò có 4 chân, vì vậy 2 con vịt có tổng cộng 2*2 = 4 chân và 9 con bò có tổng cộng 9*4 = 36 chân. Do đó, tổng số chân trên sân là 4+36 = 40.<|im_end|>
```
Writing
```
<|im_start|>system
Bạn là một trợ lý AI hữu ích, trung thực, trung lập. Hãy trả lời một cách đầy đủ <|im_end|>
<|im_start|>question
Người dùng sẽ cung cấp cho bạn một nhiệm vụ. Hãy thực hiện lần lượt 2 nhiệm vụ sau:
Bưới 1: Hãy mô tả ý nghĩa hình ảnh của chuỗi emoji 😡 👫 👨‍👩‍👦.
Bước 2: Hãy tạo 1 câu chuyện ngắn kết hợp đầy đủ ý nghĩa giữa chúng với nhau.<|im_end|>
<|im_start|>answer
Bước 1: Mô tả ý nghĩa hình ảnh của chuỗi emoji 😡 👫 👨‍👩‍👦.
Ý nghĩa hình ảnh của chuỗi emoji có thể được giải thích như sau:
 - 😡: Biểu tượng cảm xúc này thường được sử dụng để thể hiện sự buồn bã, đau khổ hoặc thất vọng. Trong trường hợp này, nó có thể biểu thị rằng ai đó đang trải qua một số cảm xúc tiêu cực.
 - 👫: Biểu tượng cảm xúc này thường được sử dụng để thể hiện tình yêu và sự quan tâm. Trong trường hợp này, nó có thể biểu thị rằng ai đó đang thể hiện tình yêu và sự quan tâm của họ đối với ai đó.
 - 👨‍👩‍👦: Biểu tượng cảm xúc này thường được sử dụng để thể hiện tình yêu gia đình. Trong trường hợp này, nó có thể biểu thị rằng ai đó đang thể hiện tình yêu và sự quan tâm của họ đối với một thành viên trong gia đình.
Bước 2: Tạo một câu chuyện ngắn kết hợp các biểu tượng cảm xúc với nhau.
Câu chuyện:  Trong một thị trấn nhỏ, nơi mọi người đều biết nhau, có một gia đình hạnh phúc sống trong một ngôi nhà nhỏ xinh xắn. Cha mẹ yêu thương và chăm sóc con cái của mình rất nhiều. Một ngày nọ, họ nhận được tin dữ rằng đứa con út của họ đã qua đời vì một căn bệnh hiếm gặp. Cả gia đình đều đau buồn, đặc biệt là cha mẹ của đứa trẻ. Họ cố gắng vượt qua nỗi đau bằng cách dành thời gian bên nhau, ôm nhau và chia sẻ những ký ức đẹp đẽ về đứa con yêu dấu của họ.<|im_end|>
```
## Requirements
The code of Sailor has been in the latest Hugging face transformers and we advise you to install `transformers>=4.37.0`.

## Quickstart

Here provides a code snippet to show you how to load the tokenizer and model and how to generate contents.

```python
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
device = "cuda"

model = AutoModelForCausalLM.from_pretrained(
    '5CD-AI/Viet-Sailor-4B-Instruct',
    torch_dtype=torch.bfloat16,
    device_map="auto"
)

tokenizer = AutoTokenizer.from_pretrained('5CD-AI/Viet-Sailor-4B-Instruct')
system_prompt= 'Bạn là một trợ lý AI hữu ích, rất thực tế, trung lập. Hãy trả lời một cách đầy đủ ý'

prompt = """Hãy phân loại cảm xúc của bình luận sau theo từng khía cạnh của chủ thể.
Bình luận: về cách ăn mặc của cô thì quá 😡 😡 . nhưng về cách nói chuyện thì rất 😍."""


messages = [
    {"role": "system", "content": system_prompt},
    {"role": "question", "content": prompt}
]
text = tokenizer.apply_chat_template(
    messages,
    tokenize=False,
    add_generation_prompt=True
)

model_inputs = tokenizer([text], return_tensors="pt").to(device)
input_ids = model_inputs.input_ids.to(device)

generated_ids = model.generate(
    input_ids,
    max_new_tokens=256,
    num_beams=3,
    top_k=20,
    top_p= 0.5,
    temperature=0.9,
    repetition_penalty = 1.5,
    length_penalty = 1.0,
    do_sample=True
)

generated_ids = [
    output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
]
response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
print(response)
```