资讯 文档
技术能力
语音技术
文字识别
人脸与人体
图像技术
语言与知识
视频技术

4.Reader

背景

文心包含各种各样的Reader, 主要用于处理样本中各个域相互独立的场景,不同域有单独的数据类型(文本、数值、整型、浮点型)、单独的词表(vocabulary)等,可以根据不同域进行语义表示,如文本转id等操作,field_reader是实现这些操作的类,可以通过data_set_reader管理、整合不同的field_reader。

域配置

  • 域(field):同一个样本中,多个相互独立的特征与标签都可以是单独的域。在textone中,不同域之间是相互独立的,每个域有单独的数据类型(文本、数值、整型、浮点型),单独的数据预处理过程,如tokenizer、词表等。
  • 以文本分类任务为例,其数据如下所示:

    房间 太 小 。 其他 的 都 一般          0
  • 在这个例子中,“房间 太 小 。 其他 的 都 一般”这段文本属于文本域,而“0”作为标签属于标签域。
  • 域和域之间使用\t进行分隔。

Reader字段说明

  • reader配置部分的相关字段说明如下表所示:
字段 说明
DataSetReader(出现在匹配任务和自定义任务中) 数据集读取器,将样本中的数据组装成一个py_reader, 向外提供一个统一的接口。其核心内容是读取明文文件后转换成id,并按照py_reader需要的tensor格式进行输入,最后通过调用run方法让整个循环运行起来包括BasicDataSetReader(通用数据集读取器,是大部分任务的默认选项)和ErnieClassificationDataSetReader(使用ernie的FC匹配任务专用数据集读取器)两种
name 该域的名称,例如text_a、text_b和label等
reader_type 分域数据处理器的类型,不同域对应不同的数据处理器,各任务常用处理器在下述章节详细阐述
data_type 该域内数据的类型,例如string(字符串型)、int(基本整型,注意textone仅支持int64型)和float(浮点型)等
need_convert 是否需要词表转id,string类型的数据(例如文本)需要通过词表转化为id,而int类型的数据(例如标签)则不需要
vocab_path 在词表目录dict下的词表名称,例如文本域对应的词表vocab.txt,或者序列标注任务中标签域对应的label_map.txt
max_seq_len 域内数据样本的最长长度,以字符为单位,默认为512
truncation_type 截断策略,分为常规截断策略(从头开始到最大长度截断,通用)、去尾截断策略(从头开始到max_len-1的位置截断,末尾补上最后一个id,常用于语言模型)和头尾保留截断策略(保留头和尾两个位置,然后按keep_head方式截断,常用于语言模型)三种。默认为常规截断策略。
padding id 填充策略,用于处理不同长度的句子,默认为0,即将数据转换为id后在末尾填充0至设定的最大序列长度
tokenizer 分词处理器,作用于文本域,根据设定按某个分隔符(如空格)将数据分成一个list
num_labels 多标签分类中的标签数量
  • 其中,tokenizer部分的相关字段说明如下表所示:
字段 说明
type 分词器的类型,分为CustomTokenizer(通用的tokenizer,将用户自己分好词的明文按某个分隔符分成一个list)、WSSPTokenizer和FullTokenizer三种,各任务常用分词器在下述章节详细描述
split_char 词与词之间的分隔符,默认为空格
unk_token 未知词的标记,即不在词表中的词,默认标记为[UNK]

各任务常用的分域reader和tokenizer说明

分类任务

分域reader

  • 文本分类任务常用的分域reader和其基本介绍如下所示:
名称 简介 备注
CustomTextFieldReader(非ernie文本域默认) 通用非ernie文本(string)类型的分域reader 文本类型的数据会自动添加padding和mask,并返回length
ScalarFieldReader(标签域默认) 单个标量的分域reader,直接返回数据本身(数据可以是单个数字,也可以是单个的明文字符,明文通过配置的vocab_path去进行转换) shape= [batch_size,1]
ErnieTextFieldReader(ernie文本域默认) 使用ernie的文本类型的分域reader,用户不需要自己分词 自动添加padding,mask,position,task,sentence,并返回length
ScalarArrayFieldReader(可选) 标量数组的分域reader,直接返回数据本身(数据可以是明文字符串,明文配置的vocab_path去进行转换)和数据长度,以空格分隔。 数据是经过padding处理的。
TextFieldReader(可选) 最基本的文本(text)类型的分域reader 不需要embedding,不需要mask,只返回原始src_id(添加了padding)和length
MultiLabelFieldReader(多标签任务时标签域默认) 多标签分类任务中标签域的专用reader
CategoricalFieldReader(可选) 通用文本(string)类型的field_reader, 不进行分词,直接通过词表将明文转成id。选择该field_reader时将不会配置tokenizer 文本处理规则是,文本类型的数据会自动添加padding和mask,并返回length. 比较特殊的一点是,这个field_reader中的length全是1
MultiLabelFieldReader(可选) 多标签分类的reader 数值类型的标签数据

tokenizer

  • 文本分类任务常用的tokenizer和其基本介绍如下所示:
名称 简介
CustomTokenizer 通用的tokenizer,用户自己分好词的明文,该tokenizer只负责按某个分隔符(如空格)分成一个list
FullTokenizer ERNIE除tiny外专用tokenizer,按照字粒度进行切分
WSSPTokenizer ERNIE Tiny专用tokenizer,使用SentencePiece切词

匹配任务

分域reader

  • 文本匹配任务常用的分域reader和其基本介绍如下所示:
