zoukankan      html  css  js  c++  java
  • CS224n笔记15 指代消解

    2017-07-11_15-53-57.png  本文转自:http://www.hankcs.com/nlp/cs224n-coreference-resolution.html

      从规则启发式代词回指消解出发,介绍了传统特征工程二分类模型、启发式损失的分类模型,过渡到利用强化学习自动缩放损失的神经网络模型。

    什么是指代消解 

      找出文本中名词短语所指代的真实世界中的事物。比如:

    hankcs.com 2017-07-11 上午10.03.41.png

    hankcs.com 2017-07-11 上午10.04.57.png

      不只是代词能够指代其他事物,所有格和其他名词性短语也可以。

      甚至还存在大量嵌套的指代:

    hankcs.com 2017-07-11 上午10.20.22.png

    应用

    • 全文理解
      完整的文章中有大量的指代

    • 机器翻译
      土耳其语不区分男他和女她,翻译到英文的时候必须做指代消解;当然了,当前工业线上的MT系统大多做不了

    • 文本摘要
      使用代词会使行文更加自然

    • 信息提取和QA系统
      比如搜索“谁娶了Claudia Ross”,出来“He married Claudia Ross in 1971”,则系统必须消解“He”是谁。

    指代消解评测

      指代消解的结果很像聚类,所以一些聚类的评测手段可以借用:

    hankcs.com 2017-07-11 上午10.32.09.png

      当然实际中问题可能更复杂一些,有多个类别,而且gold cluster如何与produced cluster二分图匹配也是个NP问题(实际应用中有一些贪婪的算法效果也还不错)。

    指代的类型

    hankcs.com 2017-07-11 上午10.46.05.png

      这个分类是语言学家定的,在NLP领域没见到过,顶多见到“回指”和“共指”。

    不是所有NP都在指代

    hankcs.com 2017-07-11 上午10.48.34.png

      绿色NP“指代”全集或空集,描述的是一种普遍规律。红色等价于绿色,所以也不是在做指代。

    Coreference, anaphors, cataphors

      NLP领域关注的其实只有上述3种指代类型的前2种,中文应当译作“共指”和“回指”,最后一种是“回指”的反义词:

    hankcs.com 2017-07-11 上午10.56.36.png

      一般视作“共指”处理。

      那为什么回指不视作共指处理呢?因为两者在许多时候并不等效:

    hankcs.com 2017-07-11 上午11.00.08.png

      在NLP领域,也很少研究这种bridging anaphora,后一个“票”视作另一种实体的指代,并不学习其与“演唱会”的关系。

    共指与回指

      它们是两种不同的概念:

    hankcs.com 2017-07-11 上午11.05.42.png

      回指中,后一个实体指代前一个实体,但两者并非指代真实世界中同一个事物。

      那是不是应该区别对待它们呢?事实上,实际应用的系统几乎无法区分它们。

    传统代词消解方法:Hobbs’ naive algorithm

      这是Hobbs手工写的规则集,在句法树上运作。有两页的规则,类似地摊杂志上的心理算命:“如果……那么跳转第几步……否则……”

      该算法根据英文语言上的直觉编写,可以拿到80%的准确率,有时候也作为其他机器学习分类器的特征之一使用。

    基于知识库的代词消解

      Winograd和其他旧派AI学者认为,要做指代消解,必须有一个外部的知识库。比如:

    hankcs.com 2017-07-11 下午2.22.46.png

      根据常识,害怕暴力的更可能是女性,所以上述两个they的指代各不相同。这种“知识库”可能帮助系统消歧。(跑个题,总有一群外围商业人士在鼓吹“知识图谱”,要自动半自动甚至手工建立所谓的“知识图谱”。其实他们做的无非是拿正则表达式“提取”一下百科中的div框,找些廉价劳动力清洗一下存到图数据库里而已。终端程序员在数据库上做几个if else马上就人工智能了。这种低门槛的事情在70年代AI的早期历史上风行一时也就算了,现在挖坟还自以为很高端是几个意思)

      Winograd等人的“知识库”连Hobbs的基线算法都没有达到。

    几种指代消解模型

      Mention Pair models

      将所有的指代词(短语)与所有被指代的词(短语)视作一系列pair,对每个pair二分类决策成立与否。

      Mention ranking models

      显式地将mention作为query,对所有candidate做rank

      Entity-Mention models

      一种更优雅的模型,找出所有的entity及其对话上下文。根据对话上下文聚类,在同一个类中的mention消解为同一个entity。但这种方法其实也用得不多。

    监督Mention-Pair Model

    hankcs.com 2017-07-11 下午3.00.13.png

      这种模型用得最多,每个mention与之前的mention做二分类决策,当然如何识别mention是另外一个问题。

    指代消解可用特征

      大量语言学特征,人肉特征工程可用:

    hankcs.com 2017-07-11 下午3.07.35.png

    神经网络指代消解模型

      虽然直觉上,联合学习所有mention之间的指代关系肯定比单个二分类要好,global比local肯定要好。但实际上没有试验数据能够支撑这一点,所以虽然有global RNN等更强大的模型,效果最好的依然是mention-pair或mention-ranking模型。

    深度增强学习用于mention-ranking指代消解

      首先找出所有的mention:

    hankcs.com 2017-07-11 下午3.22.28.png

      这些mention可能属于两个不同的类别,但模型并不知道。模型如果混淆了这两个类别,则是一个差劲的模型。

      然后为每个mention与之前的mention建立pair,让模型打分:

    hankcs.com 2017-07-11 下午3.25.59.png

      这里的NEW表示my是一个独立的mention,不与构成共指或回指。最终得到:

    hankcs.com 2017-07-11 下午3.29.15.png

      这里不同的聚类之间没有指代关系。

    网络架构

    hankcs.com 2017-07-11 下午3.35.24.png

      简单的前馈网络,输入是一些词嵌入与少量人工特征。

    特征

    2017-07-11_15-37-12.png

      虽然免不了一些手工特征,但数量已经降到非常少了。

    训练

      这个模型的架构稀松平常,重点在于训练方法。我们不是简单地认为所有决策都是同等重要,而是认为有些决策很重大不能失误,而另一些决策无关紧要。比如:

    hankcs.com 2017-07-11 下午3.43.36.png

      第一个错误联通了连个不相干的entity聚类,所以是致命的。而第二个错误中,蓝色it其实是孤立的、不指代任何事物,所以无关紧要。

      这种决策重要性的不同带来了强化学习的舞台。

    强化学习来救场

      有一些旧的工作尝试启发式地分配不同的决策以不同的权重,但做这件事的最佳方案是RL。虽然没有巨大的进步,但的确有一些效果提升。RL以是否能得到较好的cluster为最终目标,据此评价每个独立决策。

    错误类型

      之前的工作部分可以复用:

    2017-07-11_15-53-57.png

    其中,第三种错误是最坏的:

    hankcs.com 2017-07-11 下午3.55.43.png

    训练时为不同的错误分配不同的惩罚系数,以最大间隔损失函数乘上惩罚系数作为最终的损失函数。

    hankcs.com 2017-07-11 下午4.01.29.png

      这些惩罚系数需要人工指定,也未必与badness直接相关,所以Kevin等人想到用RL来代替它。

    强化学习

      将每个mention-pair视作一个action,在action序列上建模:

    hankcs.com 2017-07-11 下午4.06.18.png

      激励函数利用B3来设计:

    hankcs.com 2017-07-11 下午4.10.00.png

    训练

      一共探索了两种学习算法。

      1.REINFORCE 算法

        将mention-pair模型的打分softmax成概率,最大化决策序列的奖励期望。

    hankcs.com 2017-07-11 下午4.12.32.png

      由于决策序列有指数级种,所以会用到一些采样算法。

      但该算法存在一个很严重的问题,所有决策序列的奖励期望是提高了,但我们真正想要的是让得分最高的那一个决策序列的分值尽量高。

      2.Reward-Rescaling算法

        不再人工指定惩罚系数:

    hankcs.com 2017-07-11 下午4.19.50.png

      而是用当前决策序列下,改动某一个决策所带来的奖励的下降来作为惩罚系数。

      比如黄金序列的奖励是100:

    hankcs.com 2017-07-11 下午4.21.20.png

    改动一个决策,得到奖励的减少量:

    2017-07-11_16-23-03.png

    在此基础上再改动一个,得到:

    hankcs.com 2017-07-11 下午4.24.03.png

      总之利用regret值作为损失函数的缩放因子。

    结果

    2017-07-11_16-28-07.png

    神经网络(2016)比非神经网络要多1个百分点,RL再带来零点几个百分点。

    神经网络模型能够捕捉一些语义近似而用词不同的指代(比较常见):

    hankcs.com 2017-07-11 下午4.32.45.png

    而RL实际上犯了更多的错误,但它擅长不犯致命错误:

    hankcs.com 2017-07-11 下午4.34.48.png

    Reward-Based Costs的优点

      事实上,RL得到的cost反映出其方差是非常大的。启发式cost往往选取密度最大的那个值,但不适用于大多数情况:

    hankcs.com 2017-07-11 下午4.38.08.png

      而且所有mention的分布并不一定代表某种mention的cost分布:

    hankcs.com 2017-07-11 下午4.39.43.png

      重视这种灵活性,让RL少犯了特定类别的错误:

    hankcs.com 2017-07-11 下午4.40.49.png

    Life is short, but I have a cat.
  • 相关阅读:
    关于VSCode如何缩进两个空格
    基于vue来开发一个仿饿了么的外卖商城(二)
    在复杂的项目开发中使用结对编程
    第一个博客
    docker容器启动失败解决办法
    windows转mac-开发环境搭建(六):mac上搭建git环境
    windows转mac-开发环境搭建(五):mac上用docker安装并运行mysql
    windows转mac-开发环境搭建(四):mac上搭建node、VS code、idea环境
    windows转mac-开发环境搭建(三):mac上搭建maven环境
    windows转mac-开发环境搭建(二):mac上搭建java环境
  • 原文地址:https://www.cnblogs.com/koocn/p/7701745.html
Copyright © 2011-2022 走看看