/ Модель

Характеристики

Контекст
8 192 токена
Параметры
8,2 млрд
Размер весов
17,1 ГБ
Лицензия
Своя лицензия
Архитектура
gemma · dense
Опубликована
3 апр 2024

SeaLLM-7B-v2.5

Генерация текстаТекст → текст7 профессий

Многоязычная чат-модель на базе Gemma-7b для диалогов, следования инструкциям и рассуждений на языках Юго-Восточной Азии.

8 626скачиваний за 30 дней51лайквеса обновлены11 июл 2024

Бенчмарки

Как модель справилась с задачами пользователей ailist и что о ней публикуют открытые лидерборды

Тесты пользователейпока нет

Никто ещё не опубликовал тест этой модели. Соберите бенчмарк из своих задач — результат появится здесь.

  1. Добавьте модель в бенчмарк

    Вместе с другими моделями категории «Текст» — сравнение идёт внутри одной категории.

  2. Опишите свои задачи

    Напишите запросы, при необходимости приложите файлы и эталонные ответы.

  3. Запустите и опубликуйте

    Модели ответят на каждую задачу, судья оценит ответы. Опубликованный результат появится на этой странице.

Публичные оценки6

Из открытых лидербордов. Сравнивайте результаты одного теста при одинаковых условиях — отсутствие оценки не значит, что модель хуже.

  • GPQA

    GPQA Raw · выше — лучше

    Результат

    0,276

    Open LLM v2 · архив

    Публичная таблицаревизия совпадает

  • MMLU-PRO

    MMLU-PRO Raw · выше — лучше

    Результат

    0,3203

    Open LLM v2 · архив

    Публичная таблицаревизия совпадает

  • MUSR

    MUSR Raw · выше — лучше

    Результат

    0,4203

    Open LLM v2 · архив

    Публичная таблицаревизия совпадает

  • BBH

    BBH Raw · выше — лучше

    Результат

    0,498

    Open LLM v2 · архив

    Публичная таблицаревизия совпадает

  • IFEval

    IFEval Raw · выше — лучше

    Результат

    0,4522

    Open LLM v2 · архив

    Публичная таблицаревизия совпадает

  • MATH Lvl 5

    MATH Lvl 5 Raw · выше — лучше

    Результат

    0,1088

    Open LLM v2 · архив

    Публичная таблицаревизия совпадает

Что умеет модель

Описание составлено по карточке модели и метаданным Hugging Face

SeaLLM-7B-v2.5 — чат-модель на базе Gemma-7b, разработанная проектом SeaLLMs для работы с языками Юго-Восточной Азии. Модель содержит 8,2 млрд параметров, использует плотную архитектуру GemmaForCausalLM и принимает текстовые запросы, выдавая текстовые ответы. Контекст составляет до 8192 токенов.

Модель предназначена для многоязычных диалогов, следования инструкциям, ответов на вопросы и задач на математические рассуждения. В карточке приведены результаты оценивания на тестах общих знаний и математических задач для английского, китайского, вьетнамского, индонезийского и тайского; заявлена поддержка также малайского, кхмерского, лаосского, бирманского и филиппинского. Для корректной работы нужно соблюдать формат чата SeaLLM и правила добавления BOS-токена.

Авторы сообщают о сильных результатах на многоязычных тестах, однако ответы могут быть неточными, вводящими в заблуждение или потенциально вредными; перед развёртыванием рекомендуется проверка безопасности. Условия использования определяются SeaLLMs Terms of Use; в метаданных лицензия обозначена как other.

Сценарии применения

  • ответы на вопросы на вьетнамском и индонезийском языках
  • многоязычный чат на языках Юго-Восточной Азии
  • выполнение текстовых инструкций на тайском и китайском
  • решение математических задач с пошаговыми рассуждениями
  • ответы на вопросы по общим знаниям на английском и азиатских языках

Ограничения

Генерации могут быть неточными, вводящими в заблуждение или потенциально вредными, поэтому перед развёртыванием требуется проверка. Для корректной работы необходимо соблюдать формат чата модели и правила добавления BOS-токена.

Для каких профессий подходит7

Разделы каталога профессий, в задачах которых используется эта модель

Все профессии

Также подходит для

Карточка модели

README от автора на Hugging Face, как он его опубликовал

Открыть на Hugging Face

SeaLLM-7B-v2.5 - Large Language Models for Southeast Asia