名称 简介 备注
CustomTextFieldReader(非ernie文本域默认) 通用非ernie文本(string)类型的分域reader 文本类型的数据会自动添加padding和mask,并返回length
ErnieClassificationFieldReader(基于ernie的FC匹配模型默认) 基于ernie的FC匹配模型专用分域reader,包含双文本域的拼接,用户不需要自己分词 自动添加padding,mask,position,task,sentence,并返回length
ScalarFieldReader(标签域默认) 单个标量的分域reader,直接返回数据本身(数据可以是单个数字,也可以是单个的明文字符,明文通过配置的vocab_path去进行转换) shape= [batch_size,1]
ErnieTextFieldReader(除FC模型外,ernie文本域默认) 使用ernie的文本类型的field_reader,用户不需要自己分词 自动添加padding,mask,position,task,sentence,并返回length
ScalarArrayFieldReader(可选) 标量数组的分域reader,直接返回数据本身(数据可以是明文字符串,明文配置的vocab_path去进行转换)和数据长度,以空格分隔。 数据是经过padding处理的。
TextFieldReader(可选) 最基本的文本(text)类型的分域reader 不需要embedding,不需要mask,只返回原始src_id(添加了padding)和length

tokenizer

  • 文本匹配任务常用的tokenizer和其基本介绍如下所示:
名称 简介
CustomTokenizer 通用的tokenizer,用户自己分好词的明文,该tokenizer只负责按某个分隔符(如空格)分成一个list
FullTokenizer ERNIE除tiny外专用tokenizer,按照字粒度进行切分
WSSPTokenizer ERNIE Tiny专用tokenizer,使用SentencePiece切词

序列标注

分域reader

  • 序列标注任务常用的分域reader和其基本介绍如下所示:
名称 简介 备注
CustomTextFieldReader(非ernie文本域默认) 通用非ernie文本(string)类型的分域reader 文本类型的数据会自动添加padding和mask,并返回length
ErnieSeqlabelLabelFieldReader(ernie文本域默认) 基于ernie的序列标注专用分域reader,基本规则与CustomTextFieldReader相同,自动添加padding和mask,并返回length 不同之处在于ErnieSeqlabelLabelFieldReader会在序列首尾分别添加UNK_ID来占位,以保证和ernie序列化过程中的[CLS]和[SEP]对应
ScalarFieldReader(可选) 单个标量的分域reader,直接返回数据本身(数据可以是单个数字,也可以是单个的明文字符,明文通过配置的vocab_path去进行转换) shape= [batch_size,1]
ScalarArrayFieldReader(可选) 标量数组的分域reader,直接返回数据本身(数据可以是明文字符串,明文配置的vocab_path去进行转换)和数据长度,以空格分隔。 数据是经过padding处理的。
TextFieldReader(可选) 最基本的文本(text)类型的分域reader 不需要embedding,不需要mask,只返回原始src_id(添加了padding)和length
ErnieTextFieldReader(可选) 使用ernie的文本类型的field_reader,用户不需要自己分词 自动添加padding,mask,position,task,sentence,并返回length

tokenizer

  • 序列标注任务常用的tokenizer和其基本介绍如下所示:
名称 简介
CustomTokenizer 通用的tokenizer,用户自己分好词的明文,该tokenizer只负责按某个分隔符(如空格)分成一个list
FullTokenizer ERNIE除tiny外专用tokenizer,按照字粒度进行切分
WSSPTokenizer ERNIE Tiny专用tokenizer,使用SentencePiece切词

生成任务(Seq2Seq+Attention)

分域reader

  • 生成任务(Seq2Seq+Attention)常用的分域reader和其基本介绍如下所示:
名称 简介 备注
CustomTextFieldReader(非ernie文本域默认) 通用非ernie文本(string)类型的分域reader 文本类型的数据会自动添加padding和mask,并返回length
GenerateLabelFieldReader(生成任务seq2seq模型标签域默认) seq2seq模型的标签域的专用分域reader 自动添加padding,mask,position,task,sentence,并返回length
ScalarFieldReader(可选) 单个标量的分域reader,直接返回数据本身(数据可以是单个数字,也可以是单个的明文字符,明文通过配置的vocab_path去进行转换) shape= [batch_size,1]
ScalarArrayFieldReader(可选) 标量数组的分域reader,直接返回数据本身(数据可以是明文字符串,明文配置的vocab_path去进行转换)和数据长度,以空格分隔。 数据是经过padding处理的。
TextFieldReader(可选) 最基本的文本(text)类型的分域reader 不需要embedding,不需要mask,只返回原始src_id(添加了padding)和length

tokenizer

  • 生成任务(Seq2Seq+Attention)常用的tokenizer和其基本介绍如下所示:
名称 简介
CustomTokenizer 通用的tokenizer,用户自己分好词的明文,该tokenizer只负责按某个分隔符(如空格)分成一个list

数据参数配置

字段说明

  • 数据参数配置部分的相关字段说明如下表所示:
字段 说明
shuffle 是否打乱训练数据,默认为是。打乱训练数据后,模型在训练时不易陷入局部最优,能够更容易达到收敛。
batchsize 每批处理的样本的个数,非ernie默认为16,ernie默认为8注:只支持正整数,ERNIE任务建议不超过8,非Ernie任务酌情调整。
epoch 所有训练数据的训练次数,默认为1注:只支持正整数,建议值不超过10

进阶使用

文心中提供了NLP领域比较通用的Reader,如果用户需要针对自己的业务场景进行自定义优化使用的话,请参考详细的接口设计与自定义DataSeteaderFieldReader

上一篇
3.Task
下一篇
5.Model