基于Huggingface transformers构建的深度学习翻译库
项目描述
DL Translate
基于Huggingface transformers
构建的200种语言的翻译库
💻 GitHub仓库
📚 文档
🐍 PyPi项目
🧪 Colab演示 / Kaggle演示
快速入门
使用pip安装库
pip install dl-translate
翻译一些文本
import dl_translate as dlt
mt = dlt.TranslationModel() # Slow when you load it for the first time
text_hi = "संयुक्त राष्ट्र के प्रमुख का कहना है कि सीरिया में कोई सैन्य समाधान नहीं है"
mt.translate(text_hi, source=dlt.lang.HINDI, target=dlt.lang.ENGLISH)
上面,你可以看到dlt.lang
包含了代表200种可用语言的变量,并支持自动完成。或者,你可以指定语言(例如,“阿拉伯语”)或语言代码(例如,法语为“fr”)
text_ar = "الأمين العام للأمم المتحدة يقول إنه لا يوجد حل عسكري في سوريا."
mt.translate(text_ar, source="Arabic", target="fr")
如果你想验证某个语言是否可用,你可以检查它
print(mt.available_languages()) # All languages that you can use
print(mt.available_codes()) # Code corresponding to each language accepted
print(mt.get_lang_code_map()) # Dictionary of lang -> code
用法
选择设备
当你加载模型时,你可以指定设备
mt = dlt.TranslationModel(device="auto")
默认情况下,值将为device="auto"
,这意味着如果可能,它将使用GPU。你还可以明确设置device="cpu"
或device="gpu"
,或一些其他由torch.device()
接受的字符串。 一般来说,如果你想获得合理的处理时间,建议使用GPU。
选择不同的模型
默认情况下,将使用 m2m100
模型。但是,也有一些选项
- mBART-50 Large:支持50种语言的翻译。
- m2m100:支持100种语言的翻译。
- nllb-200(v0.3版新增):支持200种语言的翻译,比m2m100速度快(在RTX A6000上,速度提升3倍)。
这里是一个例子
# The default approval
mt = dlt.TranslationModel("m2m100") # Shorthand
mt = dlt.TranslationModel("facebook/m2m100_418M") # Huggingface repo
# If you want to use mBART-50 Large
mt = dlt.TranslationModel("mbart50")
mt = dlt.TranslationModel("facebook/mbart-large-50-many-to-many-mmt")
# Or NLLB-200 (faster and has 200 languages)
mt = dlt.TranslationModel("nllb200")
mt = dlt.TranslationModel("facebook/nllb-200-distilled-600M")
请注意,语言代码会根据模型系列而变化。要查找正确的语言代码,请阅读有关可用语言的文档页面或运行 mt.available_codes()
。
默认情况下,dlt.TranslationModel
将从 huggingface 仓库下载 mbart50、m2m100 或 nllb200 模型并将其缓存。您可以从路径或具有类似格式的模型加载模型,但需要指定 model_family
。
mt = dlt.TranslationModel("/path/to/model/directory/", model_family="mbart50")
mt = dlt.TranslationModel("facebook/m2m100_1.2B", model_family="m2m100")
mt = dlt.TranslationModel("facebook/nllb-200-distilled-600M", model_family="nllb200")
注意事项
- 如果您从文件加载,请确保将分词器也存储在相同的目录中。
- 如果选择不同的模型,可用的语言将发生变化,因此您将无法利用
dlt.lang
或dlt.utils
。
分割成句子
不建议使用非常长的文本,因为它需要更多时间来处理。相反,您可以使用 nltk
来尝试将其分解成句子。首先使用 pip install nltk
安装库,然后运行
import nltk
nltk.download("punkt")
text = "Mr. Smith went to his favorite cafe. There, he met his friend Dr. Doe."
sents = nltk.tokenize.sent_tokenize(text, "english") # don't use dlt.lang.ENGLISH
" ".join(mt.translate(sents, source=dlt.lang.ENGLISH, target=dlt.lang.FRENCH))
翻译期间的批大小
可以为 mt.translate
设置批大小(即一次处理的数据元素数量),并选择是否显示进度条。
# ...
mt = dlt.TranslationModel()
mt.translate(text, source, target, batch_size=32, verbose=True)
如果将 batch_size=None
设置,它将一次性计算整个 text
,而不是分割成“块”。如果您没有很多RAM或VRAM并且遇到CUDA内存错误,我们建议降低 batch_size
。如果您使用高端GPU且VRAM未充分利用,请设置更高的值。
dlt.utils
模块
除了 mt.available_languages()
,还有 dlt.utils
模块。您可以使用它来查找可用的语言和代码。
print(dlt.utils.available_languages('mbart50')) # All languages that you can use
print(dlt.utils.available_codes('m2m100')) # Code corresponding to each language accepted
print(dlt.utils.get_lang_code_map('nllb200')) # Dictionary of lang -> code
离线使用
与 Google 翻译或 MSFT 翻译器 API 不同,此库可以完全离线使用。但是,您需要首先下载软件包和模型,并将它们移动到您的离线环境以在 venv 中安装和加载。
首先,在终端中运行
mkdir dlt
cd dlt
mkdir libraries
pip download -d libraries/ dl-translate
一旦所有必需的软件包都已下载,您需要使用 huggingface hub 下载文件。使用 pip install huggingface-hub
安装它。然后,在 Python 中运行
import shutil
import huggingface_hub as hub
dirname = hub.snapshot_download("facebook/m2m100_418M")
shutil.copytree(dirname, "cached_model_m2m100") # Copy to a permanent folder
现在,将 dlt
目录中的所有内容移动到您的离线环境。创建一个虚拟环境,并在终端中运行以下命令
pip install --no-index --find-links libraries/ dl-translate
现在,在 Python 中运行
import dl_translate as dlt
mt = dlt.TranslationModel("cached_model_m2m100", model_family="m2m100")
高级
如果您了解 PyTorch 和 Huggingface Transformers,您可以访问库的更高级功能以进行更多自定义。
- 保存和加载:如果您想加快翻译模型的加载时间,可以使用
save_obj
并稍后使用load_obj
重新加载。此方法仅建议您熟悉huggingface
和torch
;请阅读文档以获取更多信息。 - 与底层模型和分词器交互:在初始化
model
时,您可以使用model_options
和tokenizer_options
分别传递底层 BART 模型和分词器的参数。您还可以使用mt.get_transformers_model()
访问底层transformers
。 generate()
方法的关键字参数:在运行mt.translate
时,您还可以提供传递给底层转换器模型generate()
方法的generation_options
。
更多信息,请访问用户指南的高级部分:https://xhluca.github.io/dl-translate/#advanced。
致谢
dl-translate
基于 Facebook AI Research 创建的两个模型的 Huggingface 实现。
-
多语言 BART 在超过 50 种语言的许多到许多翻译上进行微调,相关文档在此:https://hugging-face.cn/transformers/master/model_doc/mbart.html。原始论文由 Facebook AI Research 的 Tang 等人撰写;您可以在这里找到它,并使用以下方式引用:
@article{tang2020multilingual, title={Multilingual translation with extensible multilingual pretraining and finetuning}, author={Tang, Yuqing and Tran, Chau and Li, Xian and Chen, Peng-Jen and Goyal, Naman and Chaudhary, Vishrav and Gu, Jiatao and Fan, Angela}, journal={arXiv preprint arXiv:2008.00401}, year={2020} }
-
由 Fan 等人在 Beyond English-Centric Multilingual Machine Translation 中发布的转换器模型,支持超过 100 种语言。您可以在这里引用它
@misc{fan2020englishcentric, title={Beyond English-Centric Multilingual Machine Translation}, author={Angela Fan and Shruti Bhosale and Holger Schwenk and Zhiyi Ma and Ahmed El-Kishky and Siddharth Goyal and Mandeep Baines and Onur Celebi and Guillaume Wenzek and Vishrav Chaudhary and Naman Goyal and Tom Birch and Vitaliy Liptchinsky and Sergey Edunov and Edouard Grave and Michael Auli and Armand Joulin}, year={2020}, eprint={2010.11125}, archivePrefix={arXiv}, primaryClass={cs.CL} }
-
no language left behind 模型,它将 NMT 扩展到 200 多种语言。您可以在这里引用它
@misc{nllbteam2022language, title={No Language Left Behind: Scaling Human-Centered Machine Translation}, author={NLLB Team and Marta R. Costa-jussà and James Cross and Onur Çelebi and Maha Elbayad and Kenneth Heafield and Kevin Heffernan and Elahe Kalbassi and Janice Lam and Daniel Licht and Jean Maillard and Anna Sun and Skyler Wang and Guillaume Wenzek and Al Youngblood and Bapi Akula and Loic Barrault and Gabriel Mejia Gonzalez and Prangthip Hansanti and John Hoffman and Semarley Jarrett and Kaushik Ram Sadagopan and Dirk Rowe and Shannon Spruit and Chau Tran and Pierre Andrews and Necip Fazil Ayan and Shruti Bhosale and Sergey Edunov and Angela Fan and Cynthia Gao and Vedanuj Goswami and Francisco Guzmán and Philipp Koehn and Alexandre Mourachko and Christophe Ropers and Safiyyah Saleem and Holger Schwenk and Jeff Wang}, year={2022}, eprint={2207.04672}, archivePrefix={arXiv}, primaryClass={cs.CL} }
dlt
是一个包装器,带有有用的 utils
,可以为您节省时间。以下是一个使用 Huggingface 的 transformers
的示例
from transformers import MBartForConditionalGeneration, MBart50TokenizerFast
article_hi = "संयुक्त राष्ट्र के प्रमुख का कहना है कि सीरिया में कोई सैन्य समाधान नहीं है"
article_ar = "الأمين العام للأمم المتحدة يقول إنه لا يوجد حل عسكري في سوريا."
model = MBartForConditionalGeneration.from_pretrained("facebook/mbart-large-50-many-to-many-mmt")
tokenizer = MBart50TokenizerFast.from_pretrained("facebook/mbart-large-50-many-to-many-mmt")
# translate Hindi to French
tokenizer.src_lang = "hi_IN"
encoded_hi = tokenizer(article_hi, return_tensors="pt")
generated_tokens = model.generate(**encoded_hi, forced_bos_token_id=tokenizer.lang_code_to_id["fr_XX"])
tokenizer.batch_decode(generated_tokens, skip_special_tokens=True)
# => "Le chef de l 'ONU affirme qu 'il n 'y a pas de solution militaire en Syria."
# translate Arabic to English
tokenizer.src_lang = "ar_AR"
encoded_ar = tokenizer(article_ar, return_tensors="pt")
generated_tokens = model.generate(**encoded_ar, forced_bos_token_id=tokenizer.lang_code_to_id["en_XX"])
tokenizer.batch_decode(generated_tokens, skip_special_tokens=True)
# => "The Secretary-General of the United Nations says there is no military solution in Syria."
使用 dlt
,您可以运行
import dl_translate as dlt
article_hi = "संयुक्त राष्ट्र के प्रमुख का कहना है कि सीरिया में कोई सैन्य समाधान नहीं है"
article_ar = "الأمين العام للأمم المتحدة يقول إنه لا يوجد حل عسكري في سوريا."
mt = dlt.TranslationModel()
translated_fr = mt.translate(article_hi, source=dlt.lang.HINDI, target=dlt.lang.FRENCH)
translated_en = mt.translate(article_ar, source=dlt.lang.ARABIC, target=dlt.lang.ENGLISH)
请注意,您无需考虑分词器、条件生成、预训练模型和区域代码;您只需告诉模型要翻译的内容即可!
如果您熟悉 huggingface
的生态系统,那么您应该足够熟悉上面的示例,以至于不需要这个库。但是,如果您从未听说过 huggingface 或 mBART,那么我希望使用这个库能够给您足够的学习动机了解它们 :)
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于 安装软件包 的信息。
源代码分发
构建分发
dl-translate-0.3.1.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | b6e64b69d5c92ab88863d6a5ea66a9cabc3f0a5b952345e6444ac49e01e85f89 |
|
MD5 | 7d53f19139f978170805ad318277f2ee |
|
BLAKE2b-256 | 8b78fd043d72580e3c57b8a4648abbed6bb4652f1c782c4a12322cd2e3170407 |
dl_translate-0.3.1-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 18ac7b5beae61b2bfab1c7eab0ec1bf5f248f72aad493a95e9aa5c9f986b26ad |
|
MD5 | ae61eece677bda13d1753803456c0fa0 |
|
BLAKE2b-256 | 02f74b5e86fcab0fe100aa4bb9701ea19e559bc5ed3591b3f5db20941353bb8b |