最近在用DeBERTa模型跑一些下游任务,了解到了sentencepiece模型,用于替代预训练模型中的词表。

sentencepiece 是google开源的文本Tokenzier工具,本身提供四种切分方法。包括:char, word, byte-pair-encoding(bpe), unigram language model(unigram 默认类别)

经过实验对比,我发现针对中文文本,采用bpe的效果还算可以,但也存在一些问题,最好手动再进行对其进行调整。

通过对自己的文本进行训练,最后得到.model 和.vocab文件可供使用。

整个过程流程如下:

  • 安装 sentencepiece    

整个过程比较简单,Github上有详细的介绍,这里我使用vcpkg进行安装。​​

Installation

Python module

SentencePiece provides Python wrapper that supports both SentencePiece training and segmentation. You can install Python binary package of SentencePiece with.

% pip install sentencepiece

For more detail, see Python module

Build and install SentencePiece command line tools from C++ source

The following tools and libraries are required to build SentencePiece:

  • cmake
  • C++11 compiler
  • gperftools library (optional, 10-40% performance improvement can be obtained.)

On Ubuntu, the build tools can be installed with apt-get:

% sudo apt-get install cmake build-essential pkg-config libgoogle-perftools-dev

Then, you can build and install command line tools as follows.

% git clone https://github.com/google/sentencepiece.git
% cd sentencepiece
% mkdir build
% cd build
% cmake ..
% make -j $(nproc)
% sudo make install
% sudo ldconfig -v

On OSX/macOS, replace the last command with sudo update_dyld_shared_cache

Build and install using vcpkg

You can download and install sentencepiece using the vcpkg dependency manager:

git clone https://github.com/Microsoft/vcpkg.git
cd vcpkg
./bootstrap-vcpkg.sh
./vcpkg integrate install
./vcpkg install sentencepiece

The sentencepiece port in vcpkg is kept up to date by Microsoft team members and community contributors. If the version is out of date, please create an issue or pull request on the vcpkg repository.

  • 训练sentencepiece模型

很简单,也是一句话的事,不过如果采用bpe进行训练的话,随着vocab_size的上升,时间会变得很长。我针对一个20GB+的中文文本进行训练,将vocab_size设置为320000,后台运行了一整天。

Train SentencePiece Model

% spm_train --input=<input> --model_prefix=<model_name> --vocab_size=8000 --character_coverage=1.0 --model_type=<type>
  • --input: one-sentence-per-line raw corpus file. No need to run tokenizer, normalizer or preprocessor. By default, SentencePiece normalizes the input with Unicode NFKC. You can pass a comma-separated list of files.
  • --model_prefix: output model name prefix. <model_name>.model and <model_name>.vocab are generated.
  • --vocab_size: vocabulary size, e.g., 8000, 16000, or 32000
  • --character_coverage: amount of characters covered by the model, good defaults are: 0.9995 for languages with rich character set like Japanese or Chinese and 1.0 for other languages with small character set.
  • --model_type: model type. Choose from unigram (default), bpechar, or word. The input sentence must be pretokenized when using word type.

代码如图所示: 

import sentencepiece as spmspm.SentencePieceTrainer.Train(input='/data/data.txt', model_prefix='/data/sentencepiece/mypiece', vocab_size=320000, character_coverage=1, model_type='bpe', num_threads=96)

再之后就可以导入训练好的模型进行使用啦。

关于效果:

  • 首先有个疑问,是不是词表越大越好?是不是vocab_size越大越好?

针对这个问题,我在网上简单检索了一下发现知乎上有位作者烛之文做了相关实验,对比了中文新闻文本数据集下的spm+cnn模型,词表8000,20000,320000(sentencepiece能训练的最大词表)的效果。https://zhuanlan.zhihu.com/p/307485012

从他的实验结果可以看出,随着词表增大,在训练集上更早的达到“潜在的最好效果”,而在验证集上的表现越来越差。理论上不是词表越大越好吗,它毕竟降低了未登录词出现的概率。他认为是该新闻数据集的每个label的特征都是很明显的,而且这些影响特征都是可用高频词汇组合出来的。如果加大词表,就相当于training过程中,让model学到很多label的噪声特征,导致在验证集上效果降低。

