为什么说编译程序实质上是专家系统

为什么说编译程序实质上是专家系统,第1张

编译程序实质上不是专家系统。尽管编译器可以使用一些类似于专家系统的技术,比如基于规则的机器学习方法,但它们并不一定要使用这些技术。编译器是一种将高级语言转换为计算机可执行代码的程序,它需要遵循特定的逻辑和算法来完成这个过程。

专家系统是指一种人工智能技术,它基于知识库和推理机制,能够解决某个特定领域内的问题。与编译器相比,专家系统更注重知识的表示和推理,以便能够给出正确的答案或建议。虽然编译器也能够在一定程度上处理语义和推理,但它主要的目标是将高级语言翻译成机器码,而不是提供专业的领域知识。

因此,虽然编译程序使用了一定的自动化技术,但它不能完全等同于专家系统,两者在目标、机制和应用范围等方面都存在较大的差异。

如何度量句子的语义相似度,很容易想到的是向量空间模型(VSM)和编辑距离的方法,比如A:“我爸是李刚”,B:“我儿子是李刚”,利用VSM方法A(我,爸,是,李刚)B(我,儿子,是,李刚),计算两个向量的夹角余弦值,不赘述;编辑距离就更好说了将“爸”,“儿子”分别替换掉,D(A,B)= replace_cost;

这是两种相当呆的方法,属于baseline中的baseline,换两个例子看一下就知道A:“楼房如何建造?”,B:“高尔夫球怎么打?”,C:“房子怎么盖?”,如果用VSM算很明显由于B,C中有共同的词“怎么”,所以BC相似度高于AC;编辑距离同理;

解决这种问题方法也不难,只要通过同义词词典对所有句子进行扩展,“如何”、“怎么”,“楼房”、“房子”都是同义词或者近义词,扩展后再算vsm或者edit distance对这一问题即可正解。这种方法一定程度上解决了召回率低的问题,但是扩展后引入噪声在所难免,尤其若原句中含有多义词时。例如:“打酱油”、“打毛衣”。在汉字中有些单字词表达了相当多的意义,在董振东先生的知网(hownet)中对这种类型汉字有很好的语义关系解释,通过hownet中词语到义元的树状结构可以对对词语粒度的形似度进行度量。

问题到这里似乎得到了不错的解答,但实际中远远不够。VSM的方法把句子中的词语看做相互独立的特征,忽略了句子序列关系、位置关系对句子语义的影响;Edit Distance考虑了句子中词语顺序关系,但是这种关系是机械的置换、移动、删除、添加,实际中每个词语表达了不同的信息量,同样的词语在不同词语组合中包含的信息量或者说表达的语义信息大不相同。What about 句法分析,计算句法树的相似度?这个比前两种方法更靠谱些,因为句法树很好的描述了词语在句子中的地位。实际效果要待实验证实。

对了,还有一种方法translation model,IBM在机器翻译领域的一大创举,需要有大量的语料库进行训练才能得到理想的翻译结果。当然包括中间词语对齐结果,如果能够利用web资源建立一个高质量的语料库对两两相似句对通过EM迭代词语对齐,由词语对齐生成句子相似度,这个。。想想还是不错的方法!

地理信息除了在数据结构上存在异构,在语义上也存在异构。地理信息语义上的异构可以分为空间数据的异构和非空间数据的异构,以下分别对这两种语义异构进行阐述。

5511 空间数据语义分析与空间关系构建

地理信息中空间数据的语义关系主要可分为以下三种。

(1)拓扑关系: 主要指地理对象间相离(DT)、相接(TO)、重叠(OV)、覆盖(CO)、包含(CT)、相等(EQ)、被覆盖(CB)、在内部(IN)八种关系。其中覆盖(CO)与被覆盖(CB),包含(CT)与在内部(IN)为逆反关系。