BIG NEWS: SeaLLM3 is released with state-of-the-art performance of diverse tasks while specifically enhanced to be more trustworthy. Please consider using that latest model version.

🔥[HOT] SeaLLMs project now has a dedicated website - damo-nlp-sg.github.io/SeaLLMs

We introduce SeaLLM-7B-v2.5, the state-of-the-art multilingual LLM for Southeast Asian (SEA) languages 🇬🇧 🇨🇳 🇻🇳 🇮🇩 🇹🇭 🇲🇾 🇰🇭 🇱🇦 🇲🇲 🇵🇭. It is the most significant upgrade since SeaLLM-13B, with half the size, outperforming performance across diverse multilingual tasks, from world knowledge, math reasoning, instruction following, etc.

Highlights

  • SeaLLM-7B-v2.5 outperforms GPT-3.5 and achieves 7B SOTA on most multilingual knowledge benchmarks for SEA languages (MMLU, M3Exam & VMLU).
  • It achieves 79.0 and 34.9 on GSM8K and MATH, surpassing GPT-3.5 in MATH.

Release and DEMO

Disclaimer: We must note that even though the weights, codes, and demos are released in an open manner, similar to other pre-trained language models, and despite our best efforts in red teaming and safety fine-tuning and enforcement, our models come with potential risks, including but not limited to inaccurate, misleading or potentially harmful generation. Developers and stakeholders should perform their own red teaming and provide related security measures before deployment, and they must abide by and comply with local governance and regulations. In no event shall the authors be held liable for any claim, damages, or other liability arising from the use of the released weights, codes, or demos.

The logo was generated by DALL-E 3.

What's new since SeaLLM-7B-v2?

  • SeaLLM-7B-v2.5 was built on top of Gemma-7b, and underwent large scale SFT and carefully designed alignment.

Evaluation

Multilingual World Knowledge

We evaluate models on 3 benchmarks following the recommended default setups: 5-shot MMLU for En, 3-shot M3Exam (M3e) for En, Zh, Vi, Id, Th, and zero-shot VMLU for Vi.

ModelLangsEnMMLUEnM3eZhM3eViM3eViVMLUIdM3eThM3e
GPT-3.5Multi68.9075.4660.2058.6446.3249.2737.41
Vistral-7B-chatMono56.8667.0044.5654.3350.0336.4925.27
Qwen1.5-7B-chatMulti61.0052.0781.9643.3845.0224.2920.25
SailorLMMulti52.7259.7667.7450.14---39.5337.73
SeaLLM-7B-v2Multi61.8970.9155.4351.1545.7442.2535.52
SeaLLM-7B-v2.5Multi64.0576.8762.5463.1153.3048.6446.86

Zero-shot CoT Multilingual Math Reasoning

ModelGSM8KenMATHenGSM8KzhMATHzhGSM8KviMATHviGSM8KidMATHidGSM8KthMATHth
GPT-3.580.834.148.221.55526.564.326.435.818.1
Qwen-14B-chat61.418.441.611.833.63.644.78.6226.0
Vistral-7b-chat48.212.548.73.1
Qwen1.5-7B-chat56.815.340.02.737.7936.97.721.94.7
SeaLLM-7B-v278.227.553.717.669.923.871.524.459.622.4
SeaLLM-7B-v2.578.534.951.322.172.330.271.530.162.028.4

Baselines were evaluated using their respective chat-template and system prompts (Qwen1.5-7B-chat, Vistral).

Zero-shot MGSM

SeaLLM-7B-v2.5 also outperforms GPT-3.5 and Qwen-14B on the multilingual MGSM for Thai.

ModelMGSM-ZhMGSM-Th
ChatGPT (reported)61.247.2
Qwen-14B-chat59.628
SeaLLM-7B-v264.862.4
SeaLLM-7B-v2.558.064.8

Sea-Bench

fig_sea_bench_side_by_side.png

Usage

IMPORTANT NOTICE for using the model

  • <bos> must be at start of prompt, ff your code's tokenizer does not prepend <bos> by default, you MUST prepend into the prompt yourself, otherwise, it would not work!
  • Repitition penalty (e.g: in llama.cpp, ollama, LM-studio) must be set to 1 , otherwise will lead to degeneration!

Instruction format

# ! WARNING, if your code's tokenizer does not prepend <bos> by default,
# You MUST prepend <bos> into the prompt yourself, otherwise, it would not work!

