《自然语言处理》整理

References:

  • 《speech and language processing 》2nd & 3rd
  • 《统计自然语言处理》第二版

2017.9.2 补充
最近有一个观点愈发明晰: 深度学习模型只能作为统计学的模型, 用于建模所给的数据的分布. 无论是辨别式任务还是生成式任务. 这远不能称作是"智能". 人类在做出一系列判断和创作时, 不是仅依赖于以往的数据(至少能称得上是智能的行为不是).
而现实情况是, 统计学上的概率对个体的参考价值很小. 条件分布情况根据条件的变化差别非常巨大. 个体的条件是确定的, 而所能参考的统计学概率是没有考虑(也无法考虑)那么多精细条件的. 所以做出的判断其实是对自身情况做出的判断, 而那是已经确定的(甚至是可以改变的). 举个例子: 你在犹豫手头的论文是投会议A还是会议B(假设只能选择一个), 所以你只能参考哪个会议的接受率高投哪个, 例如说投A的接受率大. 后来你想想这个决策太粗糙, 于是进一步考虑每一个会议中你所写的方向的中稿率. 这时候就增加了这一个条件, 概率分布就很可能发生巨大变化, 变成了投B接受率大.你又觉得还可以进一步增加条件, 比如你论文中使用了一些对比方法, 使用这些方法的论文的中稿率怎么样. 结果你发现样本太少了, 置信度太低了... 现在的人工智能模型也面临这样的困境. 然而你最后发现, 中不中稿和你前面设想的一切都没有关系, 和你科研能力才有直接关系, 这就是统计上的相关性并无法描述因果性. 现在你对论文改进一下思路, 增加两个创新点就可能直接由被拒到被接收, 而这根本无法从统计上表现出来(所以说统计对于个体的参考价值极为有限).
当然也有很多任务不需要这么精细的条件和因果推理机制, 目前的深度学习已经表现的很好.


2017年7月25日 补充
自然语言处理应该分为两个方向,一个是以理解语言为基础的场景语言处理;另一个是大数据为基础的语料模式分析。
前者是微观下的精细操作,后者是宏观下的语料分析。
为什么要明确做出区分?因为这两种方向的任务解决思路有很大不同:

  1. 信息来源
    也就是条件分布。场景语言处理需要大量借助语言、文本之外的信息,可以是常识、环境、场景、时代、对象等信息来源。语言在此类任务中信息熵比较大(也就是很多省略)
    语料分析一般不需要文本之外的信息,只要提供语料种类就行。因为是大量文本,因此分析方法不应该是以理解每一句话为基础,而是以数据挖掘为基础,否则的话就好像拿着米尺去丈量国土面积一样,虽然更精确,但是不高效。

  2. 信息处理思路
    数据挖掘方法就好像视觉系统,关注整体结构,忽略局部细节。如果不明确任务方向,就会有希望用粗糙的观察来精细理解语言的错误指导思想。

数据挖掘方法在文本上的局限性

局限性不是说没有效果,而是不能完美解决。在概率论部分已经说民过:不确定的存在是因为信息不足。至少目前的数据挖掘方法用在文本上,正确率在一个难以接受的百分比上很难再提升了(很多任务在标准测试上85%都达不到)。改进的途径当然是信息的提取方式。不过语言微观对宏观的影响导致了的其特殊:

  1. 文本是基于逻辑的,是一个离散表征系统,微妙的变化,如位置、代词等,会在宏观上产生巨大的影响,比如一句话态度转变。而很难想象图片上几个像素点对种类存在巨大影响
  2. 信息难以提取。图片是用像素点分布的表达信息,对于分类来说,信息的分布特征决定种类;文本,即使是篇章级别的分类,数据太少(离散表征性质),传统的基于统计的方法就很难奏效。这和第一点其实说的是一件事。
  3. 前面提到的:大量依赖文本外的信息。结合第一点,那外部条件的变化直接导致了宏观的变化,而在文本上根本体现不出来。

自然语言学基础

语言使用群体

  • 自然语言使用群体
    个体特点是语言储备差别很大,且存在忘词现象,忘词概率与使用频率负相关。打一个比方,就好像一大群人造一个飞船。大家之前没有开会讨论分工,就是这么开干了。显然,这有好处——说干就干,不需要商讨一个方案,反复修改完善,直到大家通过了才开干(这样往往因为意见不合,方案始终确定不下来,并且由于人类的认知局限性,也不可能构造一个完美的方案);不过也有坏处,就是经常发生重复造轮子、标准不统一等。而这就很好地复现了当今的语言现象。上千种语言,同义词,误解,语言发展。
  • 形式语言使用群体
    完全等同、不会遗忘的计算机之间的交流,这也说明了:语言的产生取决于使用语言的群体中个体的特性。

自然语言很明显不是一个高效的语言。语言的使用也是针对群体的。

自然语言的信息量

承接上面的“语言的使用也是针对群体的”,自然语言是一种人类产生的、用于沟通的信息。从这种意义上来说,与图片等其他信息相比,它是“非自然的”。可以想象,如果我们与另一个文明交流,最有效的信息载体应该是图像,而不是自己使用的语言。自然图像是自然信息,很大程度上独立于接受图像信息的群体,不需要借助群体的知识、经验对图像进行解读[1]。像计算机语言,除了几个基本的逻辑外,解读并不需要借助经验。如果你清楚一门计算机语言的手册的话,你无需之前阅读大量实例代码,根据一段代码本身就能将其完全理解,也就是计算机语言编写的文本是与其他共文本完全独立的。自然语言不行,很多语言承接着已有的语言习惯和资料。

计算语言学与自然语言处理(Computational Linguistics & Natural Language Processing)

通过建立形式化的计算模型来分析、理解和生成自然语言的学科,是人工智能和语言学的分支学科。计算语言学是典型的交叉学科,其研究常常涉及计算机科学、语言学、数学等多个学科的知识。与内容接近的学科自然语言处理相比较,计算语言学更加侧重基础理论和方法的研究。
自然语言处理是研究如何利用计算机技术对语言文本(句子、篇章或话语等)进行处理和加工的一门学科,研究内容包括对词法、句法、语义和语用等信息的识别、分类、提取、转换和生成等各种处理方法和实现技术。
—— 《计算机科学技术百科全书》

