各位前辈,本人做程序开发已经有些年头了,最近打算利用业余时间做些感兴趣的事情。
一个人工自能程序初学者的胡思乱想
记得我第一次接触计算机机时(大概在20年前)就对计算机的人工智能产生了无限向往。记得那时有很多电影、电视是一台苹果或者其他电脑出故障了,人们惊奇的发现这台电脑有了思维。。。。。。
但现在过来20年了,计算机技术无论是硬件还是软件都大幅度进步,但是真正的有思维意识的机器还没有出现。鉴于本人是一个草根,经济条件有限,玩不起硬件方面的开发,只能在软件方面突破,因此,本人至2002年大学毕业后一直战斗在编程一线,c、c++、java、sql等等都搞过。近几个月突然发现自己真的应该静下心来干点自己喜欢的事,不应该老是为了生计不断浪费自己剩下来几十年的生命,因此,本人希望在业余时间多做一点自己感兴趣的事,于是我想起了以前所向往的人工智能。
我心中人工智能和时下很多人工智能定义不一致,我认为人工智能程序必须先解决“学习”能力,根据最近一个月对网上人工智能现状的初步了解,发现现在的人工智能还是没有使机器产生“学习”能力,现在很多所谓的智能程序都是一些条件判断程序的叠加,或基于一定知识库的检索判断。
鉴于本人有限的知识,本人认为具有“学习”能力的智能程序应该具有如下特征:
1、能够根据已有文档(先限制一下范围,文本文档,处理起来相对简单,这里先简单称为文档D1)的内容“学习”新的知识;
2、能够识别出文档D1中“自己”不能理解的知识(包括名词、动词及描述内容等)提出问题(这里简称Q1)。比如D1中的“航天飞机”是什么;
3、能够获取并识别互联网、人类、或者其他途径针对问题Q1给出的解答内容(还是限制为文本文档,简称A1);
4、能够根据Q1的解答内容A1提出进一步问题并“理解”。比如A1中的“宇宙”是什么;
5、能够根据上述文档及其解答更新“自己”的知识库,并能在进一步“阅读”其他文档时利用上述知识;
6、能够总结并优化上述知识及知识结构。(这一步层次要高很多,我突然想到了Oracle数据库的索引、分区等东西,也许索引、分区这样的概念在人工智能程序快速检索知识库时用得上吧) 。
7、当所获取的知识相互矛盾时,能够根据已有知识体系或者人类干预选择性接受新知识。(这一层次最难实现,因为现实中的太多文档相互矛盾,特别是社会科学体系中的文档)。
8、能够用一定方式与人类共享其知识。(至于能否实现人机语音对话那完全是后话了,只要能建立其一个“优化”后的知识体系,至于人机语音对话,完全可以用文本转语音来实现)。
9、具有上述人工智能能力的程序应该能自我进化,能由其初始版本不断自我升级。
鉴于上述想法,以及我对计算机知识有限的了解,我打算用VC++来开发一些模拟程序,其实我目前的工作主要是linux平台相关程序开发,和VC++是不同路径。至于为什么用VC开发,我考虑了如下几点:
1、VC++程序体系相对完备,而且不断研发改进,可获取的帮助文档多。
2、由于本人这个想法可能做断断续续做很多年,微软公司相对稳定,不会像一些公司推出的程序开发平台由于公司被收购或倒闭而没有进一步改进或升级。
3、C++程序能够直接读写内存区域,这一点在知识库快速检索和程序自我升级方面有先天优势。
4、C++程序具有继承性,从而避免繁琐的重复程序开发。
另外,知识库我打算用Oracle数据库建立,原因和VC++比较类似。
我初步设计的程序模块大致如下:
初步由3个程序模块组成:
AI_Base 人工智能程序主控程序
KnowledgeDB 知识库读写程序,知识库大致由4个库构成,
MainDB 快速检索库 涵盖自然科学库和社会科学库的大部分索引指引
NaturalDB 自然科学库
SociologyDB 社会科学库
LogicDB 逻辑库读写程序,用于建立其知识体系。
一、AI系统
AI_Base主要包括如下模块,注意是模块,虽然在下面很多地方以方法的形势描述,但是其在实施过程中完全有可能是一个独立的程序或系统,比如很显然,应该将AI程序和知识库分为两个系统:
ReadDoc //读文档,这个模块怎么做还没有想法,欢迎指点,估计会从读取最原始的人工加工后的二进制数据开始,逐步替换到读汉字、英文文档。
int TransForAi() ; //文字与机器语言的转换,先都转化成UTF8的编码,初期先从简单句式的英文开始,知识库中只存放英文,中文处理太复杂,有点麻烦。
Ask //提出问题,浅显层次的提问
int Ask();
DeepQuestion //问题深化
int DeepQuestion();//其可能和知识库或者外界(人类或其他文档)多次交互。
SelfUpdate 自我更新模块:
int new_Tai(void);//新建一个程序代码,主要程序都来自于原版程序,在其基础上按照其知识库中的一定逻辑进行变异。
int readAILogic(int logicid);
int compile_Tai(int ProcTxtNumber);//编译程序
int execute_Tai(int ProcTai);//执行程序
int writeailog(int ProcTai);//写程序运行状态
int judge(int ProcTaiLogNumber);//判断程序的运行结果
int IfRebuldeDB(int ProcTaiLogNumber);//判断是否着手新建新Ai程序,以便最终替换老Ai
int IfRebuldeDB(int ProcTaiLogNumber);//判断是否着手新建新知识库,以便最终替换老老知识库
int moveMainControl(int ProcTai);//移交主控权
int stopPro(int ProNumber);//停止程序
InterActiveForHuman //与人类交互,包括:
int InterActiveDBForHuman 帮助人类检索、读写知识库,应该包含InterActiveDBForAi中的所有模块
int AnswerFromHuman() 从人类获取某些问题答案,从互联网等媒体也可以看成从人类处获得答案
int Stop_Start() 停止、启动Ai_Base
int UpdateForHuman() 手动更新Ai_Base
二、知识库系统,包含KnowledgeDB和LogicDB
InterActiveDBForAi 检索或读写知识库入口
int ReadDB(); //读取数据,其实严格来说,这里不应该叫读,而应该是Seach。
int WriteDB(); //更新知识库
RebuildeDB //根据已有知识体系,建立与新版程序相配合的新的知识库,并根据SelfUpdate中judge的结果判断是否替换原有知识库。
int CopyDB();//复制前一版本部分或者全部的知识库数据。
int UpdateInterActiveInterface();//更新InterActiveDBForAi 和 InterActiveDBForHuman 的相应知识库接口。
上述框架只是一个初步框架设计,其也没有摆脱传统的程序检索知识库的模式,但是不同的是上述两部分(程序和知识库)都能在继承的基础上实现两个方面的升级,注意是升级不是更新,尽管在英文中都是Update,在这里更新仅仅定义在信息或者程序配置项的更新上,而升级则范围更广,
智能程序的升级或知识库的升级都有可能继承其一版本(程序或者知识库)的部分或者全部内容,并且不需要人工干预,当然,这种升级也许较前一版本是颠覆性的。
写到这里,我必须再次声明一下,我只是一个普通人,并非人工智能方面的专家,程序开发能力也有限,因此上述内容肯定有太多考虑不周全的地方,我将逐步完善上述框架,欢迎拍砖,但是恳请各位拍过了之后能够给出一点建议,毕竟我想把这个爱好延续下去。当然如果各位想
与我交流的话请在CSDN上给我的留言中写明你的qq号码。
支持
很好!
你什么学校毕业的?
不错,不错。很好啊,不过一个首先得问题是知识必须有规范的可被机器阅读的格式,然后才是规则
志趣相投,嘿嘿
学长啊
支持一下
就是没有经费啊 ,
想搞的东西很多,没有经费搞不起来,唉。。。
以已知理解未知,是人类智能的核心
理解就是在结构中搜索匹配
.....
如果模拟个人的知识和思维,数据库我认为必用XML方式;结构众多而记录数不多,大量的关联,需要开放性
是这个网站的admin吗?
顶,。。。
什么语言?