当前位置: 首页 > news >正文

NLP中的Tokenizer分词器的概念与实现

Tokenizer

在开始学习 NLP 相关知识之前,先要学习一个叫 Tokenizer 的概念,这可谓是所有 NLP 模型开始训练前需要做的一个步骤,那么 Tokenizer 是什么?

在这里插入图片描述

在计算机处理一行语句的时候,我们给其输入一个 String,计算机实际上是很难进行处理的,所以我们希望把这么一个 String,把他的每一个字或者每一个词切分开,并且转换成一个数字(用数字来进行表示),也就是一个 ID

Tokenizer 翻译过来叫切词器,其所做的事情就是这么一个事情。

如上图所示,有一个 String:“站在人生的龍字路口,不知所措”。

然后将其按字切开,得到:“ 站 在 人 生 的 龍 字 路 口 , 不 知 所 措 ”。

然后就应该进行查表了,应该会存在这么一个类似于字典的东西,该字典包含了很多常见的字或者是词,对于表中不存在的字词会使用一个特殊的标识 UNK 来进行表示。

最后将这些 token 转换成一个 int,也就是刚刚说的 ID。

这个说白了就是一个切词工具,因此我们不会自己写一个字典,直接引入 Hugging Face 已经写好的分词器训练模型,使用该模型训练一个分词器出来使用即可,Hugging Face 网页的链接如下:

Hugging Face 提供的 Tokenizer 工具;

点击链接进去可以发现如下:

在这里插入图片描述

使用 pip install tokenizers 命令即可进行下载,如果下载过程出错,那么就多下载几次,我也是第三次下载的时候一下就下载好了,突然的非常快我也不知道为什么,反正多试几次。

这里需要一个语料库,我是直接在百度上找了一本 txt 格式的小说文本放进代码中充当语料库了,如果你要使用的话应该也能这么做,百度搜索 “小说txt文件” 应该就能像我一样找到。

在这里插入图片描述

然后写上训练代码,用来训练我们的 tokenizer 分词器:

在这里插入图片描述

这里如果报错 Exception: stream did not contain valid UTF-8 ,将 txt 文件重新保存为 UTF-8 编码的形式即可。

运行之后在我们的 model_save 文件夹下出现一个 json 文件:

在这里插入图片描述

往下拉可以看到已经都分好各个词或者字的 ID 啦:

在这里插入图片描述

接下来进行一个测试:

在这里插入图片描述

分词结果如下:

在这里插入图片描述

可以看见各个词或者字都被切了出来,并且都各自拥有一个在训练过程中被分配好的 ID 值。

##开头的词是什么意思?

##开头表示这个词或者字不是一个完整的词或者字,其是一个词根(因为分词器啥语言都能分,这里我们使用的中文,因此其也有一个对应的所谓词根的操作),为了节省内存空间,tokenizer 会把一些常见词拆成更零碎的部分,通过这些更零碎的部分则可以拼接出更多的词来提高切词的成功率。

上述就是在自然语言处理中所经常使用的 Tokenizer 的概念与简单实现。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 一些关于科技的想法
  • 代码随想录训练营Day 56|力扣300.最长递增子序列、674. 最长连续递增序列、718. 最长重复子数组
  • 概率论与数理统计,重要知识点——全部公式总结
  • Vue3_对接腾讯云COS_大文件分片上传和下载
  • Windows环境如何使用Flutter Version Manager (fvm)
  • S1E48:内存池 课后作业
  • DeepSORT(目标跟踪算法)中自由度决定卡方分布的形状
  • 34、matlab输入命令汇总
  • 中科数安 |-公司办公透明加密系统,数据防泄漏软件
  • 【Vue】核心概念 - module
  • MySQL之查询性能优化(七)
  • JavaWeb期末知识点复习
  • Unity 使用TextMeshPro实现图文混排
  • azure cli的安装和使用
  • 硬件工程师学习规划
  • Js实现点击查看全文(类似今日头条、知乎日报效果)
  • js中forEach回调同异步问题
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • PHP CLI应用的调试原理
  • spring-boot List转Page
  • SpringBoot几种定时任务的实现方式
  • spring学习第二天
  • Sublime text 3 3103 注册码
  • Webpack入门之遇到的那些坑,系列示例Demo
  • 对象引论
  • 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)
  • 手写一个CommonJS打包工具(一)
  • Spring第一个helloWorld
  • ​软考-高级-信息系统项目管理师教程 第四版【第14章-项目沟通管理-思维导图】​
  • ​探讨元宇宙和VR虚拟现实之间的区别​
  • # 利刃出鞘_Tomcat 核心原理解析(八)-- Tomcat 集群
  • #Datawhale X 李宏毅苹果书 AI夏令营#3.13.2局部极小值与鞍点批量和动量
  • #Spring-boot高级
  • #经典论文 异质山坡的物理模型 2 有效导水率
  • (Demo分享)利用原生JavaScript-随机数-实现做一个烟花案例
  • (读书笔记)Javascript高级程序设计---ECMAScript基础
  • (附源码)spring boot建达集团公司平台 毕业设计 141538
  • (附源码)ssm航空客运订票系统 毕业设计 141612
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (力扣)1314.矩阵区域和
  • (篇九)MySQL常用内置函数
  • (学习日记)2024.01.19
  • (转)ORM
  • (最完美)小米手机6X的Usb调试模式在哪里打开的流程
  • **PHP分步表单提交思路(分页表单提交)
  • .DFS.
  • .NET Micro Framework初体验(二)
  • .Net--CLS,CTS,CLI,BCL,FCL
  • .NET程序员迈向卓越的必由之路
  • .net开发日常笔记(持续更新)
  • .Net中ListT 泛型转成DataTable、DataSet
  • [ C++ ] 继承
  • [1159]adb判断手机屏幕状态并点亮屏幕
  • [20161101]rman备份与数据文件变化7.txt
  • [④ADRV902x]: Digital Filter Configuration(发射端)