【NLP】15. NLP推理方法详解 --- 动态规划:序列标注,语法解析,共同指代

动态规划 (Dynamic Programming)

动态规划(Dynamic Programming,简称 DP)是一种通过将问题分解为较小子问题来优化计算效率的技术。它特别适用于优化最优解问题,比如序列标注(sequence tagging)这类任务。

序列标注 (Sequence Tagging)

序列标注是自然语言处理(NLP)中常见的任务之一。它的目标是为输入的每个单词(或者子序列)分配一个标签。这个标签集通常是固定且有限的。最常见的例子是:

  • 命名实体识别(NER):为句子中的每个单词分配一个类别(例如,表示人名、地点、组织等)。
  • 词性标注(POS tagging):为每个单词标记它的词性(例如,名词、动词、形容词等)。

在序列标注中,标签是来自一个固定的标签集合,且序列长度已知且固定。

问题描述

独立预测的局限性

在许多基础的机器学习模型中,每个标签都是独立预测的。这种方法存在一个问题,就是 独立预测可能会导致不一致的结果。例如,在词性标注任务中,模型可能会错误地标记某个单词的词性,但这个错误可能会影响后续预测。

贪心预测的缺点

贪心算法(greedy approach)逐步做出局部最优的选择,但由于缺乏全局视野,这种方法可能会导致全局的错误。例如,贪心算法可能错误地为某个词分配了标签,导致后续的标注结果不一致。

举个例子,“the old man the boat”这个句子中,如果我们贪心地预测每个词的标签,可能会错误地预测"man"作为动词(即“the old man [to] the boat”)。但由于模型只关注当前词,错误直到后续预测时才会变得明显。

动态规划在序列标注中的应用

动态规划(DP)是解决这类问题的有效工具。它的基本思想是通过将问题分解为子问题,并存储子问题的解,避免重复计算,进而提高效率。在序列标注中,DP通过计算每个词的标签得分以及标签之间的转移得分,来有效地找到最高得分的标签序列。

序列标注模型中的得分计算

序列标注任务的模型通常会涉及两个主要部分:

  1. 发射模型(Emission Model):表示当前单词与某个标签的关联。例如,对于命名实体识别任务,发射模型会计算每个单词属于某个实体类型(如人名、地点等)的概率。
  2. 转移模型(Transition Model):表示从一个标签转移到另一个标签的概率。例如,标签 “动词” 转移到标签 “名词” 的概率。
计算得分的步骤
  1. 初始化步骤(Start State):首先计算从开始状态(start state)到每个标签的概率,通常用发射模型来计算。

p r o b 1 = e / t prob1=e / t prob1=e/t

其中 e 是发射概率,t 是转移概率。

  1. 递归计算(Intermediate Scores):对于每个单词,基于其与当前标签的发射概率,和从前一个标签到当前标签的转移概率,计算所有可能路径的得分。

prob4 = e × max ⁡ ( t × prob pre ) \text{prob4} = e \times \max(t \times \text{prob pre}) prob4=e×max(t×prob pre)

其中 prob pre 是前一个状态的概率。

  1. 最终得分(Final Score):当所有单词都标注完成时,计算最终的得分。

prob10 = max ⁡ ( t pre × prob pre ) \text{prob10} = \max(t_{\text{pre}} \times \text{prob pre}) prob10=max(tpre×prob pre)

其中 tpre 是前一个标签到当前标签的转移概率,prob pre 是前一个标签的得分。

时间复杂度

  • O(|words| * |labels|²):对于标准的序列标注任务,时间复杂度是 O(单词数×标签数^2),因为对于每个单词,我们需要计算标签之间的转移概率,而转移的计算需要遍历每对标签。
  • O(|words| * |labels|³):如果我们在模型中加入了更多的标签上下文(例如,考虑更长的标签序列历史),时间复杂度会增加到 O(单词数×标签数^3),这意味着计算量会更大。

模型的应用

