[译] NLP 指南

栏目: 编程工具 · 发布时间: 5年前

内容简介:原文来自analyticsvidhya原文题目:A Must-Read NLP Tutorial on Neural Machine Translation – The Technique Powering Google Translate

原文来自analyticsvidhya

原文题目:

A Must-Read NLP Tutorial on Neural Machine Translation – The Technique Powering Google Translate

作者是PRATEEK JOSHI

全文长约3200字,建议阅读时间6分钟 点击 【阅读原文】 可查看英文原文

简介

“If you talk to a man in a language he understands, that goes to his head. If you talk to him in his own language, that goes to his heart.” – Nelson Mandela

“如果你用一个人听得懂的语言与他交流,他会记在脑子里;如果你用他自己的语言与他交流,那么他会记在心里。“ - 纳尔逊曼德拉

语言之美超越了国界和文化。学习母语以外的语言是一个巨大的优势。但是,通往双语制或多语制的路径往往是漫长的,永无止境的。

我们迷失在语言的海洋中,忽略了许多言语中细微的差别。但是,通过在线翻译服务,我们不用再担心这些事情(是的Google翻译,说的就是你!)。

我一直想学习英语以外的语言。在2014年,我开始尝试学习德语,这是个既有趣也富有挑战性的事儿。虽然我最终不得不放弃,但我一直怀有重新开始的愿望。

[译] NLP 指南

时间快进到2019年,我幸运地创造出了能够为任何两种语言互译的翻译器;不得不感叹,自然语言处理是多么美好。

在本文中,我将介绍如何使用Keras构建德语--英语翻译模型的步骤。同样也会大概介绍机器翻译系统的发展历史,然而这段历史在机器翻译大火之前没有多少人愿意触及。

敲黑板:本文假设你熟悉RNN,LSTM和Keras。

目录

  1. 机器翻译 - 简史

  2. 问题陈述

  3. seq2seq预测

  4. Python 中使用Keras实现

01

机器翻译 - 简史

我们大多数人知道“机器翻译”,是在谷歌翻译出现的时候。但这个概念其实自上世纪中叶开始就存在了。

机器翻译(以下简称MT)的研究工作早在1950年就开始了,当时主要集中在美国。这些早期的翻译系统依赖于庞大的双语词典,手工编码规则以及自然语言的通用原则。

1954年,IBM举办了首个机器翻译的公开演示。该系统的词汇量相当小,只有250个单词,只能将49个精心挑选的俄语句子翻译成英语。虽然这个数字现在看来微不足道,但是该系统被广泛认为是机器翻译进程中的一个重要里程碑。

[译] NLP 指南

(这张图片来自描述IBM系统的研究论文)

很快,出现了两种思想流派:

  • 通过统计方式进行的经验性的试错法

  • 涉及基础语言研究的理论法

1964年,美国政府成立了自动语言处理咨询委员会(ALPAC),以评估机器翻译的进展。ALPAC在1966年11月发表了关于MT状态的报告,主要包括以下几点:

  • 它对MT的可行性提出了严肃的质疑,并认为它的发展毫无希望

  • 不鼓励大众投资MT

  • 对于在该领域工作的研究人员来说,这是一个令人沮丧的报告

  • 他们中的大多数人离开了这个领域并开始了新的职业生涯

在这份悲惨的报告发布之后,MT进入了一段漫长的低谷期。终于,1981年,加拿大部署了一个名为 METEO系统 的新系统,用于将法语发布的天气预报翻译成英语。这是一个非常成功的项目,一直运作到2001年。

[译] NLP 指南

世界上第一个网络翻译工具 Babel Fish 于1997年由AltaVista搜索引擎发布。

随后就是我们熟悉的历史性的突破 - 谷歌翻译。从那以后,它改变了我们用不同语言工作(甚至学习)的方式。

[译] NLP 指南

02

问题陈述

让我们回到之前学习德语的那部分。但是,这次我要让我的机器完成这项任务。 目标是使用神经机器翻译(NMT:Neural Machine Translation)系统将德语句子转换为英语句子。

[译] NLP 指南

我们将使用来自

http://www.manythings.org/anki/的德语 - 英语的配对数据(文末后有链接)。

03

序列到序列(Seq2Seq)建模

序列到序列(seq2seq)模型经常用于各种NLP任务,例如文本摘要,语音识别,DNA序列建模等。我们的目标是将给定的句子从一种语言翻译成另一种语言。

这里,输入和输出都是句子。换句话说,这些句子是进出模型的单词序列,这是序列到序列建模的基本思想。下图解释了这种方法。

[译] NLP 指南

典型的seq2seq模型有两个主要组件:

a)编码器

b)解码器

这两个部分本质上是两个不同的递归神经网络(RNN: Recurrent Neural Network)模型,然后组合成一个巨大的网络:

[译] NLP 指南

我在下面列出了一些典型的序列到序列建模案例(当然除了机器翻译):

  • 语音识别

  • 名称实体/主题提取,以从文本正文中识别主要主题

  • 关系分类:标记在之前步骤中已标记的各种实体之间的关系

  • Chatbot技能:会话和与客户互动的能力

  • 文本摘要:生成大型文本的简明摘要

  • 问题回答系统

04

在Python中使用Keras

是时候上手了!我们将启动我们最喜欢的Python环境并直接进行业务实践。

导入所需的库

[译] NLP 指南

将数据读入我们的IDE

