2021SC@SDUSC
前几周的源代码分析中,我们已经了解了drfact是如何对语料库进行预处理的,也了解了drfact模型算法的前几步都做了什么事情。但这一周的源代码分析我不会对具体的源代码进行分析,原因在于我在本周进行源代码分析,并回顾了过往的源代码分析内容时,注意到drfact模型对其他模型进行了一定程度的借鉴,这一点尤其体现在其核心源代码之中——调用了其他模型中编写好的函数。因此,体现在源代码之中的内容也就不再是仅仅只要关注到drfact这一个项目包即可,而是需要对整个OpenCSR项目的其他源代码也进行审视。
某种意义上,我对OpenCSR这个项目源代码的核心产生了一定程度错误的评判,这也意味着我需要花上更多的力气对这个项目进行更深层次的理解。因此,在我对源代码的整体结构以及各模型之间的相互勾连达成宏观层面的理解之前,我暂且不会对drfact模型中具体实现算法以及其它进行数据处理的代码中具体细微的详细描述进行进一步的分析与探究,而是转头分析各个模型之间可以互通的模块以及函数特点。这些可以互通的模块以及函数特点会一并体现在这篇博客之中。
一、DrFact模型与其对DrKit模型函数的调用情况
要分析诸多模型之间的关联,尤其是这些关联对我们的主要研究对象——DrFact模型究竟产生了怎样的影响,有着怎样的作用,首先便是从DrFact模型本身入手。而从DrFact模型本身的源代码中不难看出,与DrFact模型有着直接关联的便是DrKit模型,在DrFact模型的许多源文件中,均可见来自于DrKit模型的python源文件模块被导入,源代码中也调用了许多来源于DrKit模型的函数。其中包含有以下的源文件。
1.1 convert_dpr_index.py源文件
在convert_dpr_index.py源文件中,导入了来自于DrKit模型的search_utils.py,并且调用了其中的write_to_checkpoint()函数。这个源文件正是在上一周的代码分析中分析到的源文件,正是在这次源码分析的过程中,让我意识到了我对于这些源文件之间的关联并不是特别明晰,为此我中断了之前的单篇源文件分析的工作,转头去研究这些源文件之间的关联程度。
具体调用代码如下所示:
from language.labs.drkit import search_utils
with tf.device("/cpu:0"):
search_utils.write_to_checkpoint("fact_db_emb", fact_emb, tf.float32, output_index_path)
1.2 fact2fact_index.py源文件
在fact2fact_index.py源文件中,同样也导入了来自DrKit模型的search_utils.py,并且调用了其中的write_ragged_to_checkpoint()函数。从名字上来看,这个函数的功能应该是比较类似于在之前的convert_dpr_ind