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

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

相关文章

Python FastAPI+Celery+RabbitMQ实现分布式图片水印处理系统

《PythonFastAPI+Celery+RabbitMQ实现分布式图片水印处理系统》这篇文章主要为大家详细介绍了PythonFastAPI如何结合Celery以及RabbitMQ实现简单的分布式... 实现思路FastAPI 服务器Celery 任务队列RabbitMQ 作为消息代理定时任务处理完整

C#使用SQLite进行大数据量高效处理的代码示例

《C#使用SQLite进行大数据量高效处理的代码示例》在软件开发中,高效处理大数据量是一个常见且具有挑战性的任务,SQLite因其零配置、嵌入式、跨平台的特性,成为许多开发者的首选数据库,本文将深入探... 目录前言准备工作数据实体核心技术批量插入:从乌龟到猎豹的蜕变分页查询:加载百万数据异步处理:拒绝界面

SpringCloud动态配置注解@RefreshScope与@Component的深度解析

《SpringCloud动态配置注解@RefreshScope与@Component的深度解析》在现代微服务架构中,动态配置管理是一个关键需求,本文将为大家介绍SpringCloud中相关的注解@Re... 目录引言1. @RefreshScope 的作用与原理1.1 什么是 @RefreshScope1.

Springboot处理跨域的实现方式(附Demo)

《Springboot处理跨域的实现方式(附Demo)》:本文主要介绍Springboot处理跨域的实现方式(附Demo),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录Springboot处理跨域的方式1. 基本知识2. @CrossOrigin3. 全局跨域设置4.

python+opencv处理颜色之将目标颜色转换实例代码

《python+opencv处理颜色之将目标颜色转换实例代码》OpenCV是一个的跨平台计算机视觉库,可以运行在Linux、Windows和MacOS操作系统上,:本文主要介绍python+ope... 目录下面是代码+ 效果 + 解释转HSV: 关于颜色总是要转HSV的掩膜再标注总结 目标:将红色的部分滤

Python 中的异步与同步深度解析(实践记录)

《Python中的异步与同步深度解析(实践记录)》在Python编程世界里,异步和同步的概念是理解程序执行流程和性能优化的关键,这篇文章将带你深入了解它们的差异,以及阻塞和非阻塞的特性,同时通过实际... 目录python中的异步与同步:深度解析与实践异步与同步的定义异步同步阻塞与非阻塞的概念阻塞非阻塞同步

Python实现自动化接收与处理手机验证码

《Python实现自动化接收与处理手机验证码》在移动互联网时代,短信验证码已成为身份验证、账号注册等环节的重要安全手段,本文将介绍如何利用Python实现验证码的自动接收,识别与转发,需要的可以参考下... 目录引言一、准备工作1.1 硬件与软件需求1.2 环境配置二、核心功能实现2.1 短信监听与获取2.

Python使用date模块进行日期处理的终极指南

《Python使用date模块进行日期处理的终极指南》在处理与时间相关的数据时,Python的date模块是开发者最趁手的工具之一,本文将用通俗的语言,结合真实案例,带您掌握date模块的六大核心功能... 目录引言一、date模块的核心功能1.1 日期表示1.2 日期计算1.3 日期比较二、六大常用方法详

利用Go语言开发文件操作工具轻松处理所有文件

《利用Go语言开发文件操作工具轻松处理所有文件》在后端开发中,文件操作是一个非常常见但又容易出错的场景,本文小编要向大家介绍一个强大的Go语言文件操作工具库,它能帮你轻松处理各种文件操作场景... 目录为什么需要这个工具?核心功能详解1. 文件/目录存javascript在性检查2. 批量创建目录3. 文件

Redis中高并发读写性能的深度解析与优化

《Redis中高并发读写性能的深度解析与优化》Redis作为一款高性能的内存数据库,广泛应用于缓存、消息队列、实时统计等场景,本文将深入探讨Redis的读写并发能力,感兴趣的小伙伴可以了解下... 目录引言一、Redis 并发能力概述1.1 Redis 的读写性能1.2 影响 Redis 并发能力的因素二、