自然语言处理中的深度学习发展史和待解难题

2023-12-13 10:32

本文主要是介绍自然语言处理中的深度学习发展史和待解难题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

自然语言处理(NLP)是指机器理解并解释人类写作与说话方式的能力。近年来,深度学习技术在自然语言处理方面的研究和应用也取得了显著的成果。

这篇文章讨论了自然语言处理方法的发展史,以及深度学习带来的影响。量子位编译如下:

在深度学习时代来临前

在2006年Hinton提出深度信念网络(DBN)之前,神经网络是一种极其复杂且难以训练的功能网络,所以只能作为一种数学理论来进行研究。

在神经网络成为一种强大的机器学习工具之前,经典的数据挖掘算法在自然语言处理方面有着许多相当成功的应用。我们可以使用一些很简单且容易理解的模型来解决常见问题,比如垃圾邮件过滤、词性标注等。

但并不是所有问题都能用这些经典模型来解决。简单的模型不能准确地捕捉到语言中的细微之处,比如讽刺、成语或语境。

基于总体摘要的算法(如词袋模型)在提取文本数据的序列性质时效果不佳,而N元模型(n-grams)在模拟广义情境时严重受到了“维度灾难(curse of dimensionality)”问题的影响,隐马尔可夫(HMM)模型受马尔可夫性质所限,也难以克服上述问题。

这些方法在更复杂的NLP问题中也有应用,但是并没有取得很好的效果。

第一个技术突破:Word2Vec

神经网络能提供语义丰富的单词表征,给NLP领域带来了根本性突破。

在此之前,最常用的表征方法为one-hot编码,即每个单词会被转换成一个独特的二元向量,且只有一个非零项。这种方法严重地受到了稀疏性的影响,不能用来表示任何带有特定含义的词语。

△ Word2Vec方法中被投射到二维空间中的单词表征

然而,我们可以尝试关注几个周围单词,移除中间单词,并通过在神经网络输入一个中间单词后,预测周围单词,这就是skip-gram模型;或是基于周围单词,进行预测中间单词,即连续词袋模型(CBOW)。当然,这种模型没什么用处,但是事实证明,它可在保留了单词语义结构的前提下,用来生成一个强大且有效的向量表示。

进一步改进

尽管Word2Vec模型的效果超过了许多经典算法,但是仍需要一种能捕获文本长短期顺序依赖关系的解决方法。对于这个问题,第一种解决方法为经典的循环神经网络(Recurrent Neural Networks),它利用数据的时间性质,使用存储在隐含状态中的先前单词信息,有序地将每个单词传输到训练网络中。

△ 循环神经网络示意图

事实证明,这种网络能很好地处理局部依赖关系,但是由于“梯度消失”问题,很难训练出理想效果。

为了解决这个问题,Schmidhuber等人提出了一种新型网络拓扑结构,即长短期记忆模型(Long Short Term Memory)。它通过在网络中引入一种叫做记忆单元的特殊结构来解决该问题。这种复杂机制能有效获取单元间更长期的依赖关系,且不会显著增加参数量。

现有的很多常用结构也是LSTM模型的变体,例如mLSTM模型或GRU模型。这得益于提出了基于自适应简化的记忆单元更新机制,显着减少了所需的参数量。

在计算机视觉领域中,卷积神经网络已经取得了很好的应用,迟早会延伸到自然语言处理研究中。目前,作为一种常用的网络单元,一维卷积已成功应用到多种序列模型问题的处理中,包括语义分割、快速机器翻译和某些序列转换网络中。由于更容易进行并行计算,与循环神经网络相比,一维卷积在训练速度上已提高了一个数量级。

了解常见的NLP问题

有许多任务,涉及到计算机与人类语言之间的交互,这可能对人类来说是一件简单的小事,但是给计算机带来了很大的麻烦。这主要是由语言中细微差异引起的,如讽刺、成语等。

按照复杂程度,下面列出了当前还处于探索阶段的多个NLP领域:

最常见的领域是情绪分析(Sentiment Analysis),这方面也许最为简单。它通常可归结为确定说话者/作者对某个特定主题的态度或情感反应。这种情绪可能是积极的、中性的和消极的。文末的链接1给出了一篇关于使用深度卷积神经网络学习Twitter情绪的经典文章。链接2的一个有趣实验偶然发现,深度循环网络也可用来辨识情绪。

△ 生成对话网络中的多个激活神经元。明显看出,即使进行无监督训练,网络也能分辨出不同情绪类别。

我们可以将这种方法应用到文件分类(Document Classification)中,这是一个普通的分类问题,而不是为每篇文章打几个标签。链接3的论文通过仔细比较算法间差异,得出深度学习也可作为一种文本分类方法的结论。

接下来将要介绍一个真正有挑战的领域——机器翻译(Machine Translation)。这是一个与先前两个任务完全不同的研究领域。我们需要一个预测模型,来输出一个单词序列,而不是一个标签。在序列数据研究中,深度学习理论的加入给这个领域带来了巨大的突破。通过链接4的博文中,你可以了解更多关于循环神经网络在机器翻译中的应用。

