在自然语言处理(NLP)领域,分词技术是构建模型的基础。分词是将文本分解成更小的单元——分词(tokens)的过程。这些分词可以是单词、字符或子词。Hugging Face公司提供了一个名为Tokenizers的库,它是一个高效的文本分词工具,能够帮助更好地理解和处理语言。
分词是NLP中不可或缺的一环。无论是传统的NLP方法,如计数向量化器(Count Vectorizer),还是基于深度学习的高级架构,如Transformers,分词都是处理原始文本的基础步骤。分词后,文本中的语句或短语被转换成整数,然后输入到深度学习模型中。例如,基于Transformer的模型——NLP中最先进的深度学习架构——就是在分词级别处理原始文本的。同样,NLP中最受欢迎的深度学习架构,如RNN、GRU和LSTM,也是在分词级别处理原始文本。
Hugging Face因其提供的Transformer库而广为人知,该库提供了一个高级API,用于访问基于Transformer的最新模型,如BERT、GPT2、ALBERT、RoBERTa等。Hugging Face团队还维护着另一个高效且快速的文本分词库——Tokenizers。最近,他们发布了该库的v0.8.0版本。
Tokenizers v0.8.0版本带来了许多改进和修复。现在,它可以同时处理预分词序列和原始文本字符串。训练自定义分词器的速度提高了五到十倍。保存分词器也变得前所未有的简单,只需一行代码即可将分词器保存为JSON文件。
将使用Google Colab进行演示,但也可以选择使用任何其他平台或IDE。首先,让快速安装tokenizers库:
!pip install tokenizers
可以通过执行以下命令来检查库的版本:
tokenizers.__version__
接下来,将导入所需的库和BertWordPieceTokenizer:
from tokenizers import BertWordPieceTokenizer
还需要下载一个词汇表文件:
!wget https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-uncased-vocab.txt
现在,让对一个示例句子进行分词:
tokenizer = BertWordPieceTokenizer('bert-base-uncased-vocab.txt')
encoded_output = tokenizer.encode("Language is a thing of beauty. But mastering a new language from scratch is quite a daunting prospect.")
“encoded_output”的三个主要组成部分是:
print(encoded_output.ids)
print(encoded_output.tokens)
print(encoded_output.offsets)
Tokenizers库还允许轻松地将分词器保存为JSON文件,并在以后使用时加载它。这对于大型文本数据集非常有用,不需要一次又一次地初始化分词器。
tokenizer.save('my_tokenizer.json')
tokenizer = BertWordPieceTokenizer('my_tokenizer.json')
sentence = "Language is a thing of beauty. But mastering a new language from scratch is quite a daunting prospect."
print(sentence.split())
encoded_output = tokenizer.encode(sentence.split())
!wget https://s3.amazonaws.com/research.metamind.io/wikitext/wikitext-103-v1.zip
!unzip wikitext-103-v1.zip
with open('wiki.train.tokens', 'r', encoding='utf-8') as f:
sequences = [line.strip().split() for line in f.readlines()]
start_time = time.time()
tokenizer.encode_batch(sequences)
end_time = time.time()
print(end_time - start_time)