模型:
Milos/slovak-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")
在生成提示时,请牢记以下三点,您就可以开始使用了:
以下是基本文本生成示例:
>>> 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 个人资料。
引用此模型:
@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 。