(2)方位关系: 主要指一个地理实体相对于另一个地理实体的方向关系。众所周知的八个方位关系为: 北(N)、西北(NW)、西(W)、西南(SW)、南(S)、东南(SE)、东(E)、东北(NE)。以图形(像)中央的地理实体作为第一个起始位置来确定其他地理实体相对于此起始位置地理实体的方位关系; 然后以第一个起始位置为圆心,在周围找一个地理实体作为参照,依此类推,确定地理实体之间的相互位置关系。

如图 538 所示,首先选 A 作为第一个起始参照实体,建立其他地理实体与 A 地理实体的空间方位关系; 然后在地理实体(F、G、H)中再选择一个作为下一个参照实体,依顺时针方向选择 F 作为第二个参照实体,建立其他地理实体(除去已经建立方位关系的 A 实体)与 F 地理实体之间的空间方位关系,依此类推,用同样的方法建立地理实体之间的空间方位关系。

图 538 地理实体的参照关系

图 539 空间方位之间的推理关系

如上图 539 所示,在方位关系中,A 实体和 B 实体的空间方位存在以下关系。

若 B 位于 A 的北方向,则 A 位于 B 的南方向;

若 B 位于 A 的西北方向,则 A 位于 B 的东南方向;

若 B 位于 A 的西方向,则 A 位于 B 的东方向;

若 B 位于 A 的西南方向,则 A 位于 B 的东北方向;

若 B 位于 A 的南方向,则 A 位于 B 的北方向;

若 B 位于 A 的东南方向,则 A 位于 B 的西北方向;

若 B 位于 A 的东方向,则 A 位于 B 的西方向;

若 B 位于 A 的东北方向,则 A 位于 B 的西南方向。

以上方位关系在空间推理时会用到。用 OWL 建立其相互关系后,就可以用 Jena 推理出相互关系。

(3)距离关系: 通常人们用远、近、较远和较近等来形容两个地理实体之间的距离,但这样的形容不准确且容易引起歧义。对于距离关系,我们采用对象质心之间的标准欧氏距离。

针对上述空间数据的语义异构问题,提出用属性关系图(Attribute Relational Graph,ARG),来描述地理实体及其空间关系信息。参照图 540 的图形和它的 ARG,ARG 的结点标有对象的标号。两个结点之间的边标有两个结点间的关系信息。结点 N1 与 N2 之间的边标有(N1,D,67,89,N2),这表明 N1 与 N2 之间的拓扑关系为相离(Disjoint),它们之间的角度为 67°(随下标递增顺序测量),它们之间的距离为 89 个单位。

图 540 图形与其属性关系图 ARG 的映射过程

为每幅图形创建 ARG 之后,ARG 要映射到特征空间的一个多维点,特征空间中的点按照某种预先指定的顺序进行组织(以中央地理实体为第一个起始参照实体)。首先是第一个地理实体,其后是该地理实体与所有其他地理实体之间的关系; 然后是第二个地理实体以及第二个地理实体与随后所有地理实体间的关系,依此类推,直至建立完整的 ARG。在这个阶段,对象之间的方位角也转换为方位谓词。如图 540,N1 与 N2 之间的角度 67°就映射为西南方位(SW)。

5512 非空间数据语义分析与关系构建

非空间数据中的语义异构,主要由于人们对同一或相同类的地理实体在表述概念上存在差异,如对于南京,有人称之为金陵,又有人称之为石头城; 而一些国家地理划分中的州在中国等同于省的概念。非空间数据中表示相等或相似的语义关系又称为同主体语义关系。非空间数据的语义异构一般分为以下两种: 异形同义词,既不同的词汇表达同一个含义,如南京,又可称为金陵或石头城; 同形异义词,即同一个词汇表达不同的含义。

其中同形异义词间的关系可以用 OWL 中的以下语义标签描述: differentFrom(个体不同),两个个体可以显式声明为不同; allDifferent(全不同)和 distinctMembers(不同成员),这两个词配合使用表示一定数量的个体两两不同。