中英对照术语(Terminology)

linguistic 语言学

homonymous adj.同形词
polysemy adj. 多义词

semantical adj. 语义上的
syntactic adj.句法的
lexical adj. 词法的

morphological adj. 形态学的

predicate calculus 谓词逻辑

概率

特征空间、类样本重叠

特征空间是观察尺度下的空间(以下特征空间和观测空间不做区分),每一维度都是可精确测量的。每一个样本(sample)都属于一个类别,且在特征空间中有一个坐标。我们作一个假设:一个样本在有限个相关物理量下,确定地属于一个类别[2],也就是当我们能够获取一个样本全部有价值的信息时,就能断言样本属于某个类别,不存在例外。比如我们能够测量某次抛硬币时所有的力度、角度、空气动力、硬币材质等物理量,就一定能计算出硬币到底是哪一面朝上。但对于绝大多数实际问题,获取样本全部的、精确的物理量,并且还有一个绝对正确的模型是不现实的,因此在实际的观察尺度下,我们并不能精确地划分样本的类别。并且大多数情况下,离散特征空间的样本存在坐标重合的情况;即使是连续空间(样本点几乎不能可能重叠),某些区域不同类别的样本点也会出现紧密混杂的现象


观察空间一般是易于获取的宏观测量量,而且通常是有价值信息和无价值信息的非线性混合。比如我们需要判断某一化学反应产物,最直接有效的、决定性的信息(特征)应该是分子动量的空间分布,但那是不可获取的,仅仅能测量一些局部的、宏观的温度信息。并且这些温度还混杂了很多不相关信息(温度计材料等)。
从这个角度上来看,我们可以认为样本分布在有效信息的特征空间下是存在确定边界的,而观测空间是原始空间经过非线性变换得到的,于是存在不可分的现象。

概率(值/分布)及其估计

概率论解决的就是在给定的观测尺度下,对事件进行预测。概率论假设在特征空间中,样本服从某一概率分布。真实的概率分布也是无法准确知晓的,某一点处的概率分布只能通过周围样本个数来估计。在给定某样本的坐标时,我们就可以估计其属于某一类别的可能性,也就是概率值 。


概率值概率分布没有本质区别,仅仅是观测空间的区别。相对于后者,前者的观测空间是特殊的离散二值观测空间{是,否}.
它们通常是基于大规模的统计进行估计。

生成模型与判别模型

这里从分布的角度谈一谈。对于同一事件判断,生成模型是需要建模所有信息为变量下的分布:如果一个事件涉及到N个相关信息,那么生成模型就需要准确建模这N个变量的联合分布;而判别式模型是在给定N-1个变量的条件下,建模一个变量的分布,可以看出难度小了很多,数据更加密集,误差也可控。

条件概率$P(Y_1Y_2...|X_1X_2...)$

注意从条件概率开始,特征空间就处于随时变化的情况,读者请注意。下文中信息条件是等价概念,不做区分。
条件概率就是给一定的信息,新的概率。这条件除了来自于事件相关,甚至还来自于观察者,比如我只关心在常温下某化学反应条件,不会去测量几千度下的情况。因此“常温”也算是一个条件。这样来看的话,不存在绝对无条件分布,概率都是条件的(有前提的)。
概率分布就是在观测空间里每一坐标上的条件概率分布。注意,这里的条件概率分布有了新的观测空间,可以说特征空间X的每一个点都通向了新的观测空间Y。当然,条件不必须是一个完整的坐标,还可以是X中的一个区间,比如边缘分布就是将X空间的某些维度进行了压缩映射;还可以是区间构成的新区间,这也暗示了条件不一定非是明确的X空间的坐标,也可以是其他非特征条件。也就是说,概率分布是针对观测空间的,已知一个条件要想求条件分布,需要先转化为特征空间的区域,再求对应的条件概率值



可以看到,信息经过一个不好的特征映射后,对某一条件的分布不确定性变大。
给定一个特征空间的坐标,得到的就是后验概率,这是一个条件概率,也就是根据观测获取了知识后的概率。还未观测就已知的概率分布是先验概率,比如我们还未观看一场比赛就知道种子选手的获胜概率大。
个人认为更加合理的分布估计方式应该参考贝叶斯的推理和学习机制:在没有相关信息的情况下,认为是均匀分布,随着观察、样本的收集,分布不断调整。人类在自然界中就是如此学习的。

特征与分布参数

在特征空间中,完全确定一个样本的特征向量就相当于确定了样本的坐标,于是$P(w_i|X)$就确定了。

信息论相关

$$H(X)=-\sum_{x\in\chi}p(x)\log_2p(x)$$

NLP中消歧、序列标注任务(字/词级别)

机器学习最常见的任务就是消歧任务,也就是分类任务,也是其理论最完善、模型众多、运用最成功的任务。按照前面条件概率的理解,消歧就是利用信息确定关注变量的取值,比如我们需要确定一个词的词性,词性就是关注变量(设为变量X),需要确定词性的词就是一个信息,而且是很重要的信息,一下子就把概率集中到少数几个词性上,甚至是一个词性上。如果是集中到几个词性上,那我们需要进一步获取其他信息(一般是相邻词形、词性),帮助概率的进一步集中(进一步集中不一定是大概率吸收小概率,条件概率经常出现反转)。序列标注(sequence labeling)是比分类含义更加广泛的一个任务[3],在自然语言处理中更加常见。一方面文本天然就是序列信息;另一方面更加本质:需要分类的对象本身对于分类任务所能提供的信息量非常少,更多的信息是来源于上下文,甚至可以说,上下文决定当前对象的标注类别,比如词义消歧,人类甚至可以在把这个词去掉的情况下,依靠上下文对词义进行推理。这在常见的机器学习分类/序列标注任务中独树一帜——图像分类,连续手写体识别,甚至和NLP相近的语音识别都主要依靠待标注的对象本身的信息。上下文信息的合理有效挖掘也是NLP中的难点,甚至可以说到现在未被有效解决,以至于机器学习在NLP中效果差强人意,远不能和人类水平相提并论。文本长距离依赖、语义层面(比文本更加抽象的层次)依赖、文本之外信息依赖(常识、语境),这些都是NLP的“特色问题”,而目前没有模型能够能够很好解决。

