自然语言处理与编译原理

前言

人工智能处理问题的方法大致可分成两类:
基于规则,模拟出“智能”行为;
基于数据,让智能算法自己拟合出规则这两种方式。
自然语言也可以从这两个角度处理问题,基于规则和基于数据并不是不相容,二者有各自的适用范畴,并且可以搭配处理自然语言。其中基于规则的 NLP 算法与编译原理有很多技术重叠点和相似性。

编译原理

形式语言

定义
形式语言是用来精确的描述语言(人工和自然语言)及其结构的手段。也成为代数语言学

α,β均为字符串,重写规则α——>β表示字符串α可以被写成β。

  1. 文法表示理论
    20 世纪 50 年代中期,著名语言学家 Chomsky 描述了四种文法,在他的体系中,根据产生式的形式,文法被分成四类。
    在乔姆斯基的语法理论中,文法被分为四种类型,分别是3型文法,2型文法,1型文法,0型文法。又分别称为正则文法,上下文无关文法,上下文相关文法,和无约束文法

    正则文法
    文法规则集中只有(非终结符推出非终结符+终结符)或(非终结符推出终结符)这两种形式的文法
    又称为左线性正则文法
    同理可以调整非终结符和终结符位置,得到右线性文法
    可以通过生成额外规则的方法将不满足正则文法定义的文法调整为符合正则文法的文法

    上下文无关文法
    如果文法G的规则集P中所有规则均满足非终结符推出总词表中的字符,则称文法G为上下文文法(CFG)

    上下文有关文法
    规则满足αAβ——>αγβ,α,β,γ属于总词表,且γ至少包含一个字符。
    是上下文无关文法的特例(α,β为空)
    规则右端不小于规则左端
    规则左部不一定仅为一个非终结符,可以有上下文限制

    无约束文法
    α——>β

  2. 从编译到执行

    2.1 词法分析。线性字符串 to 带属性的线性表示。输入源程序,对构成源程序的字符串进行扫描和分解,识别出一个个的单词(亦称单词符号或简称符号),如关键字、标识符、常量、运行符和分隔符等。

    2.2 语法分析。线性表示 to 抽象语法树(Abstract Syntax Tree, AST)。在词法分析的基础上,根据语言的语法规则把单词符号串分解成各类语法单位,如短语、子句、语句、程序段和程序等。通过语法分析,确定整个输入串是否构成语法上正确的程序。

    2.3 语义分析。AST to 中间代码。对语法分析所识别出的各类语法范畴,分析其含义,并进行中间代码生成。

    2.4 代码生成。中间代码 to 目标代码。由中间代码生成目标代码,并进行必要的加工变换,以期在最后阶段能产生出(在空间上或时间上)更为高效的目标代码。

    2.5 代码执行。目标机器对目标代码进行装载、执行。

    其中不包括代码执行,之前的步骤都叫编译期,代码执行叫运行时;词法分析、语法分析负责从程序语言文本到 AST 的转换,称作编译器的前端,语义分析和代码生成负责从 AST 到目标代码的生成和优化,称作编译器的后端。在编译期,某些解释器只生成到 AST 即止,另一些编译器生成和目标机器无关的中间码(或字节码)以供运行时解释或二次编译后再执行。

    这种流程只是典型的理论表述,真正的工业编译器并不严格按照前面的步骤来编译程序。但原理上对从程序到目标代码的处理过程都并无二致

自然语言

  1. 自然语言的分类

    1.1 孤立型(isolating)或分析型(analytic)语言不包含或仅少量包含可被划分为多个词素的词(典型成员包括汉语、越南语、泰语,英语经过演化,现在已经呈现出分析型趋势)。这类语言的特点在于其一般不是通过词形变化来表达语法的作用,而是通过独立的虚词和固定的词序来表达语法意义。

    1.2 综合型(synthetic)语言可在一个单词中合并多个词素,可进一步被区分为黏着语和屈折语。

    1.3 黏着语(agglutinative)的词素一次只能有一个功能(如韩语、日语、芬兰语、泰米尔语等)。语法意义主要由加在词根的词缀来表示的,词缀分为前缀、中缀、后缀,常见的有前缀、后缀。

    1.4 屈折语(fusional)定义为其词素特征比大于 1 的语言(如阿拉伯语、捷克语、拉丁语、梵语、德语等)。词形变化丰富,往往通过词格、性、数的变化表达不同的语法意义。

2,不同的应用侧重

1.1 搜索引擎。我认为一项技术成熟的标志是它被大规模应用时,用户会把它当成自然而然的东西,不会觉得它有多特别。搜索引擎就是一个典型例子,很多 NLP 和其他人工智能技术手段被应用在我们每天的搜索过程中。	
词性标注,即在对爬虫抓取到的文本进行处理时对词汇词性的判定,分词和词性标注是 NLP 的最基本处理,除搜索引擎外的其他应用场景均需要处理这两个问题。

对于目标文档,需要构建从词、句到主题的边界划分和结构表示,但是用户给出的搜索关键字未必符合其在文档中出现的顺序,因此需要乱序匹配。

对于同一件事物,有时能用几条同义词表达,比如“电脑”和“计算机”,搜索时应当把用户输入的关键字及其同义词一起考虑进来作同义词扩展。


1.2 问答系统。顾名思义,问答系统被设计成在提出自然语言问题的情况下以自然语言的方式给出应答。比起单纯使用关键词的搜索,问答系统更加直观,表达也更清晰。可能是 NLP 领域综合性最高的一种应用。

