关于算法:文字工作者福音四行代码实现翻译支持50种语言开源代码附性能实测

4次阅读

共计 2705 个字符,预计需要花费 7 分钟才能阅读完成。

最近(确切地说是昨天),有人公布了应用深度学习技术进行文本翻译的 Python 库,调用起来十分不便,基于 Facebook AI 提出的多语种翻译模型,反对 50 种语言,几乎是文字工作者的福音,我立马下来查看了一下,写了篇文章,来帮忙大家应用。

留神:应用它可能不须要对深度学习有所理解,然而须要理解根底的 Python 常识。

应用形式

装置

装置它非常简单,只须要执行这行代码:

pip install dl-translate

然而倡议新建一个环境装置,该库基于最新版的 PyTorch,没有在别的版本上测试。为了不扰乱零碎内的环境(懂的都懂),还是新建一个环境比拟好。

conda create -n torch1.8 python=3.8
conda activate torch1.8
pip install dl-translate

应用

官网指南中给出的应用代码,只有四行,就能实现翻译,十分的不便:

import dl_translate as dlt

mt = dlt.TranslationModel()  # 定义模型

text_hi = "संयुक्त राष्ट्र के प्रमुख का कहना है कि सीरिया में कोई सैन्य समाधान नहीं है"
mt.translate(text_hi, source=dlt.lang.HINDI, target=dlt.lang.ENGLISH)

留神第一次应用须要下载模型,可能会比较慢,因为模型反对翻译 50 种语言,所以模型十分大,有 2.3G。如果需要的话,我能够帮忙大家下载下来传到百度网盘。

查看模型反对的语言:

对于比拟长的一段话,翻译起来可能十分慢,所以倡议先将它分为句子的模式,而后再一句一句翻译,对于英文,能够应用 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))

批量翻译

在翻译过程中,咱们能够利用 GPU 并行计算的劣势进行翻译,调整 batch\_size,当然前提是你的 GPU 能放得下这么多句子。

...
mt = dlt.TranslationModel()
mt.translate(text, source, target, batch_size=32, verbose=True)

这里的输出 text,既能够是一个字符串列表,也能够是一个独自的字符串,都会给出对应的后果。

性能测试

因为这个模型十分大,我所用的 GPU(2080ti)放不下这么大的模型,所以以下测试基于 CPU,有条件应用 GPU 的话速度按理说会快不少。在测试中,我将这句话翻译了 100 遍,来统计所用工夫:

Many technical approaches have been proposed for ensuring that decisions made by AI systems are fair, but few of these methods have been applied in real-world settings.

它对应的谷歌翻译的成果:

曾经提出了许多技术办法来确保 AI 零碎做出的决策是偏心的,然而这些办法中很少有在事实环境中利用的。

测试所用代码:

import dl_translate as dlt
import time
from tqdm import tqdm

time_s = time.time()
mt = dlt.TranslationModel(model_options=dict(cache_dir="./"))  # Slow when you load it for the first time
time_e = time.time()
time_takes = time_e - time_s
print("Loading model takes {:.2f} seconds".format(time_e - time_s))

text_english = "Many technical approaches have been proposed for ensuring that decisions made by AI systems  are fair, but few of these methods have been applied in real-world settings."
text_chinese = mt.translate(text_english, source=dlt.lang.ENGLISH, target=dlt.lang.CHINESE)
print(text_chinese)

time_s = time.time()
texts = [text_english for i in range(100)]
for t in tqdm(texts):
    mt.translate(t, source=dlt.lang.ENGLISH, target=dlt.lang.CHINESE)
time_e = time.time()
print("It takes {:.2f} seconds to translate 100 sentences, with an average of {:.2f} seconds each.".format(t ime_e - time_s, (time_e - time_s) / 100))

测试后果:

能够看到,加载模型破费了将近一分半的工夫,翻译一句有 27 个词的英文,要花费约 4 秒的工夫,这个工夫很大水平上依赖于句子的长度。尽管翻译的后果和谷歌翻译的比起来,不够天然,然而对于一个可能离线应用的翻译器来说曾经够好了。

参考链接

  • dl-translate:https://github.com/xhlulu/dl-translate
  • 使用指南:https://xinghanlu.com/dl-translate/
  • mBART50 模型:https://huggingface.co/facebook/mbart-large-50-many-to-many-mmt
  • 背地的论文:Multilingual Translation with Extensible Multilingual Pretraining and Finetuning

写在最初:如果感觉这篇文章对您有帮忙,欢送点赞珍藏评论反对我,谢谢!

我的公众号:算法小哥克里斯,欢送来撩!

正文完
 0