概述
关于人工智能的认识:联想思维SLYZPG.PrinceYang
#作者是一个对电脑很感兴趣的高中生,他并没有学过任何关于人工智能的的东西。所以这是一篇有关于他对人工智能的认识的文章,请其他初学者不要看,容易走入歧途。欢迎大佬指正。
在我的生活中并不能见到什么人工智能的的东西,没见过各种机器人,也就是智能手机会与智能有一点联系,但我并不认为智能手机有多智能。我认为真正的智能应该是会思考的,不是只会执行程序的机器。这就是说我可以教Siri或者小爱同学算数,或者把一本教科书丢给他,他就能帮我写练习册。我理想中的人工智能是一个高智商的婴儿,每个人都可以自己养成自己的AI,或者下载其他人制作好的记忆包,AI能够理解我的意思,会学习,我们可以对话等等。
我尝试着制作一个能达到我的目的的万分之一的软件。
人教版数学把qbasic选入课本,还并不做重点,而且靠qbasic明显不能完成一个复杂的任务。(在此强烈要求编程进入高考!)此前我自学过一段python,并且更重要的是有qpythonl,可以在手机上编程。所以最终我用的python2来写的代码。我的目标很简单,大概就是这样:
>>> DNA 是遗传物质 #我的输入
I see. #程序应答
>>> ? 是遗传物质
DNA
#然后我就可以告诉老师你要我们学的东西连我写的代码都会!(所以就别学生物了!)
很明显我并不能真正让我的手机明白DNA是什么,想让手机去学生物实在是任重而道远,这并不是一件我能做到的事情。所以我准备让手机学会找规律,不一定要理解,只要能填上就可以。为此我思考了很久,万幸我的成绩没有下滑。最终我发现我们老师的理念很符合我的思路:只要做的练习册够多,就没有什么难题!那么为什么做多了练习册就会答题呢?
我认为人脑在处理任何信息时都会进行一个归纳总结,就像数学讲的类比推理一样,先进行解析:“DNA 是遗传物质”的影像输入眼镜,通过一种关联机制来翻译成编码,或者说大脑能够处理的东西,然后对解析得到的几种东西进行组合,形成几种事物之间的联系。而做的练习册越多,建立的联系就越多,越准确。
例如:输入“DNA 是遗传物质” => 建立诸如“D-N”,“D-A”,“D-遗传”之类的联系 => 输入“DNA 是脱氧核糖核酸” => 建立如“D-A”,“D-脱氧”之类的联系 => 大量输入信息 => “D-N-A”之类的正确联系变多、记住。“D-物-质”之类错误的联系变少、遗忘。 => 学会了,考试满分。
也就是说人脑会对信息进行随机组合,然后找到联系最多的信息记录下来,把所有的信息一个一个关联成网,然后就得到了自然规律,这就是人类的智慧源泉。按照这种思路,我需要做一个输入器,将输入的字符变成编码。然后是解析:将一大串字符编码切成一段一段的东西(也就是对事物的认知),之后是归纳器:在一段一段的东西之间建立联系,并写入记忆。再然后输入问题,对问题解析,并在记忆中检索问题中出现的东西,在一大堆联系中找到联系最强的解并输出。
我还发现我只能用英语输入,原因有二:1.英语输入时自带空格,按空格切分句子很容易。2.我不会用ElementTree写入汉语编码。最后的成果:
#-*-coding:utf8;-*-
import os
import xml.etree.ElementTree as ET
import time
########## 数据初始化 ############
#创建数据库
print "Loading memory..."
try:#尝试打开数据库
opmem = open("memories.xml")
except IOError:#打开错误就创建数据库
opmem = ET.Element("root")
tree = ET.ElementTree(opmem)
tree.write("memories.xml",encoding="UTF-8")
#重载数据库,tree为数据库对象,root为根节点
tree = ET.parse("memories.xml")
root = tree.getroot()
#创建日志
print "Loading log..."
try:#尝试打开日志
oplog = open("log.txt")
except IOError:#日志错误则创建日志
oplog = open("log.txt","w")
oplog.write("It is a LOG.")
oplog.close()
#定义数据类
class Data(object):
"""
数据类用于对得到的数据进行操作:
self.refer为检索项
self.connect为关联项
self.weight为数据权
self.s为识别标志
self.save()为保存数据
"""
def __init__(self,refer,connect,weight):
self.refer = refer
self.connect = connect
self.weight = weight
self.s = self.refer + self.connect
def save(self,location):
"""
输入节点地址
保存为refer元素,connect元素,weight元素
"""
a = ET.SubElement(location,"refer")
a.text = self.refer
b = ET.SubElement(location,"connect")
b.text = self.connect
c = ET.SubElement(location,"weight")
c.text = str(self.weight)
#输入器
def inputsth():
global sth
sth = raw_input(">>> ")
return sth
#归纳器
def induct(spl):
"""
将获得的数据归纳入库
"""
datas = []#临时数据库
for i0 in spl:#遍历拆分结果
for i1 in spl:
if i0 != i1:#除去自我关联项
#计算两个数据的距离相关度
w = spl.index(i0)-spl.index(i1)
if abs(w) > 3:#距离超过3的数据不写入,防止句子过长导致运算量过大。
continue
#顺序时增加相关度
if w > 0:
w += 1
#存入临时数据库
datas.append(Data(i0,i1,4-abs(w)))
for i in datas:#遍历临时数据库
check = False#是否数据库已有此项
for a in root:#遍历data元素
c = ''#识别标志
for b in a:#获取识别标志
c += b.text
#判断此data元素和数据是否相同
if c.find(i.s) != -1:
#修改weight元素加一
#重复次数的权重
w = a.find("weight")
w.text=str(int(w.text)+1)
check = True
break
if check == False:#找不到相同数据时添加新data元素
put = ET.SubElement(root,"data")
put.attrib["time"] = str(time.time())
i.save(put)
#保存数据库
tree.write("memories.xml",encoding="UTF-8")
#类比器
def analogic(spl):
global output
#创建临时数据库
datas = []
try:
x = spl.index("?")
except ValueError:
return False
for i in spl:#遍历spl
y = spl.index(i)
if i != "?":#读取非?项目
dis = x-y
if dis > 0:
dis += 1
for child in root:#遍历数据库
#查询项目
if child.find("refer").text == i:
#查询结果写入datas
datas.append([child.find("connect").text,int(child.find("weight").text)-abs(dis)+4])
if datas == []:
return False
#整理库
ans = {}
for i in datas:
#将同类结果和并
try:
ans[i[0]] += i[1]
except KeyError:
ans.update({i[0]:i[1]})
#找出比重最大的结果
h = 0
for i in ans:
if ans[i] > h:
h = ans[i]
output = i
############# 主程序 ############
print "Welcome To Reasoning Robot ver 1.1"
print "#"*20+" HELP "+"#"*20
print "input nothing to exit"
print 'input "Clear memory" to rebuild memory'
print 'input "Clear log" to rebuild log'
print 'input "Delete" to delete all the datas'
print
print "for example:"
print ">>> hello world"
print "I see."
print ">>> hello ?"
print "world"
print
print "WARNING!!!!!!!!!"
print "the most important thing should be say three*3 times:"
print "Do Not Input Chinese!!!"*3
print "Do Not Input Chinese!!!"*3
print "Do Not Input Chinese!!!"*3
print "#"*46
print
while inputsth() != "":
#写入日志
open("log.txt","a").write("n["+time.asctime(time.localtime())+"]ninput = "+sth)
open("log.txt","a").close()
#输入解析
if sth == "Clear memory":#清除记忆
del root#清除内存
os.remove("memories.xml")#删除文件
#重建数据库
opmem = ET.Element("root")
tree = ET.ElementTree(opmem)
tree.write("memories.xml",encoding="UTF-8")
tree = ET.parse("memories.xml")
root = tree.getroot()
print "Done"
open("log.txt","a").write("noutput = Done")
open("log.txt","a").close()
continue
if sth == "Clear log":#清除日志
os.remove("log.txt")
oplog = open("log.txt","w")
oplog.write("It is a LOG.")
oplog.close()
print "Done"
continue
if sth == "Delete":#删除数据
os.remove("log.txt")
os.remove("memories.xml")
print "Done"
continue
spl = sth.split(" ")
#判断输入为陈述还是疑问
if sth.find("?") == -1:
#输入为陈述
if spl[0] == sth:
#只有一个输入,无法建立关联
#报错
output = "Sorry,I cannot understand it."
else:
#将输入归纳入库
induct(spl)
output = "I see."
else:
if spl == sth:
#只有一个输入,无法联想
#报错
output = "Sorry,I don't know."
else:
if analogic(spl) == False:
output = "Please give me more information"
#写入日志
open("log.txt","a").write("noutput = "+output)
open("log.txt","a").close()
print output
这个程序可以运行,但是有很多缺陷。
1.我希望在类比器运行时根据"?"的所在位置更加准确的填空。但是很无奈我被乱七八糟的数据搞蒙了,也没有过多精力去修改。
2.不能输入汉语,我给我的一个同学发过去,结果程序被他输入的汉语搞崩溃了。
3.没有遗忘功能,程序应该随着输入次数增多而忘掉关联度少的内容,在我输入一篇英语小说后,他运行的效率堪称龟速。
4.关联应该是一张网,而我这个只能两两关联,这也是运行效率低的原因之一。
5.一次只能输出一个结果,我原本还指望进行AI养成,让他跟我聊天呢。
由于我根本没系统的学过编程知识,程序会有很多问题,关于问题的见解也会有很多问题。我希望各路大佬指点,尤其是程序缺陷需要改进,并且我用pyinstaller打包了exe,但安卓端不支持,dosbox很遗憾的告诉我他运行不了,亟待学会打包apk的方法。另外由于CSDN对安卓端的极度不友好:我连修改昵称,发论坛都做不了。(再次强烈要求编程进入高考,这样就可以正大光明的用电脑了。)我准备在贴吧发一份,希望得到更多回复。
另:为什么无法修改帐号信息?
最后
以上就是野性啤酒为你收集整理的对AI的认识,求指点的全部内容,希望文章能够帮你解决对AI的认识,求指点所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复