这种基于动态规划的序列标注方法可以应用于不同类型的模型,包括:

  • 线性模型(Linear Models):比如条件随机场(CRF)模型,能够有效地处理序列标注问题。
  • 前馈神经网络(Feedforward Networks):可以用于对每个单词进行独立标注,尽管没有考虑标签之间的转移关系。
  • 循环神经网络(RNN):能够在处理序列数据时保持对上下文的记忆。
  • 变换器(Transformer):能够捕捉全局依赖关系,用于序列标注任务。

扩展:提高标签上下文

如果我们希望引入更多的上下文信息(例如,考虑每个词的前后标签),可以将模型扩展为联合模型(Joint Model)。这种模型将多个标签的上下文信息一起处理,提高了模型的复杂性,但也可能带来更好的性能。

语法解析(Graph Parsing)

在自然语言处理中,语法解析(Syntactic Parsing)用于识别句子的语法结构,它能够帮助我们解析一个句子的结构,解决歧义问题。一句话可能有多种解释,语法解析的目标是通过建立词语之间的关系树来解决这种歧义。

1. 什么是图解析(Graph Parsing)?

在图解析中,我们通过构建依存关系树(dependency tree)来表示句子的语法结构。这种结构通常由(arc)、(edge)和依赖关系(dependencies)组成,表示一个词语与另一个词语之间的语法关系。

  • 头部(head)词语是句子的核心,它决定了其他词语的语法角色。
  • 从属词(dependent)是依赖于头部词语的词,表示与头部的语法关系。
2. 解析树的要求

为了确保生成的语法树是正确的,解析算法必须满足以下几个要求:

  1. 生成一棵树:结果必须是一个树结构。
  2. 没有交叉弧:树中不能有交叉的依赖关系。
  3. 有且仅有一个根:树中必须有一个唯一的根节点。
  4. 树有最高的得分:在所有可能的树中,得分最高的树是最终的解析结果。
3. 动态规划方法

图解析可以使用动态规划(Dynamic Programming)来高效地推导出最优的解析树。解析的过程通常基于项目(items)和规则(rules)。

  • 项目:表示在解析过程中需要构建的中间结构。
  • 规则:定义如何从已有的项目中组合出新的项目。

解析过程遵循以下步骤:

  1. 为每个项目定义规则:逐步组合项目。
  2. 保持每个项目的最佳得分:对于每个步骤,我们保存当前最优的解析树。
4. 图解析的过程

图解析算法通常基于如下思路:

  • 对每个项目进行分析,存储最优的解析路径。
  • 最终从最顶层开始,逐步向下回溯,得到最优的解析树。

这个过程类似于金字塔结构:从底部逐步构建解析树的各个部分,最后得到完整的句子结构。

5. CKY算法(Cocke-Younger-Kasami Algorithm)

CKY算法是一种常用的动态规划算法,它可以有效地进行语法分析。其时间复杂度为:

O(∣rules_comb∣⋅∣words∣^3 + ∣rules_arc∣⋅∣words∣^2)

其中,|rules_comb| 是组合规则的数量,|words| 是句子中单词的数量,|rules_arc| 是依赖关系的数量。

6. 为什么图解析在LLM时代依然重要?

虽然大规模语言模型(LLM)在许多自然语言处理任务中表现出色,但在某些领域,语法解析仍然是非常有用的,尤其是在一些特定的专业领域,如医疗和法律中。以下是一些原因:

  1. 专业领域的需求:例如,医疗领域的文本通常包含复杂的术语和结构,这时准确的语法解析对于理解句子至关重要。
  2. 作为系统的一部分:语法解析可以作为其他任务(如信息抽取、机器翻译等)的组成部分。它能提供更好的句法结构,帮助后续任务提高准确性。
  3. LLMs的局限性:尽管LLMs在处理自然语言时非常强大,但在某些任务(例如抽象意义表示 AMR)上仍然存在挑战,而图解析可以在这些任务中提供帮助。

7. 共同指代(Coreference)

共同指代指的是文本中多个提及相同实体的现象。例如,在句子中提到“John”和“he”,我们需要确定“he”是否指代“John”。

  • 实体链接/维基化(Entity Linking/Wikification):将文本中的每个实体链接到外部知识库(如维基百科)。

