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