从经典学习 NLP:小白到大白:1. Word Tokenization

文章目录

      • [1 Word Tokenization](#1 Word Tokenization)
        • [1.1 Top-down/rule-based tokenization](#1.1 Top-down/rule-based tokenization)
        • [1.2 Byte-pair Encoding: A Bottom-up tokenization algorithm](#1.2 Byte-pair Encoding: A Bottom-up tokenization algorithm)

1 Word Tokenization

来源:JM3 Chapter 2.5 p19-23

tokenization 就是 把 running text 分割成为 words;

常有两种方法:

  • top-down/rule-based tokenization
    根据预先定义的标准与规则实现分词;
  • bottom-up tokenization
    使用字母序列的统计量实现分词;
1.1 Top-down/rule-based tokenization

举个例子,

首先要注意 clitic contraction ,也就是附着缩略词的处理,clitic 是:" A clitic is a part of a word that can't stand on its own, and can only occur when it is attached to another word. "

按照 Penn Treebank tokenization 标准:

doesn't 被展开为 does + n't

其中的 n't 就是 clitic contraction 嘛

tokenization 会保持 hyphenated words,即连字符连接的词在一起,并把所有 punctuation,即标点符号进行分割!具体例子可以见:

![[Pasted image 20240229223529.png]]

tokenization 可以展开这种 clitic contraction,也可以看到,tokenization 识别出了 does 这个词,所以 tokenization 也和 NLP 的一个方向:named entity recognition 紧密相关!

由于 tokenization 在 其他的 text precessing 前,所以需要比较迅速,常是基于 regular expression 正则表达式,正则表达式通常都编译入非常高效的 有限状态自动机。

设计优秀的 top-down tokenization 所遵循的 deterministic algorithm 可以处理各种 ambiguity,比如 不同的 撇好apostrophe:

  • genitive marker 属格
    the book's cover
  • quotative 引用
    'The other class', she said
  • clitics 附着词
    they're, doesn't

不同的语言在进行tokenization时可能存有不同困难,english 天然的以 words 分,但 chinese 不使用 space 进行 words 的分割,而是以 character,即汉字,作为分割得到的 token。由于chinese本身的character,也就是汉字,具有丰富的意义,研究表明,chinese NLP 中,以 character 作为 input 会比 words 更好。

但像 japanese,thai 等语言,他的 character 本身作为一个 unit 太小,不足以表达含义,所以也需要 word segmentation 算法。

1.2 Byte-pair Encoding: A Bottom-up tokenization algorithm

tokenization 很重要的一点是要有能力处理 unknown words,我们希望也能够处理 corpus,即语料库,之外的的 unknown words。

首先要引入一个 subwords 子字的概念,这是一种 sets of tokens that include tokens smaller than words. 即一种比 words 更小的 token.

子词并行:在自然语言处理中,一种处理词汇的方法,将词汇分解为更小的单元(子词),以便更好地处理稀有词汇和词汇变化。

subwords 可以是 arbitrary substring,也可以是有一定意义的 morphemes,即语素,比如:-est, -er.

A morpheme is the smallest meaning-bearing unit of a language; for example the word unlikeliest has the morphemes un-, likely, and -est.

现代 tokenization 方法中的 token 常为 words,但也可以为 某些 frequently morpheme 高频语素,或者是一些其他的 字词,比如:-er.

基于 subword,任何 unknow words 都可以由某些 subwords units 序列构成,比如 lower,可以由 low 和 -er 这两个 subwords 组成,或者,如果有必要,可以视为由 -l, -o,-w, -e, -r 等一系列 letter 构成。

tokenization schema 一般分为 token learner 和 token segmenter。前者从 corpus语料中学习,并产生vocabulary,即 set of tokens。后者作用于原始文本,对文本按照 vocabulary 进行分割,实现分词得到一系列 tokens。

常有三种方法:

  • byte-pair encoding, BPE
  • unigram language modeling
  • SentencePiece library 含有上述两种,但常指代后一种

BPE token learner 由所有部分均为 individual character 的 vocabulary 开始,根据 training corpus 中的 words,去寻找具有最高出现频次的 adjacent symbols (symbol可以是多个character构成)。注意,最开始的 vocabulary 就是所有 character 构成的。

将最高频次的 symbols 不断merge,并加入到 vocabulary中,以一种greedy的思想去不断 merge highest frequent adjacent symbols into vocabulary,直到添加完毕 k k k 个 symbols 进入到 vocabulary中。注意,这里的 k k k 是 BPE algorithm 的参数。通过BPE,最终得到的 vocabulary 就是由原来的 individual characters 加上 k k k 个 merged symbols.

过程中,同样频率的 pairs of characters,哪个先 merge 没有特定要求,是 arbitrary 的!

BPE的核心思想:
iteratively merge freaquent pairs of characters.

一些优点:

  • data-informed tokenization
    language independent, can derive the vocabulary for the language with only corpus, this BPE can figure the corpus itself;
  • works for different languages
    no need to design rules for different language
  • deal better with unknown words
    worst case: unknown words 分成 individual characters

最终的 vocabulary 里,大部分都是 full words,少部分是 subwords。

最差情况下,unknown word 也是被分为多个 individual characters。

具体例子参考 jm3,p21. 简单展示:

![[Pasted image 20240301174028.png]]
注意,有一个 end-of-word symbol _;

从过程来看,一般都是从 end-of-word 处开始 merge。

基于最终得到的 vocabulary:

对于 n e w e r ,其会被分为一整个 token:newer

对于 unknown word l o w e r , 会被分为两个 token: low 和 er.

相关推荐
Maynor9967 小时前
全网唯一!独家支持 Grok4 Heavy模型 ,教你在国内使用Heavy模型!
人工智能
Ai173163915797 小时前
2025.11.28国产AI计算卡参数信息汇总
服务器·图像处理·人工智能·神经网络·机器学习·视觉检测·transformer
18你磊哥7 小时前
chromedriver.exe的使用和python基本处理
开发语言·python
YJlio7 小时前
进程和诊断工具学习笔记(8.29):ListDLLs——一眼看清进程里加载了哪些 DLL,谁在偷偷注入
android·笔记·学习
一水鉴天7 小时前
整体设计 定稿 之1 devOps 中台的 结论性表述(豆包助手)
服务器·数据库·人工智能
闲人编程8 小时前
Python的抽象基类(ABC):定义接口契约的艺术
开发语言·python·接口·抽象类·基类·abc·codecapsule
青云交8 小时前
Java 大视界 -- Java 大数据机器学习模型在电商评论情感分析与产品口碑优化中的应用
机器学习·自然语言处理·lstm·情感分析·java 大数据·电商评论·产品口碑
vx_dmxq2118 小时前
【微信小程序学习交流平台】(免费领源码+演示录像)|可做计算机毕设Java、Python、PHP、小程序APP、C#、爬虫大数据、单片机、文案
java·spring boot·python·mysql·微信小程序·小程序·idea
XUA8 小时前
如何在服务器上使用Codex
人工智能
无垠的广袤8 小时前
【工业树莓派 CM0 NANO 单板计算机】本地部署 EMQX
linux·python·嵌入式硬件·物联网·树莓派·emqx·工业物联网