异形同义词的关系可以用以下标签描述: equivalentClass(等价类),两个类可以声明为等价,即使它们尽管名字不同,但拥有相同的实例,等价类可以用来创建同义类; sameAs(个体相同),两个个体可以声明为相同,用它可以创建一系列指向同一个个体的不同名字。

对于一些属性关系可以用 equivalentProperty(等价属性),inverseOf(逆反属性),TransitiveProperty(传递属性),SymmetricProperty(对称属性),FunctionalProperty(函数属性),inverseFunctionalProperty(反函数属性)等来描述。在建立非空间数据的语义关系时,本研究按照 ARG 中地理实体出现的顺序构建非空间数据语义关系,这样便于利用第

552 部分的算法自动生成应用本体实例。

目录

第1章 编译器概述

 11 为什么要学习编译技术

 12 编译器和解释器

 13 编译器的功能分解和组织结构

 14 编译器的伙伴

 15 编译器的复杂性

 16 编译器的设计与实现

 17 编译器的测试与维护

第2章 一个微型编译器

 21 基础知识

 22 ToyL语言

 23 ToyL语言词法分析器

 24 ToyL语言语法分析器

 25 ToyL语言解释器

 26 ToyL语言编译器

第3章 有穷自动机与词法分析

 31 词法分析基础

311 词法分析器的功能

312 单词识别

313 词法分析的复杂性

314 字符串

315 保留字处理

316 空格符、回车符、换行符

317 括号类配对预检

318 词法错误修正

319 词法分析独立化的意义

 32 有穷自动机

321 确定有穷自动机的定义

322 确定有穷自动机的实现

323 非确定有穷自动机

324 NFA到DFA的转换

325 确定有穷自动机的极小化

326 自动机状态转换表的实现

 33 正则表达式

331 正则符号串集

332 正则表达式的定义

333 正则表达式的局限性

334 正则定义

335 正则表达式到有穷自动机的转换

 34 词法分析器的构造

341 用DFA人工构造词法分析器

342 词法分析器的生成器Lex

 练习

第4章 文法与语法分析

 41 语法分析

411 语法分析器的输入

412 语法分析的任务

413 语法分析方法分类

 42 文法和文法分析

421 上下文无关文法和语言

422 最左推导和最右推导

423 语法分析树与二义性

424 文法分析算法

425 自顶向下方法概述

426 自底向上方法概述

 43 递归下降法——自顶向下分析

431 递归下降法原理

432 消除公共前缀

433 代入

434 消除左递归

 44 LL分析方法——自顶向下分析

441 LL(1)文法

442 LL(1)分析表

443 LL(1)分析的驱动器

444 LL(1)中的If-Then-Else问题

445 LL(1)分析器的自动生成器LLGen

446 LL(1)分析法与递归下降法的比较

447 正则文法

 45 LR方法——自底向上分析

451 句柄

452 活前缀

453 归约活前缀识别器——LR(0)自动机

454 LR(0)文法及其分析算法

455 SLR(1)文法及其分析算法

456 LR(1)文法

457 LALR(1)文法

458 二义性文法的处理

459 另一种Shift-Reduce分析技术:简单优先法

4510 LL(1)和LALR(1)方法比较

 46 LR分析器的生成器

461 LALR分析器的生成器YACC

462 LALR分析器的生成器LALRGen

 47 语法错误处理

471 错误恢复和修复

472 递归下降分析的错误恢复

473 LL分析的错误恢复

474 LR分析的错误恢复

 练习

第5章 语义分析

 51 语义分析基础

511 语义分析内容

512 标识符信息的内部表示

513 类型信息的内部表示

514 运行时值的表示

 52 符号表

521 符号表查找技术

522 符号表的局部化

523 二叉式局部符号表

524 散列式全局符号表

525 嵌套式全局符号表

526 符号表界面函数

 53 类型分析

531 类型的等价性和相容性

532 类型分析的总控算法

533 类型名分析

534 枚举类型分析

535 数组类型分析

536 记录类型分析

537 联合类型分析

538 指针类型分析

539 递归类型分析

 54 声明的语义分析