使用sentencepiece模型替换词表相关推荐

  1. unity中移动部件靠近时触发动画,模型替换特效演示

    前的游戏项目,需要找到正确的榫卯部件,移动到靠近正确拼接的部件时,触发模型的拼接动画,榫卯物品开始拼接,动画开始4s后触发"变身"特效,模型替换,拼接完成后会有指示的游戏UI提示出 ...

  2. AI Earth 深度学习模型替换数值天气预报模型中的参数化方案-大气辐射传输方案

    1.背景 太阳辐射和热辐射是大气和海洋运动的最根本的驱动力.大气辐射传输过程实际上已经可以通过一种叫做LBLRTM的辐射模型精确计算,但是LBLRTM模型同时也最为耗时.因此,有各种各样的辐射传输参数 ...

  3. HTC Vive 交互开发——手部模型替换和抓取实现

    手部模型替换和抓取实现     可以在BasicVRHand.unitypackage包中中获取手部模型. Hierarchy面板的VRTK_SDK配置 左右控制器Inspector面板设置 usin ...

  4. Unity中用第三方手部模型替换Leapmotion手部模型教程

    所有模型手都可以替换,需要先在MAYA按照leapmotion的骨骼进行蒙皮,然后再放到场景里,挂上相应的代码,本人博客平时没时间上,有问题可联系QQ774768871 已完成的手部模型,可用Leap ...

  5. unity3D VR手柄模型替换

    using System.Collections; using System.Collections.Generic; using UnityEngine; /// <summary> / ...

  6. CLM模型替换大气强迫数据 GSWP3---CMFD

    目录 1.数据准备_Precip, Solar, TPHWL 2.操作步骤 1.数据准备_Precip, Solar, TPHWL 以降水数据为例,查看GSWP3大气强迫数据nc数据的格式,将cmfd ...

  7. dota2模型替换mod

    老物 2年前做的mod .... http://www.dota2rpg.com/forum.php?mod=viewthread&tid=3892&extra=page%3D2 起源 ...

  8. 关于创建和替换STK软件的3D模型图方法及其介绍

    1.替换STK 3D模型 当我们在使用STK软件时,创建例如卫星的飞行器等,可以在STK界面修改卫星默认的模型形状如下图所示: 卫星默认形状 在properties中下拉找到Model 其中Moder ...

  9. Unity中替换模型的方法

    制作项目时,经常会遇到替换人物模型的情况.为了方便,会采用显示和隐藏的方法. 但是当模型处于隐藏状态时,是无法找到的. 如果在Unity界面直接拖拽,虽然简单,但是当模型有改动需要再次替换的时候,又要 ...

  10. 【加餐】如何在SteamVR 2 中替换手部模型

    根据学员朋友的反馈,新增3节加餐课时,关于如何在新版SteamVR中基于Skeleton Input实现手部模型的替换. 在VR应用程序中,要呈现自制的手部模型,传统的方式是直接将模型导入,放置在手柄 ...

最新文章

  1. Android之Handler有感(二)
  2. 计数排序/Counting Sort
  3. 前滴滴出行产品经理刘飞:写给产品经理的说明书(上)
  4. ffmpeg 如何把左右声道_耳机里的乾坤 | 左右声道?耳返?这些耳机常识,爱听音乐的你一定不会错过...
  5. BFS 算法解题套路框架+几个用于BFS的set与queue用法和技巧
  6. python输入三行数据_3行Python代码就能获取海量数据?
  7. EXCEL VLOOKUP函数的使用
  8. 草根站长的创业路:说说这两年的创业经历
  9. ios9提取安装包ipa_iOS获取App ipa包
  10. 【jiasuba】教你快速更改系统图标大小
  11. 总管家云CRM 解除业务员的后顾之忧
  12. 2020年7月的自我鉴定(非技术篇)
  13. revel MySQL_Go-Revel:Gorp连接MySQL
  14. js画布Canvas
  15. 洛谷 U19159 采摘毒瘤
  16. 小米6刷Android10以及Xposed
  17. 圆周率用计算机能算出来不,圆周率到底能不能算尽?人类拿超级计算机算了,结果不敢相信!...
  18. Hi3516DV300
  19. 【Python大作业】耦合网络信息传播
  20. Android实现截屏

热门文章

  1. HTML页面模板代码
  2. Python连接Access数据库详细步骤
  3. CSS 图片去色处理
  4. bing翻译api php,免费翻译接口
  5. 2022年ADB 命令知多少?一文2000字详细 ADB 命令大全来啦
  6. Java8下载安装详细教程,环境配置,Java、jre下载安装教程,此电脑图标位置,电脑处理器版本查询查询
  7. DELMIA软件物流仿真:使用输送带输送物料的仿真操作方法
  8. 视频实现blob加密
  9. 手机型号大全_骁龙710手机推荐 骁龙710手机新品年度盘点:共12款
  10. Mysql安装包安装教程(亲测简单高效版)