分类:阅读理解机以及难度度量

来自Big Physics
Jinshanw讨论 | 贡献2021年3月3日 (三) 21:11的版本 →‎工作计划
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)


用机器学习来做阅读理解题,例如问答系统,已经是自然语言处理发展程度比较高的任务了。现在,我希望通过这样的阅读理解,除了回答一般的阅读理解问题,还能够回答WHWM问题,并且还能够对于篇章的阅读理解难度做一个指标。

研究背景

现状上:中文阅读分级系统,目前,还是一坨屎。能不能做出来一个好的分级方法,以及一个阅读材料的分级列表?这对于中国教育是非常有意义的。我见过四年级学生被老师要求读红楼梦的,靠。

技术上:问答系统、自动摘要,甚至翻译,都可以看做是阅读理解系统。其基本原理就是条件语言模型:对来源文本做状态编码,然后根据对象文本的状态来产生文字(问答系统),或者根据来源文本的状态来产生对象文本(翻译、摘要)。当然,这个条件语言模型可以是encoder-decoder结构的,也可以是autoregression结构的。

但是,目前来说,大部分问答题都是能够从源文本中找到答案的问题,这些问题本身也没有通用性。为了度量文本阅读理解的难度,同时,真正地考察阅读理解——对信息的提取、选择和组织(抓住联系),其实可以问以下四个问题:文章主要表达了什么(What),怎么(How)表达的,为什么(Why)这样表达为什么表达这个,你觉得怎么样(Meaningful)。同时为了搞清楚这个WHWM实际上还要做分解和综合:篇章的意思来自于每一段的意思和段之间的关系,段的意思来自于每一句的意思以及句之间的关系,句的意思来自己每一个词的意思和词之间的关系,词的意思来自于每个字的意思和字之间的关系,字的意思和读音来自于每个部件的意思和读音以及部件之间的关系。

从分析技术和理念上,除了前面的机器学习,我们还有网络分析、语文阅读的WHWM方法、分解和综合,这些都为做更好的阅读分级做好了准备。现在是到来解决中文阅读分级的时候了。

甚至,从现实的角度,当前的高考题,甚至其他阅读题,以及更一般的分级阅读,很有必要给一个难度指数。当然,这个指数可以包含用字词的难度来表示的部分,但是更加重要的是对文章整体理解的部分,也就是WHWM问题,也就是分解和综合中各个层级的关系。

因此,在这里,我们希望能够得到一个既可以回答通常的阅读理解题又可以回答WHWM问题的机器,并且在得到这个机器之后,还能够用这个机器的状态来度量文章的整体阅读理解难度。

技术

整体来说,我们的难度度量的思路就是,用人或者人工智能来读文本,在题目都能做对的情况下(每个文本的所有问题的正确率是另一个指标,暂时我们不管),看人或者人工智能所消耗的资源。这个资源可以是人的反应时间,可以是人工智能的网络复杂度。当然,在这样的方案能够实行之前,我们需要做好每个文本的浅层知识型(可以从文本中直接检索到答案)和深层理解型问答题(WHWM问题)的标注。在人工智能上是否能够找到一个好的衡量资源消耗的指标,也是一个待解决的问题。

如果我们有每个人类个体回答每一个文本的所有问题的正确率,我们可以尝试另一种算法——“迭代传播”:初始给每个人一个随机难度水平值,或者每一个文本一个随机难度值;从阅读者个体的难度的加权平均来计算篇章的难度,以及从篇章的阅读难度的加权平均来计算每个阅读者的难度水平值;直到算法收敛。原则上,只要网络是全联通的,并且“阅读水平越高的读者选择和做对了更多阅读难度高的文本”这个假设基本正确,上面的算法就有可能可以得到一个文本的难度值。这里的权重可以通过计算文本相似性,文本和用户的相似性等方式来完成。

当然,就算后者的计算能够完成,那些没有被人类被试读过的文本的难度,还是得依靠前者的算法。

数据集

收集和标记阅读理解题,包含一般的阅读理解题的文本和答案,以及WHWM的答案。同时,做好各层级单位关系网络:段之间的关系的标注、句之间的关系的标注、词之间的关系的标注、字之间的关系的标注、部件之间的关系的标注。

在算法测试阶段,也可以用以及做好分级的其他语言的材料,来试试,下面的指标是否具有一定的合理性。

各层级单位网络和基于网络的复杂度分析

