Notes on Section 8.2

bobown_yao

序列数据处理问题中比较重要的一个部分是对序列化文本的处理

对于一个文本数据,我们可以对其进行词源化拆分或者是字符化拆分

我们先加载一个文本

Image: image_001

return [re.sub(‘[^A-Za-z]+’, ‘ ‘, line).strip().lower() for line in lines]

注意到这一行,这一行进行的操作包括去除所有的标点符号,前后空白字符,全文本小写化

我们设置两种拆分token的模式,分别是按词汇(每行使用split)或者是按字符(每行list化)

Image: image_002

Image: image_003

接下来一步是对单词进行量化,做法是将一个单词映射到一个数字索引。这个索引在训练的时候使用,在模型测试或者是正式跑的时候也是一个映射库。这个库由一般单词和特殊词元组成,几个特殊词元分别是未知词元unknown 填充(凑输入长度的)padding 开始符beginning of the sequence 结束符

Image: image_004

Image: image_005

我们调用vocab = Vocab(tokens) 建立这个词库,以下表述了数据流动的方式

Image: image_006

Image: image_007

然后我们可以用vocab[“word”]或者的形式调用这个库

这对应了其中的getitem内置函数

Image: image_008

Image: image_009

结构化之后的效果如下

Image: image_010

以下我们进行一个整合

Image: image_011

在这个整合中,我们使用了字符作为分划对象,也就是说这个数据的粒度会比较小,这里的考虑是我们的词库会很小,这个在参数数量上会有简省,同时我们预期会提升robust,因为字符级说明其理论上可以处理任何单词,更好的处理一些比较生僻的单词。(然后这个处理的时候会读入空格,而不是像单词那样省略空格)

不过也会引入一些问题,一个是训练网络的深度和训练需要的周期应该会增长,因为我们需要教会模型拼写先,然后才是处理文本词汇之间的一些关系。

  • Title: Notes on Section 8.2
  • Author: bobown_yao
  • Created at : 2026-02-06 00:00:00
  • Updated at : 2026-03-08 19:46:44
  • Link: https://bobownyao.github.io/2026/02/06/Notes-on-Section-8-2/
  • License: All Rights Reserved © bobown_yao
On this page
Notes on Section 8.2