Views
No views yet
transformers and we advise you to use the latest version of transformers.transformers<4.37.0, you will encounter the following error:KeyError: 'qwen2'apply_chat_template to show you how to load the tokenizer and model and how to generate content.1from transformers import AutoModelForCausalLM, AutoTokenizer, GenerationConfig
2
3model_name = "bond005/meno-tiny-0.1"
4
5model = AutoModelForCausalLM.from_pretrained(
6 model_name,
7 torch_dtype="auto",
8 device_map="auto"
9)
10tokenizer = AutoTokenizer.from_pretrained(model_name)
11gen_config = GenerationConfig.from_pretrained(model_name)
12
13prompt = "Give me a short introduction to large language model." # in English
14messages = [
15 {"role": "system", "content": "You are Meno, created by Ivan Bondarenko. You are a helpful assistant."},
16 {"role": "user", "content": prompt}
17]
18text = tokenizer.apply_chat_template(
19 messages,
20 tokenize=False,
21 add_generation_prompt=True
22)
23model_inputs = tokenizer([text], return_tensors="pt").to(model.device)
24
25generated_ids = model.generate(
26 **model_inputs,
27 generation_config=gen_config
28)
29generated_ids = [
30 output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
31]
32
33response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
34print(response)1from transformers import AutoModelForCausalLM, AutoTokenizer, GenerationConfig
2
3model_name = "bond005/meno-tiny-0.1"
4
5model = AutoModelForCausalLM.from_pretrained(
6 model_name,
7 torch_dtype="auto",
8 device_map="auto"
9)
10tokenizer = AutoTokenizer.from_pretrained(model_name)
11gen_config = GenerationConfig.from_pretrained(model_name)
12
13prompt = "Напиши краткое введение в большие языковые модели." # in Russian
14messages = [
15 {"role": "system", "content": "Ты - Менон, разработанный Иваном Бондаренко. Ты полезный ассистент."},
16 {"role": "user", "content": prompt}
17]
18text = tokenizer.apply_chat_template(
19 messages,
20 tokenize=False,
21 add_generation_prompt=True
22)
23model_inputs = tokenizer([text], return_tensors="pt").to(model.device)
24
25generated_ids = model.generate(
26 **model_inputs,
27 generation_config=gen_config
28)
29generated_ids = [
30 output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
31]
32
33response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
34print(response)1from transformers import AutoModelForCausalLM, AutoTokenizer, GenerationConfig
2
3model_name = "bond005/meno-tiny-0.1"
4
5model = AutoModelForCausalLM.from_pretrained(
6 model_name,
7 torch_dtype="auto",
8 device_map="auto"
9)
10tokenizer = AutoTokenizer.from_pretrained(model_name)
11gen_config = GenerationConfig.from_pretrained(model_name)
12
13prompt = "Ответь на вопрос по тексту.\n\nВопрос: {question}\n\nТекст: {context}".format(
14 question="Где живут пингвины?",
15 context="Ныне пингвины наиболее разнообразны на островах Субантарктики; в целом распространение группы связано с холодными океаническими течениями Южного полушария, вдоль которых пингвины проникают далеко на север – в субтропики Южной Америки (гумбольдтов и магелланов пингвины), Африки (очковый пингвин Spheniscus demersus), Австралии (малый пингвин) и даже к экваториальным Островам Галапагос (эндемичный галапагосский пингвин, Spheniscus mendiculus). На Фолклендских островах симпатрично обитают 5 видов. Лишь 3 вида – императорский, антарктический (Pygoscelis antarcticus) пингвины и пингвин Адели (Pygoscelis adeliae) – населяют береговую кромку ледового щита Антарктиды. Северная граница распространения большинства пингвинов определяется изотермой морской воды +15…+16 °С."
16)
17messages = [
18 {"role": "system", "content": "Ты - Менон, разработанный Иваном Бондаренко. Ты полезный ассистент."},
19 {"role": "user", "content": prompt}
20]
21text = tokenizer.apply_chat_template(
22 messages,
23 tokenize=False,
24 add_generation_prompt=True
25)
26model_inputs = tokenizer([text], return_tensors="pt").to(model.device)
27
28generated_ids = model.generate(
29 **model_inputs,
30 generation_config=gen_config
31)
32generated_ids = [
33 output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
34]
35
36response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
37print(response)1from transformers import AutoModelForCausalLM, AutoTokenizer, GenerationConfig
2
3model_name = "bond005/meno-tiny-0.1"
4
5model = AutoModelForCausalLM.from_pretrained(
6 model_name,
7 torch_dtype="auto",
8 device_map="auto"
9)
10tokenizer = AutoTokenizer.from_pretrained(model_name)
11gen_config = GenerationConfig.from_pretrained(model_name)
12
13prompt = "Стали известны результаты, полученные открытой системой «Писец» на ежегодной акции «Тотальный диктант», которая состоялась 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Галлюцинация — это ответ авторегрессионной нейросетевой модели языка, который корректен грамматически, но неверен семантически (не соответствует входному запросу по смыслу)."
14messages = [
15 {"role": "system", "content": "Перескажи кратко текст."},
16 {"role": "user", "content": prompt}
17]
18text = tokenizer.apply_chat_template(
19 messages,
20 tokenize=False,
21 add_generation_prompt=True
22)
23model_inputs = tokenizer([text], return_tensors="pt").to(model.device)
24
25generated_ids = model.generate(
26 **model_inputs,
27 generation_config=gen_config
28)
29generated_ids = [
30 output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
31]
32
33response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
34print(response)1from transformers import AutoModelForCausalLM, AutoTokenizer, GenerationConfig
2
3model_name = "bond005/meno-tiny-0.1"
4
5model = AutoModelForCausalLM.from_pretrained(
6 model_name,
7 torch_dtype="auto",
8 device_map="auto"
9)
10tokenizer = AutoTokenizer.from_pretrained(model_name)
11gen_config = GenerationConfig.from_pretrained(model_name)
12
13user_prompt = "User: Кто сейчас ректор Новосибирского государственного университета?\nAssistant: Ректором Новосибирского государственного университета является Михаил Петрович Федорук, академик Российской академии наук, доктор физико-математических наук, профессор.\nUser: Какие у него научные интересы?"
14few_shots_for_anaphora = [
15 {"role": "user", "content": "User: Что такое механико-математический факультет?\nAssistant: Механико-математический факультет НГУ — это факультет, выпускники которого осуществляют научные исследования и разработки для лучших компаний мира. Студент Механико-математического факультета учится преобразовывать свои разрозненные мысли в четко структурированные рассуждения, обладающие логической стройностью.\nUser: А там есть магистратура?"},
16 {"role": "assistant", "content": "А на механико-математическом факультете есть магистратура?"},
17 {"role": "user", "content": "User: Когда начинается приём документов в НГУ?\nAssistant: Приём документов в НГУ начинается 1 марта – для иностранных граждан и лиц без гражданства и 20 июня – для граждан Российской Федерации.\nUser: А когда он заканчивается?"},
18 {"role": "assistant", "content": "А когда приём документов в НГУ заканчивается?"},
19 {"role": "user", "content": "User: Кто основал Новосибирский Академгородок?\nAssistant: Новосибирский Академгородок основал Михаил Алексеевич Лаврентьев в 1957 году.\nUser: Чем же он занимался до этого?"},
20 {"role": "assistant", "content": "Чем же Михаил Алексеевич Лаврентьев занимался до основания Новосибирского Академгородка?"}
21]
22system_prompt_for_anaphora = [
23 {"role": "system", "content": "Перепиши текст последней реплики пользователя в диалоге так, что разрешить все ситуации местоименной анафоры в этом тексте. Замени анафорические местоимения соответствующими им существительными."}
24]
25messages = system_prompt_for_anaphora + few_shots_for_anaphora + [
26 {"role": "user", "content": user_prompt}
27]
28text = tokenizer.apply_chat_template(
29 messages,
30 tokenize=False,
31 add_generation_prompt=True
32)
33model_inputs = tokenizer([text], return_tensors="pt").to(model.device)
34
35generated_ids = model.generate(
36 **model_inputs,
37 generation_config=gen_config
38)
39generated_ids = [
40 output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
41]
42
43response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
44print(response)1from transformers import AutoModelForCausalLM, AutoTokenizer, GenerationConfig
2
3model_name = "bond005/meno-tiny-0.1"
4
5model = AutoModelForCausalLM.from_pretrained(
6 model_name,
7 torch_dtype="auto",
8 device_map="auto"
9)
10tokenizer = AutoTokenizer.from_pretrained(model_name)
11gen_config = GenerationConfig.from_pretrained(model_name)
12
13user_prompt = "то есть мы в каждый момент времени знаем про звук еще и какое то такое распределение частот и связанное это с тем что наше ухо на самом деле примерно также и воспринимать звук то есть мы не просто понимаем что вот где то там громче где то тише а наше уху еще понимает что вот этот звук выше этот ниже этот голос боле высокий этот голос низки"
14few_shots_for_ASR_correction = [
15 {"role": "user", "content": "вы выборском районе города проводится проверка по факту нападению на квартиру"},
16 {"role": "assistant", "content": "В Выборгском районе города проводится проверка по факту нападения на квартиру."},
17 {"role": "user", "content": "в пораде победы на красной площади в москве премут участие свысше четырнадцать ты своим наслужащих в том числе одинствого музыканта всводного оркестра сообщил интерфакт словнвы четверг представителе правления прес службы и информацию именно борон рф по сухоопутным войскам полковник сергей власов"},
18 {"role": "assistant", "content": "В параде Победы на Красной площади в Москве примут участие свыше 14 тыс. военнослужащих, в том числе 1 100 музыкантов сводного оркестра, сообщил «Интерфаксу-АВН» в четверг представитель управления пресс-службы и информации Минобороны РФ по Сухопутным войскам полковник Сергей Власов."},
19 {"role": "user", "content": "главные потребители дискофс виндовс ими крософтов фикироссийские сборщики устанавливающие программные обеспечение прана выпускаемые ими компьютеры и серверы отсюда название а инверсия этой яверсия для оригиналгикоепментмано фактуер для сборщика"},
20 {"role": "assistant", "content": "Главные потребители дисков с «Windows» и «Microsoft Office» - российские сборщики, устанавливающие программное обеспечение (ПО) на выпускаемые ими компьютеры и серверы (отсюда название OEM-версия, т. е. версия для «Original Equipment Manufacturer», для сборщика)."},
21 {"role": "user", "content": "в две тысячи тринадцать год уконкурс гуглеский енки фаир организатором которого выступает компания гугле проводится в этретий раз веконку всемогут участвовать деть в возрасти от тринадцать да восемнадцать лет свои научные проекты участники от правляют на рассмотрения через интернетых изучает жури состоящие из ученых и сотрудников гогль он уже определяет девяносто региональных изатем пятнадцать глобальных феналистов"},
22 {"role": "assistant", "content": "В 2013 году конкурс Google Science Fair, организатором которого выступает компания Google, проводится в третий раз. В конкурсе могут участвовать дети в возрасте от 13 до 18 лет. Свои научные проекты участники отправляют на рассмотрение через интернет. Их изучает жюри, состоящее из ученых и сотрудников Google. Оно же определяет 90 региональных, а затем 15 глобальных финалистов."},
23]
24system_prompt_for_ASR_correction = [
25 {"role": "system", "content": "Исправь, пожалуйста, ошибки распознавания речи в следующем тексте, восстанови в нём знаки пунктуации и правильно расставь прописные и строчные буквы. Пиши свой ответ грамотно, с учётом морфологии и синтаксиса русского языка."}
26]
27messages = system_prompt_for_ASR_correction + few_shots_for_ASR_correction + [
28 {"role": "user", "content": user_prompt}
29]
30text = tokenizer.apply_chat_template(
31 messages,
32 tokenize=False,
33 add_generation_prompt=True
34)
35model_inputs = tokenizer([text], return_tensors="pt").to(model.device)
36
37generated_ids = model.generate(
38 **model_inputs,
39 generation_config=gen_config
40)
41generated_ids = [
42 output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
43]
44
45response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
46print(response)| Rank | Model | Size | Overall score |
|---|---|---|---|
| 1 | GPT4o | - | 0.642 |
| 2 | RuadaptQwen-32B-instruct | 32.0B | 0.615 |
| 3 | Qwen2.5-32B-Instruct | 32.0B | 0.603 |
| ... | ... | ... | ... |
| 6 | GigaChat Max | - | 0.588 |
| 7 | Mistral-Large-Instruct-2407 | 123.0B | 0.574 |
| 8 | GPT4o-mini | - | 0.570 |
| ... | ... | ... | ... |
| 12 | GigaChat Pro | - | 0.512 |
| 13 | GigaChat | - | 0.500 |
| ... | ... | ... | ... |
| 19 | Phi-3-medium-4k-instruct | 14.0B | 0.465 |
| ... | ... | ... | ... |
| 34 | Yi-1.5-9B-Chat-16K | 14.0B | 0.373 |
| 35 | Meno-Tiny-0.1 | 1.5B | 0.365 |
| 36 | Qwen2.5 1.5B Instruct | 1.5B | 0.358 |
| ... | ... | ... | ... |
| 44 | Mistral-7B-Instruct-v0.2 | 7.2B | 0.318 |
| 45 | Mistral-7B-Instruct-v0.3 | 7.2B | 0.311 |
| 46 | Yi-Coder-9B-Chat | 9.0B | 0.308 |
| ... | ... | ... | ... |
| 59 | Qwen2.5-Math-1.5B-Instruct | 1.5B | 0.207 |
| Rank | Model | Size | MultiQ score |
|---|---|---|---|
| 1 | Mistral-Large-Instruct-2407 | 123.0B | 0.630 / 0.471 |
| 2 | Meta-Llama-3.1-405B-Instruct | 405.0B | 0.623 / 0.453 |
| 3 | Meta-Llama-3.1-70B-Instruct | 70.6B | 0.607 / 0.443 |
| ... | ... | ... | ... |
| 7 | GPT4o | - | 0.572 / 0.431 |
| ... | ... | ... | ... |
| 10 | GPT4o-mini | - | 0.509 / 0.379 |
| 11 | Mixtral-8x22B-Instruct-v0.1 | 140.6B | 0.521 / 0.366 |
| 12 | Qwen2-57B-A14B-Instruct | 57.4B | 0.480 / 0.348 |
| 13 | ruadapt llama3-8B-instruct lep ft | 8.4B | 0.483 / 0.334 |
| 14 | GigaChat Max | - | 0.486 / 0.322 |
| ... | ... | ... | ... |
| 21 | Qwen2.5-Coder-7B-Instruct | 7.0B | 0.399 / 0.302 |
| 22 | Meno-Tiny-0.1 | 1.5B | 0.399 / 0.29 |
| 23 | Yi-1.5-34B-Chat | 34.4B | 0.416 / 0.266 |
| ... | ... | ... | ... |
| 25 | Qwen2.5-3B-Instruct | 3.0B | 0.391 / 0.263 |
| 26 | GigaChat | - | 0.367 / 0.250 |
| ... | ... | ... | ... |
| 59 | Qwen2.5-Math-7B-Instruct | 7.0B | 0.003 / 0.000 |
1@misc{bondarenko2024meno,
2 title={Meno-Tiny: A Small Russian Language Model for Question Answering and Other Useful NLP Tasks in Russian},
3 author={Bondarenko, Ivan},
4 publisher={Hugging Face},
5 journal={Hugging Face Hub},
6 howpublished={\url{https://huggingface.co/bond005/meno-tiny-0.1}},
7 year={2024}
8}