首页 > 其他分享 >[keras] tokenization

[keras] tokenization

时间:2023-02-04 10:36:00浏览次数:51  
标签:gua tokenizer keras somestr texts tokenization ha angry

目录

keras-tokenization

keras中的文本标记实用类,用于分词:

  1. 将文本转换为整数序列(每个数是词在词表中的索引)。
  2. 将文本处理为向量。

例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的取值还有freatf-idfbinary​等
语料/词表 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 词元)。

  如果文本中的单词没有在词汇表中出现?

  1. 默认不启用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]]
    
  2. 启用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

  如何科学地使用keras的Tokenizer进行文本预处理

  What does Keras Tokenizer num_words specify?

  Text Preprocessing

标签:gua,tokenizer,keras,somestr,texts,tokenization,ha,angry
From: https://www.cnblogs.com/handsome6/p/kerastokenization-1qxx5j.html

相关文章