我们的数据是英语 - 德语句子配对的文本文件(.txt)。首先,我们将使用下面定义的函数读取文件。

[译] NLP 指南

让我们定义另一个函数'\ n'将文本拆分为的英语 - 德语对。然后我们将这些对分别分为英语句子和德语句子。

[译] NLP 指南

我们现在可以使用这些函数将文本变成我们想要的格式读入数组。

[译] NLP 指南

实际数据包含超过150,000个句子对。然而,我们将仅使用前50,000个句子对来减少模型的训练时间。 你可以根据系统的计算能力更改此数字。

[译] NLP 指南

文本预处理

这是在任何项目中都很重要的一步,尤其是在NLP中。我们使用的数据往往是非结构化的,因此在跳转到模型构建部分之前,有某些事项需要我们注意: 

(a)文字清洁

先来看看我们的数据,这能帮助我们决定到底采用哪些预处理步骤。

[译] NLP 指南

我们要去掉标点符号,然后将所有文本转换为小写。

[译] NLP 指南

(b)文本序列转换

Seq2Seq模型要求我们将输入和输出句子转换为固定长度的整数序列。

但在我们这样做之前,让我们想象一下句子的长度。我们将分别捕获英语和德语列表中所有句子的长度。

[译] NLP 指南

[译] NLP 指南

非常直观:德语句子的最大长度为11,英语短语的最大长度为8。

接下来,使用Keras的Tokenizer()类对我们的文本数据进行矢量化。它会将我们的句子变成整数序列。然后我们可以用零填充这些序列使得它们具有相同的长度。

请注意,我们将为德语和英语句子准备分词器:

[译] NLP 指南

下面的代码块包含准备序列的函数。如上所述,它还将执行序列填充到最大句子长度。

[译] NLP 指南

建立模型

我们现在将数据分为训练和测试集,用于模型训练和评估。

[译] NLP 指南

是时候编码句子了。我们将 德语句子编码为输入序列,将英语句子编码为目标序列 。记得对训练和测试集都进行此操作。

[译] NLP 指南

下面是令人兴奋的部分!

我们首先定义我们的Seq2Seq模型架构:

  • 对于编码器,我们将使用嵌入层和LSTM层

  • 对于解码器,我们将使用另一个LSTM层,然后是密集层

[译] NLP 指南

模型架构

[译] NLP 指南

我们在此模型中使用RMSprop优化器,因为在使用递归神经网络时它通常是一个不错的选择。

[译] NLP 指南

请注意,我们使用

' sparse_categorical_crossentropy '作为损失函数。这是因为该函数允许我们按原样使用目标序列,而不是单热编码格式。 使用如此庞大的词汇表对目标序列进行单热编码可能会占用我们系统全部内存。

我们的准备工作到此全部做完了!

我们将对它进行30个周期的训练,批量大小为为512,验证分割为20% 。80%的数据将用于训练模型,其余数据用于评估模型。你可以更改并使用这些超参数。

我们还将使用   ModelCheckpoint() 函数来保存具有最低验证损失的模型。我个人更喜欢这种方法。

[译] NLP 指南

让我们比较一下训练损失和验证损失。

[译] NLP 指南

[译] NLP 指南

正如您在上图中所看到的,验证损失在20个时期后停止下降。

最后,我们可以加载已保存的模型并对看不见的数据进行预测 - testX。

这些预测是整数序列。我们需要将这些整数转换为相应的单词。让我们定义一个函数来实现这一点:

[译] NLP 指南

将预测转换为文本(英语):

[译] NLP 指南

让我们将原始英语句子放在测试数据集中,将预测句子放在数据框中:

我们可以随机打印一些实际与预测的实例,以了解我们的模型如何执行:

[译] NLP 指南

[译] NLP 指南

我们的Seq2Seq模型做得不错。但有几个例子,它错过了关键词理解。例如,它将“im tired of boston”翻译成“im am boston”。

这些是你将在NLP中定期面临的挑战。但这些并非是不可跨越的障碍。我们可以通过使用更多的数据训练或构建更好(或更复杂)的模型来克服这些挑战。

你可以从这个Github上访问完整的代码(链接见文末)。

结束笔记

即使使用非常简单的Seq2Seq模型,结果也能够令人很兴奋。通过在更大的数据集上使用更复杂的编码器 - 解码器模型,我们可以轻松地提升这种性能。

我能想到的另一个实验是在包含较长句子的数据集上尝试seq2seq方法。你尝试的越多,你对这个庞大而复杂的空间的了解就越多。

作者简介:

Prateek Joshi,Analytics Vidhya的数据科学家,具有BFSI领域的多学科学术背景和经验。热衷于学习和实施数据科学技术以实现社会效益。

德语-英语句子翻译数据

http://www.manythings.org/anki/deu-eng.zip

Github地址

https://github.com/prateekjoshi565/machine_translation

小编推荐:

今天推荐的公开课是来自SIGAI创始人雷明的分享--对人工智能的思考,人工智能,机器学习,深度学习的概念与典型应用

温馨提示:请在WiFi环境下观看~

[译] NLP 指南


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Tales from Facebook

Tales from Facebook

Daniel Miller / Polity Press / 2011-4-1 / GBP 55.00

Facebook is now used by nearly 500 million people throughout the world, many of whom spend several hours a day on this site. Once the preserve of youth, the largest increase in usage today is amongst ......一起来看看 《Tales from Facebook》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换