简介

发现一篇写的更好的,讲的很清楚,传送门

Byte Pair Encoding(BPE)

详细内容可参考这里
BPE(字节对)编码或二元编码是一种简单的数据压缩形式,其中最常见的一对连续字节数据被替换为该数据中不存在的字节。后期使用时需要一个替换表来重建原始数据。OpenAI GPT-2 与Facebook RoBERTa均采用此方法构建subword vector.
算法:

  • 准备足够大的训练语料
  • 确定期望的subword词表大小
  • 将单词拆分为字符序列并在末尾添加后缀“ </ w>”,统计单词频率。本阶段的subword的粒度是字符。例如,“ low”的频率为5,那么我们将其改写为“ l o w </ w>”:5
  • 统计每一个连续字节对的出现频率,选择最高频者合并成新的subword
  • 重复第4步直到达到第2步设定的subword词表大小或下一个最高频的字节对出现频率为1

优点是可以有效地平衡词汇表大小和步数(编码句子所需的token数量)。缺点是由于是按照最大频率合并的因此导致那些平凡出现的word会单独成词而包含稀有字母组合的word会被切成很小的部分

WordPiece

WordPiece算法可以看作是BPE的变种。不同点在于,WordPiece基于概率生成新的subword而不是下一最高频字节对。
算法

  • 准备足够大的训练语料
  • 确定期望的subword词表大小
  • 将单词拆分成字符序列
  • 基于第3步数据训练语言模型
  • 从所有可能的subword单元中选择加入语言模型后能最大程度地增加训练数据概率的单元作为新的单元
  • 重复第5步直到达到第2步设定的subword词表大小或概率增量低于某一阈值

Unigram Language Model(ULM)

ULM是另外一种subword分隔算法,它能够输出带概率的多个子词分段。它引入了一个假设:所有subword的出现都是独立的,并且subword序列由subword出现概率的乘积产生。WordPiece和ULM都利用语言模型建立subword词表。
算法:

  • 准备足够大的训练语料
  • 确定期望的subword词表大小
  • 给定词序列优化下一个词出现的概率
  • 计算每个subword的损失
  • 基于损失对subword排序并保留前X%。为了避免OOV,建议保留字符级的单元
  • 重复第3至第5步直到达到第2步设定的subword词表大小或第5步的结果不再变化

相关论文

ULM:Subword Regularization: Improving Neural Network Translation Models with Multiple Subword Candidates

文章链接:https://arxiv.org/pdf/1804.10959.pdf
这篇文章主要有以下两个贡献:

  • 提出了一种简单的NMT训练算法来集成多个候选segmentation
  • 提出了一种新的基于语言模型的子词切分算法,该算法能够输出具有概率的多个字词分段

本文只关注第二个部分,
unigram语言模型假设每个子词独立出现。因此给定包含 ∣ D ∣ |D| ∣D∣个文档的语料库,则subword序列 ∗ ∗ x ∗ ∗ = ( x 2 , . . . , x M ) **x**=(x_2, ...,x_M) ∗∗x∗∗=(x2​,...,xM​)的概率可以表示为每个subword出现概率的乘积:
P ( x ) = ∏ i = 1 M ( p ( x i ) ) P(x)=\prod_{i=1}^M(p(x_i)) P(x)=i=1∏M​(p(xi​))
∀ i , x i ∈ V , ∑ x ∈ V p ( x ) = 1 {\forall i},x_i \in V,\sum_{x \in V}p(x)=1 ∀i,xi​∈V,x∈V∑​p(x)=1
其中 V V V为预先定义好的词典,输入句子 X X X的概率最大的分词 x ∗ x^* x∗可以通过Viterbi算法求出:
x ∗ = arg max ⁡ x ∈ S ( X ) P ( x ) x^* =\argmax_{x \in S(X)} P(x) x∗=x∈S(X)argmax​P(x)
其中 S ( X ) S(X) S(X)为输入语句 X X X对应的候选切词集合。当给定词典 V V V则子词共现概率 p ( x i ) p(x_i) p(xi​)可以通过最大化
L = ∑ s = 1 ∣ D ∣ l o g ( P ( X ( s ) ) ) = ∑ s = 1 ∣ D ∣ l o g ( ∑ x ∈ S ( X ( s ) ) P ( x ) ) L=\sum_{s=1}^{|D|} log(P(X^(s)))=\sum_{s=1}^{|D|}log(\sum_{x \in S(X^(s))}P(x)) L=s=1∑∣D∣​log(P(X(s)))=s=1∑∣D∣​log(x∈S(X(s))∑​P(x))
使用EM算法求解,其中 p ( x i ) p(x_i) p(xi​)为隐变量。

