EEVE-Korean-10.8B-v1.0 项目介绍
加入我们的社区
如果你对大型语言模型领域感兴趣,并希望交流知识和见解,我们诚邀你加入我们的Discord服务器。值得注意的是,服务器主要使用韩语进行交流。大型语言模型的领域迅速发展,如果不积极分享,我们的集体知识可能很快过时。让我们共同合作,推动更大的影响力!点击这里加入我们:Discord Link。
专业团队
- 研究团队: Myeongho Jeong、Seungduk Kim、Seungtaek Choi
- 工程团队: Geon Kim、Rifqi Alfi、Sanghoon Han、Suhyun Kang
- 产品管理: Bokyung Huh
- 用户体验设计: Eunsue Choi
模型简介
EEVE-Korean-10.8B-v1.0是以SOLAR-10.7B-v1.0为基础,专门在多种韩语网络爬虫数据集上进行微调,旨在扩大模型对韩语的理解。通过对新词进行词嵌入的预训练和对已有词部分微调lm_head
嵌入,同时保持基础模型的原始参数。
技术细节
为了将基础模型从英语适配到韩语,项目采用了基于子词的嵌入技术,使用七阶段的训练过程,包括参数冻结。这种方法通过渐进的方式,从输入嵌入到整体参数进行训练,有效扩展模型的词汇量以涵盖韩语。我们的策略是,在因果语言模型预训练时,小心地整合新的语言标记,从而提高模型的跨语言适用性。通过借助已在英语上训练的基础模型的固有能力,能够高效地将知识和推理转移到韩语上,优化适配过程。
以下是我们的关键方法的简化代码片段:
# number_of_old_tokens是词表扩展前的tokenizer大小。例如,在EEVE-Korean-10.8B-v1.0中,number_of_old_tokens为32000。
def freeze_partial_embedding_hook(grad):
grad[:number_of_old_tokens] = 0
return grad
for name, param in model.named_parameters():
if ("lm_head" in name or "embed_tokens" in name) and "original" not in name:
param.requires_grad = True
if "embed_tokens" in name:
param.register_hook(freeze_partial_embedding_hook)
else:
param.requires_grad = False
使用与限制
需要注意的是,该模型尚未进行基于指令的微调训练。虽然在韩语语言任务中表现出色,但建议在特定应用中进行慎重考虑及进一步训练。
训练细节
模型的训练过程全面而多样:
-
词汇扩展: 我们精心选择了8,960个韩语词汇,基于它们在韩国网络语料中的频率。这一过程涉及多轮的tokenizer训练、手动精筛及词频分析,以确保模型词汇的丰富性与相关性。
- 初始分词器训练: 在韩国网络语料上训练中间分词器,词汇量为40,000。
- 提取新的韩语标记: 从中间分词器中识别所有不在原始SOLAR分词器中的韩语标记。
- 手动分词器构建: 重点关注新韩语标记,构建目标分词器。
- 频率分析: 使用目标分词器处理100GB韩语语料,计算每个标记的频率。
- 词列表精简: 移除出现次数少于6,000次的标记,确保有足够的标记进行后续训练。
- 单字字符的包含: 统计缺失的单字韩语字符,并将出现超过6,000次的单字字符添加至目标分词器。
- 迭代精炼: 重复步骤2至6,直到没有需要去除或添加的标记。
- 训练偏向于新标记: 在训练数据中偏向包含更多有新标记的文本以便于有效学习。
通过上述严格的流程,确保了模型拥有丰富和上下文相关的韩语词汇。