深度学习 DAY3:NLP发展史及早期的前馈神经网络(ANN)及多任务学习

NLP发展史

NLP发展脉络简要梳理如下:

2001 - Neural language models(神经语言模型)
2008 - Multi-task learning(多任务学习)
2013 - Word embeddings(词嵌入)
2013 - Neural networks for NLP(NLP神经网络)
2014 - Sequence-to-sequence models
2015 - Attention(注意力机制)
2015 - Memory-based networks(基于记忆的网络)
2018 - Pretrained language models(预训练语言模型)

2001 - 神经语言模型

第一个神经语言模型是Bengio等人在2001年提出的前馈神经网络,如图所示:

             

这个模型将从表C中查找到的n个单词作为输入向量表征。这种向量被现在的学者们称做“词嵌入”。这些词嵌入级联后被输入到一个隐藏层中,该隐藏层的输出又被输入到softmax。

场景示例:预测下一个词

假设我们有一句话的前几个词:

“I like to eat …”

我们的目标是:用神经网络根据已有的上下文I like to eat来预测下一个词(比如 “apples”, “rice”, “pizza” 等)。

1. 准备输入(词索引)

  • 首先,我们给词表(vocabulary)中的每个单词都分配一个 索引 (index)。在最底层,模型看到的输入并不是 “I, like, to, eat” 的字符,而是它们在词表中的索引编号。
  • 比如:
    • “I” → index = 101
    • “like” → index = 532
    • “to” → index = 7
    • “eat” → index = 85
  • 在图中,这些索引就对应 “index for wt−3​”、“index for wt−2” 等。

Thought about neural language model explanation,持续 12 秒

下面给你举一个具体示例,帮助理解图中神经网络语言模型(Neural Language Model)是如何工作的。


场景示例:预测下一个词

假设我们有一句话的前几个词:

“I like to eat …”

我们的目标是:用神经网络根据已有的上下文I like to eat来预测下一个词(比如 “apples”, “rice”, “pizza” 等)。

1. 准备输入(词索引)

  • 首先,我们给词表(vocabulary)中的每个单词都分配一个 索引 (index)。在最底层,模型看到的输入并不是 “I, like, to, eat” 的字符,而是它们在词表中的索引编号。
  • 比如:
    • “I” → index = 101
    • “like” → index = 532
    • “to” → index = 7
    • “eat” → index = 85
  • 在图中,这些索引就对应 “index for wt−3w_{t-3}wt−3​”、“index for wt−2w_{t-2}wt−2​” 等。

2. 从词嵌入矩阵 C 中查询 Embedding

  • 模型里有一个嵌入矩阵(Embedding Matrix),通常记作 C。它是一个「表」,用来将「词索引」映射成「向量表示」。
  • 举例,如果词表的大小是 V=10000,而我们的词向量维度设为 d=300,那么 C 的大小就是 10000 x 300。每一行对应一个单词的 300 维向量。
  • 当输入是索引 [101, 532, 7, 85](表示 “I like to eat”)时,模型会分别去 C 的第 101 行、第 532 行、第 7 行、第 85 行,把那几行向量取出来:
    • C("I") = 一个 300 维向量
    • C("like") = 一个 300 维向量
    • C("to") = 一个 300 维向量
    • C("eat") = 一个 300 维向量
  • 这几条向量就如同图中那几个蓝色小方框,里面放着红色小圆点(表示向量维度的数值)。

3. 将若干个词向量组合输入到隐层

  • 拿到这四个词向量后,通常会拼接 (concatenate) 或者做其他操作(例如平均、加和等),形成一个长的向量,作为神经网络的输入。
  • 随后,这个长向量会通过一个(或多个)隐层 (hidden layer)
    • 图中用 “tanh” 表示可能存在一个全连接层 + 激活函数(如 tanh⁡ 或 ReLU)。
    • 模型会将输入向量映射到一个新的表示空间,学习到“这些词组合在一起时,它们所包含的上下文信息”。

4. 输出层(Softmax)得到下一词概率分布

  • 随后,隐层的输出会传递给输出层 (output layer),这里通常是一个大小为 V(词表大小)的全连接层,再接一个 Softmax。
  • Softmax 会将网络输出变成一个概率分布,即对词表中每个可能的词(1 到 V)给出一个概率:

  • 这就意味着模型会输出类似:
    • “apples” → 0.28
    • “rice” → 0.15
    • “pizza” → 0.10
    • “is” → 0.05
    • “and” → 0.01
    • …(其他词)
  • 这些值相加等于 1,表示在给定 “I like to eat” 这个上下文时,模型认为下一个词是 “apples” 的概率最高,其次是 “rice”,再然后是 “pizza”,依此类推。