共同指代的搜索空间非常庞大,可能存在多种方式来将不同的提及聚类在一起。为了解决这个问题,我们可以采用以下简化方法:

  1. 提及检测和过滤:首先检测文本中所有的提及,然后筛选出可能的共同指代。
  2. 链接提及对:对每一对提及,找到最可能的前一个提及,并将它们标记为共同指代。
  3. 寻找传递闭包:通过逐步传递的方式,建立完整的共同指代关系。
8. 简单而有效的推理算法

有时候,简单的推理算法就足够解决问题。通过上述的简化方法,我们可以有效地解决共同指代问题,尽管这些方法看起来很基础,但在许多实际应用中仍然非常有效。

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

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

相关文章

JavaScript中的NaN、undefined和null 的区别

NaN代表"Not a Number",它是一种特殊的数值,用于表示非数字值。当一个操作无法返回有效的数值时,通常会得到NaN作为结果。 let result = 10 / abc; console.log(result); // 输出 NaN需要注意的是,NaN与自身不相等,我们无法通过简单的比较操作符(如==或===)来…

Turtle事件处理(键盘与鼠标交互)

Turtle 提供了 事件驱动编程,允许我们使用 键盘 和 鼠标 控制 Turtle,从而实现交互式绘图。例如,我们可以让 Turtle 响应 按键、鼠标点击 和 拖动 事件,使其根据用户的输入进行移动、旋转或绘制图形。 1. 事件机制概述 Turtle 的事件处理主要依赖 turtle.Screen() 提供的 …

【Keepalived】Keepalived-2.3.3明确结束对CentOS 7的支持

2025年3月30日,官方发布了Keepalived的最新版,版本号:2.3.3 而2024年11月3日发布的2.3.2版本,在CentOS 7.9上编译的时候,就出现了报错,但是在Alma Linux 8.10上,则可以成功编译安装&#xff0c…

PyTorch --torch.cat张量拼接原理

在 PyTorch 的 torch.cat 函数中,out 参数用于指定输出张量的存储位置。是否使用 out 参数直接影响结果的存储方式和张量的内存行为。以下是详细解释: 不使用 out 参数(默认行为) 含义:不提供 out 参数时,…

人工智能之数学基础:矩阵对角化的本质

本文重点 前面的课程中,我们学习了矩阵的对角化,基于对角化可以将矩阵A转变为对角矩阵D,但是你有没有想过,为什么要进行矩阵对角化,矩阵对角化究竟做了一件什么事情呢? 矩阵对角化的本质 几何解释: 从几何变换的角度看,矩阵对角化意味着我们找到了一组基,使得线性变…

ubuntu的ubuntu--vg-ubuntu--lv磁盘扩容

在我们安装ubuntu时,如果选择的是自动分区,就会按照逻辑卷的形式来分区,并且只分配100G其余的并不会被分配,这对我们大多数情况来说都是不合理的,所以,如何扩充呢 下面以一个小的案例来说明如何扩充 问题…

Redis BitMap 实现签到及连续签到统计

一、引言 用户签到功能是很多应用都离不开的一个板块,单词打开、QQ达人等等为我们所熟知,这项功能该如何实现呢,一些朋友可能想当然的觉得无非将每日的签到数据记录下来不就好了,不会去细想用谁记录,如何记录才合适。 …

前端国际化-插件模式

文章目录 Webpack 插件开发解析中文调用有道翻译 API生成 JSON 语言文件React 国际化实现 Webpack 插件开发 创建 i18n-webpack-plugin.js 插件:在 src 目录下扫描所有文件使用 babel-parser 解析 JavaScript/JSX 代码识别中文文本通过有道翻译 API 翻译生成 local…

IP属地和发作品的地址不一样吗

在当今这个数字化时代,互联网已经成为人们日常生活不可或缺的一部分。随着各大社交平台功能的不断完善,一个新功能——IP属地显示,逐渐走进大众视野。这一功能在微博、抖音、快手等各大平台上得到广泛应用,旨在帮助公众识别虚假信…

PP-ChatOCRv3新升级:多页PDF信息抽取支持自定义提示词工程,拓展大语言模型功能边界