字/词级别特征

对于词级别的任务,一般是从上下文中,也就是相邻文本中的提取特征。
特征模板(也就是特征的设计,超参数)可以从以下三个方面考虑:

  1. 特征的类型:词形、词性、词形+词性,3种情况
  2. 上下文窗口大小:当前词的左右2个词,1种情况;
  3. 是否考虑位置:是或否,2种情况。

上面这些特征模板构造的特征都是是离散、二值的,也就是只存在满足/不满足两种情况,满足的话特征函数取值为1,不满足取值为0, 比如设计某一特征是:相邻两个词之内是否存在‘我’,‘和’。这个特征就是只考虑字形、窗口为2、不考虑位置的一个特征。可以看到,这种离散的特征几乎就是规则,类似于正则表达式的匹配,这是由于文本的局部信息离散且少。很多用于很笨的机器学习方法都使用上述类型的特征,比如条件随机场CRF,这些规则都需要人为设计[4]。可以想象,面对应当需要推理的文本任务,比如词义消歧,得需要多么精细、复杂的规则才能得到一个比较理想的结果。

任务1: 词义消歧(word sense disambiguate, WSD)

利用丰富的上下文,先把这个词去掉,如果能推测出一个(或者多个)词义,且这些词义中恰好存在多义词的一个词义的话,就可以消歧。人类由于存储计算能力有限,在日常语言处理中习惯很快消歧,而不是存储多种可能性。

WSD的测试数据

测试需要标注的数据。为了避免使用人工标注,一种巧妙的方法是“创造伪多义词”:在真实语料中n个仅有一个词义的词用同一个“伪词”代替,这个“伪词”就可以看作具有多个词义的多义词,用于测试词义消歧算法。

任务2:词性消歧(part of speech, POS)

著名的语料库:the Penn Treebank (Marcus et al., 1993)包含了45种词性。

作用

  1. 是命名体识别的重要特征
  2. 文章抽取名词
  3. 辨别发音
  4. 句法分析(syntactic parsing)

词性标注任务

从标注角度来看,词性标注属于消歧任务。同一个写法的词可能有多种词性。字典中85%左右的词仅有一个词性,但是由于常用词很多都是多标签的,因此超过一半的概率会出现歧义。词性标注的baseline是不考虑词的上下文,只选择最大可能的tag作为输出。baseline的准确率也能达到92%,目前(2016)最好的准确率大约是97%.
从标签集合(tagset)来看,标签有开集合(open class)和闭集(closed class)和的区分。开集合引入一个问题就是未登录词,推测未登录词(OOV)词性信息量最大的是词形morphology.


任务3:命名体识别(named entity recognition, NER)

命名体:人名、地名、组织机构名、时间表示、数字表示。


任务4:实体关系抽取

NLP中用于消歧、序列标注的模型

最大熵(Maximum Entropy)

概率图:HMM & MCMM & CRF

  • HMM

参考HMM用于输入-输出等长的序列标注任务。


HMM用于等长序列标注

对于OOV,$ P(w_i|t_i) $无法计算,不过可以利用词形对词性做判断。。。。。

  • MEMM(Maximum Entropy Markov Models)

是一个判别序列模型,

  • CRF

CRFs and MEMMS are discriminative sequence models whereas HMMs are generative sequence models. HMM essentially uses Bayes Rule as a local model over the transition and emission probabilities, whereas CRF and MEMM's local models are MaxEnt models over transition and observable features. The chief difference between MEMM and CRF is that MEMM is locally renormalized and suffers from the label bias problem, while CRFs are globally renormalized.

NLP中的规则方法

规则驱动方法VS数据驱动方法

由前面的语言现象类比可以想象,语言是动态的,即使是同一种语言也不会由有限个规则所描述。新的语言形式不断在被创造。
不过,语言毕竟是大多数人使用的,毕竟也流传千年,因此很大一部分是满足非常基本的规则的。这些语言规则就好像成为了砖瓦。
规则编写工作量大,且领域相关性密切,无法领域迁移。

句法分析(Syntactic Parsing)

句法分析就是对一个句子分配一个句法结构。对语法检查(grammar checking)、语义理解(semantic analysis)有参考性。

形式语言与文法

NLP中与规则相关的方法一般都体现在基于文法的句法分析上,其基本假设是:自然语言是一种形式语言
形式语言是由规则生成的语言:反复使用有限的、确定的字符串改写规则。这个规则集合就是文法。
形式语法是一个4元组 $G=(N, \Sigma, P, S)$. 其中$N $是非终结符的有限集合(包含词性标注,有时也叫变量集或句法种类集);$ \Sigma $是终结符的有限集合,也就是我们书写的词,$N\cap\Sigma=\phi$; $V=N\cup\Sigma$称总词汇表;$P$ 是一组重写规则的有限集合:$P={\alpha\rightarrow\beta }$,其中,$\alpha, \beta$是$V$ 中元素构成的串,但$\alpha$ 中至少应含有一个非终结符号;$S\in N$,称为句子符或初始符。

  • 自由文法
    对于$P$,即改写规则,有不同的设计模板。设计模板体现了规则的设计自由度。最自由的当然就是左右两端没有任何约束,称无约束文法,或者0型文法。这样左右两端规则的可能情况都是无限的,比如遇见字符串$\alpha_1$就转化为$\beta_1$.
  • 上下文有关文法
    现在对改写做出一定限制:一条规则只将一个字符$A\in N$进行改写,而不是字符串到字符串的改写(比如说改写成$\gamma$)。但不是仅仅聚焦需要改写的$A$,同时需要参考其上下文,仅有当$A$相邻字符满足规则时,才能进行改写,这就是上下文有关的文法:$\alpha A \beta \rightarrow \alpha \gamma \beta$。可以看出该写规则的自由度确实减小了,如果对改写规则进行编码的话,需要的编码长度会变小。
  • 上下文无关文法CFG
    最为流行的文法类型是Context-Free Grammar, or CFG. 仍然是一条规则只将一个字符$A\in N$进行改写,不过这次不需要考虑上下文:$A \rightarrow \gamma $。这里的规则的自由度更加小了(不要觉得A去掉了上下文的约束,更加“自由”了,而要从可能规则集合的大小考虑)。目前英语最为流行的CFG是由Noam Chomsky规范的。
  • 正则文法
    再进一步约束规则的话就只能约束规则右端了。正则文法规定规则右端的非终结符号(如果有的话)出现在最左边:$A\rightarrow B x \ | A\rightarrow x , x\in \Sigma$.

