当前位置: 首页 > news >正文

PyTorch深度学习实战 | 自然语言处理与强化学习

PyTorch是当前主流深度学习框架之一,其设计追求最少的封装、最直观的设计,其简洁优美的特性使得PyTorch代码更易理解,对新手非常友好。

本文主要介绍深度学习领域中自然语言处理与强化学习部分。

自然语言区别于计算机所使用的机器语言和程序语言,是指人类用于日常交流的语言。而自然语言处理的目的是要让计算机来理解和处理人类的语言。

让计算机来理解和处理人类的语言也不是一件容易的事情,因为语言对于感知的抽象很多时候并不是直观的、完整的。我们的视觉感知到一个物体,就是实实在在地接收到了代表这个物体的所有像素。但是,自然语言的一个句子背后往往包含着不直接表述出来的常识和逻辑,这使得计算机在试图处理自然语言的时候不能从字面上获取所有的信息。因此自然语言处理的难度更大,它的发展与应用相比于计算机视觉也往往呈现出滞后的情况。

深度学习在自然语言处理上的应用也是如此。为了将深度学习引入这个领域,我们尝试了许多方法来表示和处理自然语言的表层信息(如词向量、更高层次、带上下文信息的特征表示等),也尝试过许多方法来结合常识与直接感知(如知识图谱、多模态信息等)。这些研究都富有成果,其中的许多都已应用于现实中,甚至用于社会管理、商业、军事的目的。

1、自然语言处理的基本问题

自然语言处理主要研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法,其主要任务如下。

(1) 语言建模。语言建模即计算一个句子在一种语言中出现的概率。它的一种常见形式是:给出句子的前几个词,预测下一个词是什么。

(2) 词性标注。句子都是由单独的词汇构成的,自然语言处理有时需要标注出句子中每个词的词性。需要注意的是,句子中的词汇并不是独立的,在研究过程中,通常需要考虑词汇的上下文。

(3) 中文分词。中文的最小自然单位是字,但单个字的意义往往不明确或者含义较多,并且在多语言的任务中与其他以词为基本单位的语言不对等。因此不论是从语言学特性还是从模型设计的角度来说,都需要将中文句子恰当地切分为单个的词。

(4) 句法分析。 由于人类表达的时候只能逐词地按顺序说,因此自然语言的句子也是扁平的序列。但这并不代表着一个句子中不相邻的词之间就没有关系,也不代表着整个句子中的词只有前后关系。它们之间的关系是复杂的,需要用树状结构或图才能表示清楚。句法分析中,人们希望通过明确句子内两个或多个词的关系来了解整个句子的结构。句法分析的最终结果是一棵句法树。

(5) 情感分类。给出一个句子,我们希望知道这个句子表达了什么情感:有时候是正面/负面的二元分类,有时候是更细粒度的分类;有时候是仅给出一个句子,有时候是指定对于特定对象的态度/情感。

(6) 机器翻译。最常见的是把源语言的一个句子翻译成目标语言的一个句子。与语言建模相似,给定目标语言一个句子的前几个词,预测下一个词是什么,但最终预测出来的整个目标语言句子必须与给定的源语言句子具有完全相同的含义。

(7) 阅读理解。有许多形式。有时候是输入一个段落或一个问题,生成一个回答(类似问答),或者在原文中标定一个范围作为回答(类似从原文中找对应句子),有时候是输出一个分类(类似选择题)。

2、发展趋势

从传统方法和神经网络方法的对比中,可以看出自然语言处理的模型和系统构建是向着越来越自动化、模型越来越通用的趋势发展的。

一开始,人们试图减少和去除人类专家知识的参与。因此就有了大量的网络参数、复杂的架构设计,这些都是通过在概率模型中提供潜在变量(latent variable),使得模型具有捕捉和表达复杂规则的能力。这一阶段,人们渐渐地摆脱了人工制定的规则和特征工程,同一种网络架构可以被许多自然语言任务通用。

之后,人们觉得每一次为新的自然语言处理任务设计一个新的模型架构并从头训练的过程过于烦琐,于是试图开发利用这些任务底层所共享的语言特征。在这一背景下,迁移学习逐渐发展,从前神经网络时代的LDA、Brown Clusters,到早期深度学习中的预训练词向量word2vec、Glove等,再到今天家喻户晓的预训练语言模型ELMo、BERT。这使得不仅是模型架构可以通用,连训练好的模型参数也可以通用了。