这里各个层级的网络包含:段落构成的网络,句构成的网络,词构成的网络,字构成的网络,部件构成的网络。以词为例,我们相当于做了一个句法分析,标注了句子成分、词性和依存关系。其实,这部分在语言学和自然语言处理中已经有数据库(Treebank)和学习机(见Manning的自然语言处理课程)。只不过,我们这里超越了句这个结构(到底如何超越再说,例如结合句网络)。那么,有了这个词网络,我们可以做什么呢?第一,计算一个叫做依赖关系距离的量,也就是每一组依赖关系中间间隔了多少个其他词(包含标点符号)。把这个距离拿出来算一个平均,或者再包含方差。有了这个量,我们可以认为,如果这个量比较小,则句子容易读懂(因为相互依赖的词都出现在彼此附近)。反过来,如果这个量比较大,则读者阅读时候需要做的加工长度就比较长,于是阅读难度比较高。类似的,我们可以看段落之间的网络,计算依赖关系平均距离。当然,如果对依赖关系本身也做一个分类,给一个每个类别的难度值,可能会更准确。例如,句子之间是转折关系,总-分关系,逻辑递进关系等等。第二,我们可以计算这个网络的各种几何量,例如度分布、平均距离、集聚程度。可以想见,一个度分布比较集中的,也就是大部分的词都描述一个词,在逻辑上可能比较简单(或者,在语法上其实更加复杂?再说,但是思路就是现有的网络结构几何量可能可以帮助描述阅读难度)。

例如,某篇文章的段之间的结构如下:第一段提出问题和论点,第二段对这个观点做第一个方面的论证,第三段做另一个方面的论证,第四段作总结。这个结构显然比,下面这个结构简单:第一段提出问题和论点,第二段对这个观点做第一个方面的论证,第三段做对第二段的论证过程和第一段观点的反思,第三段作总结。如下图。

段网络.png

注意力网络和语言表面网络

训练出来能够完成阅读理解任务的机器之后,我们提取出来这个机器中的注意力网络。第一,在语言模型本身,不考虑阅读理解任务的时候,得到字词之间的注意力关系,句子之间的注意力关系,然后构建一个字词的注意力网络(例如大于多少的才取出来当做链接,或者直接取前面多少个),以及句子的注意力网络。分析这个网络的中心度和模块化程度。第二,在考虑阅读理解任务的时候,提取出来问题和源文本的字词句之间的注意力关系。

同时,我们构建文章字词之间的直接的联系(例如出现在同一句话之中),甚至句子之间的直接联系(例如出现在同一段、关于同一个对象等、句子矢量表示上的相似性)。

然后,我们可以来对比这两种网络:如果两个网络的中心结点比较相似,则文章比较简单;如果网络的模块化程度比较高,则文章比较简单。

得到上面的字词句之间的注意力关联网络之后,我们可以来计算整个篇章中的平均注意力关联长度(对于每一个字词句,算出来其到其他字词句的注意力平均关联长度——关联长度乘以关联概率,然后计算所有的词的平均)。这个注意力关联长度可以当做文章阅读难度的指标之一。

篇章关联长度和问答关联长度

另一种获得篇章平均关联长度的方法是,直接运用字词句的矢量表示,对于每一个字词句,计算其到其他任何字词句的相似性,当做关联概率,然后在这个关联概率上乘以关联长度(中间间隔几个词)。除了对于整篇文章计算平均,还可以针对WHWM问题来计算问答关联长度。也就是,针对每一个问答题,给出来其和篇章中所有词的相关程度,然后,计算这些个关联长度的方差(越集中,表示问题的答案越简单,只要看某一段)。

语言表示矢量的自相关函数计算:给定一个序列[math]\displaystyle{ \vec{x}\left(t\right) }[/math],我们计算自相关函数[math]\displaystyle{ c\left(\tau\right) = \sum_{t} \vec{x}^{\dag}\left(t\right)\vec{x}\left(t+\tau\right) }[/math]。和标量函数的时间序列分析相比,唯一的差别就是用内积代替数之间的乘法。如果这样算出来的自相关函数有一个[math]\displaystyle{ \tau }[/math]的峰值,或者说,相应的自相关函数的频谱(Fourier变换)有一个[math]\displaystyle{ \frac{1}{\tau} }[/math]的峰值,那么,这个[math]\displaystyle{ \tau }[/math]就可以当做这个篇章的典型关联长度。或者更一般地,计算自相关函数矩阵[math]\displaystyle{ C\left(\tau\right) = \sum_{t} \vec{x}\left(t\right)\vec{x}^{\dag}\left(t+\tau\right) }[/math],然后看这个矩阵(通过本征向量和本征值来看)是否存在某个峰值。甚至构造时间关联矩阵,[math]\displaystyle{ C_{t \tau} = x^{\dag}\left(t\right)x\left(\tau\right) }[/math],来看看这个矩阵是否存在本征值的能隙(gap)。