首先成熟的语义理解是任何 NLP 系统的关键。其次,问答不光需要整合从线性文本到结构化表示的转换,以及从结构化结果到线性文本输出的转换;为了做出令人满意的应答,还需要对客观知识的查询推理,即需要知识表达和机器推理(Knowledge Representation and Reasoning),对于一些没有明文表示的事实型问题,列表型问题,定义型问题,关系问题,观点问题,需要能够处理间接和隐含关系的深层的推理能力。

1.3 光学字符识别(Optical Character Recognition, OCR)和口语对话系统。输入的数据不再是文本。对于图像和声音,其本身相比文本更难以划分边界,到文本的转换以及在词汇层面的处理就不可能用基于规则方案。以字符序列建模的基于大量语料库数据、词向量的处理方式更适合做这类系统的前置处理。
  1. 问答系统处理流程

    问答系统有潜力成为下一代搜索引擎,会话交互也有可能是下一代操作系统的主流形态,以 NLP 应用于问答系统为例,典型的处理流程分成:

    分析 -> 识别 -> 知识查询 -> 查询结果评分 -> 返回 -> [反馈]

    虽然编译原理的方法表示方法在 NLP 的理论资料中并不常见,但在实践中,完全可以参考 BNF 的方式描述句法规则,甚至以此建立各阶段的领域特定语言(Domain Specific Language, DSL)。下面分别解释各阶段的详情和一些重点。

    2.1 知识建模。不同于只需要对文本做结构化和分类的系统,问答系统需要按自然语言输入到某个地方查询客观知识,然后给出合理应答。因此需要一种有效的对客观知识建模的数据库。

    2.2 分词。完成“线性 to 带属性标注的线性节点”的转换。

    可以说 NLP 的歧义问题从分词阶段就开始引入了。如,多语言标点符号问题,比如大部分语言书面形式的疑问句和感叹句在句末加标点,但西班牙语在句前句后皆有符号。在实践当中由用户输入的文本中,标点符号可能是误用最多的元素。

    多语言分词问题,诚如前文所述,人类语言多种多样。汉语没有空格作天然词边界,像“北京大学生运动会”即可以分成“北京”“大学生”“运动会”,也可以分成“北京大学”“生”“运动会”,后者显然是不合理的;对于英文这种以空格天然分词的语言,“can’t”在有些方案中被分成“can”“’t”两个成分,另一些方案中当成一个整体词;考虑韩语的词汇紧缩,及其他黏着语的情况,分词成了 NLP 的第一个重要问题……

    多义词在很多语言里普遍存在,如汉语中,“特别”即可以表示副词 very (如“特别-好吃”),又可以表示形容词 special (如“吃法-特别”),这类词性、词义消歧义也是不得不考虑的问题。

    人、地点、事物或者说名词在语言中担任重要角色。它们承载句子的主语,并且往往也承载句子的宾语,出于其重要性,在文本处理时识别并在应用中使用名词往往十分有用,该任务称命名实体识别。

    对于一些会使用到专有名词的场合,中英混合数据是另一个需要处理的情况。另外,分词阶段还需要处理上文提及的同义词扩展等问题。

    2.3 句法分析。
    完成“带属性标注的线性节点 to 结构化”的转换。类似于编译器的语法分析阶段,NLP 需要把线性数据转换成结构化数据以便后续处理。句法分析完成从带属性标注的线性节点到划分出基本语法成份的结构化表示。在下一个编译生成 AST 阶段,结构化表示将被进一步处理成独立于自然语言的谓词-论元结构表示。

    对于句子边界检测,一些标点符号如逗号有时表示同等地位的语法成份间的软停顿(或间隔),而另一些时候是两个并列的句子的硬停顿。这种句边界划分的歧义到句法分析时更方便消除。

    2.4 编译生成 AST。完成“结构化 to 波兰表达式(Polish Expression, PE)”的转换。句法分析的输出虽然已经转换成了结构化表示,但其节点顺序依然和原始自然语言相关。为了后续内部处理的统一性,我们有必要把它转换成和具体自然语言无关的表示方式。

    2.5 AST 语义理解,知识查询。对编译生成的树型 AST 结构进行遍历并做语义理解,并在知识数据库中抽取必要知识,做出机器推理,并生成结果 AST,完成“PE think to PE”的过程。

    2.6 情感处理。在试图让机器表现的尽可能像人的努力中,对语义情感的理解处理直接影响最终的人机交互体验。世界上找不到两片完全相同的叶子,受人类自身原因的影响,不同文化背景、成长经历的人的情感表达和理解习惯,以及应对模式完全不一样。因此从词性标注到基于语料库的处理,依然只能有限处理情感分析。对于问答系统以外的情况,如跨段落、多文档的时候,更加大了情感分析的难度。

    2.7 应答 AST 生成。完成“PE to 结构化”的转换。AST 语义理解,知识查询可以说是 NLP 问答系统中枢的中枢,情感处理是它的辅助。在这一步得到等待输出的 PE AST 结构时处理流程就是语义理解之前的逆过程。

    使用和自然语言无关的 AST 表示方法的好处现在就体现出来了。在应答 AST 生成这一步里,将 PE AST 生成和具体自然语言相关的 AST 表示方法,这种流程可以便于开发“A 语言进,B 语言出”,如果把语义理解简化掉一部分,就可以达到基本的机器翻译的要求。

你可能感兴趣的:(机器学习,nlp)