# workflow4threeman **Repository Path**: ChenxiChen24/workflow4threeman ## Basic Information - **Project Name**: workflow4threeman - **Description**: workflow + nlp - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-08-23 - **Last Updated**: 2021-09-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # workflow架构 ## 任务范围 实现后台管理模块提供的一整个pipeline的计算,包括: 1. 数据获取,根据划定的范围,从数据库中获取相应的数据,并打包成图、文本两类预先设计的特定数据类型,并以这两种数据类型进行下一步的计算; 2. 数据预处理:针对图类型数据进行减边,并进行图的构建;针对文本类型数据进行分词、去重、去标点等(参考obsei) 3. 数据分析(算法):分为文本分析和图分析两部分,每部分包含不同的算法,输入输出格式均为之前设计好的特定类型,每种算法作为一个独立文件。 4. 数据输出及存储:将数据依照工作流给定的要求存入数据库/传递给后台管理模块,由后台管理模块向前端传递; ## 基本架构 ### 数据获取 TODO: + 数据获取接口尚未定义,需要进一步确定具体的数据库设计,所需字段等 + 图的数据格式尚未定义 #### 文本数据格式:TextPayLoad 该格式为文本处理模块输入输出的格式,包含四个属性: 1. raw_text: str,原文本,在进行预处理后可置为None 2. process_text:list,预处理后的文本;文本分析模块返回的结果(如增加了标签),根据state判断 3. state:str,表示状态,维护一个静态文件 4. success: bool, 表示处理是否成功 ### 数据预处理 TODO: 图的剪边;构建图的部分(李丰志已有方案,需结合数据进一步沟通) #### 文本部分 通过TextPreprocess模块进行处理,输入输出均为TextPayLoad格式 1. 处理流程在text_cleaner.py中由具体算法进行指定,如BERT的分词应加入'cls','sep'等分割词(暂定) 2. 处理函数由text_clean_functions.py中指定,每个处理函数继承TextCleaningFunction基类,实现execute的抽象函数。 3. 文本预处理函数包括:(许慧蓉部分) + ### 数据分析/算法 该部分包含两个模块,即TextAnalyzer和GraphAnalyzer,每个模块中通过base_analyzer和其他算法的继承关系来构造: #### 文本部分 1. base_analyzer.py文件,该文件包含两部分,即BaseAnalyzerConfig和BaseAnalyzer。Config中定义每个分析算法共有的设置,如TYPE;Analyzer部分定义每个算法共同的抽象执行函数analyze。 2. lda.py:以LDA为例说明模块的组织方式,而后部分只描述算法的功能,不再具体描述结构,算法结构在算法文档中具体说明。LdaAnalyzerConfig继承BaseAnalyzerConfig,TYPE为LDA,增加一项属性algorithm,是根据工作流预先设定的算法名称。LdaAnalyzer继承BaseAnalyzer,初始化时需传入一个LdaAnalyzerConfig实例,其analyze函数中根据config的算法名称选择执行某一算法。 3. xxx ### 数据输出及存储 TODO: 根据数据库的设计具体定义存储内容和向后台的返回结果 # 算法 ## 文本部分 #### LDA 在lda.py中定义,分为jGibbsLDA和gensim两种算法,默认算法为jGibbsLDA,通过get_default_params计算默认最优参数 + get_default_params:计算默认最优参数 + 输入: + 输出: + analyze:分析函数,重写base中的抽象函数,具体执行LDA的计算 + 输入: + 执行:根据config中算法选择 + 输出: ##### jGibbsLDA 基于Java,以命令行形式执行,将输入的数据重新组织后写入缓存文件,通过命令行调用文件计算。具体格式和扩展使用方法见:https://cloud.tencent.com/developer/article/1194663,http://jgibblda.sourceforge.net/#2._How_to_Use_JGibbLDA_from_Command_lin 命令行形式如下: ```shell java [-mx512M] -cp bin:lib/args4j-2.0.6.jar jgibblda.LDA -est [-alpha ] [-beta ] [-ntopics ] [-niters ] [-savestep ] [-twords ] –dir -dfile ``` - `-est`:从头开始推断 LDA 模型 - `-alpha `:alpha 的值,LDA 的超参数。默认值为 `50/K`(K 是 topics 个数) - `-beta `:beta 的值,同样是 LDA 的超参数。默认值为 0.1 - `-ntopics `:topics 个数。默认值为100,需要根据输入数据集来定 - `-niters `:吉布斯采样迭代次数。默认值为 2000 - `-savestep `:LDA 模型在哪一步(以吉布斯采样迭代为单位)保存到磁盘。默认值为200 - `-twords `:每个 topic 最匹配的词个数。默认值为0。如果将该值设为大于0,比如 20,JGibbLDA 将在每次将模型保存到磁盘的时候都会打印出每个 topic 最匹配的 20 个词 - `-dir `:训练数据文件所在目录 - `-dfile `:训练数据文件名 ##### Gensim