码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 浅谈keras.preprocessing.text


    目录

    一、主要API

    二、探究hashing_trick

    三、python的hash()函数

    1、关于hash()函数

    2、关于hash冲突

     四、关于Embedding


    Keras是一个用python编写的开源神经网络库,从2021年8月的版本2.6开始,成为Tensorflow2的高层API。它拥有着丰富的数据封装和一些先进的模型实现,避免了“重复造轮子”。

      最近接触到Keras的embedding层,进而学习了一下Keras.preprocessing.text的相关知识。虽然Keras.preprocessing.text已经Deprecated。取而代之的是

    1. tf.keras.utils.text_dataset_from_directory
    2. tf.keras.layers.TextVectorization

      但是,之前不少的代码用的还是Keras.preprocessing.text,因此还是有总结一下的必要。

    一、主要API

    自上而下的罗列了这几个API。Tokenzier_from_json调用Tokenizer,Tokenizer调用one_hot,

    one_hot调用hashing_trick。最后hashing_trick,调用text_to_word_sequence。

     文本预处理的大致方向应该是分词、然后向量编码。其中text_to_word_sequence是分词,hashing_trick和one_hot用来编码。而Tokenizer是一个更加抽象的类,允许使用两种方法直接向量化一个文本语料库。Tokenizer_from_json,顾名思义,文本数据从json文件来的。

    1、Tokenizer_from_json 和Tokenizer

    1. def tokenizer_from_json(json_string):
    2. """Parses a JSON tokenizer configuration and returns a tokenizer instance.
    3. Args:
    4. json_string: JSON string encoding a tokenizer configuration.
    5. Returns:
    6. A Keras Tokenizer instance
    7. """
    1. keras.preprocessing.text.Tokenizer(num_words=None,
    2. filters='!"#$%&()*+,-./:;<=>?@[\]^_`{|}~ ',
    3. lower=True,
    4. split=' ',
    5. char_level=False,
    6. oov_token=None,
    7. document_count=0)

    2、one_hot 和 hash_trick

    1. keras.preprocessing.text.one_hot(text, n,
    2. filters='!"#$%&()*+,-./:;<=>?@[\]^_`{|}~',
    3. lower=True,
    4. split=' ')
    1. keras.preprocessing.text.hashing_trick(text, n,
    2. hash_function=None,
    3. filters='!"#$%&()*+,-./:;<=>?@[\]^_`{|}~ ', lower=True,
    4. split=' ')

    3、text_to_word_sequence

    1. keras.preprocessing.text.text_to_word_sequence(text,
    2. filters='!"#$%&()*+,-./:;<=>?@[\]^_`{|}~ ',
    3. lower=True,
    4. split=' ')

    二、探究hashing_trick

    1. def one_hot(
    2. input_text,
    3. n,
    4. filters='!"#$%&()*+,-./:;<=>?@[\\]^_`{|}~\t\n',
    5. lower=True,
    6. split=" ",
    7. analyzer=None,
    8. ):
    9. return hashing_trick(
    10. input_text,
    11. n,
    12. hash_function=hash,
    13. filters=filters,
    14. lower=lower,
    15. split=split,
    16. analyzer=analyzer,
    17. )
    1. def hashing_trick(
    2. text,
    3. n,
    4. hash_function=None,
    5. filters='!"#$%&()*+,-./:;<=>?@[\\]^_`{|}~\t\n',
    6. lower=True,
    7. split=" ",
    8. analyzer=None,
    9. ):
    10. if hash_function is None:
    11. hash_function = hash
    12. elif hash_function == "md5":
    13. hash_function = lambda w: int(hashlib.md5(w.encode()).hexdigest(), 16)
    14. if analyzer is None:
    15. seq = text_to_word_sequence(
    16. text, filters=filters, lower=lower, split=split
    17. )
    18. else:
    19. seq = analyzer(text)
    20. return [(hash_function(w) % (n - 1) + 1) for w in seq]

    应用示例代码:

    1. sample_text_1="bitty bought a bit of butter"
    2. sample_text_2="but the bit of butter was a bit bitter"
    3. sample_text_3="so she bought some better butter to make the bitter butter better"
    4. corp=[sample_text_1,sample_text_2,sample_text_3]
    5. vocab_size=50
    6. encod_corp=[]
    7. for i,doc in enumerate(corp):
    8. print(doc)
    9. encod_corp.append(one_hot(doc,50))
    10. print("The encoding for document",i+1," is : ",one_hot(doc,50))

    由源码可见,one_hot直接调用hashing_trick方法(其中hash_function=hash)。而hashing_tirck调用text_to_word_sequence分词后,直接用python的内置hash()函数。

      初看应用示例的代码时,我便有个疑惑,为什么one_hot可以多次在不同语句上进行编码?不会出现同样的词有不同的值吗?不会出现不同的词有相同的值吗?这就有必要进一步学习一下Python内置的hash()函数了。

    三、python的hash()函数

    1、关于hash()函数

    Python 的 hash(object) 返回传入对象的哈希值(如果它有的话),哈希值是整数。

    相同大小的数字变量有相同的哈希值(即使它们类型不同,如 1 和 1.0)

    Python 的不可变对象才有 hash 值,可变对象没有 hash 值,我们称它为 不可哈希,如上例中的列表。因此,hash() 可以应用于数字、字符串和对象,不能直接应用于 list、set、dictionary。

    集合(set)的元素、字典(dict)的 key 必须是可哈希的,它保证了在同一个解释器进程里相同字符串 hash 一致,在不同进程中 字符串的 hash 可能不一样。

    2、关于hash冲突

    同样的词,或者说同一个值在同一个Python的进程中,经过hash()函数映射的值时是一样的。

     四、关于Embedding

    待续ing

    参考链接:

    1. 文本预处理 - Keras 中文文档

    2. keras/text.py at v2.11.0 · keras-team/keras · GitHub

    3、TensorFlow框架--Keras使用_缘定三石的博客-CSDN博客

    4、tensorflow2.0教程- Keras 快速入门_Doit_行之的博客-CSDN博客

    5、【学习笔记】Tensorflow 2.0+与Keras的联系与应用(含model详解)_JinyuZ1996的博客-CSDN博客

    6、GitHub - keras-team/keras: Deep Learning for humans

    7、https://zh.wikipedia.org/zh-cn/Keras

    8 自然语言处理入门——文本预处理_Lanciberrr的博客-CSDN博客

    9 Python hash() 对象的哈希值 | Python 教程 - 盖若

    10 3. Data model — Python 2.7.18 documentation

    11 What does hash do in python? - Stack Overflow

  • 相关阅读:
    tiup uninstall
    pyhton如何判断字符串中是否只含有数字——isnumeric/isdigit/isdecimal三大函数的区别及实例
    echarts的legend的小图标与文本垂直对齐
    使用nginx配置一个ip对应多个域名
    windows上安装和启动Elasticseach
    css实现六边形
    道通转债,微芯转债,博22转债上市价格预测
    在IE浏览器下fixed定位容器随着滚动条出现抖动问题(实测有效)
    需求管理手册-对需求分类与目标的要求(6)
    【MAPBOX基础功能】23、mapbox通过marker的方式绘制波纹点位
  • 原文地址:https://blog.csdn.net/Tanqy1997/article/details/128069906
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号