Tokenizer

Tokenizer是一个将文本向量化,转换成序列的类。用来文本处理的分词、嵌入 。

导入改类

from keras.preprocessing.text import Tokenizer

默认参数如下

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

参数说明:

  • num_words: 默认是None处理所有字词,但是如果设置成一个整数,那么最后返回的是最常见的、出现频率最高的num_words个字词。一共保留 num_words-1 个词。
  • filters: 过滤一些特殊字符,默认上文的写法就可以了。
  • lower: 是否全部转为小写。
  • split: 分词的分隔符字符串,默认为空格。因为英文分词分隔符就是空格。
  • char_level: 分字。
  • oov_token: if given, it will be added to word_index and used to replace out-of-vocabulary words during text_to_sequence calls

相关的类方法

方法 参数 返回值
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:同上 返回值:形如(len(sequences), nb_words)的numpy array

属性

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

In Action 实战

from keras.preprocessing.text import Tokenizer
from keras.preprocessing.sequence import pad_sequences  # 填充语料tokenizer = Tokenizer(num_words=None,filters='!"#$%&()*+,-./:;<=>?@[\\]^_`{|}~\t\n',lower=True,split=' ',char_level=False,oov_token=None,document_count=0)
"""
num_words: 默认是None处理所有字词,但是如果设置成一个整数,
那么最后返回的是最常见的、出现频率最高的num_words个字词。一共保留 num_words-1 个词。
filters: 过滤一些特殊字符,默认上文的写法就可以了。
lower: 是否全部转为小写。
split: 分词的分隔符字符串,默认为空格。因为英文分词分隔符就是空格。
char_level: 分字。
oov_token: if given, it will be added to word_index
and used to replace out-of-vocabulary words during text_to_sequence calls
"""corpus = ['Updates internal vocabulary.','In the case,','Required before']
#  fit_on_texts 方法
tokenizer.fit_on_texts(corpus)#  word_counts属性
print(tokenizer.word_counts)
# 输出
# OrderedDict([('updates', 1), ('internal', 1), ('vocabulary', 1),
# ('in', 1), ('the', 1), ('case', 1), ('required', 1), ('before', 1)])
print(tokenizer.word_docs)
# 输出
# defaultdict(<class 'int'>, {'vocabulary': 1, 'updates': 1, 'internal': 1,
# 'case': 1, 'in': 1, 'the': 1, 'required': 1, 'before': 1})
print(tokenizer.word_index)
# 输出
# {'updates': 1, 'internal': 2, 'vocabulary': 3, 'in': 4, 'the': 5, 'case': 6, 'required': 7, 'before': 8}
print(tokenizer.document_count)
# 输出 3print(tokenizer.texts_to_sequences(corpus))
# 输出
# [[1, 2, 3], [4, 5, 6], [7, 8]]
print(tokenizer.texts_to_matrix(corpus))
# 输出
# [[0. 1. 1. 1. 0. 0. 0. 0. 0.]
#  [0. 0. 0. 0. 1. 1. 1. 0. 0.]
#  [0. 0. 0. 0. 0. 0. 0. 1. 1.]]
print(tokenizer.texts_to_matrix(corpus).shape)
# 输出 (3, 9)tokenizer.fit_on_sequences(tokenizer.texts_to_sequences(corpus))
print(tokenizer.sequences_to_matrix(tokenizer.texts_to_sequences(corpus)))
# 输出
# [[0. 1. 1. 1. 0. 0. 0. 0. 0.]
#  [0. 0. 0. 0. 1. 1. 1. 0. 0.]
#  [0. 0. 0. 0. 0. 0. 0. 1. 1.]]

Attention:

需要注意的点是,由于书写习惯,英文文本的单词之间是用空格隔开的,split=' ' 这个参数可以直接对英文文本进行空格分词。但是对中文不行,因此使用 tokenizer.fit_on_texts(text) 时,text如果是英文文本,可以直接 text = ["Today is raining.", "I feel tired today."] ,但是text是中文文本的话,需要先将中文文本分词再作为输入text: text = ["今天 北京 下 雨 了", "我 今天 加班"]

这里就是我踩过的坑了,之前拷代码下来跑的时候,别人用的是英文文本,没问题,但是我的输入是中文文本,导致分词步骤利用空格对中文分词,会将整句话当作一个token,而且是字典里找不到的token,这样会造成大量的相同的嵌入表达和相同的预测分数。

因此,keras的Tokenizer对于英文文档可以做分词+嵌入 两步,对于中文的话,其实只有嵌入这步。

嵌入示例

from keras.preprocessing.text import Tokenizer
from keras.preprocessing.sequence import pad_sequences# 1. 创建分词器 Tokenizer 对象
tokenizer = Tokenizer() # 里面的参数可以自己根据实际情况更改# 2. 整理整体语料,中文需空格分词
text = ["今天 北京 下 雨 了", "我 今天 加班"]# 3. 将Tokenizer拟合语料,生成字典,形成新的tokenizer
tokenizer.fit_on_texts(text)# 4. 保存tokenizer,避免重复对同一语料进行拟合
import joblib
joblib.dump(tokenizer, save_path)# 5. 整合需要做嵌入的文本,中文需要空格分词
new_text = ["今天 回家 吃饭", "我 今天 生病 了"]# 6. 将文本向量化
list_tokenized = tokenizer.text_to_sequence(new_text)# 7. 生成训练数据的序列
X_train = pad_sequences(list_tokenized, maxlen=200)

