为了验证晓辉的第二路径是如何实现操作语义的对接的,我提出了一个加法操作的例子,希望通过对这个加法操作的实现过程,来显示传统计算机语言协同人脑和电脑的第一路径,和晓辉提出的第二路径的实现方案的不同和共同点是什么。
假设的例子如下:
假设我购买了一支铅笔1元钱,又购买了一个作业本3元钱,我要付给文具店多少钱?
解决这个简单的问题不是目的,是要通过利用我们设计的不同的架构来解决这个问题,看架构的特征是什么,能带来什么好处。为了这么做,我们可能需要把问题进行"隔靴搔痒"式的复杂化。但解决这个问题的隔靴,可能就是解决更复杂问题的必须。这一点,需要请读者仔细品味。
本来,纯粹人脑来解决,我们人脑做个算术1+3=4,马上就会知道,要给4元钱,我们手拿4元钱,交给收银员的操作,就会立即发生。这就是人脑思考要给多少钱最后驱动的人的操作,“给出四元钱”的操作,就是假设问题在问题域的“操作语义”。
这个操作语义完全是在人脑的思维中完成形式语义到操作语义的转换的。以上就是这个转换的过程。
第一路径是用传统的软件编程的方法来协同人脑和电脑来一起解决问题。接下来演示第一路径实现该操作语义的过程:
1.我作为自然语言使用者提出问题,希望得到自然语言的解来驱动我的付款操作,但我不懂计算,计算机懂,但计算机听不懂我的问题:“我购买了一支铅笔1元钱,又购买了一个作业本3元钱,我要付给文具店多少钱?”。
2.分析师能听懂我的问题,他知道我这问题其实就是需要一个能做加法运算的机器,就可以解决。可分析师太忙,没时间做设计和实现,他知道设计师懂得如何设计一个能做加法运算的机器。设计师整天只是做怎么用计算机解决各类问题的事,从来没买过东西,也听不懂我的问题说得是什么,但他知道做加法运算的机器可以是什么样子的,分析师这么和他说:“请设计一个能做加法的机器吧”,设计师就知道该做什么了。
3.设计师知道,计算机本来就是一个加法器。想让计算机做加法很简单。只要让计算机按如下步骤操作就可以了:
第一步,让计算机从控制台获得2个数,并把它们存到存储器中;
第二步,从程序存储器中把这两个数转送到CPU加法器的输入寄存器中;
第三步,启动加法器运算,在输出寄存器得到计算结果;
第四步,把加法器输出寄存器的结果转送到存储器中;
第五步,把存储器中的结果转送到控制台输出显示。
显然,设计师知道,计算机能做这几类操作:
从控制台获得数字;
把控制台数字转存到存储器;
把存储器数字转送到加法器的输入寄存器;
进行加法运算;
把加法器输出寄存器数字转送到存储器;
把存储器数字转送到控制台显示。
他只要把这几类操操作按一定顺序编排起来,就完成了设计。
可是计算机仍然不能接受这样的“人话”。设计师知道,程序员可以让计算机明白该怎么做这些事,于是,设计师把这个设计交给程序员。
4.程序员只能听懂让计算机做什么事的话,就是设计师的设计这样的话,听不懂分析师笼统的“请做一个能做加法的机器”这样的话,所以,程序员很高兴从设计师那里得到这样的程序设计。程序员知道想让计算机如何做,得先用一种专门的语言来表达设计师的设计。这门专门的语言就是计算机编程高级语言,程序员很快把设计师的设计变成了如下的高级语言的表达,输入到计算机中:
sub DoAPlus
dim a,b,c as integer ’在存储器中开辟3个位置来保存数据
a = input() ’从控制台获得第一个数据
b = input() ’从控制台获得第二个数据
c = add(a,b) ’将两个数据送加法器做加法,并把结果放到存储器的结果位置
output(c) '控制台输出结果
sub end
这段语言只是计算机可接收的,但还不能根据这个语言来执行其中所说的每个操作。程序员知道,用一个叫“编译器”的工具程序可以把这段程序编译成计算机真正可执行的数字的编码。
5.编译器将这段代码进行编译,编程一串数字串,类似下面这个样子的:
这叫“机器码”,编译后可存储在计算机的程序存储器中,其含义,就是一条一条的机器指令,计算机可以一条指令一条指令地执行,每执行一条指令,就是进行一个当初设计师所设计的操作步骤。
当上面所说的2-5步的事完成后,我就可以启动计算机里的一个程序,进行如下的操作:
1.当控制台让我输入第一个数时,我输入1;
2.当控制台让我输入第二个数时,我输入3;
3.控制台立刻会显示一个数字4,
4.然后,我拿出4元钱交给收银员。
以后,我再买了别的两样东西的时候,我也只要启动这个程序,输入2个数字,就知道要给多少钱了。
我的这4个操作完全替代了会计算的那个我头脑中做算术运算的操作,对于不会计算的我来说,真是解决了一个大问题啊!
可以看到,我们用电脑,是将我们在现实世界中原来用大脑进行的一些思维的操作,用电脑的操作所代替,要完成这个替代作用,我们就必须用适当的语言,将这些操作从人脑可执行的形式,转换成电脑可执行的形式,并要额外增加一些交互操作的说明(控制台的输入输出)。这个过程,就是第一路径所走的过程。
对于我的“我购买了一支铅笔1元钱,又购买了一个作业本3元钱,我要付给文具店多少钱?”这么一个思想活动,按传统的第一路径进行计算机协同处理的操作语义的贯通,是一个串行的渐变的形式化的过程:从形式化语义不清晰的日常语言,逐渐经过分析语言、设计语言和编程语言,语言的逻辑信息达到完全的形式化,最终转换为机器语言驱动计算机的计算操作。其中的“日常语言,逐渐经过分析语言、设计语言和编程语言”都属于自然语言的子集,而且是形式语义逐渐清晰的子集。高级语言是跨接自然语言和计算机语言的转换语言,机器语言则是纯粹的计算机语言,是具有严格的形式化语义的,表现之一是:每一条机器指令,对应一种确定的计算机的计算操作,而这些操作,则正是实现了现实中人脑思维活动中那些可形式化的部分内容。人脑通过观察计算反馈的结果获得完整的自然操作语义的实现。
如果用晓辉的第二路径的架构来实现这个案例,按我目前的理解应该至少有如下的过程。
1.表述问题的这句话的每个字事先已经转换成对应的一个数字符号,并且这个数字符号和对应的字进行了绑定。
2.由于每个字已经和一个数字符号进行了绑定,所以,在我陈述问题“我购买了一支铅笔1元钱,又购买了一个作业本3元钱,我要付给文具店多少钱?”的同时,我把这句话输入到计算机中的时候,计算机可以搜索到用数字符号替代每个字的一个“陈述”。当然,这是数字符号的称述,是人已经看不懂了的。
3.然后,先由人懂计算的人用自然语言输入问题的答案“4元”到计算机,与之前的问题形成关联记录。计算机中原来也已经把“4元”这样的文字,转换成了数字编码,这些数字编码统一存放在一个序位矩阵中,可称之为“序位语言”。并且,所有相同含义的自然语言的汉字,已经对应到同一个序位编码,人用自然语言告诉机器一些语句,计算机就同时搜索到数字序位语言的描述。
4.当我再次问“我采购了一支铅笔1元钱,又采购了一个作业本3元钱,我要支付文具店多少钱?”我故意改变了两个词语,但由于这些词语早先已经统一对应到同义的数字编码,所以,计算机就会找到一个唯一的数字编码描述的问题,并查到之前关联的数字编码答案,根据数字编码答案又查到对应的自然语言表达“4块”,块和元在序位编码中有并列,所以答案是4块,含义是一样的。
于是,计算机通过建立关联对应和查询关联对应的操作,实现了我在现实世界中人脑所需进行的思想活动操作。用计算机查询重复关系的操作代替了人脑的思维操作。
所以,晓辉的第二路径,是人和计算机一起同时使用两种语言捆绑在一起的语言。这种语言有两面性,自然语言的一面给人自由使用,数字编码的一面同时就在计算机中得到存储或查询。由于数字编码对自然语言文字是按同义并列的,也就是只要含义相同,即使文字符号不同,也会对应同样的数字编码。这样,就可以用纯粹的数字编码来“浓缩”任何语言文字的信息,通过人教计算机进行关系积累,并通过查询关系的挖掘来实现机器教人问题答案的协同效果。
这便是第二路径的原理,对吗?
我对晓辉想法的理解终于得到晓辉初步的认可:
嘉文的这个帖子已经相当好地理解了我所说的“第二路径”的意思了。
求同告一段落。现在,就是我可以抛出问题的时候了:
一个可能的问题是:自然语言的数字化不等于逻辑上的形式化,基于搜索的计算和基于逻辑操作的计算也是不同的,基于搜索的计算近乎枚举的做法的效率必然会低于基于逻辑操作的计算,而且会需要更多的消耗。如本例中的加法:必须把每个可能的实际的加法过程进行数字化的描述,才能在重用中找回答案。而基于逻辑操作的计算,则不必如此。如何在二者之间建立联系和取得平衡,或许也是一个挑战。
可以说,基于搜索的计算是一种“高熵环境”的计算,而基于逻辑操作的计算,则是一种“低熵环境”下的计算。不知道晓辉是否能够理解我的这个说法?所谓“高熵环境”,指的是计算因子之间的差异和相互之间的结构关系,就象气体分子之间的状况。所以,只能通过近乎枚举的方法来记录和重复可能的过程,而不能通过结构关系的规律来进行确定的计算。而“低熵环境”,则是计算因子之间存在针对计算操作的不同地位的差异,并且因子之间存在确定的结构关系上的约束,也就是:包含了逻辑语义。
“低熵计算”具有更精确、范围更小的计算因子群,由于遵循独特的逻辑约束关系,因而具有局部的计算效率的优势;可避免“组合爆炸”的发生。
“高熵计算”具有更普适、范围更广的计算因子群,只需要遵循统计上的概率分布,因而具有整体上的“一招走天下”的普适计算优势。同时,必须面对“组合爆炸”的挑战。
如何融合这两种风格的计算,实际上也是我在电脑围棋研究中遇到的挑战之一。目前,并没有明显的解决方案。
https://blog.sciencenet.cn/blog-33982-508974.html
上一篇:
右连续定理下一篇:
协同人工智能软件的研究进路