基于 Transformer 架构的翻译模型实践 - 主流分词器(Tokenizer)的对比
基于 Transformer 架构的翻译模型实践 - 主流分词器Tokenizer的对比flyfish参考https://github.com/shaoshengsong/ pytorch -transformer-en-zh-translation-demo对hello不同的分词方案可以分为单个字符【hello】 也可以类似【hello】分词算法比较上图来源是ByteByteGo颜色类型说明青色完整单词Complete Words保留原词不拆分橙色子词Subwords拆分后的词片段非词缀绿色前缀Prefixes词的开头部分如un-、pre-紫色字符Characters单个字符/数字如1、e粉色特殊TokenSpecial Tokens词首标记如SentencePiece的▁、特殊符号米黄色空格Spaces文本中的空格如BPE会单独处理蓝色表情符号Emojis单个emoji作为独立token黄色标点符号Punctuation标点如-1. BPEByte Pair Encoding字节对编码从单个字符开始不断合并语料中出现频率最高的相邻符号生成子词。不区分词首/词中直接合并高频序列空格可单独作为token处理。示例unhappy→un前缀 happy子词 → 2个tokenHello world→Hello完整词 空格 world完整词 → 3个tokenlearning123→learning123→ 5个token2. WordPieceGoogle的方法BERT等模型使用与BPE类似但优先保留词首用##标记非词首的子词表示“前面还有内容”避免歧义。通过##明确区分词首和词中空格通常不单独作为token会被隐式合并到词中。示例unhappy→un词首前缀 ##happy词中子词 → 2个tokenHello world→Helloworld空格被隐式处理不单独分词 → 2个tokenpre-trained→pre##-##train##ed→ 4个token##-表示标点是前面内容的延续3. SentencePiece语言无关LLaMA、T5等模型使用直接对**整个文本包括空格**进行分词用▁下划线表示词首的空格实现“语言无关”无需提前做空格/分词预处理适配中文、日文等无空格语言。把空格作为token的一部分用▁标记无需依赖空格分词子词拆分更灵活。示例unhappy→▁词首空格标记 unhappy→ 3个tokenHello world→▁Hello▁world每个词前加▁空格被替换为▁ → 2个tokenEmojis→▁→ 3个token开头的空格被标记为▁4. Unigram概率方法XLNet、ALBERT等模型使用基于概率模型保留语料中概率最高的子词组合从大词表开始删减保留最优token。倾向于保留更“合理”的长片段高频词可能直接作为完整token同样用▁处理空格和SentencePiece类似。示例unhappy→ 直接作为完整词概率最高 → 1个tokenlearning123→▁learning完整词 123合并的数字片段 → 3个tokenpre-trained→▁pre-trainedtrained作为完整词 → 4个token
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2630301.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!