字义数量、最小覆盖体积和平均使用频率

还可以数数整篇文章的字数、平均字频、字词平均难度、平均句子长度等表面指标来衡量文章的阅读难度,参考Flesch-Kincaid Reading Ease,Gunning Fog Index,SMOG formula,Dale–Chall Score等指标。沿着这个指标,其实更应该来考虑一下字义和词义的数量,在整个空间中,字义和词义的分布(例如所有词义都有差别,但是其实差别很小)从而来算一下高维空间的体积之类的。


字词篇章的清晰度、透明度

一个东西的含义的清晰度的是指这个东西的含义可以通过其他含义清晰的东西定义清楚。

一个东西的透明度是指这个东西的含义可以从这个东西的下层结构来理解清楚。

以词为例,清晰度就是指这个词的含义可以用其他本身含义已经清楚的词来说明白,透明度就是这个词的含义可以从构成这个词的字上来理解。于是,为了真正地定义词的清晰度,我们需要有一些更加基本的含义已经清楚的词。例如,“含义”是可以指一个东西的内涵,也可以用这个内涵对应着的外延来表示。于是,你发现,我们得现有内涵和外延的意思。比如说,如果给了一个集合,那么,这个集合的外延就是这个集合的所有元素,内涵就是能够总结这些元素的某个特征性的描述。例如,对于一个六面的骰子,[math]\displaystyle{ \{1,3,5\} }[/math]就是“奇数面”这个集合的外延,“六面骰子的奇数面”这是这个集合的内涵。

于是,这就产生了一个问题:我们有没有一个含义比较清楚的基础的词的集合?例如,“人”大概是明确的,“仁、智”大概是不明确的,“信、义”应该会明确好多。于是,问:能够用自然语言处理方法给所有的词(字词篇章)做一个清晰度的度量吗?以及,透明度的度量?当然,有必要的时候,也可以结合人工标注。

如果有了字词的清晰度和透明度,篇章的阅读难度就可以大概用下面的方式来度量:总和或者平均的一个字词(不)清晰度和(不)透明度,篇章整体意思的(不)清晰度和(不)透明度,以及结合预期的读者的知识和思维的典型模型来看就算比较透明比较清晰是否读者可以读出来这些意思。

透明度之外的字词难度

除了透明度的问题,还有这个词的使用频率,这个词的含义是否抽象等等其他的指标,这些也会影响阅读难度。关于这个问题,见字词难度研究——在英文单词上,已有心理学家建立一个词的难度的实验度量方式,并且免费公开测量结果。类似的研究在中文上,还没有。

工作计划

  1. 前期工作
    1. 调研英文难度分解算法的准确率
    2. 调研中文难度分级算法的准确率
  2. 具体工作
    1. 选择合适的训练文本来源(教材或者已经一定程度上分级的材料的好处是不需要额外人工标注,却显示,其自身可能不可靠。目前,中文分级的前人工作大多数基于教材。再强调一遍,这个不可靠。不过可当做null model,零模型。需要找找其他语料。吴娟老师那边的学生-阅读-语料关系数据,和语料自带的年级数据,是否也可以用?不过,最好还是标注)
    2. 构建标注难度的文本语料库资源,收集更好的词频等语言特征数据
    3. 构建语言复杂度衡量baseline
    4. 看基线的实际表现,决定是否要纳入其他模型和其他特征。其他特征包含字词认知难度,篇章知识性问题和理解性问题认知难度。其他模型包含匹配模型(难度在读者和篇章之间迭代传播),阅读理解机模型。
  3. 额外目的:提取对创作者有价值的语言特征,向创作者提供辅助文本分析器。这部分完成之后,可以和算法一起做成系统,供其他人做难度合适的篇章的创作和评选。

本分类目前不含有任何页面或媒体文件。