5. 训练 & 参数更新

  • 在训练过程中,我们会有大量的句子样本(真实文本)。模型会对每个句子中的每个位置尝试预测下一个词,然后与真实词做对比,计算交叉熵损失或负对数似然等。
  • 通过反向传播 (backpropagation),模型会不断更新:
    • Embedding Matrix C(让词向量变得更能表达单词的含义与语境),
    • 隐层/输出层的权重(让网络更好地捕捉上下文与下一词的依赖关系)。

6. 小结

综合起来,这个流程就是:

  1. 将离散单词索引 → 查表得到向量 (Embedding) → 隐层 → 输出层 (Softmax) → 获得概率分布
  2. 通过大量语料训练,让模型参数学到“在特定上下文时,下一个词更可能是什么”。

这个思路在当年是对传统 n-gram 语言模型的一次巨大改进,因为神经网络可以通过共享的词向量解决数据稀疏和泛化能力差的问题,并且在处理多样化的文本时效果更好。

语言建模通常是应用RNN时的第一步,是一种非监督学习形式。尽管它很简单,但却是本文后面讨论的许多技术发展的核心:

词嵌入:word2vec 的目标是简化语言建模。

sequence-to-sequence 模型:这种模型通过一次预测一个单词生成一个输出序列。

预训练语言模型:这些方法使用来自语言模型的表述进行迁移学习。

反过来讲,这意味着近年来 NLP 的许多重要进展都可以归结为某些形式的语言建模。为了“真正”理解自然语言,仅仅从文本的原始形式中学习是不够的。我们需要新的方法和模型。

2008- 多任务学习

多任务学习是在多个任务上训练的模型之间共享参数的一种通用方法。在神经网络中,可以通过给不同层施以不同的权重,来很容易地实现多任务学习。多任务学习的概念最初由Rich Caruana 在1993年提出,并被应用于道路跟踪和肺炎预测(Caruana,1998)。直观地说,多任务学习鼓励模型学习对许多任务有用的表述。这对于学习一般的、低级的表述形式、集中模型的注意力或在训练数据有限的环境中特别有用。

在2008年,Collobert 和 Weston 将多任务学习首次应用于 NLP 的神经网络。在他们的模型中,查询表(或单词嵌入矩阵)在两个接受不同任务训练的模型之间共享,如下面的图所示。 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/67316.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

全面了解 Web3 AIGC 和 AI Agent 的创新先锋 MelodAI

不管是在传统领域还是 Crypto,AI 都是公认的最有前景的赛道。随着数字内容需求的爆炸式增长和技术的快速迭代,Web3 AIGC(AI生成内容)和 AI Agent(人工智能代理)正成为两大关键赛道。 AIGC 通过 AI 技术生成…

54.数字翻译成字符串的可能性|Marscode AI刷题

1.题目 问题描述 小M获得了一个任务,需要将数字翻译成字符串。翻译规则是:0对应"a",1对应"b",依此类推直到25对应"z"。一个数字可能有多种翻译方法。小M需要一个程序来计算一个数字有多少种不同的…

FileReader使用

FileReader : 读取文件内容的api,,,在前端处理上传的文件,,比如预览图片 readAsDataURL(file) : 读取为base64编码的 data urlreadAsText() : 读取为文本readAsArrayBuffer() : 读取为二进制 …

RabbitMQ5-死信队列

目录 死信的概念 死信的来源 死信实战 死信之TTl 死信之最大长度 死信之消息被拒 死信的概念 死信,顾名思义就是无法被消费的消息,一般来说,producer 将消息投递到 broker 或直接到queue 里了,consumer 从 queue 取出消息进…

JavaScript系列(48)-- 3D渲染引擎实现详解

JavaScript 3D渲染引擎实现详解 🎮 今天,让我们深入探讨JavaScript的3D渲染引擎实现。通过WebGL和现代JavaScript技术,我们可以构建一个功能完整的3D渲染系统。 3D渲染基础概念 🌟 💡 小知识:3D渲染引擎的…

10JavaWeb——SpringBootWeb案例01

前面我们已经讲解了Web前端开发的基础知识,也讲解了Web后端开发的基础(HTTP协议、请求响应),并且也讲解了数据库MySQL,以及通过Mybatis框架如何来完成数据库的基本操作。 那接下来,我们就通过一个案例,来将前端开发、后…

【面试题】 Java 三年工作经验(2025)

问题列表 为什么选择 spring boot 框架,它与 Spring 有什么区别?spring mvc 的执行流程是什么?如何实现 spring 的 IOC 过程,会用到什么技术?spring boot 的自动化配置的原理是什么?如何理解 spring boot 中…

