Naive Wang's Nowhere Land

My personal blog

语义,等价,二义性

这两天狂学编译。

实际上这门课的核心部分不是讲如何造编译器的,是有关形式语言:如何用机器来识别自然语言?如何根据语义来生成语言?这玩意儿比较直观的成果是Siri,以及微软那俩小婊子。

当然啦,我是学编译的,不是学营销的,那么很显然,我涉猎的应用方面不是造机器人滑头,而是进行此工作:将高级语言-一种人能看明白的,能写出来的语言,变成机器语言:一般人看着乐呵乐呵得了的东西。

但总归来讲,虽然用处不同,方法确大相径庭:首先识别单词,并分析出词义,这叫词法分析。

比如说,江边沼!泽淹死村民,这句话一开始是单个字的排列组合,词法分析做的工作,就是把单个字聚集成词,分析出词义—这里词义指的就是名词动词之类:江边-形容词,沼泽、村民-名词,淹死-动词。

然后呢,在进行语法分析,这个步骤最终要得到的是语义。但想要得到正确的语义,必然要在讲话者和听话者之间建立一种一种形式:让我讲的意思就是你听的意思。

于是乎此步骤就致力于,解决如何理解“江边沼泽淹死村民”的问题。

对于编译器而言,由于制定的语法有相当严格的标准,以至于能知道,你写了个程序,某处有typo,然后告诉你:你刚才叫我编译啊,我可以返回一个无可奉告,你又…错误在几几行,犯了个什么什么错。

但对于自然语言呢,假使你宿舍突然失火了,规模之大以至于吓得你火警都不知如何报,你只能软着双腿,爬到宿管跟前,嘴皮子直哆嗦:XXX(宿舍号),火,火!

然后再来考虑另一种情况:你相当勇敢,掏出手机直接拨119,然后冷静自如:你好,XXX校区XXX宿舍楼失火了,请速速来援救。

好了,注意这两种情况的结果:前后二者虽然说的话大相径庭,但表达的是相同意思—我宿舍失火了,救命呐…

语言的本质是传达含义,那么就可以认为前后两句话是等价(equivalence)的。值得注意的是,前一句话受环境影响:宿管一看你一副吓破胆的德行,再一听,火,哎呦,应该是起火了。

而程序语言跟环境无关,因此它必须要跟后一句话一样:在任何场合的含义是不会变的。

以上是两句话的相同含义,下面再讲一下同一句话的不同含义,可以将其称之为二义性(ambiguity)。

还是用最先前的例子:江边:沼泽淹死村民。

首先,此句子第一层含义:江边有沼泽,某一天有村民在沼泽上玩耍,结果不慎淹死:这陈述了一个事件以及它的结果(不过注意此句子是在强调结果)。

那么有人就问了,第二层含义呢?

[不宜公开讨论的内容]。

二义性是用机器识别自然语言的最大难题:机器不光得懂得多,还得学会观察环境,这个难题的本质原因是你的表达含义通过表达方法得出来表达内容跟你的表达含义永远是有偏差的,这就相当于一首曲子从无损格式flac压成MP3,虽然大多数曲子都没有太大差别,但有些音域,有些感觉就很不一样—失真了。

假设你的意思为m,f函数用来根据语义得出语句

g函数用来将语句理解成语义。那么上述就可以理解为:m不等于g(f(m))

那么各位又要问了:你讲这些玩意儿有啥用呢?八竿子打不着,浪费生命,嗟乎!…

前几天朋友给我发消息,百度得强制实名制了,再一搜,原来是刚出台的某法律在捣鬼。

那么以后在网上遛苟就不是删删内容这么简单了:同志,你违法了,跟我走一趟。

那么假设叫你进去的证据是a:某个不该讲的词,某句不该说的话。

那么使用上述定义,对于大多数的语义来讲,有远远不止一种表达方法。

假设一个句子b,b具有二义性,一种语义是合法、看不出任何端倪的,另一种语义是跟a等价的—能让你进局子的语义,显然使用b来作为表达内容是完全能活过每年八月十七号的。那么聪明的你一定也就学会了:荀、清华博士、时间都去哪了…

不过我想要讲的东西还没完。

值得注意的是,在这个漫长的语句语义斗争的过程中,随着环境的变化,越来越多的语句会失灵:不正常的语义会不断加强,到了某个程度就不能再讲了。

那么在这个格局下,终极态是什么?

得知道的一点是,句子是无穷可数的,也就是说,虽然有无穷个句子,但是存在那么一天,所有句子都“变异”了,都代表非法含义。

那么在那一天到来之际:

我就什么话也不讲,这是坠。吼的!