现在人们希望神经网络的架构都可以不需要设计,而是根据具体的任务和数据来搜索得到。这一新兴领域方兴未艾,可以预见,随着研究的深入,自然语言处理的自动化程度一定会得到极大的提高。

3、什么是强化学习

强化学习是机器学习的一个重要分支,它与非监督学习、监督学习并列为机器学习的三类主要学习方法,三者之间的关系如图1所示。强化学习强调如何基于环境行动,以取得最大化的预期利益,所以强化学习可以被理解为决策问题。它是多学科、多领域交叉的产物,其灵感来自心理学的行为主义理论,即有机体如何在环境给予的奖励或惩罚的刺激下,逐步形成对刺激的预期,产生能获得最大利益的习惯性行为。强化学习的应用范围非常广泛,各领域对它的研究重点各有不同,本篇中我们只专注于强化学习的通用概念!

■ 图1 强化学习、监督学习、非监督学习关系示意图

在实际应用中,人们常常会把强化学习、监督学习和非监督学习这三者混淆,为了更深刻地理解强化学习和它们之间的区别,首先介绍监督学习和非监督学习的概念。

监督学习是通过带有标签或对应结果的样本训练得到一个最优模型,再利用这个模型将所有的输入映射为相应的输出,以实现分类。

非监督学习即在样本的标签未知的情况下,根据样本间的相似性对样本集进行聚类,使类内差距最小化,学习出分类器。

上述两种学习方法都会学习到输入到输出的一个映射,它们学习到的是输入和输出之间的关系,可以告诉算法什么样的输入对应着什么样的输出,而强化学习得到的是反馈,它是在没有任何标签的情况下,通过先尝试做出一些行为、得到一个结果,通过这个结果是对还是错的反馈,调整之前的行为。在不断的尝试和调整中,算法学习到在什么样的情况下选择什么样的行为可以得到最好的结果。此外,监督学习的反馈是即时的,而强化学习的结果反馈有延时,很可能需要走了很多步以后才知道之前某一步的选择是好还是坏。

1强化学习的4个元素

强化学习主要包含4个元素:智能体(agent)、环境状态(state)、行动(action)、反馈(reward),它们之间的关系如图2所示,详细定义如下。

agent: 智能体是执行任务的客体,只能通过与环境互动来提升策略。

state: 在每个时间节点,agent所处的环境的表示即为环境状态。

action: 在每个环境状态中,agent可以采取的动作即为行动。

reward: 每到一个环境状态,agent就有可能会收到一个反馈。

2强化学习算法的目标

强化学习算法的目标就是获得最多的累计奖励(正反馈)。以“幼童学习走路”为例,幼童需要自主学习走路,没有人指导他应该如何完成“走路”,他需要通过不断的尝试和获取外界对他的反馈来学习走路。

在此例中,如图2所示,幼童即为agent,“走路”这个任务实际上包含以下几个阶段:站起来,保持平衡,迈出左腿,迈出右腿……幼童采取行动做出尝试,当他成功完成了某个子任务时(如站起来等),他就会获得一个巧克力(正反馈);当他做出了错误的动作时,他会被轻轻拍打一下(负反馈)。幼童通过不断地尝试和调整,找出了一套最佳的策略,这套策略能使他获得最多的巧克力。显然,他学习到的这套策略能使他顺利完成“走路”这个任务。

■ 图2 强化学习的4个元素

3特征

(1) 没有监督者,只有一个反馈信号。

(2) 反馈是延迟的,不是立即生成的。

(3) 强化学习是序列学习,时间在强化学习中具有重要的意义。

(4) agent的行为会影响以后所有的决策。

4、强化学习算法简介

强化学习主要可以分为Model-Free(无模型的)和Model-Based(有模型的)两大类。Model-Free算法又分成基于概率的和基于价值的。

1Model-Free和Model-Based

如果agent不需要去理解或计算出环境模型,算法就是Model-Free的;相应地,如果需要计算出环境模型,那么算法就是Model-Based的。实际应用中,我们通常用如下方法进行判断:在agent执行它的动作之前,它是否能对下一步的状态和反馈做出预测?如果可以,那么就是Model-Based方法;如果不能,即为Model-Free方法。

