热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

vocab文本_持续更新:那些Keras中文本预处理超好用API

importtensorflowastffromtensorflowimportkerasimportnumpyasnpTokenizer:文本到序列的映射1fit_on_se
e2fbd767da8ab31c984dc6c97a33d264.png

import tensorflow as tf
from tensorflow import keras
import numpy as np

Tokenizer : 文本到序列的映射1

  • fit_on_sequence
  • fit_on_texts
  • get_config
  • sequences_to_test ....

from tensorflow.keras.preprocessing.text import Tokenizer# 导入文本数据
with open("shakespeare.txt",'r',encoding='utf=8') as f:text = f.read()print(text[:100])First Citizen:
Before we proceed any further, hear me speak.All:
Speak, speak.First Citizen:
You# 初始化 tokenizer,oov_token是指语料库中不存在的单词,这里假定所有不存在的单词都为
tokernizer = Tokenizer(char_level=False,oov_token='')# 在给定的语料库中训练,之后tokernizer能够映射任意给定的文本到序列
tokernizer.fit_on_texts([text])sequences = tokernizer.texts_to_sequences(["Before we proceed any further, hear me speak."])
print(sequences)sequences = tokernizer.texts_to_sequences(["First Citizen:"])
print(sequences)sequences = tokernizer.texts_to_sequences(["Hello world and hi"])
print(sequences)[[140, 36, 970, 144, 669, 128, 16, 103]]
[[89, 270]]
[[1, 187, 3, 1]]# tokenizer.word_index 用来查看 tokenizer 中 token被编码的序号
tokenizer.word_index

9314bb73f42efbb9a74b3fd537735447.png
oov_token被编码在第一个位置,之后按照词频编码

one_hot :文本到序列的映射2

from tensorflow.keras.preprocessing.text import one_hot# 参数 n 是vocab_size,字典大小,应当尽可能大,否则会出现两个单词相同映射的情况
one_hot("Before we proceed any further ha",n=128)
[4, 106, 102, 87, 62, 96]# 这里出现了 we 和 any 映射出的整数相同。
one_hot("Before we proceed any further ha",n=10)
[8, 9, 2, 9, 2, 8]

text_to_word_sequence : 分词工具

from tensorflow.keras.preprocessing.text import text_to_word_sequenceprint(text_to_word_sequence("Before we proceed any further, hear me speak.First Citizen:You"))['before', 'we', 'proceed', 'any', 'further', 'hear', 'me', 'speak', 'first', 'citizen', 'you']

pad_sequences : padding工具

这个API是NLP的利器,大多数模型要求序列长度固定,但我们知道文本中sentence的长度不是固定的。因此我们就需要这个API对序列的长度进行padding或者truncating

'''
tf.keras.preprocessing.sequence.pad_sequences(sequences, maxlen=None, dtype='int32', padding='pre',truncating='pre', value=0.0
)
'''
t1 = tf.constant([[1,2,3,7,8],[1,2,5,7,8]])
t1
array([[1, 2, 3, 7, 8],[1, 2, 5, 7, 8]])># 默认 padding='pre',在前方填充,默认value=0.0,使用0值填充
keras.preprocessing.sequence.pad_sequences(t1,maxlen=7) # 将t1 填充至(2,7)
array([[0, 0, 1, 2, 3, 7, 8],[0, 0, 1, 2, 5, 7, 8]])# 指定 padding='post',在后方填充
keras.preprocessing.sequence.pad_sequences(t1,maxlen=7,padding='post')
array([[1, 2, 3, 7, 8, 0, 0],[1, 2, 5, 7, 8, 0, 0]])# 使用指定值填充
keras.preprocessing.sequence.pad_sequences(t1,maxlen=7,padding='post',value=1)
array([[1, 2, 3, 7, 8, 1, 1],[1, 2, 5, 7, 8, 1, 1]])# truncating='pre' 当序列长度超过maxlen参数,会从前方截断,post则从后方截断
keras.preprocessing.sequence.pad_sequences(t1,maxlen=3,truncating='post')
array([[1, 2, 3],[1, 2, 5]])

to_categorical : 类别标签一键one_hot

在实际应用中,我们经常需要将类别标签y进行 one_hot 编码,to_categorical函数很好地解决了这个问题

from tensorflow.keras.utils import to_categoricaly = [0,0,3,5,1,4,2,2,1]
to_categorical(y)
array([[1., 0., 0., 0., 0., 0.],[1., 0., 0., 0., 0., 0.],[0., 0., 0., 1., 0., 0.],[0., 0., 0., 0., 0., 1.],[0., 1., 0., 0., 0., 0.],[0., 0., 0., 0., 1., 0.],[0., 0., 1., 0., 0., 0.],[0., 0., 1., 0., 0., 0.],[0., 1., 0., 0., 0., 0.]], dtype=float32)# 指定 class 的数量
y = [0,0,3,5,1,4,2,2,1]
to_categorical(y,num_classes=8)
array([[1., 0., 0., 0., 0., 0., 0., 0.],[1., 0., 0., 0., 0., 0., 0., 0.],[0., 0., 0., 1., 0., 0., 0., 0.],[0., 0., 0., 0., 0., 1., 0., 0.],[0., 1., 0., 0., 0., 0., 0., 0.],[0., 0., 0., 0., 1., 0., 0., 0.],[0., 0., 1., 0., 0., 0., 0., 0.],[0., 0., 1., 0., 0., 0., 0., 0.],[0., 1., 0., 0., 0., 0., 0., 0.]], dtype=float32)

