You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Hugging Face中为NLLB分词器添加新语言?

NLLB模型新增语言令牌及翻译实现指南

1. 保留原有令牌添加新语言令牌

别直接覆盖或硬append,正确步骤是先复用现有令牌列表再更新:

# 复制现有全部特殊令牌
existing_specials = tokenizer.additional_special_tokens.copy()
# 加入新语言令牌
existing_specials.append('aym_Latn')
# 更新分词器,仅追加不覆盖
tokenizer.add_special_tokens({'additional_special_tokens': existing_specials})
# 关键:同步调整模型嵌入层维度,否则会报错
model.resize_token_embeddings(len(tokenizer))

2. 添加令牌后的必要处理

光加令牌还不够,得让分词器能关联语言和令牌:

  • 更新分词器的lang_code_to_id映射:tokenizer.lang_code_to_id['aym_Latn'] = tokenizer.convert_tokens_to_ids('aym_Latn')
  • 如果你的代码里有自定义的语言令牌分配函数(比如批量处理时的逻辑),也要同步把新增语言加进去,确保输入能正确匹配令牌。

3. 输入的语言令牌添加方式

不用手动在字符串前插令牌,NLLB分词器自带自动处理:

  • 分词时指定src_lang参数,分词器会自动在序列开头插入对应语言令牌:
inputs = tokenizer("你的艾马拉语文本", return_tensors='pt', src_lang='aym_Latn')

微调后的翻译实现

pipeline使用方法

默认pipeline不会自动识别新增语言,要么显式指定参数,要么扩展逻辑:

  • 显式指定源/目标语言调用:
from transformers import pipeline
translator = pipeline('translation', model=微调后的模型, tokenizer=tokenizer)
result = translator("艾马拉语文本", src_lang='aym_Latn', tgt_lang='eng_Latn')
  • 要自动识别的话,得自己加语言检测逻辑(比如用langdetect先判断输入语言),再映射到对应的令牌代码传入pipeline。

model.generate手动调用

直接用generate时,按以下步骤设置语言参数:

# 1. 处理输入,指定源语言
inputs = tokenizer("艾马拉语文本", return_tensors='pt', src_lang='aym_Latn')
# 2. 生成时指定目标语言的bos令牌ID
outputs = model.generate(
    **inputs,
    forced_bos_token_id=tokenizer.lang_code_to_id['eng_Latn'],
    max_length=200
)
# 3. 解码得到翻译结果
translated_text = tokenizer.decode(outputs[0], skip_special_tokens=True)

内容的提问来源于stack exchange,提问作者alvas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 07:30:16