两种方法各有优劣。Model-Based方法中,agent可以根据模型预测下一步的结果,并提前规划行动路径。但真实模型和学习到的模型是有误差的,这种误差会导致agent虽然在模型中表现很好,但是在真实环境中可能达不到预期结果。Model-Free的算法看似随意,但这恰好更易于我们去实现和调整。

2基于概率的算法和基于价值的算法

基于概率的算法是指直接输出下一步要采取的各种动作的概率, 然后根据概率采取行动。每种动作都有可能被选中, 只是可能性不同。基于概率的算法的代表算法为policy-gradient,而基于价值的算法输出的则是所有动作的价值, 然后根据最高价值来选择动作。相比基于概率的方法, 基于价值的决策部分更为死板——只选价值最高的,而基于概率的, 即使某个动作的概率最高, 但是还是不一定会选到它。基于价值的算法的代表算法为Q-Learning。

5、强化学习的应用

1交互性检索

交互性检索是在检索用户不能构建良好的检索式(关键词)的情况下,通过与检索平台交流互动并不断修改检索式,从而获得较准确检索结果的过程。

当用户想要搜索一个竞选演讲(Wu & Lee,INTERSPEECH 16)时,他不能提供直接的关键词,其交互性搜索过程如图3所示。在交互性检索中,机器作为agent,在不断的尝试中(提供给用户可能的问题答案)接受来自用户的反馈(对答案的判断),最终找到符合要求的结果。

2新闻推荐

新闻推荐,如图4所示。一次完整的推荐过程包含以下过程:一个用户单击 App 底部刷新或者下拉,后台获取到用户请求,并根据用户的标签召回候选新闻,推荐引擎则对候选新闻进行排序,最终给用户推出 10 条新闻。如此往复,直到用户关闭 App,停止浏览新闻。将用户持续浏览新闻的推荐过程看成一个决策过程,就可以通过强化学习学习每一次推荐的最佳策略,从而使得用户从开始打开 App 到关闭 App 这段时间内的点击量最高。

■ 图3 交互性检索

■ 图4 新闻推荐

在此例中,推荐引擎作为agent,通过连续的行动即推送10篇新闻,获取来自用户的反馈,即单击:如果用户浏览了新闻,则为正反馈,否则为负反馈,从中学习出奖励最高(点击量最高)的策略。

相关文章:

PyTorch深度学习实战 | 自然语言处理与强化学习

PyTorch是当前主流深度学习框架之一,其设计追求最少的封装、最直观的设计,其简洁优美的特性使得PyTorch代码更易理解,对新手非常友好。本文主要介绍深度学习领域中自然语言处理与强化学习部分。自然语言区别于计算机所使用的机器语言和程序语…...

测牛学堂:接口测试基础理论和工具的使用

接口测试流程总结 1 需求分析,看产品经理的需求文档 2 接口文档解析,开发编写的api接口文档 3 设计测试用例 4脚本开发 5 执行及缺陷跟踪 6 生成测试报告 7接口自动化持续集成 测试解析接口文档 接口文档,又称为api文档,是由后…...

定长内存池的实现

解决的是固定大小的内存申请释放需求&#xff1a; 性能达到极致不考虑内存碎片问题(统一使用自由链表管理还回来的空间) 为了避免命名污染&#xff0c;不要直接using namespace std;只展开常用的。 #include <iostream> using std::cout; using std::endl;申请空间时有…...

三更草堂springSecurity的学习

源码地址&#xff1a;学习springSecurity (gitee.com) git&#xff1a;https://gitee.com/misszyg/spring-security.git 一&#xff0c;认证流程 1&#xff0c;经过UsernamePasswordAuthenticationFilter &#xff08;1&#xff09;传入了用户的账号&#xff0c;密码 源码&a…...

【C语言】指针的深度理解(一)

前言 我们已经了解了指针的概念&#xff0c;一是指针变量是用来存放地址的&#xff0c;每个地址都对应着唯一的内存空间。二是指针的大小是固定的4或8个字节&#xff08;取决于操作系统&#xff0c;32位的占4个字节&#xff0c;64位的占8个字节&#xff09;。三是指针是有类型…...

Kafka最佳实践