prompt = """<|im_start|>system
You are a helpful assistant.<eos>
<|im_start|>user
Hello world<eos>
<|im_start|>assistant
Hi there, how can I help?<eos>"""

# <|im_start|> is not a special token.
# Transformers chat_template should be consistent with vLLM format below.

# ! ENSURE 1 and only 1 bos `<bos>` at the beginning of sequence
print(tokenizer.convert_ids_to_tokens(tokenizer.encode(prompt)))

"""

Using transformers's chat_template

Install the latest transformers (>4.40)


from transformers import AutoModelForCausalLM, AutoTokenizer

device = "cuda" # the device to load the model onto

# use bfloat16 to ensure the best performance.
model = AutoModelForCausalLM.from_pretrained("SeaLLMs/SeaLLM-7B-v2.5", torch_dtype=torch.bfloat16, device_map=device)
tokenizer = AutoTokenizer.from_pretrained("SeaLLMs/SeaLLM-7B-v2.5")

messages = [
    {"role": "system", "content": "You are a helpful assistant."},
    {"role": "user", "content": "Hello world"},
    {"role": "assistant", "content": "Hi there, how can I help you today?"},
    {"role": "user", "content": "Explain general relativity in details."}
]

encodeds = tokenizer.apply_chat_template(messages, return_tensors="pt", add_generation_prompt=True)
print(tokenizer.convert_ids_to_tokens(encodeds[0]))

model_inputs = encodeds.to(device)
model.to(device)

generated_ids = model.generate(model_inputs, max_new_tokens=1000, do_sample=True, pad_token_id=tokenizer.pad_token_id)
decoded = tokenizer.batch_decode(generated_ids)
print(decoded[0])

Using vLLM

from vllm import LLM, SamplingParams
TURN_TEMPLATE = "<|im_start|>{role}\n{content}<eos>\n"
TURN_PREFIX = "<|im_start|>{role}\n"

def seallm_chat_convo_format(conversations, add_assistant_prefix: bool, system_prompt=None):
    # conversations: list of dict with key `role` and `content` (openai format)
    if conversations[0]['role'] != 'system' and system_prompt is not None:
        conversations = [{"role": "system", "content": system_prompt}] + conversations
    text = ''
    for turn_id, turn in enumerate(conversations):
        prompt = TURN_TEMPLATE.format(role=turn['role'], content=turn['content'])
        text += prompt
    if add_assistant_prefix:
        prompt = TURN_PREFIX.format(role='assistant')
        text += prompt    
    return text

sparams = SamplingParams(temperature=0.1, max_tokens=1024, stop=['<eos>', '<|im_start|>'])
llm = LLM("SeaLLMs/SeaLLM-7B-v2.5", dtype="bfloat16")

message = "Explain general relativity in details."
prompt = seallm_chat_convo_format(message, True)
gen = llm.generate(prompt, sampling_params)

print(gen[0].outputs[0].text)

Fine-tuning SeaLLM-7B-v2.5

Should follow the chat format and accurately mask out source tokens. Here is an example.

conversations = [
    {"role": "system", "content": "You are helful assistant."},
    {"role": "user", "content": "Hello world."},
    {"role": "assistant", "content": "Hi there, how can I help?"},
    {"role": "user", "content": "Tell me a joke."},
    {"role": "assistant", "content": "Why don't scientists trust atoms? Because they make up everything."},
]
def seallm_7b_v25_tokenize_multi_turns(tokenizer, conversations, add_assistant_prefix=False):
    """
    Inputs:
        conversations: list of dict following openai format, eg
            conversations = [
                {"role": "system", "content": "You are helful assistant."},
                {"role": "user", "content": "Hello world."},
                {"role": "assistant", "content": "Hi there, how can I help?"},
                {"role": "user", "content": "Tell me a joke."},
                {"role": "assistant", "content": "Why don't scientists trust atoms? Because they make up everything."},
            ]
        add_assistant_prefix: whether to add assistant_prefix, only for inference decoding
    Outputs:
        tokenize_output_sample, {
            "input_ids": ...
            "token_type_ids": 1 if train and 0 if masked out (not train)
        }
    During training, need to create a labels, with masked-out tokens = -100 to avoid loss computations.
        labels = sample['input_ids'].clone()
        labels[sample['token_type_ids'] == 0] = -100
    """
    TURN_TEMPLATE = "<|im_start|>{role}\n{content}<eos>\n"
    TURN_PREFIX = "<|im_start|>{role}\n"
    TURN_SUFFIX = "<eos>\n"
    TURN_SUFFIX_TAKE = "<eos>"
    sample = None
    assistant_prefix_len = None
    assistant_suffix_len = None
    for turn_id, turn in enumerate(conversations):
        prompt = TURN_TEMPLATE.format(role=turn['role'], content=turn['content'])
        turn_sample = tokenizer(
            prompt, padding=False, truncation=False, verbose=False, add_special_tokens=False,
            return_token_type_ids=True, 
        )
        if turn['role'] == 'assistant':
            if assistant_prefix_len is None:
                assistant_prefix_len = len(tokenizer.encode(TURN_PREFIX.format(role=turn['role']), add_special_tokens=False))
            if assistant_suffix_len is None:
                assistant_suffix_len = (
                    len(tokenizer.encode(TURN_SUFFIX.format(role=turn['role']), add_special_tokens=False)) - 
                    len(tokenizer.encode(TURN_SUFFIX_TAKE, add_special_tokens=False))
                )
            turn_sample['token_type_ids'][assistant_prefix_len:-assistant_suffix_len] = [1] * (len(turn_sample['input_ids']) - assistant_prefix_len - assistant_suffix_len)
        if sample is None:
            sample = turn_sample
        else:
            for k in turn_sample.keys():
                sample[k].extend(turn_sample[k])
    if add_assistant_prefix:
        assistant_prefix_sample = tokenizer(
            TURN_PREFIX.format(role="assistant"), padding=False, truncation=False, verbose=False, add_special_tokens=False,
            return_token_type_ids=True, 
        )
        for k in sample.keys():
            sample[k].extend(assistant_prefix_sample[k])
    if tokenizer.add_bos_token:
        sample['input_ids'] = [tokenizer.bos_token_id] + sample['input_ids']
        sample['attention_mask'] = [1] + sample['attention_mask']
        sample['token_type_ids'] = [sample['token_type_ids'][0]] + sample['token_type_ids']
    return sample

# ! testing
sample = seallm_7b_v25_tokenize_multi_turns(tokenizer, conversations)
tokens = tokenizer.convert_ids_to_tokens(sample['input_ids'])
pairs = [(x, y) for x, y in zip(tokens, sample['token_type_ids'])]
print(pairs)

# source and special tokens is masked out (token_type 0), only assistant with <eos> is trained (token_type 1)
# [('<bos>', 0), ('<', 0), ('|', 0), ..., ('assistant', 0), ('\n', 0), ('Hi', 1), ('▁there', 1), (',', 1), ('▁how', 1), ('▁can', 1), ('▁I', 1), ('▁help', 1), ('?', 1), ('<eos>', 1), ('\n', 0), ('<', 0), ... 

Acknowledgement to Our Linguists

We would like to express our special thanks to our professional and native linguists, Tantong Champaiboon, Nguyen Ngoc Yen Nhi and Tara Devina Putri, who helped build, evaluate, and fact-check our sampled pretraining and SFT dataset as well as evaluating our models across different aspects, especially safety.

Citation

If you find our project useful, we hope you would kindly star our repo and cite our work as follows: Corresponding Author: l.bing@alibaba-inc.com

Author list and order will change!

  • * and ^ are equal contributions.
@article{damonlpsg2023seallm,
  author = {Xuan-Phi Nguyen*, Wenxuan Zhang*, Xin Li*, Mahani Aljunied*, Weiwen Xu, Hou Pong Chan,
            Zhiqiang Hu, Chenhui Shen^, Yew Ken Chia^, Xingxuan Li, Jianyu Wang,
            Qingyu Tan, Liying Cheng, Guanzheng Chen, Yue Deng, Sen Yang,
            Chaoqun Liu, Hang Zhang, Lidong Bing},
  title = {SeaLLMs - Large Language Models for Southeast Asia},
  year = 2023,
  Eprint = {arXiv:2312.00738},
}

Как запустить

На своей GPU в ailist. Цена — по текущим предложениям провайдеров

GPU в ailist

Универсальный рантайм

Можно запустить

Подбираем GPU…

Класс архитектуры
GemmaForCausalLM
Ревизия весов
a961daf

0 моделей