赞
踩
分词和嵌入一直是LM被忽略的一部分。随着各大框架如HF的不断完善,大家对tokenization和embedding的重视程度越来越低,到现在初学者大概只能停留在调用tokenizer.encode
这样的程度了。
这在实践中是很危险的,比如你要调用ChatGPT的接口,但是经常发现输出被截断了,原因可能就是你输入的句子太长了。你计算句子长度是直接用空格分词,而ChatGPT是用不同的分词法(BPE分词法)。又如你不清楚T5的tokenizer的运作机理,输入数据中存在一些特殊token如'{}',但不知道T5使用的SentencePiece tokenizer不原生支持这些token,因此发现自己生成的结果有问题,都是<unk>。这些问题听上去比较低级,但是debug起来往往是最秃头的。为了解决这些疑惑,本文会提供一份详细的关于分词和嵌入的答卷。
如果大家用过huggingface,对tokenizer肯定不会陌生。在使用模型前,都需要将sequence过一遍tokenizer,进去的是word序列(句子),出来的是number序列。但是,HF的tokenizer到底在做什么?事实上,tokenizer总体上做三件事情:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。