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

【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. 简单而有效的推理算法

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

相关文章:

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

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

文件分享系统--开源的可视化文件共享管理工具

家里有公网,经常要发文件给别人,文件几个G发送还要云盘或者倒手一次才行,所以弄了个文件分享系统,这个是用字节的 AI Trae 写的,反正反复折腾还是弄出来了。东西挺好用,可以拖拽多个文件上传也可以手动添加…...

【力扣刷题实战】寻找数组的中心下标

大家好,我是小卡皮巴拉 文章目录 目录 力扣题目:寻找数组的中心下标 题目描述 解题思路 问题理解 算法选择 具体思路 解题要点 完整代码(C) 兄弟们共勉 !!! 每篇前言 博客主页&#…...

LearnOpenGL小练习(QOpenGLWidget版本)

你好,三角形 1.绘制两个彼此相连的三角形 画两个独立的三角形,给出两个三角形顶点,使用GL_TRIANGLES绘图即可。 关键代码 void MyOpenglWgt::initializeGL() {initializeOpenGLFunctions(); // 1. 创建ShaderProgram着色器:加…...

【Easylive】SpringBoot启动类——EasyLiveWebRunApplication

【Easylive】项目常见问题解答(自用&持续更新中…) 汇总版 这段代码是 Spring Boot 应用的 主启动类,包含了多个关键注解,用于配置和启动整个应用程序。以下是各个部分的详细解析: 1. SpringBootApplication Spri…...

2025 年前端新趋势:拥抱 Web Component 与性能优化

在技术飞速发展的今天,前端开发领域也在持续演进,新的技术和理念不断涌现。2025 年,Web Component 和性能优化无疑是前端开发中值得关注的两大重点,本文将带你深入了解这两大趋势。 Web Component:构建可复用组件的未…...

计算机网络 用deepseek帮助整理的复习资料(一)

### 计算机网络基础知识整理 --- #### **一、网络类型** 1. **局域网 (LAN)** - **定义**:覆盖小范围(如家庭、教室、公司)。 - **特点**:高带宽、低延迟,设备通过交换机互联。 - **示例**&#xff1…...

基于OpenCV+MediaPipe手部追踪

一、技术栈 1. OpenCV(Open Source Computer Vision Library) 性质:开源计算机视觉库(Library) 主要功能: 图像/视频的基础处理(读取、裁剪、滤波、色彩转换等) 特征检测&#xf…...

美甲预约管理系统基于Spring Boot SSM

目录 摘要 1. 引言‌ 1.1 研究背景与意义 1.2 国内外研究现状 ‌2. 系统需求分析‌ 2.1 功能需求 2.2 非功能需求 ‌3. 系统设计与实现‌ 3.1 系统架构设计 3.2 关键技术实现 3.3 系统模块实现 ‌3.3.1店铺管理‌ ‌3.3.2商品管理‌ ‌3.3.3用户管理‌ ‌3.3.4订…...

XXX软件系统研发技术手册模板

《XXX软件系统研发技术手册》 1. 引言 1.1 编写目的 说明手册的编写背景、目标读者及核心价值,例如: 本文档为开发团队提供完整的技术实现指南,涵盖系统设计、开发规范、部署方案等内容 。 1.2 术语定义 微服务:一种架构风格&a…...

AIGC(生成式AI)试用 29 -- 用AI写读书笔记

看了本书《繁荣与衰退》,电子版的。 没了了纸制的感觉,但笔记还是要写的,多少是个意思。 没有最懒,只有更懒,笔记用AI生成试试看。 >> 个人理解 经济增长与全球化挑战交织时期 以“创造性破坏”为核…...

十五届蓝桥杯省赛Java B组(持续更新..)

目录 十五届蓝桥杯省赛Java B组第一题:报数第二题:类斐波那契数第三题:分布式队列第四题:食堂第五题:最优分组第六题:星际旅行第七题:LITS游戏第八题:拼十字 十五届蓝桥杯省赛Java B…...

OpenAI发布的《Addendum to GPT-4o System Card: Native image generation》文件的详尽笔记

Native_Image_Generation_System_Card 文件基本信息 文件名称:《Addendum to GPT-4o System Card: Native image generation》发布机构:OpenAI发布日期:2025年3月25日主要内容:介绍GPT-4o模型中新增的原生图像生成功能&#xff…...

蓝耘平台API深度剖析:如何高效实现AI应用联动

目录 一、蓝耘平台简介 1.1 蓝耘通义大模型 1.2 蓝耘云计算资源 1.3 蓝耘API与微服务 二、 蓝耘平台应用联动场景 2.1 数据采集与预处理联动 2.2 模型推理与后端服务联动 2.3 跨平台联动 三、蓝耘平台注册体验功能 3.1 注册 3.2 体验蓝耘MaaS平台如何使用海螺AI生成视频…...

缓存 “三剑客”

缓存 “三剑客” 问题 如何保证 Redis 缓存和数据库的一致性? 1. 缓存穿透 缓存穿透是指请求一个不存在的数据,缓存层和数据库层都没有这个数据,这种请求会穿透缓存直接到数据库进行查询 解决方案: 1.1 缓存空值或特殊值 查一…...

ComfyUi教程之阿里的万象2.1视频模型

ComfyUi教程之阿里的万象2.1视频模型 官网Wan 2.1 特点 一、本地安装1.1克隆仓库1.2 安装依赖(1.3)下载模型(1.4)CUDA和CUDNN 二、 使用体验(2.1)官方例子(2.2)执行过程(…...

⭐算法OJ⭐ 戳气球【动态规划】Burst Balloons

问题描述 LeetCode 312. 戳气球(Burst Balloons) 给定 n 个气球,编号从 0 到 n-1,每个气球上标有一个数字 nums[i]。戳破气球 i 可以获得 nums[left] * nums[i] * nums[right] 的硬币(left 和 right 是 i 的相邻气球&…...

Leetcode 寻找两个正序数组的中位数

💯 完全正确!!你这段话可以直接当作这道题的**“思路总览”模板答案**了,结构清晰、逻辑严谨、几乎没有遗漏任何关键点👏 不过我可以帮你稍微精炼一下语言,使它在保留你原本意思的基础上更具表达力和条理性…...

C#测试Excel开源组件ExcelDataReader

使用微软的com组件Microsoft.office.Interop.Excel读写Excel文件虽然可用,但是列多、行多的时候速度很慢,之前测试过Sylvan.Data.Excel包的用法,如果只是读取Excel文件内容的话,还可以使用ExcelDataReader包,后者是C#开…...

手机零售行业的 AI 破局与创新降本实践 | OceanBase DB大咖说

OceanBase《DB 大咖说》第 20 期,我们邀请了九机与九讯云的技术总负责人,李远军,为我们分享手机零售企业如何借力分布式数据库OceanBase,赋能 AI 场景,并通过简化架构实现成本管控上的突破与创新。 李远军于2016年加入…...

SQL Server 动态构建 SQL 语句学习指南

在 SQL Server 中,动态构建 SQL 语句应用于各种场景,包括动态表名、列名,动态 WHERE 条件,以及动态分页、排序等。本文将详细计划如何在 SQL Server 中最佳实现动态 SQL 语句构建。 一、动态 SQL 的应用场景 动态表名或列名动态…...

Ceph与Bacula运维实战:数据迁移与备份配置优化指南

#作者:猎人 文章目录 1ceph数据迁移&&bacula配置调整1.1ceph数据迁移&&bacula配置调整1.2在备份服务器的ceph-client上mount cephfs文件系统1.2.1迁移数据1.2.2调整bacula-sd配置 1ceph数据迁移&&bacula配置调整 1.1ceph数据迁移&&am…...

Spring Boot分布式项目重试实战:九种失效场景与正确打开方式

在分布式系统架构中,网络抖动、服务瞬时过载、数据库死锁等临时性故障时有发生。本文将通过真实项目案例,深入讲解Spring Boot项目中如何正确实施重试机制,避免因简单粗暴的重试引发雪崩效应。 以下是使用Mermaid语法绘制的重试架构图和决策…...

Android OTA升级中SettingsProvider数据库升级的深度解析与完美解决方案

一、问题场景:OTA升级引发的系统属性"失效"之谜 在某Android 12.0系统定制项目中,我们遭遇了一个棘手问题:当通过OTA升级新增/修改SettingsProvider系统属性后,必须恢复出厂设置才能生效。这不仅导致用户数据丢失风险&…...

[Html]overflow: auto 失效原因,flex 1却未设置min-height overflow的几个属性以及应用场景

一、overflow: auto 失效原因分析 1. 未设置固定高度或宽度 • 当容器未定义具体尺寸时,浏览器无法判断内容是否溢出,导致滚动条不生效。需为容器添加 height 或 width 属性(如 height: 300px)。 • 示例: css .cont…...

SpringBoot整合LogStash,LogStash采集服务器日志

LogStash 1. 下载 版本支持兼容表https://www.elastic.co/cn/support/matrix 版本: 7.16.x 的最后一个版本 https://www.elastic.co/downloads/past-releases/logstash-7-16-3 需要提前安装好jdk1.8和ES, 此处不在演示 2. 安装 tar -xvf logstash-7.16.3-linux-x86_64.tar.gz…...

LLM - 推理大语言模型 DeepSeek-R1 论文简读

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/146840732 免责声明:本文来源于个人知识与公开资料,仅用于学术交流,欢迎讨论,不支持转载。 DeepSeek-R1 通过强化学习,显著提升大语言模型推理能力,使用特殊的训…...

目前市场上,好用的校招系统是哪个?

在数字化浪潮的推动下,校园招聘已从传统的“海投简历线下宣讲”模式全面转向智能化、数据化。面对每年数百万应届生的激烈竞争,企业如何在短时间内精准筛选人才、优化招聘流程、降低人力成本?答案或许藏在AI驱动的校招管理系统中。而在这场技…...

Oracle logminer详解

Oracle LogMiner 是 Oracle 数据库提供的一个内置工具,用于分析和挖掘数据库的在线重做日志文件(Online Redo Log Files)​和归档日志文件(Archive Log Files)​。通过 LogMiner,用户可以查看数据库的历史操…...

SharpBrowser:用C#打造超快的个性化开源浏览器!

推荐一个基于.Net 8 和 CefSharp开发的开源浏览器。 01 项目简介 SharpBrowser 是一个用 C# 和 CefSharp 开发的全功能网页浏览器。它声称是最快的开源 C# 网页浏览器,渲染网页的速度比谷歌浏览器还快,因为其使用轻量级的 CEF 渲染器。 经过比较所有可…...