Reference:

http://codewithzhangyi.com/2019/04/23/keras-tokenizer/

Keras分词器 Tokenizer相关推荐

  1. python函数——Keras分词器Tokenizer

    文章目录 0. 前言 1. 语法 1.1 构造参数 1.2 返回值 1.3 类方法 1.4 属性 2. 简单示例 3. 常用示例 python函数 系列目录:python函数--目录 0. 前言 To ...

  2. keras中文文档_Keras分词器Tokenizer

    Tokenizer 是一个用于向量化文本,或将文本转换为序列的类.是用来文本预处理的第一步:分词. 简单来说,计算机在处理语言文字时,是无法理解文字的含义,通常会把一个词(中文单个字或者词组认为是一个 ...

  3. Pytorch transformers tokenizer 分词器词汇表添加新的词语和embedding

    目标: 在NLP领域,基于公开语料的预训练模型,在专业领域迁移时,会遇到专业领域词汇不在词汇表的问题,本文介绍如何添加专有名词到预训练模型. 例如,在bert预训练模型中,并不包含财经词汇,比如'市盈 ...

  4. es过滤html标签,Elasticsearch 分词器

    在全文搜索(Fulltext Search)中,词(Term)是一个搜索单元,表示文本中的一个词,标记(Token)表示在文本字段中出现的词,由词的文本.在原始文本中的开始和结束偏移量.以及数据类型等 ...

  5. ELK下es的分词器analyzer

    转载链接 :es的分词器analyzerhttps://www.cnblogs.com/xiaobaozi-95/p/9328948.html 中文分词器 在lunix下执行下列命令,可以看到本来应该 ...

  6. ElasticSearch从入门到精通--第七话(自动补全、拼音分词器、自定义分词、数据同步方案)

    ElasticSearch从入门到精通–第七话(自动补全.拼音分词器.自定义分词.数据同步方案) 使用拼音分词 可以引入elasticsearch的拼音分词插件,地址:https://github.c ...

  7. elasticsearch 添加或修改分词器

    1 索引的分析 索引分析: 就是把输入的文本块按照一定的策略进行分解, 并建立倒排索引的过程. 在Lucene的架构中, 这个过程由分析器(analyzer)完成. 1.1 分析器的组成 ① 字符过滤 ...

  8. elasticsearch系列三:索引详解(分词器、文档管理、路由详解(集群))

    目录 一.分词器​ 1. 认识分词器 1.1 Analyzer 分析器 1.2 如何测试分词器 2. 内建的字符过滤器(character filter) 2.1 HTML过滤字符过滤器(HTML S ...

  9. es自定义拼音分词器处理中文拼音排序问题

    1.先上结论,如下mapping可以解决es拼音排序问题 {"settings": {"number_of_shards": "3",&qu ...

最新文章

  1. 日期函数:取过去或者将来多少天的日期
  2. boost::gil::channel_view用法的测试程序
  3. LeetCode(16)题解--3Sum Closest
  4. 使用gethostname()函数和gethostbyname()函数获取主机相关信息
  5. 最大子段和问题Java实现
  6. 帆软发布大数据直连引擎FineDirect,对焦大数据BI
  7. spring data elasticsearch 对应 elasticsearch 版本
  8. 鸿蒙卡片-物联网DTU污水液位计卡片
  9. day_log 12月份的
  10. Android如何实现音频输出路由的切换
  11. “ORA-01017(:用户名/口令无效; 登录被拒绝)” ORA-28000: the accout is locked(用户账号被锁)解决方法
  12. 炫酷 雨滴桌面设置工具
  13. WMS系统中仓库条形码管理的优势
  14. Chrome浏览器保存整个网页为图片
  15. C语言快速解决反转链表
  16. 编程语言难度排名_谷歌排名第一的编程语言,小学生拿来做答题,分分钟钟搞定高难度算法!...
  17. 一个中专生:我在华为面试的真实经历,转
  18. 工作记录——tomcat部署web应用常见问题和处理方法
  19. 人工智能:从图灵到未来
  20. VLAN间如何实现互连?干货奉上!!!

热门文章

  1. 爬虫的基础架构及常用的工具介绍
  2. 2023年江苏省职业院校技能大赛中职网络安全赛项试卷-学生组-任务书
  3. 怎么在线快速添加水印防止盗图?
  4. Effective STL之容器
  5. kettle-写日志
  6. cache-主存的三种映射方式
  7. 详解BFS,Dijkstra算法,Floyd算法是如何解决最短路径问题的
  8. Linux命令:whoami
  9. 幽兰代码本——开源软件实践家
  10. 想工作嘛!让你[肝]一个月有多累