简单介绍了NLP的基本概念以及最简单的语言模型
这学期新开了一门名叫“文本大数据管理与分析”的课,自然要看一些自然语言处理的书来应应景。
本篇博客主要是对 “《统计自然语言处理》宗成庆著 ”这本书的前五章进行一些摘录总结和个人想法与理解。
自然语言处理基础概念
笔者最是不耐烦历史演变,因此也是粗粗略过没有细看,所以这一段跳过。下面记录一些概念。
自然语言处理(Netural Language Processing, NLP)又称自然语言理解(Natural Language Understanding, NLU),与之相似的还有一个领域成为计算语言学(Computational Linguistics),三者之间大致相似,但仍有细微不同,主要学技术,不细扣概念了,没意思。
自然语言处理研究的内容包括:
- 机器翻译(Machine Translation, MT): 实现一种语言到另一种语言的自动翻译。
- 自动文摘(Automatic Summarizing or Automatic Abstracting): 将原文档的主要内容和含义自动归纳、提炼出来,形成摘要或缩写。
- 信息检索(information retrieval):信息检索也称情报检索,就是利用计算机系统从海量文档中找到符合用户需要的相关文档。面向两种或两种以上语言的信息检索叫做跨语言信息检索(cross-language/trans-lingual information retrieval)。
- 文档分类(document categorization/classification):文档分类也称文本分类(text categorization/classification)或信息分类(information categorization/classification),其目的就是利用计算机系统对大量的文档按照一定的分类标准实现自动归类。
- 问答系统(question-answering system):通过计算机系统对用户提出的问题的理解,利用自动推理等手段,在有关知识资源中自动求解答案并作出相应的回答。
- 信息过滤(information filtering):通过计算机系统自动识别和过滤那些满足特定条件的文档信息。
- 信息抽取(information extraction):指从文本中抽取出特定的事件(event)或事实信息,有时候又称事件抽取(event extraction)。
- 文本挖掘(text mining):有时又称数据挖掘(data mining),是指从文本(多指从网络文本)中获取高质量信息的过程。
- 舆情分析(public opinion analysis):舆情是指在一定的社会空间内,围绕中介性社会事件的发生、发展和变化,民众对社会管理者产生和持有的社会政治态度。
- 隐喻计算(metaphorical computation):“隐喻”就是用乙事物或其某些特征来描述甲事物的语言现象。
- 文字编辑和自动校对(automatic proofreading):对文字拼写、用词,甚至语法、文档格式等进行自动检查、校对和编排。
- 作文自动评分
- 光读字符识别(optical character recognition,OCR):通过计算机系统对印刷体或手写体等文字进行自动识别,将其转换成计算机可以处理的电子文本,简称字符识别或文字识别。
- 语音识别(speech recognition)
- 文语转换(text-to-speech conversion):将书面文本自动转换成对应的语音表征,又称语音合成(speech synthesis)。
- 说话人识别/认证/验证(speaker recognition/identification/verification):对一说话人的言语样本做声学分析,以此推断(确定或验证)说话人的身份。
自然语言处理涉及的层次:形态学、语法学、语义学、语用学。
自然语言处理面临的困难:核心困难就是消除歧义理解(disambiguation)问题和未知语言现象的处理问题。
在统计自然语言处理方法中,一般需要收集一些文本作为统计模型建立的基础,这些文本成为语料(corpus)。经过筛选、加工、标注等处理的大批量语料构成的数据库称为语料库(corpus base)。由于统计方法通常以大规模语料库为基础,因此,又称为基于语料库(corpus-based)的自然语言处理方法。
语料库的类型:
-
平衡语料库与平行语料库
平衡语料库(balanced corpus)着重考虑的是语料的代表性与平衡性。
平行语料库(parallel corpus)一般有两种含义:一种是指在同一种语言的语料上的平行,例如“国际英语语料库”共有20个平行的子语料库,分别来自以英语为母语或官方语言以及主要语言的国家,如英国、美国、加拿大、澳大利亚、新西兰等。其平行性表现为语料选取的时间、对象、比例、文本数、文本长度等几乎是一致的。建库的目的是对不同国家的英语进行对比研究。
对平行语料库的另一种理解是指两种或多种语言之间的平行采样和加工。例如,机器翻译中的双语对齐语料库(句子对齐或段落对齐)。
-
通用语料库与专用语料库
一般把抽样时仔细从各方面考虑了平衡问题的平衡语料库称为通用语料库。
-
共时语料库与历时语料库
共时语料库(synchronic corpus)是为了对语言进行共时研究而建立的语料库。
历时语料库(diachronic corpus)是为了对语言进行历时研究而建立的语料库。
张晋认为,判断历时语料库有4条基本原则:
(1)是否动态语料库:语料库必须是开放的、动态的。
(2)语料库的文本是否具有量化的流通度属性:所有的语料都应来源于大众传媒,都具有采用不同计算方法与传媒特色相应的流通度属性。其量化的属性值也是动态的。
(3)语料库的深加工是否基于动态的加工方法:随着语料的动态采集,语料也应进行动态加工。
(4)是否取得动态的加工结果:语料的加工结果也应是动态和历时的。 -
生语料与标注语料库
生语料是指没有经过任何加工处理的原始语料数据(corpus with raw data)。
标注语料库是指经过加工处理、标注了特定信息的语料库。根据加工程度不同,标注语料库又可以细分为分词语料库(主要指汉语)、分词与词性标注语料库、树库(tree bank)、命题库(proposition bank)、篇章树库(discourse tree bank)等。
n元语法模型
语言模型(language model,LM)在自然语言处理中占有重要的地位,尤其在基于统计模型的语音识别、机器翻译、汉语自动分析和句法分析等相关研究中得到了广泛应用。目前主要采用的是n元语法模型(n-gram model),这种模型构建简单、直接,但同时也因为数据缺乏而必须采取平滑(smoothing)算法。
对于一个由$l$个基元(“基元”可以为字、词或短语等,后面用“词”来通指)构成的句子$s=\omega_1\omega_2\dots\omega_l$,其概率计算公式可以表示为:
\[\begin{equation} p(s)=p(\omega_1)p(\omega_2\mid{\omega_1})p(\omega_3\mid{\omega_1\omega_2})\dots{p(\omega_l\mid{\omega_1\dots\omega_{l-1}})}\\ =\prod_{i=1}^{l}p(\omega_i\mid{\omega_1\dots{\omega_{i-1}}}) \end{equation}\]在上述公式中,产生第$i(1\leqslant{l})$个词的概率是由已经产生的$i-1$个词$\omega_1\omega_2\dots\omega_{i-1}$决定的。由于该模型中自由参数太多,几乎不可能从训练数据中正确地估计出这些参数,因此将历史$\omega_1\omega_2\dots\omega_{i-1}$按照某个法则映射到等价类$E(\omega_1\omega_2\dots\omega_{i-1})$,而等价类的数目远远小于不同历史的数目。如果假定:
\[\begin{equation} p(\omega_i\mid{\omega_1,\omega_2,\dots,\omega_{i-1}})=p(\omega_i\mid{\omega_1,\omega_2,\dots,\omega_{i-1}}) \end{equation}\]那么,自由参数的数目就会大大的减少。有很多方法可以将历史划分成等价类,其中,一种比较实际的做法是,将两个历史$\omega_{i-n+2}\dots\omega{i-1}\omega_{i}$和$v_{k-n+2}\dots{v_{k-1}}v_k$映射到同一个等价类,当且仅当这两个历史最近的$n-1(1\leqslant{n}\leqslant)$个词相同,即如果$E(\omega_1\omega_2\dots\omega_{i-1}\omega_i)=E(v_1v_2\dots{v_{k-1}}v_k)$,当且仅当$(\omega_{i-n+2}\dots\omega_{i-1}\omega_i)=(v_{k-n+2}\dots{v_{k-1}v_k})$。
满足上述条件的语言模型称为n元语法或n元文法(n-gram)。通常情况下,n的取值不能太大,否则,等价类太多,自由参数过多的问题仍然存在。在实际应用中,取$n=3$的情况较多。
当$n=1$时,一元文法被记作unigram,或uni-gram,或monogram;
当$n=2$时,二元文法被记作bigram,或bi-gram,被称为一阶马尔可夫链(Markov chain);
当$n=3$时,三元文法被记作trigram,或tri-gram,被称为二阶马尔可夫链。
以二元语法模型为例,根据前面的解释,我们可以近似的认为,一个词的概率只依赖于它前面的一个词,那么,
\[\begin{equation} p(s)=\prod_{i=1}^{l}p(\omega_i\mid{\omega_1\dots\omega_{i-1}})\approx\prod_{i=1}^{l}p(\omega_i\mid{\omega_{i-1}}) \end{equation}\]为了使得$p(\omega_i\mid{\omega_{i-1}})$对于$i=1$有意义,我们在句子开头加上一个句首标记<BOS>,即假设$\omega_0$就是<BOS>。另外,使得所有的字符串的概率之和$\sum_{s}p(s)$等于1,需要在句子结尾再放一个句尾标记<EOS>,并且使之包含在上式的乘积中(如果不做这样的处理,所有给定长度的字符串的概率和为1,而所有字符串的概率和为无穷大)。例如,要计算概率$p(Mark\ wrote\ a\ book)$,我们可以这样计算:
\[\begin{equation} p(Mark\ wrote\ a\ book)=p(Mark\mid{<BOS>}){\times}p(wrote\mid{Mark})\\ {\times}p(a\mid{wrote}){\times}p(book\mid{a}){\times}p(<EOS>\mid{book}) \end{equation}\]为了估计$p(\omega_i\mid{\omega_{i-1})}$条件概率,可以简单地计算二元语法$\omega_{i-1}\omega_i$在某一文本中出现的频率,然后归一化。如果用$c(\omega_{i-1}\omega_i)$表示二元语法$\omega_{i-1}\omega_i$在给定文本中的出现次数,我们可以采用下面的计算公式:
\[\begin{equation} p(\omega_i\mid{\omega_{i-1}})=\frac{c(\omega_{i-1}\omega_i)}{\sum_{\omega_i}c(\omega_{i-1}\omega_i)} \end{equation}\]用于构建语言模型的文本称为训练语料(training corpus)。对于n元语法模型,使用的训练语料的规模一般要有几百万个词。上述公式用于估计$p(\omega_i\mid{\omega_{i-1}})$的方法称为$p(\omega_i\mid{\omega_{i-1}})$的最大似然估计(maximum likelihood estimation, MLE)。
对于$n>2$的n元语法模型,条件概率中要考虑前面$n-1$个词的概率。为了使公式(3)对于$n>2$成立,我们取
\[\begin{equation} p(s)=\prod_{i=1}^{l+1}p(\omega_i\mid{\omega_{i-n+1}^{i-1}}) \end{equation}\]其中,$\omega_i^j$表示词$\omega_i\dots{\omega_j}$,约定$\omega_{-n+2}$到$\omega_0$为<BOS>,取$\omega_{l+1}$为<EOS>。为了估计概率$p(\omega_i\mid{\omega_{i-n+1}^{i-1}})$,与等式(5)类似的等式为
\[\begin{equation} p(\omega_i\mid{\omega_{i-n+1}^{i-1}})=\frac{c(\omega_{i-n+1}^{i}}{\sum_{\omega_i}c(\omega_{i-n+1}^{i})} \end{equation}\]注意,求和表达式$\sum_{\omega_i}c(\omega_{i-n+1}^{i})$等于计算历史$c(\omega_{i-n+1}^{i-1})$的数目,这两种书写形式意思一样,有时两种书写形式混用。