《分词算法大揭秘:BPE、BBPE、WordPiece、ULM常见方法介绍》

分词算法是自然语言处理(NLP)中的一个重要预处理步骤,它将文本分割成更小的单元(如单词、子词或字符)。以下是几种常见的分词算法:Byte Pair Encoding (BPE)、Byte-level BPE (BBPE)、WordPiece 和 Unigram Language Model (ULM)


1. Byte Pair Encoding (BPE)

论文摘要

  • 标题:Neural Machine Translation of Rare Words with Subword Units
  • 连接:点击这里阅读论文全文

核心思想

从一个基础小词表开始,通过不断合并最高频的连续token对来产生新的token。
详细可参考BPE 算法原理及使用指南【深入浅出】
在这里插入图片描述

具体做法

  1. 准备基础词表,如英文中26个字母加上各种符号,并初始化ID。
  2. 基于基础词表将准备的语料拆分为最小单元,末尾添加</ w>(示例中使用_)。
  3. 在语料上统计单词内相邻单元对的频率,选择频率最高的单元对进行合并。
  4. 重复第3步直到达到预先设定的subword词表大小或下一个最高频率为1。

优缺点

  • 优点:可以有效地平衡词汇表大小和编码步数。
  • 缺点
    1. 无法提供带概率的多个分词结果。
    2. 局部高频对合并可能破坏全局更有意义的组合。

2. Byte-level BPE (BBPE)

论文信息

  • 标题:Neural Machine Translation with Byte-Level Subwords
  • 链接:https://arxiv.org/pdf/1909.03341

核心思想

该论文提出了一种名为BBPE(Byte-level BPE)的新型机器翻译方法,将传统BPE的字符级操作扩展到字节级别,直接处理UTF-8编码的字节序列。此举有助于避免传统字符级BPE中稀有字符(如生僻汉字)占用词表空间的问题。

具体做法

  • 使用基础词表,采用256的字节集,UTF-8编码。

优点

  1. 与BPE相媲美,但词表大为减小。
  2. 可在多语言间通过字节级别的子词实现更好的共享。
  3. 即使字符集不重叠,也可通过字节层面的共享实现良好的迁移。
  4. 高效的压缩效果,根据文本中的重复模式和常见片段来动态生成词汇表,尤其适用于大量重复内容的文本数据。
  5. 适用于多种类型的数据,包括文本、图像等,因其基于字节级别的编码方法。
  6. 无损压缩,确保压缩后的数据与原始数据无信息损失。
  7. 可解码性,可轻松将编码后的数据解码回原始数据。
  8. 灵活性高,可根据需求调整压缩效果和词汇表大小。

缺点

  1. 编码序列时可能略长于BPE,计算成本更高。
  2. 由byte解码时可能会遇到歧义,需要通过上下文信息和动态规划进行解码,确保输出有效句子。

BBPE和BPE的关键区别

在这里插入图片描述


3. WordPiece

论文:Fast WordPiece Tokenization

  • 链接:https://arxiv.org/pdf/2012.15524

核心思想

与BPE类似,Fast WordPiece Tokenization 从基础小词表出发,通过合并子词来生成最终词表。不同之处在于,WordPiece 选择合并的token对时基于token间的互信息而非频率。这里的互信息衡量的是两个子词同时出现的概率相比于它们各自独立出现的概率。
在这里插入图片描述

具体做法

  1. 输入:训练语料和词表大小 V。

  2. 准备基础词表,如英文字母和符号。

  3. 使用基础词表将语料拆分为最小单元。

  4. 基于拆分后的数据训练语言模型,可以是 unigram 语言模型,通过极大似然估计。
    在这里插入图片描述

  5. 选择能最大程度增加训练数据概率的 token 对进行合并。假设句子由 N 个子词组成 S = ( t 1 , t 2 , . . . , t N ) S = (t_1, t_2, ..., t_N) S=(t1,t2,...,tN),句子的似然值为所有子词概率的乘积:
    log ⁡ P ( s ) = ∑ i = 1 N log ⁡ P ( t i ) \log P(s) = \sum_{i=1}^{N} \log P(t_i) logP(s)=i=1NlogP(ti)
    合并相邻两个子词 x 和 y 产生新的子词 z,句子的似然值变化为两个子词之间的互信息:
    log ⁡ P ( t z ) − ( log ⁡ P ( t x ) + log ⁡ P ( t y ) ) = log ⁡ P ( t z ) P ( t x ) P ( t y ) \log P(t_z) - (\log P(t_x) + \log P(t_y)) = \log \frac{P(t_z)}{P(t_x)P(t_y)} logP(tz)(logP(tx)+logP(ty))=logP(tx)P(ty)P(tz)
    每次选择互信息最大的两个子词合并,基于子词在语言模型上的关联性,得分计算公式为:
    score = P ( t z ) P ( t x ) P ( t y ) \text{score} = \frac{P(t_z)}{P(t_x)P(t_y)} score=P(tx)P(ty)P(tz)

  6. 重复第 5 步直到达到预设的子词表大小或概率增量低于阈值。