JAVA 接口、抽象类的关系和用处 详细解析

接口 - Java教程 - 廖雪峰的官方网站 一个 抽象类 如果实现了一个接口,可以只选择实现接口中的 部分方法(所有的方法都要有,可以一部分已经写具体,另一部分继续保留抽象),原因在于: 抽象类本身…

ResNeSt: Split-Attention Networks论文学习笔记

这张图展示了一个名为“Split-Attention”的神经网络结构,该结构在一个基数组(cardinal group)内进行操作。基数组通常指的是在神经网络中处理的一组特征或通道。图中展示了如何通过一系列操作来实现对输入特征的注意力机制。 以下是图中各部…

数据收集后台服务概要设计

为了帮助大家设计一个数据指标汇总的后端应用,我将提供一个概要设计和表设计的建议。这个设计将基于常见的数据收集需求,假设你需要收集、存储和汇总来自不同数据源的指标数据。 1. 概要设计 1.1 系统架构 数据收集层:负责从不同数据源&am…

探秘 TCP TLP:从背景到实现

回家的路上还讨论了个关于 TCP TLP 的问题,闲着无事缕一缕。本文内容参考自 Tail Loss Probe (TLP): An Algorithm for Fast Recovery of Tail Losses 以及 Linux 内核源码。 TLP,先说缘由。自 TCP 引入 Fast retrans 机制就是为了尽力避免 RTO&#xf…

设计模式Python版 原型模式

文章目录 前言一、原型模式二、原型模式示例三、原型管理器 前言 GOF设计模式分三大类: 创建型模式:关注对象的创建过程,包括单例模式、简单工厂模式、工厂方法模式、抽象工厂模式、原型模式和建造者模式。结构型模式:关注类和对…

一文大白话讲清楚webpack进阶——5——dev-server原理及其作用

文章目录 一文大白话讲清楚webpack进阶——5——dev-server原理及其作用1. webpack的作用2. dev-server的作用3. dev-server的原理3.1 啥是webpack-dev-middleware3.2 HMR 一文大白话讲清楚webpack进阶——5——dev-server原理及其作用 1. webpack的作用 webpack的作用我们之…

【第十天】零基础入门刷题Python-算法篇-数据结构与算法的介绍-两种常见的字符串算法(持续更新)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、Python数据结构与算法的详细介绍1.Python中的常用的字符串算法2.字符串算法3.详细的字符串算法1)KMP算法2)Rabin-Karp算法 总结 前言…

Writing an Efficient Vulkan Renderer

本文出自GPU Zen 2。 Vulkan 是一个新的显式跨平台图形 API。它引入了许多新概念,即使是经验丰富的图形程序员也可能不熟悉。Vulkan 的主要目标是性能——然而,获得良好的性能需要深入了解这些概念及其高效应用方法,以及特定驱动程序实现的实…

使用QSqlQueryModel创建交替背景色的表格模型

class UserModel(QSqlQueryModel):def __init__(self):super().__init__()self._query "SELECT name, age FROM users"self.refresh()def refresh(self):self.setQuery(self._query)# 重新定义data()方法def data(self, index, role): if role Qt.BackgroundRole…

Java数据库操作指南:快速上手JDBC【学术会议-2025年数字化教育与信息技术(DEIT 2025】

大会官网:www.ic-deit.org 前言 在现代企业应用中,数据库是数据存储和管理的重要组成部分。Java作为一种广泛使用的编程语言,提供了多种方式与数据库进行交互。本文将介绍 JDBC(Java Database Connectivity)&#x…

神经网络的通俗介绍

人工神经网络,是一种模仿人类大脑工作原理的数学模型。人类的大脑是由无数的小“工作站”组成的,每个工作站叫做“神经元”。这些神经元通过“电线”互相连接,负责接收、处理和传递信息。 一、人类大脑神经网络 人类大脑的神经网络大概长这…

FLTK - FLTK1.4.1 - demo - animgifimage-play

文章目录 FLTK - FLTK1.4.1 - demo - animgifimage-play概述笔记END FLTK - FLTK1.4.1 - demo - animgifimage-play 概述 看的官方demo越多,在每个新demo中能看到的新增知识点越少。这是好事。 不可能一次将细节都记住,只要知道每个官方demo能干啥&…

OpenEuler学习笔记(八):安装OpenEuler

在VMware Workstation中安装OpenEuler 准备工作 下载并安装VMware Workstation虚拟机软件。前往OpenEuler官网下载OpenEuler系统镜像文件。 创建虚拟机 打开VMware Workstation,点击“创建新的虚拟机”,选择“自定义”,点击“下一步”。选择…