NLP学习之语篇

2023-10-20 00:20
文章标签 学习 nlp 之语

本文主要是介绍NLP学习之语篇,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1、语篇

        1.1语篇相关概念

                语篇:在文档中理解句子之间怎么关联起来的,在浏览文档时语篇可以将整个文档串成一条故事线,从上到下连贯有逻辑性。

                词性标注:在一个句子中标注所有单词的词性

                词汇/分布语义学:当我们训练这些模型时通常是以句子作为边界的

        1.2 三个关键语篇任务:                

                语篇分段(discourse segmentation):在一篇文章中,我们希望让它按照内容之间的连贯性分成一些独立的块,比如第一段是abstract,第二段是introuduction,我们希望在这两个段落之间插入一个分隔。

                语篇解析(discourse parsing):语篇解析的和核心思想是将文档组织为一种层级结构(hierarchical structure)。例如包含3个句子的一个小文档,语篇解析将这三个句子组织成为一个层级树形结构,这段文中心句是第一个子句,后面两个句子知识用来支持前面句子的观点,因此可以分为以下结构:

           

                 指代消解(Anaphora resolution)

                        目的消除文档中的指代词的歧义问题,比如在下面的句子中He在上下文猴子那个指代对象

                                                        

2、语篇分段

        2.1 语篇分段

  • 一个 文档(document)可以被视为 一个由分段组成的序列(a sequence of segments
  •         分段(Segment):一段连贯的文字
  • 连贯性(Coheion)
    • 连贯性意味着这段文字是围绕某个特定 主题(topic)或 功能(function)来组织的
      • 维基百科里的人物类传记:早年经历 (early years)、主要事件 (major events)、其他方面的影响 (impact on others)
      • 科学性的文章:简介 (introduction)、相关工作 (related work)、实验 (experiments)

           2.2 无监督方法 

                       2.2.1TextTiling算法:寻找句子之间具有较低词汇连贯性的点

                       2.2.2 对于每个句子间隙(sentence gap)    

                        创建两个 词袋向量(BOW vectors),它们由间隙两侧的各自 k 个句子中的单词组成

                         计算两个向量的余弦相似度得分

                         对于间隙 i,计算一个 深度分数(depth score),当深度分数超过某个 阈值(threshold)t 时,就在这个间隙处插入一个分界线     

                 2.3 TextTiling的例子

                   这里,我们来看一个具体的使用 TextTiling 算法进行语篇分段的例子,这里我们将相关参数设为 k=1,t=0.9(即词袋向量来自间隙前后的各一个句子,深度分数的阈值为 0.9)     

                                                   

                我们将文档分成了 7 个单独的句子,另外,我们还用不同颜色标记了文本中的一些内容相关的高频关键词。首先,我们计算第一个间隙的相似度,由于 k=1,所以这里我们得到第 1 个和第 2 个句子的词袋向量,并计算两个向量的余弦相似度,结果为 0.9。同理,我们计算第二个间隙的相似度(即第 2 个句子和第 3 个句子的词袋向量的余弦相似度),得到结果为 0.7。按照相同方法,计算得到所有其余间隙的相似度。

接下来,我们将计算每个间隙的深度分数。对于每个间隙 i,我们将前一个间隙 i−1 和当前间隙 i 的相似度差值 (simi−1−simi),与后一个间隙 i+1 和当前间隙 i 的相似度差值 (simi+1−simi) 进行求和,得到当前间隙 i 的深度分数。注意,对于第一个间隙,由于其前面没有其他间隙,所以在计算深度分数时我们可以直接忽略前项。通过计算得到的第一个间隙的深度分数为 −0.2<t=0.9,因此,我们不在这里插入分界线,而是继续往后看。我们发现,第三个间隙深度分数为 1.0>0.9,所以我们在第三个间隙处插入一个分界线。按照相同方法,计算得到所有其余间隙的深度分数。然后,我们发现没有其他分界线需要插入,因此最终我们将这段语篇以第三个句子间隙为界分为两段。

                        如果我们观察一下两个语篇分段的内容,我们会发现第一个分段主要介绍了某人面临的一个问题(没有等到电车),第二个分段则主要讲述了对于该问题的应对措施(回家取自行车)

    2.4 有监督方法     

  • 我们可以从一些容易获得的渠道得到一些带标签数据:
    • 科学出版物
    • 维基百科的文章

              

                 

                例如,我们知道科学出版物一般会按照章节(sections)和子章节(subsections)等进行分段。假设现在我们希望创建一些分段(segments)来合并文章中的一些段落(paragraphs),所以现在我们不再以句子为边界,而是以段落为边界进行分段。

                首先,我们将所有的段落单独分开,例如,上面的文章包含了 6 个单独的段落。然后,我们尝试对这些段落间隙进行标注:如果前后两个段落之间涉及到章节之间的跳转(例如,第 1 段到第 2 段是从 Abstract 跳到了 Introduction),那么我们将这两个段落之间的间隙给予一个正标签,即我们将对这两个段落进行切分;如果前后段落不涉及章节跳转(例如,第 2 段和第 3 段都属于 Introduction),我们将给予段落间隙一个负标签,即我们会不对这两个段落进行切分。然后,我们可以利用这些带标签数据来训练一个有监督分类器,再对测试集中的其他语篇数据进行分段

        2.5 有监督语篇分类器(supervised Discourage Segmenter)        

                应用一个二分类器来识别边界:就像前面提到的例子,我们可以采用一个基于正负标签数据的二分类器来决定是否需要对给定的两个段落进行切分

                或者使用序列分类器:我们也可以使用像 HMM 或者 RNN 这类序列模型进行分类。这种情况下,我们在分段时会考虑一些上下文信息,从而在分段时得到一个全局最优的决策结果

                我们还可以潜在地包含分类的章节类型 (section type):假如我们使用维基百科或者科学文章,我们知道其中每个章节都有特定的主题/功能,我们可以原问题转换为一个多任务问题:我们不仅对语篇文本进行分段,并且我们还需要给出每个分段所对应的章节

                 我们还可以集成一些更宽泛的特征: 包括:分布语义学和语篇标记(discourse markers)例如:threfore、and、howerver等

 3、语篇解析

        语篇解析(Discourse Parsing),其目标是将 语篇单元 (discourse units) 组织成层级结构中的故事线,例如:某段文本是否是对另一段文本的解释

        3.1 语篇解析:         

  • 识别 语篇单元 (discourse units),以及它们之间所维系的 关系(relations)
  • 修辞结构理论 (Rhetorical Structure Theory, RST) 是一个对文档中的语篇结构进行层级分析的框架。RST 在计算机科学中具有广泛应用,例如:总结 (Summarisation)、问答 (QA) 等。

        下面是之前的一个例子,RST可以将文档组织成语篇单元

                

          在这个文档中,我们一共有 3 个语篇单元,RST 试图在给定这些语篇单元的情况下,发现它们之间所维系的关系。例如:第 2 个从句和第 3 个从句之间存在 让步(Concession)关系,而这两个语篇单元作为整体又和第一个主要句子之间存在 详述(Elaboration)关系。一旦我们构建完成这样一个层级树形结构,我们就可以知道根结点代表的核心语篇单元以及用于支持它的其他语篇单元。

        3.2 RST  

                3.2.1 基本单元:基本语篇单元(elementary discourse units, EDUs)

                         通常是组成一个句子的 子句(clauses)

                         EDUs 不会跨越句子边界。 例如,RST 将下面的句子划分为两个 EDUs

                  3.2.2 RST 还定义了语篇单元之间的 关系(relations)

                          连接 (conjuction),论证 (justify),让步 (concession),详述 (elaboration) 等      

                           例如,在之前的例句中,第二个 EDU 和第一个 EDU 之间是详述 (elaboration) 关系      

                          

        3.3  核心 vs. 伴随体

                     在每个 RST 语篇关系中,都有一个论点作为 核心(nucleus),即主要论点

                     支持论点作为 伴随体(satellite)

                        

                         有些关系是对等的(例如:连接 conjunction),这种情况下,两个论点都是核心(nuclei)

                        

                         在 RST 关系中,总是存在作为核心的语篇单元,因此我们可以有两个核心,或者一个核心和一个伴随体,但是,不会存在只有伴随体组成的关系。

        3.4 RST树

                下面是一个RST树

                

                 一段 RST 关系将两个或者更多的语篇单元 (DU) 合并为一个复合语篇单元 (composite DU)。通常,一个 RST 树的是通过迭代地对语篇单元进行合并的方式构建的。可以看到,每段 RST 关系都是在两个语篇单元之间定义的。例如:1F 和 1G 之间存在 CONJUCTION 关系,而 1E 与 1F 和 1G 的结合体之间也存在 JUSTIFY 关系。一旦我们将 RST 中的两个语篇单元 (DU) 结合起来,我们将得到一个复合语篇单元 (composite DU),然后这个复合 DU 就可以和 RST 中的其他 DU 或者复合 DU 形成另外的关系

                通过重复合并 DU 的过程来创建一个 RST 树。在上面的例子中,我们可以自底向上依次对 DU 进行合并,最终得到一个 RST 树

        3.5 使用语篇标记进行解析

                接下来我们将讨论 解析(Parsing),即给定一段文本,我们希望 自动化 地构建出包含了语篇单元及其关系的 RST 树形结构

                一些语篇标记(discourse markers) 显示表明了一些关系,例如:although,but,for example... 我们可以使用这些语篇标记去构建简单的基于规则的解析器(rule-based parser),但是,许多关系根本没有用话语标记进行标记,可能在语篇单元中没有显示的语篇标记,但是这些语篇单元之间确实存在某种关系,还有重要的标记具有歧义性,例如"and" 可以表示连接(conjunction)、原因(reason)、论证(justify),我们不能总是基于简单的规则将其视为连接关系。

                

                        

                               

                         

                

这篇关于NLP学习之语篇的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/243334

相关文章

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

重新对Java的类加载器的学习方式

《重新对Java的类加载器的学习方式》:本文主要介绍重新对Java的类加载器的学习方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍1.1、简介1.2、符号引用和直接引用1、符号引用2、直接引用3、符号转直接的过程2、加载流程3、类加载的分类3.1、显示

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen

Python Transformers库(NLP处理库)案例代码讲解

《PythonTransformers库(NLP处理库)案例代码讲解》本文介绍transformers库的全面讲解,包含基础知识、高级用法、案例代码及学习路径,内容经过组织,适合不同阶段的学习者,对... 目录一、基础知识1. Transformers 库简介2. 安装与环境配置3. 快速上手示例二、核心模

Java进阶学习之如何开启远程调式

《Java进阶学习之如何开启远程调式》Java开发中的远程调试是一项至关重要的技能,特别是在处理生产环境的问题或者协作开发时,:本文主要介绍Java进阶学习之如何开启远程调式的相关资料,需要的朋友... 目录概述Java远程调试的开启与底层原理开启Java远程调试底层原理JVM参数总结&nbsMbKKXJx

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

Python实现NLP的完整流程介绍

《Python实现NLP的完整流程介绍》这篇文章主要为大家详细介绍了Python实现NLP的完整流程,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 编程安装和导入必要的库2. 文本数据准备3. 文本预处理3.1 小写化3.2 分词(Tokenizatio

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用