KeyValueTensorInitializer & StaticVocabularyTable : 类别映射到索引

vocab = ["Up",'Down','Left','Right'] # 词汇表,所有可能的类别的列表
indices = tf.range(len(vocab),dtype=tf.int64) # 词汇表索引的张量
table_init = tf.lookup.KeyValueTensorInitializer(vocab,indices)
num_oov = 3
table = tf.lookup.StaticVocabularyTable(table_init,num_oov) # 查找表
# 创建了查找表之后,我们就可以对任意的类别进行索引编码
categories = tf.constant(['Down','Down','Right','Up','Up','Unknown'])
table.lookup(categories)




推荐阅读
  • 本文介绍如何使用 Python 的 DOM 和 SAX 方法解析 XML 文件,并通过示例展示了如何动态创建数据库表和处理大量数据的实时插入。 ... [详细]
  • [转]doc,ppt,xls文件格式转PDF格式http:blog.csdn.netlee353086articledetails7920355确实好用。需要注意的是#import ... [详细]
  • 本文详细介绍了如何使用Python中的smtplib库来发送带有附件的邮件,并提供了完整的代码示例。作者:多测师_王sir,时间:2020年5月20日 17:24,微信:15367499889,公司:上海多测师信息有限公司。 ... [详细]
  • 检查在所有可能的“?”替换中,给定的二进制字符串中是否出现子字符串“10”带 1 或 0 ... [详细]
  • 通过使用 `pandas` 库中的 `scatter_matrix` 函数,可以有效地绘制出多个特征之间的两两关系。该函数不仅能够生成散点图矩阵,还能通过参数如 `frame`、`alpha`、`c`、`figsize` 和 `ax` 等进行自定义设置,以满足不同的可视化需求。此外,`diagonal` 参数允许用户选择对角线上的图表类型,例如直方图或密度图,从而提供更多的数据洞察。 ... [详细]
  • 本文提供了PyTorch框架中常用的预训练模型的下载链接及详细使用指南,涵盖ResNet、Inception、DenseNet、AlexNet、VGGNet等六大分类模型。每种模型的预训练参数均经过精心调优,适用于多种计算机视觉任务。文章不仅介绍了模型的下载方式,还详细说明了如何在实际项目中高效地加载和使用这些模型,为开发者提供全面的技术支持。 ... [详细]
  • 本文通过复旦大学自然语言处理课程中的一个具体案例,详细解析了中文词汇分割技术的实现方法。该案例利用Java编程语言,结合词典和算法模型,展示了如何高效地进行中文文本的词汇分割,为相关研究和应用提供了宝贵的参考。 ... [详细]
  • 本文详细介绍了在 CentOS 7 系统中配置 fstab 文件以实现开机自动挂载 NFS 共享目录的方法,并解决了常见的配置失败问题。 ... [详细]
  • Spring Boot 中配置全局文件上传路径并实现文件上传功能
    本文介绍如何在 Spring Boot 项目中配置全局文件上传路径,并通过读取配置项实现文件上传功能。通过这种方式,可以更好地管理和维护文件路径。 ... [详细]
  • 本文详细介绍了在 Ubuntu 系统上搭建 Hadoop 集群时遇到的 SSH 密钥认证问题及其解决方案。通过本文,读者可以了解如何在多台虚拟机之间实现无密码 SSH 登录,从而顺利启动 Hadoop 集群。 ... [详细]
  • 如何在Java中使用DButils类
    这期内容当中小编将会给大家带来有关如何在Java中使用DButils类,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。D ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • 【实例简介】本文详细介绍了如何在PHP中实现微信支付的退款功能,并提供了订单创建类的完整代码及调用示例。在配置过程中,需确保正确设置相关参数,特别是证书路径应根据项目实际情况进行调整。为了保证系统的安全性,存放证书的目录需要设置为可读权限。值得注意的是,普通支付操作无需证书,但在执行退款操作时必须提供证书。此外,本文还对常见的错误处理和调试技巧进行了说明,帮助开发者快速定位和解决问题。 ... [详细]
  • 在 Kubernetes 中,Pod 的调度通常由集群的自动调度策略决定,这些策略主要关注资源充足性和负载均衡。然而,在某些场景下,用户可能需要更精细地控制 Pod 的调度行为,例如将特定的服务(如 GitLab)部署到特定节点上,以提高性能或满足特定需求。本文深入解析了 Kubernetes 的亲和性调度机制,并探讨了多种优化策略,帮助用户实现更高效、更灵活的资源管理。 ... [详细]
  • 如何使用 net.sf.extjwnl.data.Word 类及其代码示例详解 ... [详细]
author-avatar
史军2927
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有