type
status
date
slug
summary
tags
category
icon
password
Property
读取数据集
从H.G.Well的时光机器中加载文本。 这是一个相当小的语料库,只有30000多个单词。 下面的函数将数据集读取到由多条文本行组成的列表中,其中每条文本行都是一个字符串。 为简单起见,这里忽略了标点符号和字母大写
词元化
下面的
tokenize
函数将文本行列表(lines
)作为输入, 列表中的每个元素是一个文本序列(如一条文本行)。 每个文本序列又被拆分成一个词元列表,词元(token)是文本的基本单位。 最后,返回一个由词元列表组成的列表,其中的每个词元都是一个字符串(string)词表
词元的类型是字符串,而模型需要的输入是数字,因此这种类型不方便模型使用。
构建一个字典,通常也叫做词表(vocabulary), 用来将字符串类型的词元映射到从0开始的数字索引中。
先将训练集中的所有文档合并在一起,对它们的唯一词元进行统计, 得到的统计结果称之为语料(corpus)。 然后根据每个唯一词元的出现频率,为其分配一个数字索引。 很少出现的词元通常被移除,这可以降低复杂性。 另外,语料库中不存在或已删除的任何词元都将映射到一个特定的未知词元“<unk>”。 可以选择增加一个列表,用于保存那些被保留的词元, 例如:填充词元(“<pad>”); 序列开始词元(“<bos>”); 序列结束词元(“<eos>”)。
使用时光机器数据集作为语料库来构建词表,然后打印前几个高频词元及其索引
可以将每一条文本行转换成一个数字索引列表
整合所有功能
将所有功能打包到
load_corpus_time_machine
函数中, 该函数返回corpus
(词元索引列表)和vocab
(时光机器语料库的词表)。 在这里所做的改变是:- 为了简化训练,使用字符(而不是单词)实现文本词元化;
- 时光机器数据集中的每个文本行不一定是一个句子或一个段落,还可能是一个单词,因此返回的
corpus
仅处理为单个列表,而不是使用多词元列表构成的一个列表。