美文网首页
Tokenize/Wordcut方法汇总

Tokenize/Wordcut方法汇总

作者: 第一个读书笔记 | 来源:发表于2021-07-23 09:44 被阅读0次

    关键词: BPE, WordPiece, Unigram, SentencePiece

    https://arxiv.org/pdf/2004.03720.pdf
    https://huggingface.co/transformers/tokenizer_summary.html?highlight=tokenizer

    目录

    1. 预训练模型使用的分词方式统计;
    2. 常见的分词方法:
      2.1 算法
      2.2 代码

    预训练模型使用的分词方式

    分词 模型
    rule-based Transformer XL
    BPE GPT
    WordPiece BERT, DistillBERT, Electra
    Unigram 作为SentencePiece子模块
    SentencePiece XLNet, ALBERT, T5

    常见的分词方法

    Rule-based tokenization

    根据标点符合和空格对文本进行切割。
    一般来说,transformer的模型,很少有词表大于5w的,Transformer XL使用的就是rule-based模型,词表大小为267735。

    1. 这种方式会导致词表过大,在进行embedding操作时,非常耗时耗memory;
    2. 如果遇到OOV的单词,可能需要用特殊字符(比如[UNKNOWN])表示,从而不能很好的学习到它的语义信息。

    Subword tokenization

    混合了单词和字母的分词方式。
    分词原则:高频单词不再进行细粒度的分割,但低频单词会被切分成subword。

    比如:对低频词'annoyingly',可以分解成'annoying'和'ly',分解后的subword往往比原词的出现频率较高。

    如果遇到OOV的单词,可以将它分解成已知的subword,从而学习到它的语义信息。

    常见的subword 分词方式为BPE, WordPiece, Unigram, SentencePiece。

    1. BPE (Byte-pair encoding)

    Neural Machine Translation of Rare Words with Subword Units (Sennrich et al., 2015).

    BPE

    步骤

    1. 给定语料,将语料分割成词,统计词频,确定词表大小;
      备注:一般中文直接按照字分割,英文按空格分割成完整单词。
    2. 将词分为subword,并在末尾添加<\w>;
    3. 统计subword的频次,merge最高频次的subword对,成为新的subword;
    4. 重复3步骤,直到满足词表大小或者最高频次为1。

    2. WordPiece

    Japanese and Korean Voice Search (Schuster et al., 2012)

    BPE根据频次选择合并的bigram,WordPiece用的n-gram LM 模型的likelihood选择合并的对象。

    假设subword-pair为<'u','g'>,如果<'ug'>的likelihood高于subword-pair<'ux'>,<'xg'>,x表示其他token组合,则合并这对subword。

    3. Unigram

    Subword Regularization: Improving Neural Network Translation Models with Multiple Subword Candidates (Kudo, 2018)

    BPE和WordPiece是自下而上的构建方式,从subword到word,Unigram相反,通过语言模型,对词表中的每一个symbol,计算删去这个symbol后的log-likelihood损失。按照损失排序,去掉loss损失少的symbol。
    对词x,这个词可能被切割的所有可能的subwordS(x_i),损失可表示为:
    L = -\sum_i log\ (\sum_{x \in S(x_i)} p(x))

    一般会去掉10%or20%词表大小的symbol。

    Unigram LM

    步骤

    1. 给定语料D,对文本切词,构建初始的词表V,确定目标词表大小;
    2. 如果词表V数量大于目标词表;
      2.1 训练语言模型LM,参数为\theta;
      2.2 对词表V中的每个词t,计算没有这个词后的LM的损失:
      L_t <- p_{\theta}(D) - p_{\theta'}(D)
      2.3 min(|V| - k, [\alpha|V|], \alpha \in [0,1],基于该式,去掉loss最小的词;
    3. 重复步骤2,训练LM,返回词表和LM的参数\theta

    3. SentencePiece

    SentencePiece: A simple and language independent subword tokenizer and detokenizer for Neural Text Processing (Kudo et al., 2018)

    前面提到的subword分词手段,都需要对文本切割成词,再做unigram分词。
    SentencePiece的输入是原始文本,初始的分割方式包含不限于空格分词,接着再进行subword的分词。

    相关文章

      网友评论

          本文标题:Tokenize/Wordcut方法汇总

          本文链接:https://www.haomeiwen.com/subject/ejcosltx.html