自动机运用于文法

文法就是基于规则的字符串改写,完全是确定的,因此可以使用自动的程序进行改写。自动机也可以用来判断一个字符是否可以被其对应的文法产生。基于当前状态和输入,产生下一状态的系统称为自动机。不同自由度的文法系统对应不同类型的自动机(如下);同一自由度的文法系统的不同规则的文法对应不同状态该写规则的自动机:

  • 有限自动机
    $M=(\Sigma ,Q,\sigma,q_0,F)$, 只能进行读取,然后状态依据输入进行转移,类似于Markov chain. 如果存在对于某一状态,根据当前输入没有可以转移的规则,那说明输入语言不合法;如果存在对于某一状态,根据当前输入有多种转移规则,那这个自动机是非确定自动机,每一次遇到多种路径便并行转移,不合法的转移分支消亡,剩余的就是对应的可能转移路线。

    有限自动机与正则文法是一一对应的:

    正则文法$G=(N, \Sigma, P, S)$只有两种形式:$A\rightarrow B x \ | A\rightarrow x , x\in \Sigma$. 我们很自然地把改写看作是一次状态转移,
    而自动机的输入一定都是终结符,于是$\Sigma_M = \Sigma_G$,把终结符看作是状态转移条件; $Q_M=N_G\cup{T}$把非终结字符看作状态,其中$q_0=S_G; F_M=T$。

    根据正则文法构造有限自动机或者根据有限自动机构造正则文法都是比较显然的了。
  • 下推自动机
  • 图灵机

句法分析中的消歧

句法分析遇到的歧义性:结构歧义(called structural ambiguity)。这是由于一个句子可能对应多个可行语法。
两种常见的句法结构起义:

  • 归属歧义(attachment ambiguity)
    英语句子歧义组合的开塔兰数[5]
    I saw a boy in the park.
    I saw a [boy in the park].; I saw a [boy] in the park.
  • 并列歧义(coordination ambiguity)
    • old men and women
    • 把重要的书籍和手稿带走了

当使用CRF进行句法分析时,就已经假设自然语言是由CRF规则生成的。后面的分析可以得知句法分析存在结构歧义,也即是同一个句子可以根据规则集经过不同的推理过程得到。这以现象出现有三种可能:

  1. 更加自由的文法体系下不会歧义(比如上下文相关的文法),这样有些改写在特定上下文中就不能进行,那些推理过程就不成立。
  2. 即使真的是由CFG文法产生的,也可能存在歧义:


  3. 像中文这种频繁地结构省略语言更是很难用文法生成这种规则化的方式进行描述。借助了本本之外上下文信息,是文法改写系统本身无法精确描述的。如:
    夫人穿着很得体,举止优雅,左臂上挂着一个暗黄色的皮包,右手领着一只白色的小狗,据说是京巴(局长夫人)。
    仅仅是一个词的替换,就有两种的语义,显然对于上面的一句话,一个完备的文法系统应该包含两种不同的推理。当具体是哪一种,仅仅靠字符串上的信息是不够的(这里两种不同的句法结构前面的字符串完全一样),需要常识进行判断。也就是对于自然语言,文法生成系统的句法结构歧义是必然存在的。根源在于指代的歧义。抛去常识,在句法结构分析过程中,两种句法结构都是合理的,人之所以能够确定为其中一种,是因为常识可以进一步改变句法分析结果的分布。因此理想系统是将两中不同指代对应的句法结构都进行输出,而不是强迫系统只能输出一个。

推理过程复现算法

也就是给定一个语句,分析出怎样用规则推导出这个语句。

  • 线图分析法(chart parsing)

    • 自底向上
  • CYK分析算法
    优点:简单易行,执行效率高
    弱点:必须对文法进行范式化处理;无法区分歧义
    假设文法 G(S) 的规则只有两种形式:
    $$A \rightarrow \alpha $$ $$A \rightarrow BC $$
    可以通过范式化处理,使CFG规则满足上述形式。这种假设的文法形式称为乔姆斯基范式(Chomsky normal form, CNF)。

完全句法分析的评价

对一个树状结构的结果进行评价是不常见。当然不能组去和完全正确和错误。一般的评价是以除词性标注外的非终结符为单位,统计其在树结构中覆盖词的范围的正确率。



因为系统输出的非终结符的个数与标准可以不一样,因此用准确率、召回率、F值进行评估:
Precision以模型输出个数为分母,其中正确的个数为分子(模型输出的正确占比):
$$\textbf{Precision}: = \frac{\text{系统输出正确的个数}}{\text{系统输出的总个数}} $$

Recall 以理想正确个数为分母,实际正确个数为分子(系统能辨别出的占比):
$$\textbf{Recall}: = \frac{\text{系统输出正确个数}}{\text{标准正确个数
}} $$

F-measure是两者的调和平均(Harmonic Mean):
$$
F=\frac{2}{\frac{1}{P}+\frac{1}{R}}
$$

语言模型

Please turn your homework ...
这句话后面很可能接的是'in',而不可能是其他什么。在给定的语境下,'in'的信息量最小,或者$P(w|Please \ turn\ your \ homework... )$这个条件分布在$w=in$时取得最大,且比其他词高很多。
用频数来估计出现概率依据的是最大似然准则

n元语言模型

