我正在努力建立一种知识管理系统,以小的方式试图模仿人类的学习能力。它处理它已经知道的新概念实例,它允许它进一步改进/专门化已知概念的知识库。它还可以学习以前从未遇到过的新概念。当遇到新概念时,它会与现有概念建立关系。我认为编程语言本身面向对象的范例本身可以是知识表示的理想数据模型。例如, classes 是具有描述概念的属性的概念(事物),以及描述它(概念/事物)如何交互的方法。因此,汽车是一般概念,因此被建模为类,而我的特定汽车将是该汽车的对象实例。它显然受益于面向对象语言在处理类和对象时提供的继承和上/下导航能力。鉴于Python的强大动态特性,我计划将其用于此目的。
这种学习系统的一些含义是,
由于系统已经了解了它已经知道的概念(类和对象)的新内容,除了更改属性值之外,它还必须通过添加/删除属性(包括方法)来动态修改类的定义,因此类的静态定义是不够的。方法特别棘手,因为有与之关联的代码。
在遇到新概念时,必须动态创建新类。
每次系统启动时,应该从加载到系统中的所有先验知识开始,原因很明显。在这种情况下,它表示所有知识类(包括动态创建的)的所有“当前”版本(包括任何添加/删除或更改的属性/值/方法),即需要相当全面的序列化/持久性机制。
在会话结束时(拆除),它必须查看“所有”知识类和对象并将它们序列化。有些可能已经新定义,有些可能已经改变了它们的属性甚至方法(代码)。需要一种方法来获取所有这些对象/类,它们最新的定义并将它们序列化以保持持久性。
下次系统运行时,在初始化期间,它需要读取并执行所有类定义并恢复对象实例的状态。
我环顾四周,发现了零碎的解决方案,如pickle,json,ZODB,检查模块等,但似乎没有人能够序列化动态类,包括方法的代码。
此处提出类似问题Python: saving and loading a class definition 但大多数受访者认为没有任何令人信服的用例。
任何线索都会非常感激。