优点

  • 能平衡词表大小和 OOV 问题

缺点

  • 可能产生一些不合理的子词或错误划分
  • 拼写错误敏感
  • 对前缀支持不够好

一种解决方案是将复合词和前缀拆开处理。


4. Unigram Language Model (ULM)

核心思想

初始化一个大词表,然后通过unigram语言模型计算删除不同subword造成的损失来代表subword的重要性,保留loss较大或者说重要性较高的subword。ULM会倾向于保留那些以较高频率出现在很多句子的分词结果中的子词,因为这些子词如果被删除,其损失会很大。

具体做法

  1. 输入训练语料和词表大小V

  2. 准备基础词表:初始化一个很大的词表,比如所有字符+高频ngram,也可以通过BPE算法初始化

  3. 针对当前词表,用语言模型(unigram lm)估计每个子词在语料上的概率,比如EM算法,维特比算法寻找最优分割
    在这里插入图片描述

  4. 计算删除每个subword后对总loss的影响,作为该subword的loss

  5. 将子词按照loss大小进行排序,保留前x%的子词;注意,单字符不能被丢弃,以免OOV

  6. 重复步骤2到4,直到词表大小减少到设定值

优点

  1. 使用的训练算法可以利用所有可能的分词结果,这是通过data sampling算法实现的
  2. 提出一种基于语言模型的分词算法,这种语言模型可以给多种分词结果赋予概率,从而可以学到其中的噪声
  3. 使用时也可以给出带概率的多个分词结果

缺点

  1. 效果与初始词表息息相关,初始的大词表要足够好,比如可以通过BPE来初始化
  2. 略显复杂

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/79966.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WordPress01 - 后台常用功能

最近些日子研究Wordpress&#xff0c;做些简单的笔记。 怎么安装Wordpress&#xff0c;怎么进的后台&#xff0c;这些咱就不唠了哈&#xff0c;网上到处是教程。 目录 1&#xff0c;Wordpress的后台 1-1&#xff0c; Posts(投稿) 1-2&#xff0c;Media(媒体) 1-3&#xf…

R8周:RNN实现阿尔茨海默病诊断

&#x1f368; 本文为&#x1f517;365天深度学习训练营中的学习记录博客 &#x1f356; 原作者&#xff1a;K同学啊 一、前期准备 1.设置GPU import numpy as np import pandas as pd import torch from torch import nn import torch.nn as nn import torch.nn.functi…

今天python练习题

目录 一、每日一言 二、练习题 三、效果展示 四、下次题目 五、总结 一、每日一言 不要害怕失败&#xff0c;失败可能成为我们前进的动力&#xff01; 二、练习题 有列表lst [[1,2,3],[4,5,6],[7,8,9]],取出其中的元素1/5/9组成新的列表 # 有列表lst [[1,2,3],[4,5,6],[…

机器人强化学习入门学习笔记(二)

基于上一篇的《机器人强化学习入门学习笔记》,在基于 MuJoCo 的仿真强化学习训练中,除了 PPO(Proximal Policy Optimization)之外,还有多个主流强化学习算法可用于训练机器人直行或其他复杂动作。 🧠 一、常见强化学习算法对比(可用于 MuJoCo) 算法类型特点适合场景PP…

用 DuckDB 高效分析 JSON 数据:从入门到实战

解析 JSON 文件进行分析常常充满挑战。无论你是在处理 API 响应、日志文件&#xff0c;还是应用数据&#xff0c;如果没有合适的工具&#xff0c;分析 JSON 都会非常耗时。 借助 DuckDB&#xff0c;你可以直接用 SQL 查询复杂的 JSON 文件&#xff0c;无需编写复杂的解析代码或…

从贴牌到品牌:出海官网如何让中国制造“贵”起来?

在全球经济一体化的当下&#xff0c;中美关税战如同一记重锤&#xff0c;给国际贸易格局带来了巨大震荡。自贸易摩擦爆发以来&#xff0c;双方多次调整关税政策&#xff0c;涉及的商品种类不断增多&#xff0c;税率持续攀升&#xff0c;众多中国企业的出口业务遭受重创&#xf…

react-13react中外部css引入以及style内联样式(动态className与动态style)

1. 外部css文件 - 普通引入 1.1 创建一个 CSS 文件&#xff0c;MyComponent.css。 /* MyComponent.css */ .my-class {color: red;font-size: 20px; } 1.2 组件中import引入 import React from react; import ./MyComponent.css; // 引入 CSS 文件function MyComponent() {r…

n8n 与智能体构建:开发自动化 AI 作业的基础平台

n8n 是一款开源的自动化流程构建平台&#xff0c;通过其模块化节点系统&#xff0c;开发者可以快速实现跨平台的任务编排、数据集成与智能交互。当 n8n 与大型语言模型&#xff08;LLM&#xff09;结合时&#xff0c;就能构建出具备感知、推理、执行能力的 AI 智能体&#xff0…