就是包含n个单元(词或者字)看作是语言的一个样本。假设词汇量是$|V|$,那么样本空间(离散的)的大小是$nV$。把某一位置作为变量,其余位置作为条件(通常是最右的位置作为变量,前面的作为上下文),那么给定上下文,就是变量的概率分布(在给定上下文时,如果那个位置总是只出现特定词,我们就把那个概率分布设定为spike形状。一般地,给定上下文,出现各种词汇都有样本,就是一个概率分布)。显然,这个条件概率分布估计是统计各种可能词的出现频率,除以所有的满足上下文的样本。所以,n元语言模型要求计算并存储所有的n元条件概率值(上下文一共$|V|{n-1}$种情况,每种情况$|V|$个)
给定上下文就是给一定信息。信息越多,就越有可能确定某一个词,即某一个词的条件概率接近1。

  • 只需要前两三个词就能百分百确定当前词,比如一些固定搭配,如"亡羊补*",前3个字就能肯定第四个是"羊";
  • 上下文提供有部分信息,比如很可能是一个地名的开始,而不会是其他的字,说明上下文虽然没有把概率集中到某一个字/词上,但还是把概率集中到若干词上(均匀分布变成了含有峰值的分布);
  • 上下文提供的信息不对当前分布都有效。也就是说每一个词/字对信息依赖不同
  • 还有一些情况,给得再多上下文也无法确定,通常是可替换搭配,如"这个夏天我去...",前文哪怕给得再多,对下一个字是什么没有帮助(独立),也就是依赖文本之外的信息。这很好理解,因为文本是由文本之外的模型(人类大脑)生成的,生成当前字/词的信息没有包含在上下文中是很正常的。这样看,精确地预测下一个字/词(即构建完美语言模型)是不可能的。

除了信息依赖上的问题,n元语言模型构建难点在于:样本稀疏、或者采样不合理。根据已有的文本构建n比较大的模型无论是在存储还是计算上都是不可实现的。

语言模型的评价

The best way to evaluate the performance of a language model is to embed it in an application and measure how much the application improves. Such end-to-end evaluation is called extrinsic evaluation.
最好的语言模型评价方式是外部评价(extrinsic evaluation):完成一些易于评测的文本任务,看结果是否有提升,比如语言识别。

不过由于外部评价耗费计算量,通常也使用内部评价作为参考。语言模型的内部评价就是使用语料库作为模型输入,计算句子的概率值。其基本思想是给测试集的句子赋予较高概率值的语言模型较好,当语言模型训练完之后,测试集中的句子都是正常的句子,那么训练好的模型就是在测试集上的概率越高越好。

模型对于句子给出的概率值越高越好?

之前疑惑,要是模型对所有可能的句子输出概率值都很高怎么办?
系统输出的是概率(而不是像一般的分类模型,给的是类别标签)。这里假设了系统是一个合法的概率分布,即满足输出归一化的条件。这样只需要考虑正常句子概率值高就是一个合理的语言模型。

由于一般的模型是通过短句子(或者词)连乘来估计得到长句子的概率,那短句子更容易获得一个高的概率值。于是希望模型价值与句子长度无关,通常得到的概率值还要进一步处理,用困惑度(perplexity)来评价模型:




语言模型都就是指语言模型对于测试数据集的困惑度。测试集语句概率值越大,困惑度越小,模型越合理。

语言模型的建立与使用

语言模型非常依赖于训练语料的风格,或者说是语料场景。因此在使用时需要明确使用用环境。

数据平滑

  1. 加1法(Additive smoothing)

    n元语法,每一种n元的情况(每一种条件)出现的次数加1。

    对于n>2的情况,仅仅是条件概率的条件变成了多个,上述公式仍然适用。
  2. 减值法/折扣法(Discounting)
    基本思想:保证总样本数不变,减小一个样本贡献度。而上面的加值其实是增加了样本数量
    • Good-Turing 法:对非0事件按公式削减出现的次数,节留出来的概率均分给0概率事件。。
      在整个缩减过程中,保证总计数不变,即计数值变换前后$N=\sum_{r=0}{\infty}n_rr=\sum_{r=1}^{\infty}n_rr$
      这里的削减不是自然数的削减(否则出现次数为1削减后等于0了),而是浮点数的削减,削减之后出现次数不再是自然数,而是浮点l数了。满足上式的一个解是:$r^
      =(r+1)\frac{n_{r+1}}{n_r}$.
      这样,原先出现$r$次对应的概率是$p=\frac{r}{N}$,改变计数值后变为$p*=\frac{r*}{N}$
    • Katz 后退法:对非0事件按Good-Turing法计算减值,节留出来的概率按低阶分布分给0概率事件。
    • 绝对减值法:对非0事件无条件削减某一固定的出现次数值,节留出来的概率均分给0概率事件。
    • 线性减值法:对非0事件根据出现次数按比例削减次数值,节留出来的概率均分给0概率事件

神经网络语言模型

与一般的语言模型一样,都是计算在给定上下文的条件下,某一个词的离散概率,如$P(good| the \ movie \ is \ )$的值。更加规范地,语言模型应该是给定上下文的条件下,当前词在词汇表上的离散概率分布。$p (w_t|contaxt)$
  • 前馈神经语言模型(Bengio et al., 2003)

  • 循环神经网络语言模型

这个模型解除了信息依赖的限制:当前信息不再只能依靠n-1个周围词,而是理论上能够从无限长的上下文中获取信息:

神经网络语言模型本身是连续的,而且能够对概率值分布式存储(以至于参数无法解释,像一个黑箱),好处是:

  1. 不需要平滑(连续值表征)
  2. 以相对少的参数存储(表征)大量离散参数
  3. 对词进行连续空间的嵌入。这一步是顺带的。语言模型的输入是离散的词,通过一个表,将词用一个200维左右的相连进行表征。这个二维浮点参数表在语言模型的训练过程中(上下文条件概率分布逼近one-hot实际值),不断调整。连续压缩表征语言的目标使得这个表的参数在调整过程中,上下文相近的词,低维连续向量表征也相似。

分词——比字更高一层的语言表征单位