541 声明的语法结构

542 标号声明部分的语义分析

543 常量声明部分的语义分析

544 类型声明部分的语义分析

545 变量声明部分的语义分析

546 过程、函数声明的语义分析

 55 执行体的语义分析

551 执行体的语义分析

552 带标号语句和转向语句的语义分析

553 赋值语句的语义分析

554 条件语句的语义分析

555 while循环语句的语义分析

556 for循环语句的语义分析

557 过程调用语句的语义分析

558 表达式的语义分析

559 变量的语义分析

 练习

第6章 运行时的存储环境

 61 运行时的存储空间结构与分配

611 运行时的存储空间基本结构

612 静态区的存储分配

613 栈区的存储分配

614 堆区的存储分配

615 堆区空间管理

 62 过程活动记录与栈区组织结构

621 过程活动记录

622 活动记录的填写

623 栈区组织结构——AR链

 63 运行时的变量访问环境

631 可访问活动记录

632 局部Display表方法

633 静态链方法

634 全局Display表方法和寄存器方法

635 无嵌套时的AR及访问环境

 64 分程序和动态数组空间

641 无动态数组时的分程序空间

642 动态数组空间

 练习

第7章 面向语法的语义描述

 71 动作文法

711 动作文法定义

712 动作文法的递归实现

713 动作文法的LL实现

714 动作文法的LR实现

 72 动作文法应用

721 用动作文法描述表达式计算

722 用动作文法描述表达式抽象树的构造

723 用动作文法描述语句抽象树的构造

 73 抽象动作文法及其应用

731 抽象变量

732 抽象动作文法

733 栈式LL动作文法驱动器

734 抽象动作文法到栈式LL动作文法的转换

735 栈式LR动作文法驱动器

736 抽象动作文法到栈式LR动作文法的转换

 74 属性文法

741 属性文法定义

742 属性语法树和属性依赖图

743 计算顺序

744 属性值的计算方法

745 拷贝型属性文法

 75 属性文法在编译器设计中的应用

751 类型树的属性文法描述

752 表达式中间代码的属性文法描述

753 变量中间代码的属性文法描述

754 语句中间代码的属性文法描述

755 正则表达式到自动机转换的属性文法描述

 76 S-属性文法及其属性计算

761 S-属性文法

762 S-属性文法的递归实现

763 S-属性文法的LR实现

 77 L-属性文法及其属性计算

771 L-属性文法

772 L-属性文法的递归实现

773 L-属性文法的LR(1)实现

 78 语义分析器的自动生成系统

781 YACC

782 LALRGen

783 Accent系统

 练习

第8章 中间代码生成

 81 中间代码

811 中间代码的种类

812 后缀式中间代码

813 三地址中间代码

814 抽象语法树和无环有向图

815 多元式中间代码

816 中间代码分量ARG结构

 82 表达式的中间代码生成

821 表达式的语义信息

822 表达式的中间代码

823 变量的中间代码

824 表达式的中间代码生成

825 变量的中间代码生成

826 布尔表达式的短路中间代码

 83 原子语句的中间代码生成

831 输入/输出语句的中间代码生成

832 goto语句和标号定位语句的中间代码生成

833 return语句的中间代码生成

834 赋值语句的中间代码生成

835 函数(过程)调用的中间代码生成

 84 结构语句的中间代码生成

841 条件语句的中间代码生成

842 while语句的中间代码生成

843 repeat语句的中间代码生成

844 for语句的中间代码生成

845 case语句的中间代码生成

846 函数声明的中间代码生成

 练习

第9章 中间代码优化

 91 引言

911 优化的目标和要求

912 优化的必要性

913 优化的内容

914 局部优化和全局优化

915 基本块和程序流图

 92 常表达式优化

921 常表达式的局部优化

922 基于常量定值分析的常表达式全局优化

923 常量定值分析

 93 公共表达式优化

931 基于相似性的公共表达式局部优化

932 基于值编码的公共表达式局部优化

