【人工智能概论】011文本数据处理——切词器Tokenizer

【人工智能概论】011文本数据处理——切词器

文章目录

  • 【人工智能概论】011文本数据处理——切词器
  • 一. 背景简介
  • 二. Tokenizer的简要工作介绍
  • 三. 创建并保存一个Tokenizer切词器
  • 四. 简单使用已有的Tokenizer切词器


一. 背景简介

  • 使用计算机处理文本时,输入的是一个文字序列,如果直接处理会十分困难。
  • 因此希望把每个字(词)切分开,转换成数字索引编号,以便于后续做词向量编码处理。
  • 这就需要切词器——Tokenizer。

二. Tokenizer的简要工作介绍

  • 首先,将输入的文本按照一定规则切分成一系列的token;
  • 然后,在字典中查表,将每个token用一个整数编号来表示;
  • 最后,将字典中不存在的字(词)用特殊标识符(‘UNK’)表示,并赋予相应编号。

三. 创建并保存一个Tokenizer切词器

  • Tokenizer无需自行实现,用现成的即可。
  • 相关代码:
# train_tokenizer.py

# 构建并训练一个tokenizer

from tokenizers import models,normalizers,pre_tokenizers,trainers,Tokenizer

# 定义并设置tokenizer

# 创建一个tokenizer,并指定词表中找不到的词用 'UNK' 代替
tokenizer = Tokenizer(models.WordPiece(unk_token="[UNK]"))  

# 规范化字符串
tokenizer.normalizer = normalizers.Sequence([normalizers.NFD(), # unicode编码工具,让多义字(词)统一化编码
                                            normalizers.Lowercase() # 大小写转换,统一转换成小写。
                                            ])

# 预处理模块,语料中可能存在不可见字符,如tab,让语料按照不可见字符进行预拆分,让语料更干净
tokenizer.pre_tokenizer = pre_tokenizers.WhitespaceSplit()

"""---------------------"""

# 训练并保存tokenizer

# 定义特殊字符列表
special_tokens = ["[UNK]","[PAD]","[CLS]","[SEP]","[MASK]"]
# unk是字典中不存在token的代替品,pad是补位字符,cls放置在句子的开头,sep长句子中的子句分隔符,mask是遮盖

# 构建训练器,vocab_size期望词表中预计有多少词(填个大概的大点的数就行),
trainer = trainers.WordPieceTrainer(vocab_size=10000,special_tokens=special_tokens)

# 训练tokenizer,第一个参数是语料库,中括号中可填写多个txt文件
tokenizer.train(['./1.txt','./2.txt'],trainer = trainer)

# 保存训练好的tokenizer
tokenizer.save("./my_tokenizer.json")

四. 简单使用已有的Tokenizer切词器

  • 相关代码:
# test_tokenizer.py

from tokenizers import Tokenizer

# 加载切词器
tokenizer = Tokenizer.from_file('./my_tokenizer.json')

# 切词
tokens = tokenizer.encode("我喜欢看流浪地球!")

# 打印
print(tokens.ids,tokens.tokens)
# tokens.tokens中以##开头的是词根,而不是词,不过问题不大。

你可能感兴趣的:(【人工智能概论】,人工智能)