前言 Kafka 最佳实践&#xff0c;涉及 典型使用场景Kafka 使用的最佳实践 Kafka 典型使用场景 Data Streaming Kafka 能够对接到 Spark、Flink、Flume 等多个主流的流数据处理技术。利用 Kafka 高吞吐量的特点&#xff0c;客户可以通过 Kafka 建立传输通道&#xff0c;把应…...

入门教程: 认识 React用于构建用户界面的 JavaScript 库

课前准备 我们将会在这个教程中开发一个小游戏。你可能并不打算做游戏开发,然后就直接跳过了这个教程——但是不妨尝试一下!你将在该教程中学到关于构建 React 应用的基础知识,掌握这些知识后,你将会对 React 有更加深刻的理解。 这篇教程分为以下几个部分: 环境准备是学…...

极紫外光源高次谐波发生腔不同区域真空度精密控制解决方案

摘要&#xff1a;在高次谐波发生器中一般包含两个不同真空区域&#xff0c;一个是1~100Torr绝压范围的气池内部的低真空区域&#xff0c;一个是高阶谐波光路上的绝压为0.001Pa量级的高真空区域。本文针对此两个区域的真空度控制提出了相应的解决方案&#xff0c;特别是详细介绍…...

「Vue面试题」在vue中为什么data属性是一个函数而不是一个对象

文章目录一、实例和组件定义data的区别二、组件data定义函数与对象的区别三、原理分析四、结论一、实例和组件定义data的区别 vue实例的时候定义data属性既可以是一个对象&#xff0c;也可以是一个函数 const app new Vue({el:"#app",// 对象格式data:{foo:"…...

如何使用 ChatGPT 编写 SQL JOIN 查询

通过清晰的示例和解释&#xff0c;本文展示了 ChatGPT 如何简化和简化创建复杂 MySQL 查询的过程&#xff0c;使用户更容易与数据库交互并检索他们需要的数据。无论您是初学者还是经验丰富的开发人员&#xff0c;本文都提供了有关如何利用 ChatGPT 来增强您的 MySQL 查询编写技…...

vue2+elementUI完成添加学生删除学生案列

效果图&#xff1a; 点击添加学生按钮&#xff0c;弹出Dialog,收集用户信息&#xff1a; el-table中自定义复选框&#xff0c;选中一行&#xff0c;可以点击删除 代码区域&#xff1a;就一个HTML文件 <!DOCTYPE html> <html lang"en"> <head>&…...

对void的深度理解

作者&#xff1a;小树苗渴望变成参天大树 作者宣言&#xff1a;认真写好每一篇博客 作者gitee:gitee 如 果 你 喜 欢 作 者 的 文 章 &#xff0c;就 给 作 者 点 点 关 注 吧&#xff01; void前言一、 void 关键字二、 void修饰函数返回值和参数三、void指针3.1void * 定义的…...

哪款游戏蓝牙耳机好用?好用的游戏蓝牙耳机推荐

现在&#xff0c;不少人喜欢戴蓝牙耳机玩游戏&#xff0c;而在戴蓝牙耳机玩游戏时难免会产生音画不同步的问题。现在越来越多的蓝牙耳机支持游戏模式&#xff0c;那么&#xff0c;哪款游戏蓝牙耳机好用&#xff1f;接下来&#xff0c;我来给大家推荐几款好用的游戏蓝牙耳机&…...

求职(怎么才算精通JAVA开发)

在找工作的的时候,有时候我们需要对自己的技术水平做一个评估。特别是Java工程师,我们该怎么去表达自己的能力和正确认识自己所处的技术水平呢。技术一般的人,一般都不敢说自己精通JAVA,因为你说了精通JAVA几乎就给了面试官一个可以随便往死里问的理由了。很多不自信的一般…...

C++网络编程(三)IO复用

C网络编程(三)IO复用 前言 多进程/多线程网络服务端在创建进程/线程时&#xff0c;CPU和内存开销很大。因为多线程/进程并发模型&#xff0c;为每个socket分配一个线程/进程。而IO复用采用单个的进程/线程就可以管理多个socket。 select 系统调用原型&#xff1a; #includ…...

第十四届蓝桥杯(第三期)模拟赛试题与题解 C++

