Mxode commited on
Commit
1b12f01
·
1 Parent(s): 3db9ae0

upload model

Browse files
README.md CHANGED
@@ -1,3 +1,82 @@
1
- ---
2
- license: gpl-3.0
3
- ---
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ license: gpl-3.0
3
+ datasets:
4
+ - wmt/wmt19
5
+ language:
6
+ - en
7
+ - zh
8
+ base_model: Mxode/NanoLM-0.5B-Base
9
+ pipeline_tag: translation
10
+ tags:
11
+ - text-generation-inference
12
+ ---
13
+ # NanoTranslator-immersive_translate-0.5B
14
+
15
+ English | [简体中文](README_zh-CN.md)
16
+
17
+ ## Introduction
18
+
19
+ NanoTranslator-immersive_translate-0.5B is a model specifically designed for **Chinese-English bilingual** translation, trained on [wmt-19](https://huggingface.co/datasets/wmt/wmt19) and [BiST](https://huggingface.co/datasets/Mxode/BiST), based on [Qwen2-0.5B-Instruct](https://huggingface.co/Qwen/Qwen2-0.5B-Instruct).
20
+
21
+ This model is trained following the [Immersive Translate](https://immersivetranslate.com/) prompt format and can be deployed as an OpenAI format interface using tools like vllm and lmdeploy for utilization.
22
+
23
+ ## How to use
24
+
25
+ Below is a method to call the model using transformers. The prompt follows the immersive translation format to ensure optimal results.
26
+
27
+ ```python
28
+ import torch
29
+ from typing import Literal
30
+ from transformers import AutoModelForCausalLM, AutoTokenizer
31
+
32
+ model_path = 'Mxode/NanoTranslator-immersive_translate-0.5B'
33
+
34
+ model = AutoModelForCausalLM.from_pretrained(model_path).to('cuda:0', torch.bfloat16)
35
+ tokenizer = AutoTokenizer.from_pretrained(model_path)
36
+
37
+ def translate(
38
+ text: str,
39
+ to: Literal["chinese", "english"] = "chinese",
40
+ **kwargs
41
+ ):
42
+ generation_args = dict(
43
+ max_new_tokens = kwargs.pop("max_new_tokens", 512),
44
+ do_sample = kwargs.pop("do_sample", True),
45
+ temperature = kwargs.pop("temperature", 0.55),
46
+ top_p = kwargs.pop("top_p", 0.8),
47
+ top_k = kwargs.pop("top_k", 40),
48
+ **kwargs
49
+ )
50
+
51
+ prompt = """Translate the following source text to {to}. Output translation directly without any additional text.
52
+ Source Text: {text}
53
+
54
+ Translated Text:"""
55
+
56
+ messages = [
57
+ {"role": "system", "content": "You are a professional, authentic machine translation engine."},
58
+ {"role": "user", "content": prompt.format(to=to, text=text)}
59
+ ]
60
+ inputs = tokenizer.apply_chat_template(
61
+ messages,
62
+ tokenize=False,
63
+ add_generation_prompt=True
64
+ )
65
+ model_inputs = tokenizer([inputs], return_tensors="pt").to(model.device)
66
+
67
+ generated_ids = model.generate(model_inputs.input_ids, **generation_args)
68
+ generated_ids = [
69
+ output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
70
+ ]
71
+
72
+ response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
73
+ return response
74
+
75
+ text = "After a long day at work, I love to unwind by cooking a nice dinner and watching my favorite TV series. It really helps me relax and recharge for the next day."
76
+ response = translate(text=text, to='chinese')
77
+ print(f'Translation: {response}')
78
+
79
+ """
80
+ Translation: 工作了一天,我喜欢吃一顿美味的晚餐,看我最喜欢的电视剧,这样做有助于我放松,补充能量。
81
+ """
82
+ ```
README_zh-CN.md ADDED
@@ -0,0 +1,70 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # NanoTranslator-immersive_translate-365M
2
+
3
+ [English](README.md) | 简体中文
4
+
5
+ ## Introduction
6
+
7
+ NanoTranslator-immersive_translate-365M 是由 [NanoLM-365M-Base](https://huggingface.co/Mxode/NanoLM-365M-Base) 在 [wmt-19](https://huggingface.co/datasets/wmt/wmt19) 数据集上训练了 600 万数据得来的专门用于**中英双语**的翻译模型。
8
+
9
+ 此模型遵循[沉浸式翻译](https://immersivetranslate.com/)(Immersive Translate)的 prompt 格式进行训练,可以通过 vllm、lmdeploy 等方式部署为 OpenAI 格式接口,从而完成调用。
10
+
11
+ ## How to use
12
+
13
+ 下面是一个用 transformers 调用的方式,prompt 遵循沉浸式翻译以保持最佳效果。
14
+
15
+ ```python
16
+ import torch
17
+ from typing import Literal
18
+ from transformers import AutoModelForCausalLM, AutoTokenizer
19
+
20
+ model_path = 'Mxode/NanoTranslator-immersive_translate-365M'
21
+
22
+ model = AutoModelForCausalLM.from_pretrained(model_path).to('cuda:0', torch.bfloat16)
23
+ tokenizer = AutoTokenizer.from_pretrained(model_path)
24
+
25
+ def translate(
26
+ text: str,
27
+ to: Literal["chinese", "english"] = "chinese",
28
+ **kwargs
29
+ ):
30
+ generation_args = dict(
31
+ max_new_tokens = kwargs.pop("max_new_tokens", 512),
32
+ do_sample = kwargs.pop("do_sample", True),
33
+ temperature = kwargs.pop("temperature", 0.35),
34
+ top_p = kwargs.pop("top_p", 0.8),
35
+ top_k = kwargs.pop("top_k", 40),
36
+ **kwargs
37
+ )
38
+
39
+ prompt = """Translate the following source text to {to}. Output translation directly without any additional text.
40
+ Source Text: {text}
41
+
42
+ Translated Text:"""
43
+
44
+ messages = [
45
+ {"role": "system", "content": "You are a professional, authentic machine translation engine."},
46
+ {"role": "user", "content": prompt.format(to=to, text=text)}
47
+ ]
48
+ inputs = tokenizer.apply_chat_template(
49
+ messages,
50
+ tokenize=False,
51
+ add_generation_prompt=True
52
+ )
53
+ model_inputs = tokenizer([inputs], return_tensors="pt").to(model.device)
54
+
55
+ generated_ids = model.generate(model_inputs.input_ids, **generation_args)
56
+ generated_ids = [
57
+ output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
58
+ ]
59
+
60
+ response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
61
+ return response
62
+
63
+ text = "After a long day at work, I love to unwind by cooking a nice dinner and watching my favorite TV series. It really helps me relax and recharge for the next day."
64
+ response = translate(text=text, to='chinese')
65
+ print(f'Translation: {response}')
66
+
67
+ """
68
+ Translation: 工作了一天,我喜欢吃一顿美味的晚餐,看我最喜欢的电视剧,这样做有助于我放松,补充能量。
69
+ """
70
+ ```
added_tokens.json ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ {
2
+ "<|endoftext|>": 151643,
3
+ "<|im_end|>": 151645,
4
+ "<|im_start|>": 151644
5
+ }
config.json ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "_name_or_path": "Mxode/NanoTranslator-immersive_translate-0.5B",
3
+ "architectures": [
4
+ "Qwen2ForCausalLM"
5
+ ],
6
+ "attention_dropout": 0.0,
7
+ "bos_token_id": 151643,
8
+ "eos_token_id": 151645,
9
+ "hidden_act": "silu",
10
+ "hidden_size": 896,
11
+ "initializer_range": 0.02,
12
+ "intermediate_size": 4864,
13
+ "max_position_embeddings": 32768,
14
+ "max_window_layers": 24,
15
+ "model_type": "qwen2",
16
+ "num_attention_heads": 14,
17
+ "num_hidden_layers": 24,
18
+ "num_key_value_heads": 2,
19
+ "rms_norm_eps": 1e-06,
20
+ "rope_theta": 1000000.0,
21
+ "sliding_window": 32768,
22
+ "tie_word_embeddings": true,
23
+ "torch_dtype": "bfloat16",
24
+ "transformers_version": "4.42.0",
25
+ "use_cache": false,
26
+ "use_sliding_window": false,
27
+ "vocab_size": 151936
28
+ }
generation_config.json ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "bos_token_id": 151643,
3
+ "do_sample": true,
4
+ "eos_token_id": 151645,
5
+ "max_new_tokens": 2048,
6
+ "pad_token_id": 151643,
7
+ "repetition_penalty": 1.1,
8
+ "temperature": 0.7,
9
+ "top_k": 20,
10
+ "top_p": 0.8,
11
+ "transformers_version": "4.42.0"
12
+ }
merges.txt ADDED
The diff for this file is too large to render. See raw diff
 
model.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:690daed27703bfcb6a872c85c59415ed218cf762f6707e7e9e343fc6ddbcaf53
3
+ size 988097824
special_tokens_map.json ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "additional_special_tokens": [
3
+ "<|im_start|>",
4
+ "<|im_end|>"
5
+ ],
6
+ "eos_token": {
7
+ "content": "<|im_end|>",
8
+ "lstrip": false,
9
+ "normalized": false,
10
+ "rstrip": false,
11
+ "single_word": false
12
+ },
13
+ "pad_token": {
14
+ "content": "<|endoftext|>",
15
+ "lstrip": false,
16
+ "normalized": false,
17
+ "rstrip": false,
18
+ "single_word": false
19
+ }
20
+ }
tokenizer.json ADDED
The diff for this file is too large to render. See raw diff
 
tokenizer_config.json ADDED
@@ -0,0 +1,43 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "add_prefix_space": false,
3
+ "added_tokens_decoder": {
4
+ "151643": {
5
+ "content": "<|endoftext|>",
6
+ "lstrip": false,
7
+ "normalized": false,
8
+ "rstrip": false,
9
+ "single_word": false,
10
+ "special": true
11
+ },
12
+ "151644": {
13
+ "content": "<|im_start|>",
14
+ "lstrip": false,
15
+ "normalized": false,
16
+ "rstrip": false,
17
+ "single_word": false,
18
+ "special": true
19
+ },
20
+ "151645": {
21
+ "content": "<|im_end|>",
22
+ "lstrip": false,
23
+ "normalized": false,
24
+ "rstrip": false,
25
+ "single_word": false,
26
+ "special": true
27
+ }
28
+ },
29
+ "additional_special_tokens": [
30
+ "<|im_start|>",
31
+ "<|im_end|>"
32
+ ],
33
+ "bos_token": null,
34
+ "chat_template": "{% for message in messages %}{% if loop.first and messages[0]['role'] != 'system' %}{{ '<|im_start|>system\nYou are a helpful assistant.<|im_end|>\n' }}{% endif %}{{'<|im_start|>' + message['role'] + '\n' + message['content'] + '<|im_end|>' + '\n'}}{% endfor %}{% if add_generation_prompt %}{{ '<|im_start|>assistant\n' }}{% endif %}",
35
+ "clean_up_tokenization_spaces": false,
36
+ "eos_token": "<|im_end|>",
37
+ "errors": "replace",
38
+ "model_max_length": 32768,
39
+ "pad_token": "<|endoftext|>",
40
+ "split_special_tokens": false,
41
+ "tokenizer_class": "Qwen2Tokenizer",
42
+ "unk_token": null
43
+ }
vocab.json ADDED
The diff for this file is too large to render. See raw diff