IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 简介NLP中的Tokenization(基于WordSubword 和 Character) -> 正文阅读

[人工智能]简介NLP中的Tokenization(基于WordSubword 和 Character)

概念理解

  • Word:一个单词,例如hello
  • Character:一个字母,例如a
  • Subword:①若使用单词进行编码,由于单词多且杂,容易导致OOV问题,而且不太好编码 ②若使用字母进行编码,又太少,容易丢失语义;所以人们发明了subword,将一个word分成多个subword,同时兼顾了①②两个问题。
  • OOV:Out of Vocabulary,意思是有些单词在词典中查询不到,例如一些根据词根现造的词,或者拼写错误的词等。
  • Tokenization:将一段文本分成若干个元素,一个元素称为一个Token,而 token 是之后要被编码成向量然后送往模型的基本单位。
  • Token:Token可以是一个单词、一个字母、甚至是“半个单词”

Tokenization 举例:

假设要对 Let us learn tokenization 做 Tokenization,通常有三种做法:

1:Word-Based Tokenization,结果为:[“Let”, “us”, “learn”, “tokenization.”]
2. Subword-based Tokenization,结果为:[“Let”, “us”, “learn”, “token”, “ization.”]
3. Character-based Tokenization,结果为:[“L”, “e”, “t”, “u”, “s”, “l”, “e”, “a”, “r”, “n”, “t”, “o”, “k”, “e”, “n”, “i”, “z”, “a”, “t”, “i”, “o”, “n”, “.”]

Word-based Tokenization

目标:将一段文本分成一个词一个词的Sequence

常用方法

  1. 直接使用空格(Space)进行分隔(Split)
  2. 使用分隔符(delimiter)进行分隔,例如:空格和标点符号(Punctuation marks)
  3. 使用框架,例如:NLTK,spaCy,Keras,Gensim等

缺点

  1. 会导致词典(Vocabulary)特别大,进而导致Embedding Matrix非常大,最终导致模型巨大,需要更多的训练资源
  2. 容易出现OOV问题
  3. 难以处理拼写错误的单词

缺点解决方案

  1. 缺点1,限制词典大小,例如,将出现次数最多的5000个单词编成词典,其他的单词全标记为UNKNOWN,但这样加重OOV问题
  2. 缺点2,使用Subword-based Tokenization
  3. 缺点3,无解

优点:word是具有含义的,例如:run是跑的意思



Character-based Tokenization

目标:将一段文本分成一个字母一个字母的Sequence

常用方法:直接分就好了

优点

  1. 总量固定
  2. 不存在OOV问题
  3. 拼写错误也可以应对

缺点

  1. 一个字母不具备任何含义。(致命缺点
  2. 会导致Sequence很长

致命缺点导致Character-based Tokenization基本不会被使用

对于中文这种一个Charactor也具有含义的,是可以使用Character-based Tokenization的,而且有时效果还很好(因为中文做分词很难)



Subword-based Tokenization

目标:将一段文本分成一个字词一个字词的Sequence,但有些词能拆就拆。


对Subword的进行举例说明

例1. 将boys拆成boys,这可以让模型学到,boysboy的有相同的意思,但又有些微小的差别

例2. 将tokenization拆成tokenization,这样的拆法可以让模型学到 tokenizationtokenstokenizing具有相近的意思。

例3. 接着例2,还可以让模型学到 tokenizationmodernization 具有相同的词性


subword 时的一般原则

  1. 频率非常高的词不进行拆分
  2. 将罕见的词拆成小的有意义的词
  3. 对于后缀,一般前面会增加一个特殊标记,例如将tokenization 实际会拆成 token##ization##标记ization是一个后缀

常用方法

  1. WordPiece
  2. BPE(Byte-Pair Encoding)
  3. Unigram
  4. SentencePiece

优点

  1. Vocabulary的大小还行,能接受
  2. 减少了OOV问题
  3. 模型甚至可以理解没见过的单词,例如,假设模型没见过pretrain,但由于拆分成了pretrain,模型就可能会理解该单词的意思是预训练

缺点

  1. 好像依然没办法解决拼写错误的问题





参考资料

Word, Subword, and Character-Based Tokenization: Know the Difference: https://towardsdatascience.com/word-subword-and-character-based-tokenization-know-the-difference-ea0976b64e17

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-03-10 22:31:02  更:2022-03-10 22:32:04 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 17:36:45-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码