14.Spring Boot 3.1.5 集成 Spring Security 进行访问控制

14.Spring Boot 3.1.5 集成 Spring Security 进行访问控制 Spring Security 是一个强大且高度可定制的认证和访问控制框架&#xff0c;专为基于 Spring 的应用程序设计。它为基于 Java EE 的企业应用程序提供了全面的安全解决方案&#xff0c;包括 Web 应用程序安全和方法级安…

Linux学习笔记(二):Linux权限管理

文章目录 一、Linux下用户的分类1. Linux下用户分为两类&#xff1a;2. 这两类用户如何进行切换呢&#xff1f;3. 短暂提权 二、何为权限1. 什么是权限2. Linux的文件后缀意义 三、修改权限1. 设置文件的访问权限——chmod2. 修改文件拥有者——chown3. 修改文件所属组——chgr…

学习alpha,第2个alpha

alphas (-1 * ts_corr(rank(ts_delta(log(volume), 2)), rank(((close - open) / open)), 6)) 先分析操作符从左到右 ts_corr: Pearson 相关度量两个变量之间的线性关系。当变量呈正态分布且关系呈线性时&#xff0c;它最有效。 ts_corr(vwap, close, 20)是一个计算时间序列相…

Paddle Serving|部署一个自己的OCR识别服务器

前言 之前使用C部署了自己的OCR识别服务器&#xff0c;Socket网络传输部分是自己写的&#xff0c;回过头来一看&#xff0c;自己犯傻了&#xff0c;PaddleOCR本来就有自己的OCR服务器项目&#xff0c;叫PaddleServing&#xff0c;这里记录一下部署过程。 1 下载依赖环境 1.1 …

React Native【详解】搭建开发环境,创建项目,启动项目

下载安装 node https://nodejs.cn/download/ 查看 npx 版本 npx -v若无 npx 则安装 npm install -g npx创建项目 npx create-expo-applatestRN_demo 为自定义的项目名称 下载安装 Python 2.7 下载安装 JAVA JDK https://www.oracle.com/java/technologies/downloads/#jdk24-…

NVIDIA Halos:智能汽车革命中的全栈式安全系统

高级辅助驾驶行业正面临一个尴尬的"安全悖论"——传感器数量翻倍的同时&#xff0c;事故率曲线却迟迟不见明显下降。究其原因&#xff0c;当前行业普遍存在三大技术困局&#xff1a; 碎片化安全方案 传统方案就像"打补丁"&#xff0c;激光雷达厂商只管点云…

数据资产管理与AI融合:物联网时代的新征程

一、引言 在当今数字化浪潮席卷全球的时代&#xff0c;数据资产已成为企业和组织的核心竞争力之一。随着物联网&#xff08;IoT&#xff09;技术的飞速发展&#xff0c;海量的数据如潮水般涌来&#xff0c;如何高效地管理和利用这些数据资产成为了亟待解决的问题。与此同时&am…

MySQL 表的内外连接

文章目录 表的内外连接&#xff08;重点&#xff09;内连接外连接左外连接右外连接 表的内外连接&#xff08;重点&#xff09; 内连接 内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选&#xff0c;我们前面学习的查询都是内连接&#xff0c;也是在开发过程中使…

VTK 交互类介绍

基本概念 交互器(Interactor): 处理用户输入事件的基础类 交互样式(InteractorStyle): 定义具体的交互行为 Widgets: 可交互的UI组件,如滑块、按钮等 Picker: 用于选择场景中的对象 常用交互类 类名功能描述vtkRenderWindowInteractor渲染窗口交互器vtkInteractorStyle交互样式…

C语言动态库与静态库编译测试示例详细介绍终结篇

C语言动态库与静态库编译链接时的详细对比与示例 下面我将提供更详细的示例&#xff0c;并通过对比表格清晰地展示静态库和动态库的特性差异以及它们之间的各种链接关系。 ## 1. 静态库与动态库特性对比 | 特性 | 静态库(.a/.lib) | 动态…

神经网络:节点、隐藏层与非线性学习

神经网络&#xff1a;节点、隐藏层与非线性学习 摘要&#xff1a; 神经网络是机器学习领域中一种强大的工具&#xff0c;能够通过复杂的结构学习数据中的非线性关系。本文从基础的线性模型出发&#xff0c;逐步深入探讨神经网络中节点和隐藏层的作用&#xff0c;以及它们如何…

POI创建Excel文件

文章目录 1、背景2、创建表格2.1 定义表头对象2.2 Excel生成器2.3 创建模板2.4 处理Excel表头2.5 处理Excel内容单元格样式2.6 处理单个表头 3、追加sheet4、静态工具5、单元测试6、完整代码示例 1、背景 需求中有需要用户自定义Excel表格表头&#xff0c;然后生成Excel文件&a…