字(character)构成词(word), 由于中文等的特殊性,得到词为单位的文本需要进行分词,也就是在汉语文本中的词与词之间加上边界。可以说,分词是实现比字更抽象(高层)的文本单位来表征文本,这个文本单位更能表征语义,因此能够帮助产生合理的停顿、重音、语气等。分词任务困难有三点:

  1. 分词规范
    这使得分词认为成为没有明确定义的任务。分词是一种文本处理的中间环节,学习语言不需要显示进行这项任务,而是在完成其他任务的过程中隐式完成。因此分词的实现情况是因人而异的,甚至同一个人也无法给出明确标准。这和词嵌入(词的相似度表征)非常相似,也是在实现语言模型过程中作为中间结果自动产生的。
  2. 歧义切分
    同一个短语存在多种合法分词方式,只有少数分词方式是合理的,这个合理需要借助语义激励性分析,比如:这篇文章写得太平淡了。
    [*]一个有趣的问题是:人在阅读文字的时候是先进行分词再产生文本的理解,还是先对文本理解再产生分词?前面说了,有效的分词很大程度依赖语义理解;而不先进行分词,又怎么进行语义的分析呢?这似乎说明了分词与语义并不是完全分开的,而是动态结合、相互信息支撑的部分(可以参考EM算法思想)。基本的步骤是:按照最常见的分词方式(初始化)进行分词,发现得到的语义不合理,于是回头重新进行分词,一般就得到合理的句子了。
  3. 未登录词识别
    • 语言发展产生的新词汇
      这些词汇本身与已经存在词汇没什么区别,只是再社会环境中偶然出现,并被大家认可的词汇,这是语言适应时代、环境发展的表达能力,就好比社会发展中新工作的产生一样。
    • 专有名词(proper name):人名、地名、机构名、时间、数字表达
    • 专业名词和研究领域名称
    • 其他专用名词。如书名、电影等

分词算法

基于词典的最大匹配法 (Maximum Matching, MM),根据匹配方向分为:

  • 正向最大匹配算法 (Forward MM, FMM)
  • 逆向最大匹配算法 (Backward MM, BMM)
  • 双向最大匹配算法 (Bi-directional MM)

基本思想是从词典中按照词从长到短的对文本进行匹配,形象表示是一个指针从起点开始,依据词典,尽可能向前跳转。比如词典中最长词为m,指针希望每一次向前跳转m个字,但是并匹配不上,于是减小期望,希望向前跳转m-1个字...直到能正确匹配上,才真正进行跳转。显然一次跨过的那些字就是词典中的一个词。)

浅句法分析(Partial Parsing / chunking)

动机(motivation):树状结构分析是对语言的精细处理(fine-grained manipulation),任务复杂,人类也不会这般处理。拿图像领域做一个类比,就好像从一个复杂的迷宫中找一条路径。我们在处理日常文字信息时,面对的都是简单的(或者说是常见的)、少数的语法,并且不会非常仔细地用一个树状结构进行句法分析,更通常是从句子中提取短语块(chunk),然后用一个宏观的语法来分析语句。这也是我们人类在处理大量文本信息时的一个简化方式(快速阅读),无需仔细进行语法检查等。

Chunking-System Evaluations

Precision以模型输出个数为分母,其中正确的个数为分子(模型输出的正确占比):
$$\textbf{Precision}: = \frac{\text{Number of correct chunks given by system}}{\text{Total number of chunks given by system}} $$

Recall 以理想正确个数为分母,实际正确个数为分子(系统能辨别出的占比):
$$\textbf{Recall}: = \frac{\text{Number of correct chunks given by system}}{\text{Total number of actual chunks in the text
}} $$

F-measure是两者的调和平均(Harmonic Mean):
$$
F=\frac{2}{\frac{1}{P}+\frac{1}{R}}
$$

依存分析(Dependency Parsing) ch14


可以看出,依存分析没有词性类别和短语结构类别。与基于短语结构的句法分析相比,依存分析对句子结构要求非常宽松。一个新的句子结构可以直接用依存分析表示,但是句法分析需要创建新的对应语法才能表示。两者都是用树进行表示,不过前者需要借助中间结点(原语句没有的词语),表示的是由词汇构成(抽象)的短语之间的关系;而后者所有节点都是原语句中的词汇,表示的是两个词之间的有向关系(grammatical relation)。有向关系的出结点是头(head),入结点是依赖(dependent)


左边是依存分析:所有结点都是原语句词汇,是文本相关的语法(context gramma);右边是句法分析,结点有短语结点和词属性结点作为中间结点,叶子结点是原语句词汇,是文本无关的语法(context-free gramma)

Evaluation

准确率就是一句话中,被正确分配依存关系的词的个数/总的词的个数。注:关系数与词的个数相同,因为每一个有向关系都有一个入度,而每个词有且仅有一个入度,考察每个词其实是考察入度对应的词、标签是否正确
正确的词有下面一些准则:

  • labeled attachment score (LAS):
    考察所有的词(也就是以词的个数为分母),入度对应的词正确率
  • unlabeled attachment score (UAS):
    考察所有的词,入度对应的词和标签正确率
  • dependency score (DS):
    考察根节点外的词,入度对应的词的正确率(也即是分母比UAS少1)


语义分析

任务:

语义分析任务一 —— 词义消歧

语义分析任务二 —— 语义角色标注

以谓语为中心,分析出句子的描述的事件:时间、地点、任务等
目前的语义角色标注方法非常依赖于句法分析结果、且领域适应性差。

领域适应性测量

训练集和测试集选择不同的语料库(一般是不同的文体)。

篇章分析

篇章分析是指多语句之间的关系分析。篇章内部存在衔接性,也就是指代现象。确定指代对象也可以看作一种消歧任务。
准确指代需要挖掘更加抽象的信息,

语料库

Tree Bank

代表性的是Penn Tree Bank,中文是CTB. 都包含了句法结构和词性


树库扩展

宾夕法尼亚大学树库PTB的扩展:

  1. 命题库PropBank (Proposition Bank)
    PropBank 的目标是对原树库中的句法节点标注上特定的论元标记 (argument label),使其保持语义角色的相似性
  2. 名词化树库NomBank (Nominalization Bank)
    NomBank标注的是树库中名词的词义和相关的论元信息。
  3. 语篇树库 (Penn Discourse Tree Bank, PDTB)

WordNet & WikiBase & FreeBase

自然语言产生于人类的社会活动,由于没有强制的(??)语言规定,自然语言本质更适合用复杂系统进行描述。复杂系统中有各种形式的个体,lemma,word sens...他们之间构成了相互交错的、动态演化的复杂网络。

