目录
keras-tokenization
keras中的文本标记实用类,用于分词:
- 将文本转换为整数序列(每个数是词在词表中的索引)。
- 将文本处理为向量。
例1
keras.preprocessing.text.Tokenizer(num_words=None,
filters='!"#$%&()*+,-./:;<=>?@[\]^_`{|}~ ',
lower=True,
split=' ',
char_level=False,
oov_token=None,
document_count=0)
导包:
import keras
from keras.preprocessing.text import Tokenizer
from collections import OrderedDict
常见属性:
somestr = ['our deeds are the reason of this earthquake may allah forgive us all california',
'california:people receive earthquake evacuation orders in california']
tokenizer = Tokenizer(num_words=1)
# 在调用fit_on_texts之后,调用属性
tokenizer.fit_on_texts(somestr)
# 按照词频,越高索引越靠前,将单词映射为整数索引
tokenizer.word_index
# {'earthquake': 1,
# 'california': 2,
# 'our': 3,
# 'deeds': 4,
# ...
# (token, 在训练语料中出现的次数)
tokenizer.word_counts
# OrderedDict([('our', 1),
# ('deeds', 1),
# ('are', 1),
# ('the', 1),
# ...
# token出现文档的个数
# 'california': 2, 表示该词在以上两个索引中都出现了
tokenizer.word_docs
# defaultdict(int,
# {'forgive': 1,
# 'of': 1,
# 'deeds': 1,
# 'all': 1,
# 'reason': 1,
# 'are': 1,
# 'california': 2,
# ...
# 按照token出现次数排序
OrderedDict(sorted(tokenizer.word_counts.items(),key=lambda t:t[1], reverse=True))
# OrderedDict([('california', 3),
# ('earthquake', 2),
# ('our', 1),
# ('deeds', 1),
# ...
# 按照key排序
OrderedDict(sorted(tokenizer.word_counts.items(), key=lambda t:t[0], reverse=False))
# OrderedDict([('all', 1),
# ('allah', 1),
# ('are', 1),
# ('california', 3),
# ...
# tokenizer.document_count
例2
somestr = ['ha ha gua angry','howa ha gua excited']
tokenizer = Tokenizer()
# 在调用fit_on_texts之后,调用属性
tokenizer.fit_on_texts(somestr)
tokenizer.word_index
# {'ha': 1, 'gua': 2, 'angry': 3, 'howa': 4, 'excited': 5}
单词映射为整数,文本转换为矩阵:
# somestr = ['ha ha gua angry','howa ha gua excited']
tokenizer.texts_to_matrix(somestr, mode="count")
# array([[0., 2., 1., 1., 0., 0.],
# [0., 1., 1., 0., 1., 1.]])
tokenizer.texts_to_matrix(somestr, mode="freq")
tokenizer.texts_to_matrix(somestr, mode="freq")
# array([[0. , 0.5 , 0.25, 0.25, 0. , 0. ],
# [0. , 0.25, 0.25, 0. , 0.25, 0.25]])
tokenizer.texts_to_matrix(somestr, mode="count")
- 根据词表统计语料中每个词出现的次数。
- 词表索引从1开始,matrix第一列会被置为0.
- mode的取值还有
frea
tf-idf
binary
等
语料/词表 | 0 | ha | gua | angry | howa | excited |
---|---|---|---|---|---|---|
'ha ha gua angry' |
0 | 2 | 1 | 1 | 0 | 0 |
'howa ha gua excited' |
0 | 1 | 1 | 0 | 1 | 1 |
根据单词在词表中的索引,将文本转换为整数序列:
tokenizer.texts_to_sequences(somestr)
# [[1, 1, 2, 3], [4, 1, 2, 5]]
OOV token
OOV token(OOV 词元)。
如果文本中的单词没有在词汇表中出现?
-
默认不启用oov词元,陌生单词会被忽略:
somestr = ['ha ha gua angry','howa ha gua excited'] tokenizer = Tokenizer() # 在调用fit_on_texts之后,调用属性 tokenizer.fit_on_texts(somestr) tokenizer.word_index # {'ha': 1, 'gua': 2, 'angry': 3, 'howa': 4, 'excited': 5}
都是词表中的单词:
tokenizer.texts_to_sequences(somestr) # ['ha ha gua angry','howa ha gua excited'] # [[1, 1, 2, 3], [4, 1, 2, 5]]
包含陌生单词:
# 词表中未出现的单词会被忽略 teststr = ['hahhh ha gua hahhh angry'] tokenizer.texts_to_sequences(teststr) # [[1, 2, 3]]
-
启用oov词元
oov token在单词表中索引为1,用来替换未在词表中出现的单词。
somestr = ['ha ha gua angry','howa ha gua excited'] tokenizer = Tokenizer( oov_token="<OOV>"# 不认识的词会被归类为oov词元,索引为1 ) # 在调用fit_on_texts之后,调用属性 tokenizer.fit_on_texts(somestr) tokenizer.word_index # {"<OOV>": 1, 'ha': 2, 'gua': 3, 'angry': 4, 'howa': 5, 'excited': 6} teststr = ['hahhh ha gua hahhh angry wow'] tokenizer.texts_to_sequences(teststr) # [[1, 2, 3, 1, 4, 1]]
tokenizer.texts_to_matrix(teststr, mode="count")
# array([[0., 3., 1., 1., 1., 0., 0.]]) # 3是oov token,也就是这段文本中不认识的单词的个数。
Reference
What does Keras Tokenizer num_words specify?
标签:gua,tokenizer,keras,somestr,texts,tokenization,ha,angry From: https://www.cnblogs.com/handsome6/p/kerastokenization-1qxx5j.html