我们可能还想要构建一个自动文本摘要(Text Summarization)模型,它需要在保留所有含义的前提下,提取出文本中最重要的部分。这需要一种算法来了解全文,同时能够锁定文章中能代表大部分含义的特定内容。在端到端方法中,可以引入注意力机制(Attention Mechanisms)模块来很好地解决这个问题。

最后一个领域为自动问答(Question Answering),这是一个与人工智能极其相关的研究方向。相关模型不仅需要了解所提出的问题,而且需充分了解文本中的关注点,并准确地知道在何处寻找答案。关于深度学习在自动问答中的详细说明,请查看链接5的相关博文。

△ GNMT英译法的注意力机制示意图。

由于深度学习为各种数据(如文本和图像)提供相应的向量表征,你可以利用不同的数据特性构建出不同模型。

于是,就有了图片问答(Visual Question Answering)研究。这种方式比较简单,你只需要根据给出图像,回答相应问题。这项工作简单到听起来好像一个七岁小孩就能完成,但是深层模型在无监督情况下不能输出任何合理的结果。链接6的文章给出了相关模型的结果和说明。

END

碧茂课堂精彩课程推荐:

1.Cloudera数据分析课;

2.Spark和Hadoop开发员培训;

3.大数据机器学习之推荐系统;

4.Python数据分析与机器学习实战;

详情请关注我们公众号:碧茂大数据-课程产品-碧茂课堂

现在注册互动得海量学币,大量精品课程免费送!

这篇关于自然语言处理中的深度学习发展史和待解难题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/488129

相关文章

Java 中的 @SneakyThrows 注解使用方法(简化异常处理的利与弊)

《Java中的@SneakyThrows注解使用方法(简化异常处理的利与弊)》为了简化异常处理,Lombok提供了一个强大的注解@SneakyThrows,本文将详细介绍@SneakyThro... 目录1. @SneakyThrows 简介 1.1 什么是 Lombok?2. @SneakyThrows

在 Spring Boot 中实现异常处理最佳实践

《在SpringBoot中实现异常处理最佳实践》本文介绍如何在SpringBoot中实现异常处理,涵盖核心概念、实现方法、与先前查询的集成、性能分析、常见问题和最佳实践,感兴趣的朋友一起看看吧... 目录一、Spring Boot 异常处理的背景与核心概念1.1 为什么需要异常处理?1.2 Spring B

python处理带有时区的日期和时间数据

《python处理带有时区的日期和时间数据》这篇文章主要为大家详细介绍了如何在Python中使用pytz库处理时区信息,包括获取当前UTC时间,转换为特定时区等,有需要的小伙伴可以参考一下... 目录时区基本信息python datetime使用timezonepandas处理时区数据知识延展时区基本信息

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen

Python Transformers库(NLP处理库)案例代码讲解

《PythonTransformers库(NLP处理库)案例代码讲解》本文介绍transformers库的全面讲解,包含基础知识、高级用法、案例代码及学习路径,内容经过组织,适合不同阶段的学习者,对... 目录一、基础知识1. Transformers 库简介2. 安装与环境配置3. 快速上手示例二、核心模

一文详解Java异常处理你都了解哪些知识

《一文详解Java异常处理你都了解哪些知识》:本文主要介绍Java异常处理的相关资料,包括异常的分类、捕获和处理异常的语法、常见的异常类型以及自定义异常的实现,文中通过代码介绍的非常详细,需要的朋... 目录前言一、什么是异常二、异常的分类2.1 受检异常2.2 非受检异常三、异常处理的语法3.1 try-

Python使用getopt处理命令行参数示例解析(最佳实践)

《Python使用getopt处理命令行参数示例解析(最佳实践)》getopt模块是Python标准库中一个简单但强大的命令行参数处理工具,它特别适合那些需要快速实现基本命令行参数解析的场景,或者需要... 目录为什么需要处理命令行参数?getopt模块基础实际应用示例与其他参数处理方式的比较常见问http

Java Response返回值的最佳处理方案

《JavaResponse返回值的最佳处理方案》在开发Web应用程序时,我们经常需要通过HTTP请求从服务器获取响应数据,这些数据可以是JSON、XML、甚至是文件,本篇文章将详细解析Java中处理... 目录摘要概述核心问题:关键技术点:源码解析示例 1:使用HttpURLConnection获取Resp

Java中Switch Case多个条件处理方法举例

《Java中SwitchCase多个条件处理方法举例》Java中switch语句用于根据变量值执行不同代码块,适用于多个条件的处理,:本文主要介绍Java中SwitchCase多个条件处理的相... 目录前言基本语法处理多个条件示例1:合并相同代码的多个case示例2:通过字符串合并多个case进阶用法使用

Java实现优雅日期处理的方案详解

《Java实现优雅日期处理的方案详解》在我们的日常工作中,需要经常处理各种格式,各种类似的的日期或者时间,下面我们就来看看如何使用java处理这样的日期问题吧,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言一、日期的坑1.1 日期格式化陷阱1.2 时区转换二、优雅方案的进阶之路2.1 线程安全重构2