同义词(synonymy)
同义词是词义上的可替换,而不是词的可替换。几乎不存在两个在任何语境下可替换的词。这是语言冗余、鲁棒的原因之一:不会因为遗忘某个词使得无法表述一个词义,这就满足了不同语言储备的多个体交流情况;不同人说话哪怕表达的意思一样,也存在不同的风格。
计算机语言也存在实现相同功能,不同的代码实现。也可以看作是同义'词',所以本质上可替换词是由于思维的冗余性产生的。我们也可以把

WordNet

WrodNet是一个定义词义(word sense)的方式:以词义为结点,词义之间的关系为边,构造一个词义网络。通过其在网络中的环境来定义这个词义。

WordNet is a lexical database(词汇) for the English language. It groups English words into sets of synonyms called synsets(同义词), provides short definitions and usage examples, and records a number of relations among these synonym sets or their members.
— Wikipedia

  • Synonyms are grouped together in something called Synset. 同义词之间形成网络。Synonyms--words that denote the same concept and are interchangeable in many contexts--are grouped into unordered sets (synsets). 同义词之间是没有顺序的
  • A synset contains lemmas, which are the base form of a word. “lemma”是word的原始形式
  • Each of WordNet’s 117 000 synsets is linked to other synsets by means of a small number of “conceptual relations.” synsets之间用层级关系连接。
    There are hierarchical links between synsets (ISA relations or hypernym/hyponym relations)
    Several other properties such as antonyms or related words are included for each lemma in the synset 和之间关系是层级的,hypernym高层关系,gyponym低层关系.
    https://www.quora.com/Dictionaries-In-WordNet-whats-the-difference-between-a-sense-and-a-lemma
    首先搞清什么是lemma
    the lemma is the base word form that is indexed in WordNet. lemma是一个词的原型。 jump, jumps, jumped, and jumping are all words and all inflections of a single lemma, jump.
    WordNet interlinks not just word forms—strings of letters—but specific** senses** of words.
    一个synset包含多个lemma,这些lemmas就是同义词,例如:
talk = wn.synset('talk.v.01')
print( talk.lemmas() )
# [Lemma('talk.v.01.talk'), Lemma('talk.v.01.speak')]

'talk'是一个synset,对应一个sense,包含两个lemmas: talk, speak

word#sense number (sense key)
car#1 (car%1:06:00::)
A word form (or lemma) that appears in n synsets in WordNet has n senses. 一个word可以出现在多个synset中,因此认为有多个sense. These senses may span multiple parts of speech – so if a word appears in, say, 7 synsets, it might have 4 noun senses, 2 verb senses, and an adjective sense.

In WordNet a lemma has senses. Specifically, a lemma has exactly as many senses as the number of synsets that it participates in. Conversely, and as you say, synsets contain one more more lemmas, which means that multiple lemmas (words) can represent the same sense, or meaning.

multiple lemmas (words) can represent the same sense, or meaning.

机器翻译

源语言(Source language):需要翻译的语言;目标语言(Target language):翻译后的语言

基于规则的翻译方法(Rule-based)

翻译过程分成6个步骤:
(a) 对源语言句子进行词法分析
(b) 对源语言句子进行句法/语义分析
(c) 源语言句子结构到译文结构的转换
(d) 译文句法结构生成
(e) 源语言词汇到译文词汇的转换
(f) 译文词法选择与生成

优点:可以较好地保持原文的结构,产生的译文结构 与源文的结构关系密切,尤其对于语言现象已知的或 句法结构规范的源语言语句具有较强的处理能力和较 好的翻译效果。
弱点:规则一般由人工编写,工作量大,主观性强, 一致性难以保障,不利于系统扩充,对非规范语言现 象缺乏相应的处理能力。

统计机器翻译

信道模型:

目标语言经过信道后,产生了元语言:
$$P(T|S)=\frac{P(T)P(S|T)}{P(S)}$$那么翻译过程就是求解:
$$\hat{T}=\arg\max_T{P(T)P(S|T)}$$
这个公式涉及到三方面的计算:

  1. $P(T)$: 目标语言的语言模型
    一般用短语或者词的概率和n元条件独立的Markov假设对一个完整句子的概率进行估算。
  2. $P(S|T)$: 翻译模型
    注意,这个翻译模型将原先的源语言到目标语言的翻译转化成目标语言到源语言的翻译。(所以完全没有减轻任务嘛-_-!!)
    为了求解两个不同语言句子之间的条件概率,也是将句子拆成短语或词为单位,然后利用连乘进行估算(和语言模型一样,为了解决直接求一个句子的概率的稀疏性)。这样长句子的条件概率就成了词的对位,这种对位关系模型为:在目标语言句子$T$的长度(单词的个数)为 $l$,源语言句子$S$的长度为 $m$ 的情况下,$T$ 和 $S$ 的单词之间有 $l\times m$种不同的对应关系。对位模型 $A$是从源语言到目标语言的对位表示。

    IBM Model 1假设对位概率是均匀分布的,即每一个$a_i$的值的概率分布是均匀的
    根据IBM翻译模型1,由英语句子$e$生成法语句子$f$ 的实现过程:
    (1) 根据概率分布为法语句子$f$ 选择一个长度$m$;
    (2) 对于每一个$ j = 1,2,...,m $ ,根据均匀分布原则从 $0, 1, ..., l$ 中选择一个值给$a_j$;
    (3) 对于每一个 $j = 1, 2, ..., m$,根据概率$ p(f_j|e_{a_j}) $选择一个法语单词$f_j$。
    IBM Model2进一步具体了对位概率$a(a_j|j,l,m) $
  3. $\arg\max_T$: 搜索算法
    beam search

这种翻译模型就像是在破译密码,不是从语义层次进行,而是根据大量明文、编码进行对照,对于一些简短的、常见的翻译还行。

基于短语的翻译模型