933 基于活跃代码分析的公共表达式全局优化

934 活跃运算代码分析

 94 程序流图循环

941 循环的基本概念

942 支撑结点

943 自然循环

944 可归约程序流图

945 基于文本的循环及其处理

 95 循环不变代码外提

951 代码外提的基本概念

952 循环不变代码的判定

953 循环不变代码外提的条件

954 基于文本循环和定值表的不变代码外提

955 一种简单的外提优化方案

956 别名分析

957 过程与函数的副作用分析

 96 循环内归纳表达式的优化

961 归纳变量

962 归纳变量计算的优化算法原理

 练习

第10章 目标代码生成

 101 目标代码

1011 虚拟机代码

1012 目标机代码

1013 窥孔优化

 102 临时变量

1021 临时变量的特点

1022 临时变量的存储空间

1023 临时变量的存储分配

1024 变量状态描述

 103 寄存器

1031 寄存器分类及其使用准则

1032 寄存器分配单位

1033 寄存器状态描述

1034 寄存器分配算法

 104 基于三地址中间代码的目标代码生成

1041 目标地址生成

1042 间接目标地址的转换

1043 表达式中间代码的目标代码生成

1044 赋值中间代码的目标代码生成

1045 其他寄存器分配法

1046 标号和goto语句中间代码的目标代码生成

1047 return中间代码的目标代码生成

1048 变量中间代码的目标代码生成

1049 函数调用中间代码的目标代码生成

 105 基于AST的代码生成

1051 三地址中间代码到AST的转换

1052 标记需用寄存器个数

1053 从带寄存器个数标记的AST生成代码

 106 基于DAG的代码生成

1061 从AST到DAG的转换

1062 DAG排序和虚寄存器

1063 从带序号和虚寄存器标记的DAG生成代码

 107 代码生成器的自动生成

1071 代码生成器的自动化

1072 基于指令模板匹配的代码生成技术

1073 基于语法分析的代码生成技术

 练习

第11章 对象式语言的实现

 111 引言

 112 SOOL语法

1121 程序

1122 分程序

1123 类声明

1124 类型

1125 变量声明

1126 函数声明和方法声明

1127 语句

1128 变量

1129 表达式

11210 程序示例

 113 SOOL语义

1131 声明的作用域

1132 Class声明的语义

1133 语句的语义

 114 SOOL语义分析

1141 标识符的符号表项

1142 符号表结构

1143 符号表的局部化

 115 SOOL目标代码

1151 对象空间

1152 当前对象——self

1153 活动记录

1154 成员变量的目标地址

1155 表达式的目标代码

1156 Offset原理

1157 类的多态性

1158 目标代码区

1159 方法的动态绑定

11510 快速动态绑定目标代码

主要参考文献

众所周知,英文是以词为单位的,词和词之间是靠空格隔开,而中文是以字为单位,句子中所有的字连起来才能描述一个意思。例如,英文句子I am a student,用中文则为:“我是一个学生”。计算机可以很简单通过空格知道student是一个单词,但是不能很容易明白“学”、“生”两个字合起来才表示一个词。把中文的汉字序列切分成有意义的词,就是中文分词,有些人也称为切词。我是一个学生,分词的结果是:我 是 一个 学生。

中文分词技术属于自然语言处理技术范畴,对于一句话,人可以通过自己的知识来明白哪些是词,哪些不是词,但如何让计算机也能理解?其处理过程就是分词算法。

现有的分词算法可分为三大类:基于字符串匹配的分词方法、基于理解的分词方法和基于统计的分词方法。

1、基于字符串匹配的分词方法

这种方法又叫做机械分词方法,它是按照一定的策略将待分析的汉字串与一个“充分大的”机器词典中的词条进行配,若在词典中找到某个字符串,则匹配成功(识别出一个词)。按照扫描方向的不同,串匹配分词方法可以分为正向匹配和逆向匹配;按照不同长度优先匹配的情况,可以分为最大(最长)匹配和最小(最短)匹配;按照是否与词性标注过程相结合,又可以分为单纯分词方法和分词与标注相结合的一体化方法。常用的几种机械分词方法如下:

