2.文心代码结构
更新时间:2021-03-30
一级目录
├── README.md
├── requirements.txt ## wenxin的其他依赖列表
├── env.sh ## 环境变量配置文档,待定(在docker模式下无env.sh)
├── tasks ## 各任务入口脚本,通过调用json、自定义wenxin预置模块实现模型练。
├── wenxin ## wenxin核心代码。
└── version.txt ## wenxin版本信息
wenxin目录
-
核心目录如下:
common:各模块通用部分,包含注册模块、剪切规则、padding规则、超长字符串截断规则及其常量等设置。
data:核心数据处理模块,包括数据读取、转id等内容。
data.data_set_reader:数据从文件中读取的过程,并在其中配置不同域(field)的处理方式。
data.field_reader:针对文本域、数值域等不同的数据进行处理。
data.tokenizer:将文本字符串转换成token列表的过程。
metrics:评估函数。
models:组建网络主干部分,包括前向网络、优化器、metrics等四部分。
modules: 子网络部分,一些公用的网络片段,如语义表示部分。
training:训练主体部分,封装program、load、save等过程。
inference:预测主体部分,封装program、load等过程。
utils:辅助工具,包括参数初始化等。
├── __init__.py ├── common ## 各模块通用部分 │ ├── __init__.py │ ├── args.py ## 命令行参数解析 │ ├── controler.so ## 核心调度模块 │ ├── infer_parser_api.py ## 各个task的预测结果解析接口 │ ├── inference_builder.py ## 预测实例构造器 │ ├── model_manager.py ## 模型管理模块,主要用来按一些指标或者规则去选择保存哪些模型 │ ├── register.py ## 实现注册机制的模块 │ └── rule.py ## 文心中用到的常量设置、裁切规则、padding规则等规则设置 ├── data ## 数据处理相关的内容都在data目录下 │ ├── __init__.py │ ├── data_aug │ │ ├── README.md │ ├── data_cleaning │ │ ├── file_encoding.py ## 文件格式转换 │ │ ├── input.txt ## 预置的测试数据 │ ├── data_set.py ## 用来存放训练集、测试集、验证集、预测集对应Reader实例的类 │ ├── data_set_reader │ │ ├── __init__.py │ │ ├── base_dataset_reader.py ## 基类,读文件、转id、组batch │ │ ├── basic_dataset_reader.py ## 一个基础的data_set_reader,实现了文件读取,id序列化,token embedding化等基本操作 │ │ ├── ernie_classification_dataset_reader.py ## ERNIE句对分类和匹配任务用到的的reader,特点是将两个句子的id拼接在一起,以sep分隔,与ErnieClassificationFieldReader配合使用。 │ │ └── ... │ ├── field.py ## field(域)的基本定义 │ ├── field_reader │ │ ├── __init__.py │ │ ├── base_field_reader.py ## 基类 │ │ ├── custom_text_field_reader.py ## 通用文本reader basic + mask(用于区分padding), 非ernie网络通用 │ │ ├── ernie_classification_field_reader.py ## ernie句对分类reader │ │ ├── ernie_seqlabel_label_field_reader.py ## ernie序列标注标签域reader │ │ ├── ernie_text_field_reader.py ## ernie双塔文本域reader │ │ ├── scalar_array_field_reader.py ## 数值类型数组reader,需要指定整型还是浮点型,支持转为id的文本数据 │ │ ├── scalar_field_reader.py ## 数值类型标量reader,需要指定整型还是浮点型 │ │ └── ... │ ├── reader_config.py │ ├── tokenizer │ │ ├── __init__.py │ │ ├── tokenizer.py ## 基类 │ │ ├── custom_tokenizer.py ## 分词用tokenizer, 对于已用空格(或其他自定义分隔符)分好词的文本 │ │ ├── lac_tokenizer.py ## 使用LAC的分词器 │ │ ├── mrc_tokenizer.py ## 阅读理解任务的分词器 │ │ ├── tokenization_spm.py ## 该文件貌似没人用?待确认是否要删除 │ │ ├── tokenization_utils.py ## 一些通用工具,如编码格式转换等。 │ │ └── tokenization_wp.py ## ERNIE任务的分词器,basic, sentence_piece, word_piece的总集,按字粒度进行切分 │ │ ├── wordseg ## LAC切词模块 │ │ ├── __init__.py │ │ └── test_seg ## 预置的demo数据 │ │ └── wordseg_lac.py │ │ ├── build_voc.py ## 根据已切好词的数据集进行词频统计,生成词表文件。 │ ├── util_helper.py ## data模块的一些通用方法,比如组batch,padding数据等。 │ └── vocabulary.py ## 词表模块 │ ├── metrics ## 预置评估函数 │ ├── __init__.py │ ├── glue_eval.py │ ├── metrics.py ## 常用评估指标计算:acc、recall、precision、f1、ppl等 │ ├── mrc_eval.py │ └── ... ├── models ## 预置网络主干部分,包括前向网络、优化器和metrics。预置网络持续更新中 │ ├── __init__.py │ ├── model.py ## 基类 │ ├── cnn_classification.py ## 非ERNIE的CNN分类网络 │ ├── ernie_cnn_classification.py ## 基于ERNIE的CNN分类网络 │ ├── bow_matching_pairwise.py │ ├── crf_sequence_label.py │ ├── ernie_multil_task_language_model.py │ ├── generate_language_model.py │ └── ... ├── modules ## 子网络部分,一些公用的网络片段,如语义表示等 │ ├── __init__.py │ ├── ernie.py │ ├── token_embedding ## 语义表示部分 │ │ ├── __init__.py │ │ ├── base_token_embedding.py │ │ ├── custom_fluid_embedding.py │ │ ├── custom_token_embedding.py │ │ └── ernie_embedding.py │ └── transformer_encoder.py ├── inference │ ├── __init__.py │ └── inference.py ├── training ## 训练主体部分,封装program、load、save等过程 │ ├── __init__.py │ ├── custom_trainer.py ## 能够覆盖大部分训练和评估的通用流程,如果对自定义训练评估要求不高,可以直接继承该类 │ ├── mrc_trainer.py ## 针对阅读理解任务的训练流程 │ └── trainer_config.py ## 训练流程相关参数 └── utils ## 辅助工具类 ├── __init__.py ├── args.py ├── init.py ├── log.py ├── multi_process_eval.py ├── params.py ├── stream.py ├── util_helper.py └── ...
tasks目录
- tasks目录为各任务入口,其结构及其说明如下所示:
├── __init__.py
├── text_classification ## 文本分类任务
├── text_matching ## 文本匹配任务
├── sequence_labeling ## 序列标注任务
├── mrc ## 阅读理解
└── model_files ## 预训练模型相关文件
├── config ## 各模型参数配置
│ ├── ernie_2.0_base_ch_config.json
│ └── ernie_2.0_large_ch_config.json
├── dict ## 各模型词典
│ ├── vocab_ernie_2.0_base_ch.txt
│ └── vocab_ernie_2.0_large_ch.txt
├── download_ernie_2.0_base_ch.sh
└── download_ernie_2.0_large_ch.sh