Page 235 - 《软件学报》2026年第5期
P. 235

2114                                                       软件学报  2026  年第  37  卷第  5  期


                  3.1.1    数据获取和预处理
                    在本文中, 使用软件的配置文档作为构建             CFRG  的数据源. 目前主流开源软件大都提供从           Web 端访问软件配置
                 文档的入口, 有的软件会提供官方文档的             pdf 版本以供下载. 我们使用      Python  语言编写脚本工具从官方网站获取
                 配置文档数据, 针对不同软件的官方网站编写适配器, 爬取配置文档并统一转化为{配置: 描述文本}的键值对形式.
                    获取的配置文档仍需要预处理来用于进一步分析. 本文借助                      LLM, 通过  3  方面的预处理来提高数据质量:
                 1) 主语补充, 这一步补充文档语料中缺失的配置主语, 将配置项名称作为主语显式地补充在语句中, 如图                               7  所示,
                 在配置项   enable_memory_limit 的描述中, Specifies 缺少  enable_memory_limit 作为主语, 此处引导  LLM  将主语补
                 充完整; 2) 共指消解    (coreference resolution), 该步将文本中不同的词语或短语, 识别为它们所指的同一个对象或实
                 体, 例如在图   7  中, enable_memory_limit 被  it 和  this parameter 指代, 经过替换后, 新的语句如图  7  右图蓝色部分所
                 示; 3) 配置标注, 这一步将语句中的配置项使用特定标识符标识出来, 这样便于引导大模型识别语料中的配置项关
                 键词, 提升大模型处理语料的效果, 如图           7  所示, enable_memory_limit 被使用<<>> 标注, 便于后续大模型将<<>>
                 中的内容识别为配置项关键词.

                    enable_memory_limit       1. 主语补充           enable_memory_limit
                                                         3. 配置标注
                                           ···
                                                                                  ···

                                                                  2. 共指消解
                                                  图 7 文档数据预处理示例

                  3.1.2    配置-功能关联图初始化
                    LLM-Extractor 首先遍历每个配置项的文本描述, 从中分析配置项基本属性信息并抽取软件功能实体, 构建
                 CRFG  的骨架, 完成关联图初始化.
                    (1) 类型抽取和合法取值抽取
                    LLM-Extractor 首先引导  LLM  分析文本描述并判断配置项的类型, 而后根据不同的类型抽取配置项的合法取
                 值. 本文结合已有工作的配置分类方法以及第               2.2.1  节中经验研究的结果, 将配置分为        4  类: 布尔、数值、枚举和
                 复杂字符串, 本文重点考虑前         3  种类型. 配置项类别以及对应的合法值抽取提示词如表                3  所示.

                                            表 3 配置项分类和对应合法值抽取提示词

                  配置项类别                  举例                                合法值抽取提示词
                                                            If {config} belongs to Boolean type, please extract the value set for
                   Boolean       enable_double_write: on/off
                                                           True as well as for False. Ex: True: [on, enabled] False: [off, disabled]
                                                           If {config} belongs to Numerical type, please extract the legal value
                   Numerical    bgwriter_lru_maxpages: 0–1 000
                                                                      range for {config}. Ex: int(1, 1 000)
                                                            If {config} belongs to Enum type, please extract the legal value for
                    Enum     wal_sync_method: open_datasync/fsync…
                                                           {config}. Ex: [open_datasync, fsync, fsync_writethrough, open_sync]
                 ComplexString  krb_srvname: {customed name}                    -

                    (2) 软件功能和状态实体抽取
                    LLM-Extractor 引导  LLM  分析文本抽取文本中存在的软件功能实体和状态实体. LLM-Extractor 逐句输入配
                                           e Cond LeadTo AtStatus(e F ,e FS ) 逻辑关系的自然语言表述, 如果存在, 则从文本中抽
                 置文档, 判断语句中是否存在满足
                 取出对应的    e Cond 、e F 、e FS , 并输出关联关系, 最后将解析出的关联关系补充到        CFRG  中.
                    由于使用    LLM  提取软件功能实体时存在稳定性较差、依赖文档本身写作风格的问题, 本文对提取出的                            E F  集
                 合进行实体消歧. 本文使用预训练的文本嵌入模型                bge-large-en  计算不同  E F  实体的向量表示, 随后通过计算向量
                 表示之间的相似度判断实体相似度            s, 若  s 高于设定的相似度阈值, 则认为该两个实体指向同一个               E F . 完成实体消
   230   231   232   233   234   235   236   237   238   239   240