1)正向最大匹配法(由左到右的方向);

2)逆向最大匹配法(由右到左的方向);

3)最少切分(使每一句中切出的词数最小)。

还可以将上述各种方法相互组合,例如,可以将正向最大匹配方法和逆向最大匹配方法结合起来构成双向匹配法。由于汉语单字成词的特点,正向最小匹配和逆向最小匹配一般很少使用。一般说来,逆向匹配的切分精度略高于正向匹配,遇到的歧义现象也较少。统计结果表明,单纯使用正向最大匹配的错误率为1/169,单纯使用逆向最大匹配的错误率为1/245。但这种精度还远远不能满足实际的需要。实际使用的分词系统,都是把机械分词作为一种初分手段,还需通过利用各种其它的语言信息来进一步提高切分的准确率。

一种方法是改进扫描方式,称为特征扫描或标志切分,优先在待分析字符串中识别和切分出一些带有明显特征的词,以这些词作为断点,可将原字符串分为较小的串再来进机械分词,从而减少匹配的错误率。另一种方法是将分词和词类标注结合起来,利用丰富的词类信息对分词决策提供帮助,并且在标注过程中又反过来对分词结果进行检验、调整,从而极大地提高切分的准确率。

对于机械分词方法,可以建立一个一般的模型,在这方面有专业的学术论文,这里不做详细论述。

2、基于理解的分词方法

这种分词方法是通过让计算机模拟人对句子的理解,达到识别词的效果。其基本思想就是在分词的同时进行句法、语义分析,利用句法信息和语义信息来处理歧义现象。它通常包括三个部分:分词子系统、句法语义子系统、总控部分。在总控部分的协调下,分词子系统可以获得有关词、句子等的句法和语义信息来对分词歧义进行判断,即它模拟了人对句子的理解过程。这种分词方法需要使用大量的语言知识和信息。由于汉语语言知识的笼统、复杂性,难以将各种语言信息组织成机器可直接读取的形式,因此目前基于理解的分词系统还处在试验阶段。

3、基于统计的分词方法

从形式上看,词是稳定的字的组合,因此在上下文中,相邻的字同时出现的次数越多,就越有可能构成一个词。因此字与字相邻共现的频率或概率能够较好的反映成词的可信度。可以对语料中相邻共现的各个字的组合的频度进行统计,计算它们的互现信息。定义两个字的互现信息,计算两个汉字X、Y的相邻共现概率。互现信息体现了汉字之间结合关系的紧密程度。当紧密程度高于某一个阈值时,便可认为此字组可能构成了一个词。这种方法只需对语料中的字组频度进行统计,不需要切分词典,因而又叫做无词典分词法或统计取词方法。但这种方法也有一定的局限性,会经常抽出一些共现频度高、但并不是词的常用字组,例如“这一”、“之一”、“有的”、“我的”、“许多的”等,并且对常用词的识别精度差,时空开销大。实际应用的统计分词系统都要使用一部基本的分词词典(常用词词典)进行串匹配分词,同时使用统计方法识别一些新的词,即将串频统计和串匹配结合起来,既发挥匹配分词切分速度快、效率高的特点,又利用了无词典分词结合上下文识别生词、自动消除歧义的优点。

到底哪种分词算法的准确度更高,目前并无定论。对于任何一个成熟的分词系统来说,不可能单独依靠某一种算法来实现,都需要综合不同的算法。笔者了解,海量科技的分词算法就采用“复方分词法”,所谓复方,相当于用中药中的复方概念,即用不同的药才综合起来去医治疾病,同样,对于中文词的识别,需要多种算法来处理不同的问题。

以上就是关于为什么说编译程序实质上是专家系统全部的内容,包括:为什么说编译程序实质上是专家系统、如何度量两个词之间的语义相似度、地理信息语义分析与关系构建等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10219654.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存