python函数——Keras分词器Tokenizer


python函数 系列目录:python函数——目录


0. 前言

Tokenizer是一个用于向量化文本,或将文本转换为序列(即单个字词以及对应下标构成的列表,从1算起)的类。是用来文本预处理的第一步:分词。结合简单形象的例子会更加好理解些。

1. 语法

官方语法如下1

Code.1.1 分词器Tokenizer语法

keras.preprocessing.text.Tokenizer(num_words=None,
                                   filters='!"#$%&()*+,-./:;<=>?@[\]^_`{|}~\t\n',
                                   lower=True,
                                   split=" ",
                                   char_level=False)

1.1 构造参数

  • num_words:默认是None处理所有字词,但是如果设置成一个整数,那么最后返回的是最常见的、出现频率最高的num_words个字词。
  • filters:过滤一些特殊字符,默认上文的写法就可以了。
  • lower:全部转为小写
  • split:字符串,单词的分隔符,如空格

1.2 返回值

字符串列表

1.3 类方法

下面是相关的类方法,部分示例在下一节中均有描述应用。

方法参数返回值
fit_on_texts(texts)texts:要用以训练的文本列表-
texts_to_sequences(texts)texts:待转为序列的文本列表序列的列表,列表中每个序列对应于一段输入文本
texts_to_sequences_generator(texts)texts:待转为序列的文本列表本函数是texts_to_sequences的生成器函数版,返回每次调用返回对应于一段输入文本的序列
texts_to_matrix(texts, mode)texts:待向量化的文本列表;mode:‘binary’,‘count’,‘tfidf’,‘freq’之一,默认为‘binary’形如(len(texts), nb_words)的numpy array
fit_on_sequences(sequences)sequences:要用以训练的序列列表-
sequences_to_matrix(sequences)sequences:待向量化的序列列表; mode:‘binary’,‘count’,‘tfidf’,‘freq’之一,默认为‘binary’返回值:形如(len(sequences), nb_words)的numpy array

1.4 属性

  • word_counts:字典,将单词(字符串)映射为它们在训练期间出现的次数。仅在调用fit_on_texts之后设置。
  • word_docs: 字典,将单词(字符串)映射为它们在训练期间所出现的文档或文本的数量。仅在调用fit_on_texts之后设置。
  • word_index: 字典,将单词(字符串)映射为它们的排名或者索引。仅在调用fit_on_texts之后设置。
  • document_count: 整数。分词器被训练的文档(文本或者序列)数量。仅在调用fit_on_textsfit_on_sequences之后设置。

2. 简单示例

Code.2.1 简单示例

>>>from keras.preprocessing.text import Tokenizer
Using TensorFlow backend.

#  创建分词器 Tokenizer 对象
>>>tokenizer = Tokenizer()

#  text
>>>text = ["今天 北京 下 雨 了", "我 今天 加班"]

#  fit_on_texts 方法
>>>tokenizer.fit_on_texts(text)

#  word_counts属性
>>>tokenizer.word_counts
OrderedDict([('今天', 2),
             ('北京', 1),
             ('下', 1),
             ('雨', 1),
             ('了', 2),
             ('我', 1),
             ('加班', 1)])

#  word_docs属性
>>>tokenizer.word_docs
defaultdict(int, {'下': 1, '北京': 1, '今天': 2, '雨': 1, '了': 2, '我': 1, '加班': 1})

#  word_index属性
>>>tokenizer.word_index
{'今天': 1, '了': 2, '北京': 3, '下': 4, '雨': 5, '我': 6, '加班': 7}

#  document_count属性
>>>tokenizer.document_count
2

3. 常用示例

还以上面的tokenizer对象为基础,经常会使用texts_to_sequences()方法 和 序列预处理方法 keras.preprocessing.sequence.pad_sequences一起使用

有关pad_sequences用法见python函数——序列预处理pad_sequences()序列填充

Code.3.1 常用示例

>>>tokenizer.texts_to_sequences(["下 雨 我 加班"])
[[4, 5, 6, 7]]

>>>keras.preprocessing.sequence.pad_sequences(tokenizer.texts_to_sequences(["下 雨 我 加班"]), maxlen=20)
array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 5, 6, 7]],dtype=int32)

  1. https://keras-cn.readthedocs.io/en/latest/preprocessing/text/#_1 ↩︎

  • 31
    点赞
  • 162
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Python中使用Keras训练对话机器人可以通过以下步骤实现: 1. 数据预处理:首先,你需要准备用于训练的对话数据。这些数据可以是一系列的问答对,其中每个问答对都是一个输入和一个对应的输出。你可以使用自己的语料库或者从互联网上找到适合的对话数据集。然后,你需要对数据进行预处理,包括分词、去除停用词、标记化等操作。 2. 构建模型:接下来,你需要构建一个适合对话机器人的模型。在Keras中,你可以使用Sequential模型或者函数式API来构建模型。你可以选择使用循环神经网络(RNN)或者变种(如长短期记忆网络LSTM)来处理对话序列。你还可以添加嵌入层、隐藏层和输出层来构建完整的模型。 3. 训练模型:一旦你构建好模型,你可以使用Keras提供的compile()函数来编译模型,并使用fit()函数来训练模型。你需要指定训练数据、验证数据、损失函数、优化器和训练的批次大小等参数。通过多次迭代训练,模型将逐渐学习到对话数据的模式和规律。 4. 评估模型:在训练过程中,你可以使用验证数据来评估模型的性能。你可以计算模型的准确率、损失值等指标来评估模型的效果。如果模型的性能不够好,你可以调整模型的结构或者超参数来改进模型。 5. 使用模型进行对话:一旦你训练好了模型,你可以使用它来进行对话。你可以将用户的输入转化为模型可以理解的格式,并使用模型的predict()函数来生成对应的回答。你可以根据模型的输出选择最合适的回答,并将其返回给用户。 下面是一个使用Keras训练对话机器人的示例代码: ```python from keras.models import Sequential from keras.layers import Embedding, LSTM, Dense # 构建模型 model = Sequential() model.add(Embedding(input_dim=vocab_size, output_dim=embedding_dim, input_length=max_seq_length)) model.add(LSTM(units=hidden_units)) model.add(Dense(units=vocab_size, activation='softmax')) # 编译模型 model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) # 训练模型 model.fit(x_train, y_train, batch_size=batch_size, epochs=num_epochs, validation_data=(x_val, y_val)) # 使用模型进行对话 def generate_response(input_text): # 将输入文本转化为模型可以理解的格式 input_seq = tokenizer.texts_to_sequences([input_text]) input_seq = pad_sequences(input_seq, maxlen=max_seq_length) # 使用模型生成回答 output_seq = model.predict(input_seq) output_text = tokenizer.sequences_to_texts([output_seq])[0] return output_text ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值