Keras酱爱深度学习

1.让我们开始吧!Keras文本预处理

2019-01-09  本文已影响0人  海猫HaiMao

以处理一个kaggle上的数据集为例子

import numpy as np
import pandas as pd

from keras.preprocessing.text import Tokenizer
from keras.preprocessing.sequence import pad_sequences

def load_and_prec():
    # 利用pandas读入数据
    train_df = pd.read_csv("./input/train.csv")  
    test_df = pd.read_csv("./input/test.csv")
    print("Train shape : ", train_df.shape)
    print("Test shape : ", test_df.shape)

    # 填充缺失数据
    train_X = train_df["question_text"].fillna("_##_").values
    test_X = test_df["question_text"].fillna("_##_").values

    # 利用keras的对Tokenizer句子进行分词
    tokenizer = Tokenizer(num_words=max_features)         #构造Tokenizer
    tokenizer.fit_on_texts(list(train_X))                 #传入要用以训练的文本列表
    train_X = tokenizer.texts_to_sequences(train_X)       #将文本列表train_X转化为序列列表
    test_X = tokenizer.texts_to_sequences(test_X)

    # 将train_X转化为大小为(len(train_X), maxlen)的 2D numpy array。
    train_X = pad_sequences(train_X, maxlen=maxlen)
    test_X = pad_sequences(test_X, maxlen=maxlen)

    # 得到目标值(y轴)
    train_y = train_df['target'].values

    # 打乱数据
    np.random.seed(2018)
    trn_idx = np.random.permutation(len(train_X))

    train_X = train_X[trn_idx]
    train_y = train_y[trn_idx]

    return train_X, test_X, train_y, tokenizer.word_index

涉及到的keras工具


1.分词器Tokenizer

Tokenizer是一个用于向量化文本,或将文本转换为序列(即单词在字典中的下标构成的列表,从1算起)的类。

from keras.preprocessing.text import Tokenizer #需要引入的包
keras.preprocessing.text.Tokenizer(num_words=None, 
                                   filters='!"#$%&()*+,-./:;<=>?@[\]^_`{|}~ ', 
                                   lower=True, 
                                   split=' ', 
                                   char_level=False, 
                                   oov_token=None, 
                                   document_count=0)

构造参数

默认情况下,删除所有标点符号,将文本转换为空格分隔的单词序列(单词可能包含 ' 字符)。 这些序列然后被分割成标记列表。然后它们将被索引或向量化。
0 是不会被分配给任何单词的保留索引的哦。

类方法


2.填充序列pad_sequences

keras.preprocessing.sequence.pad_sequences(sequences, maxlen=None, dtype='int32',padding='pre', truncating='pre', value=0)

将长为nb_samples的序列(标量序列)转化为形如 (nb_samples,nb_timesteps)2D numpy array。如果提供了参数maxlen,nb_timesteps=maxlen,否则其值为最长序列的长度。其他短于该长度的序列都会在后部填充0以达到该长度。长于nb_timesteps的序列将会被截断,以使其匹配目标长度。padding和截断发生的位置分别取决于paddingtruncating.

参数

返回值

返回形如(nb_samples,nb_timesteps)的2D张量

上一篇 下一篇

猜你喜欢

热点阅读