Update README.md
Browse files
README.md
CHANGED
|
@@ -34,7 +34,7 @@ Meno-Tiny-0.1 was specifically "Russified" during the fine-tuning stage, but it
|
|
| 34 |
#### 1. Example of communication in English
|
| 35 |
|
| 36 |
```python
|
| 37 |
-
from transformers import AutoModelForCausalLM, AutoTokenizer
|
| 38 |
|
| 39 |
model_name = "bond005/meno-tiny-0.1"
|
| 40 |
|
|
@@ -44,6 +44,7 @@ model = AutoModelForCausalLM.from_pretrained(
|
|
| 44 |
device_map="auto"
|
| 45 |
)
|
| 46 |
tokenizer = AutoTokenizer.from_pretrained(model_name)
|
|
|
|
| 47 |
|
| 48 |
prompt = "Give me a short introduction to large language model." # in English
|
| 49 |
messages = [
|
|
@@ -59,7 +60,7 @@ model_inputs = tokenizer([text], return_tensors="pt").to(model.device)
|
|
| 59 |
|
| 60 |
generated_ids = model.generate(
|
| 61 |
**model_inputs,
|
| 62 |
-
|
| 63 |
)
|
| 64 |
generated_ids = [
|
| 65 |
output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
|
|
@@ -72,7 +73,7 @@ print(response)
|
|
| 72 |
#### 2. Example of communication in Russian
|
| 73 |
|
| 74 |
```python
|
| 75 |
-
from transformers import AutoModelForCausalLM, AutoTokenizer
|
| 76 |
|
| 77 |
model_name = "bond005/meno-tiny-0.1"
|
| 78 |
|
|
@@ -82,6 +83,7 @@ model = AutoModelForCausalLM.from_pretrained(
|
|
| 82 |
device_map="auto"
|
| 83 |
)
|
| 84 |
tokenizer = AutoTokenizer.from_pretrained(model_name)
|
|
|
|
| 85 |
|
| 86 |
prompt = "Напиши краткое введение в большие языковые модели." # in Russian
|
| 87 |
messages = [
|
|
@@ -97,7 +99,7 @@ model_inputs = tokenizer([text], return_tensors="pt").to(model.device)
|
|
| 97 |
|
| 98 |
generated_ids = model.generate(
|
| 99 |
**model_inputs,
|
| 100 |
-
|
| 101 |
)
|
| 102 |
generated_ids = [
|
| 103 |
output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
|
|
@@ -109,12 +111,21 @@ print(response)
|
|
| 109 |
|
| 110 |
## Abilities of Meno-Tiny-0.1
|
| 111 |
|
| 112 |
-
Using Meno-Tiny-0.1 with different system and user prompts allows you to discover its various abilities.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 113 |
|
| 114 |
#### 1. The answer to the question about the document
|
| 115 |
|
| 116 |
```python
|
| 117 |
-
from transformers import AutoModelForCausalLM, AutoTokenizer
|
| 118 |
|
| 119 |
model_name = "bond005/meno-tiny-0.1"
|
| 120 |
|
|
@@ -124,6 +135,7 @@ model = AutoModelForCausalLM.from_pretrained(
|
|
| 124 |
device_map="auto"
|
| 125 |
)
|
| 126 |
tokenizer = AutoTokenizer.from_pretrained(model_name)
|
|
|
|
| 127 |
|
| 128 |
prompt = "Ответь на вопрос по тексту.\n\nВопрос: {question}\n\nТекст: {context}".format(
|
| 129 |
question="Где живут пингвины?",
|
|
@@ -142,7 +154,7 @@ model_inputs = tokenizer([text], return_tensors="pt").to(model.device)
|
|
| 142 |
|
| 143 |
generated_ids = model.generate(
|
| 144 |
**model_inputs,
|
| 145 |
-
|
| 146 |
)
|
| 147 |
generated_ids = [
|
| 148 |
output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
|
|
@@ -155,7 +167,7 @@ print(response)
|
|
| 155 |
#### 2. Summarization
|
| 156 |
|
| 157 |
```python
|
| 158 |
-
from transformers import AutoModelForCausalLM, AutoTokenizer
|
| 159 |
|
| 160 |
model_name = "bond005/meno-tiny-0.1"
|
| 161 |
|
|
@@ -165,6 +177,7 @@ model = AutoModelForCausalLM.from_pretrained(
|
|
| 165 |
device_map="auto"
|
| 166 |
)
|
| 167 |
tokenizer = AutoTokenizer.from_pretrained(model_name)
|
|
|
|
| 168 |
|
| 169 |
prompt = "Стали известны результаты, полученные открытой системой «Писец» на ежегодной акции «Тотальный диктант», которая состоялась 20 апреля. Напомним, что «Писец» был разработан научным сотрудником Лаборатории прикладных цифровых технологий Международного научно-образовательного математического центра НГУ и сооснователем стартапа «Сибирские нейросети» Иваном Бондаренко. Впервые искусственный интеллект соревновался в грамотности с человеческим в рамках задачи диктанта, и создатель «Писца» предполагал, что положительной оценки тот не получит — скорее всего, система допустит минимум орфографических ошибок, однако с расставлением знаков препинания вряд ли справится. \n\nРазработчикам «Писца» было важно собрать статистику о разнообразии совершаемых им ошибок и неточностей, чтобы в дальнейшем усовершенствовать систему. Результаты оказались неожиданными, но закономерными – «Писец» вполне удовлетворительно расставил запятые и разбил текст на абзацы. Для этого его специально научили улавливать в речи «кодовые фразы» вроде «пишем с красной строки» или «переходим на новый абзац». В этих целях использовалась отдельная нейросеть, обученная на базе Longformer выделять такие «внесюжетные» вставки наподобие системы NER (Named Entity Recognition - распознавание именованных сущностей). Для обучения использовался синтетический текстовый корпус. Сам же «Писец» использовал в своей работе связку Wav2Vec2-Large-Ru-Golos + Whisper-Podlodka (о Wav2Vec2-Large-Ru-Golos мы ранее писали https://www.nsu.ru/n/media/news/nauka/razrabotannuyu-professorom-ngu-model-raspoznavaniya-rechi-nauchili-razlichat-emotsii, а Whisper-Podlodka является новой моделью). Однако галлюцинаций избежать не удалось.\n\nГаллюцинация — это ответ авторегрессионной нейросетевой модели языка, который корректен грамматически, но неверен семантически (не соответствует входному запросу по смыслу)."
|
| 170 |
messages = [
|
|
@@ -180,7 +193,7 @@ model_inputs = tokenizer([text], return_tensors="pt").to(model.device)
|
|
| 180 |
|
| 181 |
generated_ids = model.generate(
|
| 182 |
**model_inputs,
|
| 183 |
-
|
| 184 |
)
|
| 185 |
generated_ids = [
|
| 186 |
output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
|
|
@@ -193,7 +206,7 @@ print(response)
|
|
| 193 |
#### 3. Anaphora resolution in dialogue (with few-shot prompting)
|
| 194 |
|
| 195 |
```python
|
| 196 |
-
from transformers import AutoModelForCausalLM, AutoTokenizer
|
| 197 |
|
| 198 |
model_name = "bond005/meno-tiny-0.1"
|
| 199 |
|
|
@@ -203,6 +216,7 @@ model = AutoModelForCausalLM.from_pretrained(
|
|
| 203 |
device_map="auto"
|
| 204 |
)
|
| 205 |
tokenizer = AutoTokenizer.from_pretrained(model_name)
|
|
|
|
| 206 |
|
| 207 |
user_prompt = "User: Кто сейчас ректор Новосибирского государственного университета?\nAssistant: Ректором Новосибирского государственного университета является Михаил Петрович Федорук, академик Российской академии наук, доктор физико-математических наук, профессор.\nUser: Какие у него научные интересы?"
|
| 208 |
few_shots_for_anaphora = [
|
|
@@ -228,7 +242,7 @@ model_inputs = tokenizer([text], return_tensors="pt").to(model.device)
|
|
| 228 |
|
| 229 |
generated_ids = model.generate(
|
| 230 |
**model_inputs,
|
| 231 |
-
|
| 232 |
)
|
| 233 |
generated_ids = [
|
| 234 |
output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
|
|
@@ -241,7 +255,7 @@ print(response)
|
|
| 241 |
### 4. Correction of speech recognition output (with few-shot prompting)
|
| 242 |
|
| 243 |
```python
|
| 244 |
-
from transformers import AutoModelForCausalLM, AutoTokenizer
|
| 245 |
|
| 246 |
model_name = "bond005/meno-tiny-0.1"
|
| 247 |
|
|
@@ -251,8 +265,9 @@ model = AutoModelForCausalLM.from_pretrained(
|
|
| 251 |
device_map="auto"
|
| 252 |
)
|
| 253 |
tokenizer = AutoTokenizer.from_pretrained(model_name)
|
|
|
|
| 254 |
|
| 255 |
-
user_prompt = "то есть мы в каждый момент времени знаем про звук еще и какое то такое распределение частот и связанное это с тем что наше ухо на самом деле примерно также и воспринимать звук то есть мы не просто
|
| 256 |
few_shots_for_ASR_correction = [
|
| 257 |
{"role": "user", "content": "вы выборском районе города проводится проверка по факту нападению на квартиру"},
|
| 258 |
{"role": "assistant", "content": "В Выборгском районе города проводится проверка по факту нападения на квартиру."},
|
|
@@ -278,7 +293,7 @@ model_inputs = tokenizer([text], return_tensors="pt").to(model.device)
|
|
| 278 |
|
| 279 |
generated_ids = model.generate(
|
| 280 |
**model_inputs,
|
| 281 |
-
|
| 282 |
)
|
| 283 |
generated_ids = [
|
| 284 |
output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
|
|
|
|
| 34 |
#### 1. Example of communication in English
|
| 35 |
|
| 36 |
```python
|
| 37 |
+
from transformers import AutoModelForCausalLM, AutoTokenizer, GenerationConfig
|
| 38 |
|
| 39 |
model_name = "bond005/meno-tiny-0.1"
|
| 40 |
|
|
|
|
| 44 |
device_map="auto"
|
| 45 |
)
|
| 46 |
tokenizer = AutoTokenizer.from_pretrained(model_name)
|
| 47 |
+
gen_config = GenerationConfig.from_pretrained(model_name)
|
| 48 |
|
| 49 |
prompt = "Give me a short introduction to large language model." # in English
|
| 50 |
messages = [
|
|
|
|
| 60 |
|
| 61 |
generated_ids = model.generate(
|
| 62 |
**model_inputs,
|
| 63 |
+
generation_config=gen_config
|
| 64 |
)
|
| 65 |
generated_ids = [
|
| 66 |
output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
|
|
|
|
| 73 |
#### 2. Example of communication in Russian
|
| 74 |
|
| 75 |
```python
|
| 76 |
+
from transformers import AutoModelForCausalLM, AutoTokenizer, GenerationConfig
|
| 77 |
|
| 78 |
model_name = "bond005/meno-tiny-0.1"
|
| 79 |
|
|
|
|
| 83 |
device_map="auto"
|
| 84 |
)
|
| 85 |
tokenizer = AutoTokenizer.from_pretrained(model_name)
|
| 86 |
+
gen_config = GenerationConfig.from_pretrained(model_name)
|
| 87 |
|
| 88 |
prompt = "Напиши краткое введение в большие языковые модели." # in Russian
|
| 89 |
messages = [
|
|
|
|
| 99 |
|
| 100 |
generated_ids = model.generate(
|
| 101 |
**model_inputs,
|
| 102 |
+
generation_config=gen_config
|
| 103 |
)
|
| 104 |
generated_ids = [
|
| 105 |
output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
|
|
|
|
| 111 |
|
| 112 |
## Abilities of Meno-Tiny-0.1
|
| 113 |
|
| 114 |
+
Using Meno-Tiny-0.1 with different system and user prompts allows you to discover its various abilities. The main tasks that Meno-Tiny-0.1 can solve, including in the few-shot prompting mode, are:
|
| 115 |
+
|
| 116 |
+
- Answering questions about the text;
|
| 117 |
+
- Summarization;
|
| 118 |
+
- Determining text toxicity and detoxifying the text;
|
| 119 |
+
- Anaphora resolution;
|
| 120 |
+
- Correcting speech recognition errors;
|
| 121 |
+
- and so on.
|
| 122 |
+
|
| 123 |
+
Below are some examples of how to communicate with Meno-Tiny-0.1 in Russian in order to solve a variety of specialized tasks.
|
| 124 |
|
| 125 |
#### 1. The answer to the question about the document
|
| 126 |
|
| 127 |
```python
|
| 128 |
+
from transformers import AutoModelForCausalLM, AutoTokenizer, GenerationConfig
|
| 129 |
|
| 130 |
model_name = "bond005/meno-tiny-0.1"
|
| 131 |
|
|
|
|
| 135 |
device_map="auto"
|
| 136 |
)
|
| 137 |
tokenizer = AutoTokenizer.from_pretrained(model_name)
|
| 138 |
+
gen_config = GenerationConfig.from_pretrained(model_name)
|
| 139 |
|
| 140 |
prompt = "Ответь на вопрос по тексту.\n\nВопрос: {question}\n\nТекст: {context}".format(
|
| 141 |
question="Где живут пингвины?",
|
|
|
|
| 154 |
|
| 155 |
generated_ids = model.generate(
|
| 156 |
**model_inputs,
|
| 157 |
+
generation_config=gen_config
|
| 158 |
)
|
| 159 |
generated_ids = [
|
| 160 |
output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
|
|
|
|
| 167 |
#### 2. Summarization
|
| 168 |
|
| 169 |
```python
|
| 170 |
+
from transformers import AutoModelForCausalLM, AutoTokenizer, GenerationConfig
|
| 171 |
|
| 172 |
model_name = "bond005/meno-tiny-0.1"
|
| 173 |
|
|
|
|
| 177 |
device_map="auto"
|
| 178 |
)
|
| 179 |
tokenizer = AutoTokenizer.from_pretrained(model_name)
|
| 180 |
+
gen_config = GenerationConfig.from_pretrained(model_name)
|
| 181 |
|
| 182 |
prompt = "Стали известны результаты, полученные открытой системой «Писец» на ежегодной акции «Тотальный диктант», которая состоялась 20 апреля. Напомним, что «Писец» был разработан научным сотрудником Лаборатории прикладных цифровых технологий Международного научно-образовательного математического центра НГУ и сооснователем стартапа «Сибирские нейросети» Иваном Бондаренко. Впервые искусственный интеллект соревновался в грамотности с человеческим в рамках задачи диктанта, и создатель «Писца» предполагал, что положительной оценки тот не получит — скорее всего, система допустит минимум орфографических ошибок, однако с расставлением знаков препинания вряд ли справится. \n\nРазработчикам «Писца» было важно собрать статистику о разнообразии совершаемых им ошибок и неточностей, чтобы в дальнейшем усовершенствовать систему. Результаты оказались неожиданными, но закономерными – «Писец» вполне удовлетворительно расставил запятые и разбил текст на абзацы. Для этого его специально научили улавливать в речи «кодовые фразы» вроде «пишем с красной строки» или «переходим на новый абзац». В этих целях использовалась отдельная нейросеть, обученная на базе Longformer выделять такие «внесюжетные» вставки наподобие системы NER (Named Entity Recognition - распознавание именованных сущностей). Для обучения использовался синтетический текстовый корпус. Сам же «Писец» использовал в своей работе связку Wav2Vec2-Large-Ru-Golos + Whisper-Podlodka (о Wav2Vec2-Large-Ru-Golos мы ранее писали https://www.nsu.ru/n/media/news/nauka/razrabotannuyu-professorom-ngu-model-raspoznavaniya-rechi-nauchili-razlichat-emotsii, а Whisper-Podlodka является новой моделью). Однако галлюцинаций избежать не удалось.\n\nГаллюцинация — это ответ авторегрессионной нейросетевой модели языка, который корректен грамматически, но неверен семантически (не соответствует входному запросу по смыслу)."
|
| 183 |
messages = [
|
|
|
|
| 193 |
|
| 194 |
generated_ids = model.generate(
|
| 195 |
**model_inputs,
|
| 196 |
+
generation_config=gen_config
|
| 197 |
)
|
| 198 |
generated_ids = [
|
| 199 |
output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
|
|
|
|
| 206 |
#### 3. Anaphora resolution in dialogue (with few-shot prompting)
|
| 207 |
|
| 208 |
```python
|
| 209 |
+
from transformers import AutoModelForCausalLM, AutoTokenizer, GenerationConfig
|
| 210 |
|
| 211 |
model_name = "bond005/meno-tiny-0.1"
|
| 212 |
|
|
|
|
| 216 |
device_map="auto"
|
| 217 |
)
|
| 218 |
tokenizer = AutoTokenizer.from_pretrained(model_name)
|
| 219 |
+
gen_config = GenerationConfig.from_pretrained(model_name)
|
| 220 |
|
| 221 |
user_prompt = "User: Кто сейчас ректор Новосибирского государственного университета?\nAssistant: Ректором Новосибирского государственного университета является Михаил Петрович Федорук, академик Российской академии наук, доктор физико-математических наук, профессор.\nUser: Какие у него научные интересы?"
|
| 222 |
few_shots_for_anaphora = [
|
|
|
|
| 242 |
|
| 243 |
generated_ids = model.generate(
|
| 244 |
**model_inputs,
|
| 245 |
+
generation_config=gen_config
|
| 246 |
)
|
| 247 |
generated_ids = [
|
| 248 |
output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
|
|
|
|
| 255 |
### 4. Correction of speech recognition output (with few-shot prompting)
|
| 256 |
|
| 257 |
```python
|
| 258 |
+
from transformers import AutoModelForCausalLM, AutoTokenizer, GenerationConfig
|
| 259 |
|
| 260 |
model_name = "bond005/meno-tiny-0.1"
|
| 261 |
|
|
|
|
| 265 |
device_map="auto"
|
| 266 |
)
|
| 267 |
tokenizer = AutoTokenizer.from_pretrained(model_name)
|
| 268 |
+
gen_config = GenerationConfig.from_pretrained(model_name)
|
| 269 |
|
| 270 |
+
user_prompt = "то есть мы в каждый момент времени знаем про звук еще и какое то такое распределение частот и связанное это с тем что наше ухо на самом деле примерно также и воспринимать звук то есть мы не просто понимаем что вот где то там громче где то тише а наше уху еще понимает что вот этот звук выше этот ниже этот голос боле высокий этот голос низки"
|
| 271 |
few_shots_for_ASR_correction = [
|
| 272 |
{"role": "user", "content": "вы выборском районе города проводится проверка по факту нападению на квартиру"},
|
| 273 |
{"role": "assistant", "content": "В Выборгском районе города проводится проверка по факту нападения на квартиру."},
|
|
|
|
| 293 |
|
| 294 |
generated_ids = model.generate(
|
| 295 |
**model_inputs,
|
| 296 |
+
generation_config=gen_config
|
| 297 |
)
|
| 298 |
generated_ids = [
|
| 299 |
output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
|