文本图像信息抽取技术在自动化办公、建筑工程、教育科研、金融风控、医疗健康等行业领域具有广泛应用场景。2024年9月,飞桨低代码开发工具PaddleX中新增文本图像智能产线PP-ChatOCRv3,充分结合PaddleOCR的文本图像版面解析能力和文心一言语言理解优势&am…

算法刷题记录——LeetCode篇(1.2) [第11~20题](持续更新)

更新时间:2025-03-29 LeetCode题解专栏:实战算法解题 (专栏)技术博客总目录:计算机技术系列目录页 优先整理热门100及面试150,不定期持续更新,欢迎关注! 17. 电话号码的字母组合 给定一个仅包含数字 2-9…

如何在 vue 渲染百万行数据,vxe-table 渲染百万行数据性能对比,超大量百万级表格渲染

vxe-table 渲染百万行数据性能对比,超大量百万级表格渲染;如何在 vue 渲染百万行数据;当在开发项目时,遇到需要流畅支持百万级数据的表格时, vxe-table 就可以非常合适了,不仅支持强大的功能,虚…

阿里 FunASR 开源中文语音识别大模型应用示例(准确率比faster-whisper高)

文章目录 Github官网简介模型安装非流式应用示例流式应用示例 Github https://github.com/modelscope/FunASR 官网 https://www.funasr.com/#/ 简介 FunASR是一个基础语音识别工具包,提供多种功能,包括语音识别(ASR)、语音端…

如何使用 LLaMA-Factory 微调 LLaMA3

【LLaMa3微调】使用 LLaMA-Factory 微调LLaMA3 实验环境 1.1 机器 操作系统:Windows 10 或 UbuntuPyTorch 版本:2.1.0Python 版本:3.10(针对Ubuntu 22.04)Cuda 版本:12.1GPU 配置:p100 (16GB) …

使用Java ApI 实现Hadoop文件上传

目录 文件传输步骤 windows的本机文件传输 linux的虚拟机文件传输 文件传输步骤 建立连接 在connect2HDFS()方法中,通过设置Configuration对象来指定HDFS的URI(在这个例子中为hdfs://192.168.12.133:9000),并初始化一个FileSys…

喜讯 | 耘瞳科技视觉检测与测量装备荣膺“2024机器视觉创新产品TOP10”

3月28日,全球机器视觉行业盛会VisionChina2025(上海)机器视觉展完美收官。展会期间,由机器视觉产业联盟(CMVU)举办的“2024机器视觉创新产品TOP10”企业名单正式揭晓,耘瞳科技“工业跨尺度场景实…

数据可视化(matplotlib)-------图表样式美化

目录 一、图表样式概述 (一)、默认图表样式 (二)、图表样式修改 1、局部修改 2、全局修改 二、使用颜色 (一)、使用基础颜色 1、单词缩写或单词表示的颜色 2、十六进制/HTML模式表示的颜色 3、RGB…

202518 | Ngnix

Ngnix是什么 Nginx(发音为“engine-x”)是一个开源的高性能HTTP服务器、反向代理服务器、负载均衡器和邮件代理服务器。它由俄罗斯程序员Igor Sysoev开发,首次发布于2004年,旨在解决C10K问题(即如何高效地处理10,000个…

WP Mail 邮件发送:WordPress Mail SMTP设置

在我们WordPress搭建个人网站完成后,读者或者客户发送的电子邮件,包括你的WPForms电子邮件通知,如果无法到达预定收件人收件箱,这会对我们网站的运营造成很大的影响,问题在于WordPress Mail SMTP的发送方式。 SMTP&am…

小智机器人关键函数解析:MqttProtocol::SendAudio()对输入的音频数据进行加密处理,通过UDP发送加密后的音频数据

MqttProtocol::SendAudio()对输入的音频数据进行加密处理&#xff0c;通过UDP发送加密后的音频数据。 源码&#xff1a; void MqttProtocol::SendAudio(const std::vector<uint8_t>& data) {// 使用互斥锁保护临界区&#xff0c;确保同一时间只有一个线程可以访问该…