第十四届蓝桥杯&#xff08;第三期&#xff09;模拟赛试题与题解 C 试题 A 【问题描述】 请找到一个大于 2022 的最小数&#xff0c;这个数转换成十六进制之后&#xff0c;所有的数位&#xff08;不含前导 0&#xff09;都为字母&#xff08;A 到 F&#xff09;。  请将这个…...

【Hive 基础】-- 数据倾斜

1.什么是数据倾斜&#xff1f;由于数据分布不均匀&#xff0c;导致大量数据集中到一点&#xff0c;造成数据热点。常见现象&#xff1a;一个 hive sql 有100个 map/reducer task&#xff0c; 有一个运行了 20分钟&#xff0c;其他99个 task 只运行了 1分钟。2.产生数据倾斜的原…...

计算机网络笔记——物理层

计算机网络笔记——物理层2. 物理层2.1 通信基础2.1.1 信号2.1.2 信源、信道及信宿2.1.3 速率、波特及码元2.1.4 带宽2.1.5 奈奎斯特定理采样定理奈奎斯特定理2.1.6 香农定理2.1.7 编码与调制调制数字信号调制为模拟信号模拟数据调制为模拟信号编码数字数据编码为数字信号模拟数…...

算法第十七期——状态规划(DP)之动态压缩

一、总述 状态压缩动态规划&#xff0c;就是我们俗称的状压DP&#xff0c;是利用计算机二进制的性质来描述状态的一种DP方式。 应用背景&#xff1a;以集合为状态&#xff0c;且集合可以用二进制来表示&#xff0c;用二进制的位运算来处理。集合问题一般是指数复杂度的&#x…...

2022年全国职业院校技能大赛(中职组)网络安全竞赛试题A模块第八套解析(详细)

2022年全国职业院校技能大赛(中职组) 网络安全竞赛试题 (8) (总分100分) 赛题说明 一、竞赛项目简介 “网络安全”竞赛共分A.基础设施设置与安全加固;B.网络安全事件响应、数字取证调查和应用安全;C.CTF夺旗-攻击;D.CTF夺旗-防御等四个模块。根据比赛实际情况,竞…...

SkyWalking 10.2.0 SWCK 配置过程

SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外&#xff0c;K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案&#xff0c;全安装在K8S群集中。 具体可参…...

进程地址空间(比特课总结)

一、进程地址空间 1. 环境变量 1 &#xff09;⽤户级环境变量与系统级环境变量 全局属性&#xff1a;环境变量具有全局属性&#xff0c;会被⼦进程继承。例如当bash启动⼦进程时&#xff0c;环 境变量会⾃动传递给⼦进程。 本地变量限制&#xff1a;本地变量只在当前进程(ba…...

解锁数据库简洁之道:FastAPI与SQLModel实战指南

在构建现代Web应用程序时&#xff0c;与数据库的交互无疑是核心环节。虽然传统的数据库操作方式&#xff08;如直接编写SQL语句与psycopg2交互&#xff09;赋予了我们精细的控制权&#xff0c;但在面对日益复杂的业务逻辑和快速迭代的需求时&#xff0c;这种方式的开发效率和可…...

工程地质软件市场:发展现状、趋势与策略建议

一、引言 在工程建设领域&#xff0c;准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具&#xff0c;正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...

在四层代理中还原真实客户端ngx_stream_realip_module

一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡&#xff08;如 HAProxy、AWS NLB、阿里 SLB&#xff09;发起上游连接时&#xff0c;将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后&#xff0c;ngx_stream_realip_module 从中提取原始信息…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

Linux --进程控制

本文从以下五个方面来初步认识进程控制&#xff1a; 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程&#xff0c;创建出来的进程就是子进程&#xff0c;原来的进程为父进程。…...

ip子接口配置及删除

配置永久生效的子接口&#xff0c;2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...

纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join

纯 Java 项目&#xff08;非 SpringBoot&#xff09;集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...

WPF八大法则:告别模态窗口卡顿

⚙️ 核心问题&#xff1a;阻塞式模态窗口的缺陷 原始代码中ShowDialog()会阻塞UI线程&#xff0c;导致后续逻辑无法执行&#xff1a; var result modalWindow.ShowDialog(); // 线程阻塞 ProcessResult(result); // 必须等待窗口关闭根本问题&#xff1a…...