Keras, NLP 预处理

简述

NLP 任务的常用处理就是 embedding, 就需要 text_2_sequence 这步预处理.
Keras 提供了一些常用的封装, 用于NLP类型的神经网络.
from keras.preprocessing import sequence, text,
tensorflow 的API里也有它们, 位置在 tf.keras.

Tokenizer

  • keras.preprocessing.text.Tokenizer
    类.Text tokenization utility class.
  • Tokenizer#__init__(self, num_words,...)
    构造函数, num_words 即限定的词典大小. 语料库中 word 的个数大于词典大小时, 怎么取舍呢? 答案是按词频. 并没有按tf-idf等思想来做.
  • Tokenizer#fit_on_texts(self, texts)
    Updates internal vocabulary based on a list of texts.
    此方法执行后, self.word_index字段存储的就是<word,index>, 编码思想是词频的降序排序. Note that index 0 is reserved, never assigned to an existing word.
  • Tokenizer#texts_to_sequences(self, texts)
    Transforms each text in texts in a sequence of integers, each integer is the index of a token in a dictionary.
  • Tokenizer#texts_to_matrix(self, texts, mode='binary')
    Convert a list of texts to a Numpy matrix. 有时间可以看源码这个matrix是怎么来的. 目前还不太清楚, mode虽然可以取 tf-idf, 但self.word_index字段依旧是按词频来保存的.

sequence

  • keras.preprocessing.sequence
    模块.
  • sequence.pad_sequences(sequences, maxlen=None, dtype='int32',padding='pre', truncating='pre', value=0.)
    方法. Pads each sequence to the same length. Any sequence longer than maxlen is truncated to maxlen. value: float, value to pad the sequences to the desired value.

pre-trained feature

如果我们已经有了一份 word2vec, 希望通过它来初始化 embedding layer 的 matrix, 该怎么做呢?
以下是我的想法.

  1. 使用 Tokenizer#fit_on_texts() 得到 Tokenizer#word_index 字段.
  2. 然后根据Tokenizer#word_index 字段分配的index, 和 pre-trained word2vec, 去初始化 embedding_matrix ,并酌情设置 embedding_layer 的 trainable=False/True.
  3. 即便 pre-trained word2vec 和 Tokenizer#word_index 两份词典没有完全对上也没关系, 使用全零初始化embedding_matrix=np.zeros(shape). 此时只要保证 pre-trained word2vec 中每个向量的每个分量都>0 即可.
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页