模型:

Milos/slovak-gpt-j-405M

英文

斯洛伐克 GPT-J-405M

斯洛伐克 GPT-J-405M 是继其较小型变种 Slovak GPT-J-162M 之后发布的斯洛伐克 GPT-J 系列的第二个模型。此后,发布了一个更大的 Slovak GPT-J-1.4B

模型描述

该模型基于 GPT-J ,具有超过405M个可训练参数。

Hyperparameter Value
n p a r a m e t e r s n_{parameters} n p a r a m e t e r s ​ 405,677,136
n l a y e r s n_{layers} n l a y e r s ​ 24
d m o d e l d_{model} d m o d e l ​ 1024
d f f d_{ff} d f f ​ 16384
n h e a d s n_{heads} n h e a d s ​ 16
d h e a d d_{head} d h e a d ​ 256
n c t x n_{ctx} n c t x ​ 2048
n v o c a b n_{vocab} n v o c a b ​ 50256 (same tokenizer as GPT-2/3†)
Positional Encoding 12310321
RoPE Dimensions 12311321

† ByteLevelBPETokenizer 是基于同一个斯洛伐克语料库训练的。

训练数据

斯洛伐克 GPT-J 模型是在私有收集的数据集上进行训练的,该数据集主要包含斯洛伐克文本,涵盖了不同的类别,例如网页、新闻文章,甚至包括圣经文本。总计使用了超过40GB的文本数据对该模型进行训练。数据集经过了预处理和清理,有一些小问题,所以为了达到预期的性能,请参考“如何使用”部分。请记住,尽管已经努力删除不适当的语料,但模型仍可能生成敏感内容或泄露敏感信息。

训练过程

该模型在 TPU v3-8节点上进行了超过69,001个步骤,训练了超过365亿个标记。最后一步的交叉熵验证损失为2.821。

预期用途

与原始的 GPT-J 一样,斯洛伐克 GPT-J 学习了一种内部的语言表示,可用于提取对下游任务有用的特征,但其预期用途是根据提示生成文本。

如何使用

可以使用 AutoModelForCausalLM 功能轻松加载此模型和分词器:

from transformers import AutoTokenizer, AutoModelForCausalLM

tokenizer = AutoTokenizer.from_pretrained("Milos/slovak-gpt-j-405M")
model = AutoModelForCausalLM.from_pretrained("Milos/slovak-gpt-j-405M")

在生成提示时,请牢记以下三点,您就可以开始使用了:

  • 永远不要留下尾随的空格。分词器对"我喜欢斯洛伐克语"(slovenčinu 后没有空格)和"我喜欢斯洛伐克语 "(slovenčinu 后有尾随空格)进行编码的方式是不同的,即 [12805, 2872, 46878] != [12805, 2872, 46878, 221]。
  • 始终使用美式英语的双引号,即 "" 而不是 „“。
  • 在换行时,始终输入 \n\n 而不是单个 \n。
  • 以下是基本文本生成示例:

    >>> prompt = "Tradičné jedlo na Orave sú"
    >>> encoded_input = tokenizer(prompt, return_tensors='pt')
    >>> output = model.generate(**encoded_input)
    >>> tokenizer.decode(output[0])
    'Tradičné jedlo na Orave sú bryndzové halušky\n\nNa Orave sa v minulosti varilo viac druhov'
    

    功能、限制和偏见

    尽管该模型只有405M个参数,但其能力相当不错。它可以相对轻松地生成有趣且语法正确的内容。例如,您可以尝试以下一些提示(为简单起见,我省略了所有的样板代码,并将 \n 替换为换行符)。

    尝试生成"如何"文章:

    PROMPT
    Ako napísať pôsobivú esej krok za krokom
    OUTPUT
    Ako napísať pôsobivú esej krok za krokom
    
    V tomto článku sa dozviete, ako napísať esej, ktorá bude mať v sebe niečo, čo zaujme a bude sa vám páčiť.
    
    V prvom rade si musíte uvedomiť, že esej je vlastne písaný text, ktorý má byť napísaný na počítači.'
    

    但不建议依赖该模型生成事实上正确的信息。

    或者尝试生成聊天对话:

    PROMPT
    Peter: Ako sa mas?
    
    Lucia: Ale celkom dobre. Co si robil?
    
    Peter:
    OUTPUT
    Peter: Ako sa mas?
    
    Lucia: Ale celkom dobre. Co si robil?
    
    Peter: No, bol som na chate.
    
    Lucia: A co si tam robil?
    
    Peter: No, bol som tam s kamošmi.
    
    Lucia: A co si tam robil?
    
    Peter: No, bol som tam s kamošmi.
    

    看来在这种特殊情况下,Peters 更有可能表现出可疑行为,或者模型存在问题。假设第二种解释可能有一定道理。总的来说,GPT模型可能会陷入重复生成相同内容的循环。这是一个常见的问题,超出了本 README 的范围,但您可以参考 generate's documentation 了解如何引入频率/重复惩罚。

    由于数据集包含亵渎语言、政治不正确的用语,甚至(无意中)包括一些捷克语的文本,模型在一定程度上也可以生成它们。下面是在提示为捷克语时模型的输出示例:

    >>> prompt = "Věta nesmí být sprostá a musí být zcela"
    >>> encoded_input = tokenizer(prompt, return_tensors='pt')
    >>> output = model.generate(**encoded_input, max_length=16)
    >>> tokenizer.decode(output[0])
    'Věta nesmí být sprostá a musí být zcela pravdivá.'
    

    引文和相关信息

    这是在2021年夏季作为业余项目完成的,目的是更好地理解 transformers。我没有太多的空闲时间来适当地开源它,所以它一直保存在我的硬盘上,直到现在 :)

    如果您使用了这个模型或对它有任何问题,请随时通过 twitter 联系我,或查看我的 github 个人资料。

    BibTeX 条目

    引用此模型:

    @misc{slovak-gpt-j-405m,
      author = {Kondela, Milos},
      title = {{Slovak GPT-J-405M}},
      howpublished = {\url{https://huggingface.co/Milos/slovak-gpt-j-405M}},
      year = 2022,
      month = February
    }
    

    引用训练此模型的代码库:

    @misc{mesh-transformer-jax,
      author = {Wang, Ben},
      title = {{Mesh-Transformer-JAX: Model-Parallel Implementation of Transformer Language Model with JAX}},
      howpublished = {\url{https://github.com/kingoflolz/mesh-transformer-jax}},
      year = 2021,
      month = May
    }
    

    致谢

    感谢 TPU Research Cloud (TRC) program 的慷慨支持。还要感谢 Ben Wang 和伟大的 EleutherAI community