1. 序列预处理
1.1. 填充序列pad_sequences
将长为 nb_samples 的序列(标量序列)转化为形如 (nb_samples,nb_timesteps) 2D numpy array。如果提供了参数 maxlen , nb_timesteps=maxlen ,否则其值为最长序列的长度。其他短于该长度的序列都会在后部填充0以达到该长度。
keras.preprocessing.sequence.pad_sequences(sequences, maxlen=None, dtype='int32')
- sequences:浮点数或整数构成的两层嵌套列表
- maxlen: None或整数,为序列的最大长度。大于此长度的序列将被截短,小于此长度的序列将在后部填0.
- dtype:返回的numpy array的数据类型
- padding: ‘pre’或‘post’,确定当需要补0时,在序列的起始还是结尾补
- truncating: ‘pre’或‘post’,确定当需要截断序列时,从起始还是结尾截断
- value:浮点数,此值将在填充时代替默认的填充值0
1.2. 跳字skipgrams
skipgrams将一个词向量下标的序列转化为下面的一对tuple:对于正样本,转化为( word, word in the same window)
对于负样本,转化为( word, random word from the vocabulary)
keras.preprocessing.sequence.skipgrams(sequence, vocabulary_size, window_size=4, negative_samples=1., shuffle=True, categorical=False, sampling_table=None)
- sequence:下标的列表,如果使用sampling_tabel,则某个词的下标应该为它在数据库中的顺序。(从1开始)
- vocabulary_size:整数,字典大小
- window_size:整数,正样本对之间的最大距离
- negative_samples:大于0的浮点数,等于0代表没有负样本,等于1代表负样本与正样本数目相同,以此类推(即负样本的数目是正样本的 negative_samples 倍)
- shuffle:布尔值,确定是否随机打乱样本
- categorical:布尔值,确定是否要使得返回的标签具有确定类别
- sampling_table:形如 (vocabulary_size,) 的numpy array,其中 sampling_table[i] 代表没有负样本或随机负样本。等于1为与正样本的数目相同 采样到该下标为i的单词的概率(假定该单词是数据库中第i常见的单词)
函数的输出是一个 (couples,labels) 的元组,其中:
couples 是一个长为2的整数列表: [word_index,other_word_i