具体的步骤如下:

  • 首先启发式地从训练语料库中生成一个相当大的种子词汇表
  • 重复以下步骤知道词表的大小达到设定阈值:
    • 固定词表,使用EM算法最优化p(x)
    • 对于每一个subword x i x_i xi​计算相应的 l o s s i loss_i lossi​, l o s s i loss_i lossi​表示当将 x i x_i xi​从当前词表中移除后似然概率 L L L减少的幅度
    • 将symbols按照 l o s s i loss_i lossi​排序并保留前 β \beta β%个,需要注意的是词典内必须保存单个字符,避免oov

nlp subword(BPE、ULM)简介相关推荐

  1. NLP:Transformer的简介(优缺点)、架构详解之详细攻略

    NLP:Transformer的简介(优缺点).架构详解之详细攻略 目录 Transformer的简介(优缺点).架构详解之详细攻略 1.Transformer的简介 (1).Transforme的四 ...

  2. NLP Subword三大算法原理:BPE、WordPiece、ULM

    Subword算法如今已经成为了一个重要的NLP模型性能提升方法.自从2018年BERT横空出世横扫NLP界各大排行榜之后,各路预训练语言模型如同雨后春笋般涌现,其中Subword算法在其中已经成为标 ...

  3. 深入理解NLP Subword算法:BPE、WordPiece、ULM

    CHANGLOG 4/18/2020,规范化引用 3/27/2020,新增目录. 前言 Subword算法如今已经成为了一个重要的NLP模型性能提升方法.自从2018年BERT横空出世横扫NLP界各大 ...

  4. 理解 NLP Subword算法:BPE、WordPiece、ULM

    前言 Subword算法如今已经成为了一个重要的NLP模型性能提升方法.自从2018年BERT横空出世横扫NLP界各大排行榜之后,各路预训练语言模型如同雨后春笋般涌现,其中Subword算法在其中已经 ...

  5. 深入理解NLP Subword算法:BPE、WordPiece、ULM ,sentencepiece

    https://zhuanlan.zhihu.com/p/86965595 https://zhuanlan.zhihu.com/p/75271211

  6. NLP 基础应用研究方向简介

    介绍: NLP 包含基础研究.应用研究两个方面,其中,基础研究包括数据相关以及分析相关,应用研究包括NLP本领域以及相关领域研究. 1-1 数据(基础)相关:数据抓取.数据预处理(字符编码).数据存储 ...

  7. NLP—word2vec词向量简介

    NLP处理的数据都是文字,而文字是无法直接被计算机计算的,于是人们想出了使用独热编码的方式来表示单词. <span style="font-size:16px;">浙江 ...

  8. 自然语言处理:NLP的研究内容简介

    关于NLP的研究领域,没有一个非常严格的定义进行限定,笼统的说,那些尝试让机器和人类用语进行交互的研究都属于NLP研究的范畴,例如信息提取.情感分析.翻译.问答.推理等.详细地列举出所有研究内容并不现 ...

  9. 【NLP】Transformer大家庭简介!

    炼丹笔记干货 作者:Lilian Transformer Family 01 准备 02 Attention 以及 Self-Attention 1.Attention 是神经网络中的一种机制:模型可 ...

最新文章

  1. 滴滴大整改:9月8日至15日暂停深夜叫车服务
  2. 知乎上看到一个关注软件测试的问答,太直接了
  3. GIS软件开发工具包TatukGIS Developer Kernel 发布 v11.3.0-Unstable1丨附下载
  4. java的集合:List、Set和Map
  5. c++ -- 构造函数与析构函数
  6. java静态路由_Linux添加静态路由两种实现方法解析
  7. SQL server连接到服务器,无法连接到 (local)。在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请验证实例名称是否正确并且 SQL Se
  8. Activity动态增加Fragment
  9. CRM WebClient UI outbound plug的使用
  10. JavaScript模仿块级作用域
  11. 软件唯有开源才是出路?
  12. error C2440: “<function-style-cast>”: 无法从“IplImage *”转换为“cv::Mat”
  13. group by having执行顺序
  14. 高效记忆/形象记忆(05)110数字编码表 0-9
  15. html网页设计模板
  16. Ubuntu桌面卡死解决办法
  17. 快速缓解过敏的简单技巧
  18. CAN位时序及相关参数解读
  19. 关于JAVA的CLASSPATH
  20. IN和Like的使用

热门文章

  1. Debian10搭建open虚拟专用网
  2. Android霓虹灯布局
  3. PyMol展示球棍模型及双键
  4. 论计算机软件的法律保护,论计算机软件的法律保护
  5. confluence脑裂
  6. 构建ML分子系统发育树如何分区
  7. C语言C#参数对照表
  8. uva 821(floyd)
  9. Python之生成器表达式
  10. iba测评题目_【网龙公司IBA测试多少分算过,难度大吗?下周考试,在刷题T T】-看准网...