在基于短语的模型中,直接将繁衍率信息、上下文 信息以及局部对位调序信息记录在翻译规则中。这里所说的短语指一个连续的词串(n-gram),不 一定是语言学中定义的短语(phrase, noun phrase, verb phrase)

  1. 短语划分模型
    目标:将一个词序列如何划分为短语序列
    方法:一般假设每一种短语划分方式都是等 概率的
  2. 短语翻译模型
    • 学习短语翻译规则

      借助双语句对词语对齐,满足对齐一致性的就是一个短语翻译规则。在词对应表格中体现为没有空行和空列的矩形块;

      在词对齐中表现为没有源语言或者目标语言对应的词在短语对外:
    • 估计短语翻译概率
  3. 短语调序模型
  4. 目标语言模型

基于短语的翻译模型缺陷

(1) 基于短语的翻译模型能够比较鲁棒地翻译较短的子串,当短语长度扩展到3个以上的单词时,翻译系统的性能提高很少,短语长度增大以后,数据稀疏问题变得非常严重。
(2) 在很多情况下简单的短语翻译模型无法处理短语之间(尤其是长距离)的调序。
(3) 基于短语翻译模型无法处理非连续短语翻译现象,例如 (在 … 时,when …)

基于层次化短语的翻译模型

树翻译模型

  • 树到串模型

规则是源语言的句法结构到目标语言串(包含目标语言替换变量)的替换。
先将源语言S进行句法分析,得到句法分析树。从枝叶到树干(微观尺度到宏观尺度)地进行规则匹配,最终生成目标语言串。
树到串模型的优势:搜索空间小、解码效率高;句法分析质量较高的前提下,翻译效果不错
树到串模型的不足:强烈依赖于源语言句法分析的质量;利用源语言端句法结构精确匹配,数据稀疏 严重;没有使用任何目标语言句法知识,无法保证目标译文符合文法

  • 树到树模型

规则是源语言的句法结构到目标语言的句法结构替换
给定源语言和目标语言的双语平行句对(经过词语对齐 、源语言和目标语言端经过句法分析), 抽取满足词语对齐的树到树翻译规则。
树到树模型的优势:搜索空间小、解码效率高
树到树模型的不足:强烈依赖于源语言和目标语言句法分析的质量;利用两端句法结构精确匹配,数据稀疏非常严重; 翻译质量差

  • 串到树模型

串到树模型的优势:搜索空间大,保证译文符合文法,翻译质量高
 串到树模型的不足:解码速度受限;未使用源语言端句法知识,存在词义消歧问题

基于规则的句法树转换

机器翻译系统评价

主观评价

主要是依赖人工,从流畅性充分性两个方面进行打分。

客观评价

是一种自动评价系统/标准。虽然很好满足标准的不一定是主观上很好的翻译,但是较好的翻译一般都是很好满足标准的。因此制定标准只要满足上述要求就行。

these metrics assume that valid responses have significant word overlap with the ground truth responses.

  • BLEU(BiLingual Evaluation Understudy)
    系统译文中的单词计数不会超过该词在某个参考译文中出现次数的最大值。

    N is the maximum length of n-grams considered. 也就是说BLEU-N考虑从1到N的语言模型。

借助参考译文:

Greedy Matching. 句子中词向量相似度匹配

Embedding Average. 利用词向量计算整个句子的向量,再用归一化余弦度量句子相似度。

不借助参考译文:

  1. 将输出语言输入到语言模型、句法分析后得到和正常语句相近的概率值(流畅度评价)
  2. 原文中词对应的词典翻译在系统译文被覆盖情况,与这个词的频率倒数进行加权(充分性)

篇章特征与文本分类、检索

与前面的章节不同,本章节处理的是以文本为单位,更加粗糙。从粗糙度方面来说,文本为单位信息量更加丰富、完整,更加方便、准确进行特征表示、提取。

篇章特征

首先需进行文本表示。一般通过选取特征,量化特征值,组成向量,也就是向量空间模型(vector space model, VSM). 特征可以是字、短语、或者是更加一般的用于匹配的规则。由于不同特征的尺度不尽相同使用同样的数值单位不合理,于是每个维度单独分配一个权重。
对于一个语料,文本的某个特征可能出现频率很低,比如用一个确定的句子作为特征。过低的频率代表性不足,比如描述一个人,代表性强的特征是“个头中等”或者“身高165~175”,代表性低的是“身高172.3mm”. 相反地,特征的出现频率过高,没有区分度,我们不会描述一个人长着“一个鼻子,两只眼睛”。用于表示文本特征的向量一般都比较高。
确定了准备选取的特征后,接下来就是具体确一个文档的特征值,也就是对于一个文档和一个特征,确定这个特征对应的标量值。很直观地可以用这个歌在这个文档中出现频数(TF)作为标量值,也可以用是否出现(bool值)作为标量值。不过直接用特征出现频数作为标量值有一个局限性,那就是没有体现这个特征区分度。将特征出现频数与特征在所有文本中覆盖率的倒数进行加权就是TF-IDF: $\text{tf}_{ij}\times \ln\frac{N}{n_i}$.

文本特征局限性

  • 仅从统计的角度来分析,脱离语义、推理与常识。
  • 特征离散

  1. 这里的图像指的是自然图像,非自然图像比如文字的图像、乐谱、表情、手语,这些人类擅长、敏感的、独有的、需要借助经验的才能解读的。

  2. 笔者个人觉得这个假设是正确的,能够用于经典物理学下概率事件。当然量子力学中还存在复数域的概率,暂不做探讨。

  3. 参见之前写的《sequence labeling》

  4. 不过现在只需要设计特征模板,算法可以自动学习特征参数

  5. 开塔兰数(Catalan Numbers):有这样一个问题:现有n对括号,一共有多少种合法的组合方式?比如$n=3$,有$$((())) ; ()(()) ; ()()() ; (())() ; (()())$$种。描述这种组合方式的就是开塔兰数:$$C_{n}={2n \choose n}-{2n \choose n+1}={1 \over n+1}{2n \choose n}\quad {\text{ for }}n\geq 0,$$ 再比如:

    还有n边形被切分成三角形的方式:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,012评论 4 359
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,589评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,819评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,652评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,954评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,381评论 1 210
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,687评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,404评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,082评论 1 238
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,355评论 2 241
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,880评论 1 255
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,249评论 2 250
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,864评论 3 232
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,007评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,760评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,394评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,281评论 2 259

推荐阅读更多精彩内容