Page 112 - 《软件学报》2026年第2期
P. 112

丁嵘 等: 基于领域知识图谱的框架间          AI 源码自动迁移                                            591


                 方法包括正则表达式匹配、字符串操作和规则过滤等, 旨在对爬取的文本数据按规则进行分割、检索和分类, 以
                 获取所需信息. 其次对文本中的重复数据、空值和异常值等进行删除、填充等操作, 保证数据的有效性和一致性.
                 然后按规则汇集信息, 将不同途径、不同结构的信息格式化后统一存储至结构清晰的                            JSON  文件中.
                    在得到上述知识后, 就需要将其存入到图数据库中. 本文采取自顶向下的知识图谱构建方法来构建领域知识
                 图谱, 首先确定知识图谱的顶层概念作为图谱的基础结构, 然后针对顶层概念定义相关的关系和属性, 然后识别出
                 与顶层概念相关的子概念, 并建立它们之间的层次结构关系. 具体来说, 本文将框架作为领域知识图谱的顶层节
                 点, 并继续向下依次细分为类节点、算子节点和参数节点等, 最后建立起上述节点间的关系. 本文选用                               Neo4j 来存
                 储上述定义的算子知识, 依据设计的数据模式生成                Cypher 语句, 并编写自动化脚本, 通过爬虫并解析提取出的算
                 子信息, 将算子知识存入       Neo4j 图数据库中形成领域知识图谱. 该图谱并将知识集成为领域知识图谱供抽象语法
                 树改写模块使用, 领域知识图谱构建模块的框架如图                 2  所示.

                                                  领域知识图谱构建模块
                                                                 JSON           Cypher
                                       爬虫  框架及算子信息      数据清洗      文件   Cypher    语句
                                       程序               元素解析           语句生               ਵთᆩ്๭௶
                                                                       成程序
                      框架内算子以及                           数据过滤
                       框架间关系的       领域知识图谱
                        HTML 文档      设计文档               数据重组

                                              图 2 领域知识图谱构建模块的框架

                    由于深度学习框架更新速度较快, 因此本文在第               1 次执行深度学习框架知识抽取脚本来抽取全量基本数据后, 会
                 通过程序定时检查各个深度学习框架的版本更新情况, 判断是否需要爬取新的数据. 如果程序判断远程深度学习框
                 架知识与本地知识图谱知识存在差异, 则可以启动脚本来抽取新的知识并再次构建领域知识图谱供迁移程序使用.
                  4.2   抽象语法树解析模块
                    由第  2  节可知, 为了减少源框架与目标框架模型代码迁移的复杂性, 本文将跳脱代码层面的直接转换. 对于构
                 造深度学习模型方式较为一致且编程范式相似的                 PyTorch、PaddlePaddle 和  MindSpore 框架, 本文将使用抽象语
                 法树解析代码来进行迁移工作.
                    对于一棵抽象语法树  ,                    T = t1,t2,...,tn, 抽象语法树  T  有且只有一个根节点, 用   root(t) 表示.
                                     T T  是节点的集合
                                                              t
                 对于   T  中每个节点   t ∈ T , 都有一个父节点   p ∈ (T ∪∅), 节点   的父节点用   parent(t) 表示, 根节点  root(t) 的父节点为
                                                            children(t) 表示, 常见的  Python  抽象语法树中的节点及其
                 ∅. 每个节点   t ∈ T  都有一个可以为空的子节点序列, 用
                 说明如表   3  所示.

                                            表 3 常见的    Python  抽象语法树节点说明

                         Python AST节点                                    说明
                            Module                      代表整个Python模块, 包含该模块的所有语句和定义
                          FunctionDef                      函数定义, 包含函数名、参数、函数体等信息
                           ClassDef                          类定义, 包含类名、基类、类体等信息
                            Assign                             赋值语句, 包含被赋值的对象和值
                           For/While                                   循环语句
                              If                                       条件语句
                        Import/ImportFrom              导入模块, 包含被导入的模块名、导入的名称和导入方式
                             Call                   函数调用, 包含函数名、关键字参数列表、位置参数列表等信息
                            Constant                           常量, 包含常量的值和类型信息
                            Attribute              属性访问, 包含访问属性的对象或模块的名称以及访问的属性名称
                            Name                                     变量或函数名
   107   108   109   110   111   112   113   114   115   116   117