sentencePiece入门小结

环境搭建

1.安装C++源码版

step1 安装环境依赖
ubuntu系统:

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

centos系统:

sudo yum install cmake pkg-config gperfools-devel

注:如果之前安装过cmake,但是3.1以下的,会编译不成功,因此需要安装更高版本的3.1以上版本的,具体更新办法戳这里

step2 下载项目并进行编译

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

安装过程中可能遇到的错误
运行spm_train报错:

spm_train: error while loading shared libraries: libsentencepiece.so.0: cannot open shared object file: No such file or directory

解决方案:

 echo "/usr/local/lib" >> /etc/ld.so.conf
 ldconfig

2.安装python调用接口

很简单,一句话就可以了,也支持训练和分词,但是在细节上还是没有源码版齐全,训练速度稍微慢点,因此还是建议装一个c++版,再装一个python包进行调用。

pip install sentencepiece

sentencePiece简介

可以看做是一个分词算法,而且用在做特定领域的新词发现上还是蛮不错的,包含4种模型训练方式:

  • unigram,就是一元分词,把句子从头到尾分成一个一个的汉字
  • bpe,字节对编码,首先将词分成一个一个的字符,然后在词的范围内统计字符对出现的次数,每次将次数最多的字符对保存起来,直到循环次数结束,具体推演的话可以看论文
  • char,字符型分词
  • word,使用这种模式,使用的语料首先要经过预分词

模型训练参数

重要参数:

  • input 每行一句的训练文本的路径
  • model_prefix 输出模型的路径
  • vocab_size 训练出的词库大小,不指定的话就是8000
  • character_coverage 模型中覆盖的字符数,默认是0.995,对于字符集丰富的中文最好是1
  • model_type 训练使用的模型,四种可选,不指定的话就使用unigram模型

其它比较有用的参数:

  • max_sentence_length 控制模型输入句子的长度,默认是4192,超过这个长度的句子会被过滤掉
  • max_sentencepiece_length 最大的句子块长度,默认是16
  • seed_sentencepiece_size 种子训练句子量,默认是100w条
  • num_threads 线程数,默认是开16个
  • use_all_vocab 使用所有的tokens作为词库,不过只对word/char 模型管用
  • input_sentence_size 训练器最大加载数量,默认为0,作者说为了避免内存溢出,只会选择100万句子进行训练,对应的就是seed_sentencepiece_size吧

训练模型时需要注意的点

1.语料太少,报错

RuntimeError: Internal: C:\projects\sentencepiece\src\trainer_interface.cc(468) [(trainer_spec_.vocab_size()) == (model_proto->pieces_size())]

这是因为保留的词小于4000,就会报这个错,sentencepiece最好拿大语料去训练
解决方法:

--hard_vocab_limit=false  #在训练命令的参数加一个这个参数就可以解决

2.训练大语料值得参考的参数设置

spm_train --input=my_input --model_prefix=en_clean_unigram --vocab_size=32000 --character_coverage=1.0 --model_type=unigram --num_threads=40 --input_sentence_size=5000000 --shuffle_input_sentence=true

python接口用法

之前在github项目上有python的具体用法,但是这几天不见了,先分享调用模型分词的代码,希望之后作者能够补上吧。

import sentencepiece as spm 
 sp = spm.SentencePieceProcessor() 
 sp.Load("test/test_model.model")   #加载训练好的模型
 test_text = "这是一个测试"
 sp.EncodeAsPieces(test_text)  #切词

参考资料

  • 11
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
SentencePiece是一种用于分词和构建词表的工具,而TextCNN是一个用于文本分类的模型。通过将二者结合,我们可以实现利用SentencePiece构建词表并使用TextCNN进行情感分析任务。 首先,我们使用SentencePiece工具对输入的文本进行分词处理。这个工具可以将句子切分为子词,并且可以根据文本的特点和需求进行自定义调整,如合并相似的词或将一些常用的词组合并为一个词。通过这一步骤,我们可以将文本转换为子词序列表示。 然后,我们将生成的子词序列作为输入,构建一个TextCNN模型。TextCNN模型由多层的卷积神经网络组成,通过卷积操作和池化操作来提取文本的特征。在每个卷积层中,我们可以设定多个卷积核,每个卷积核可以识别不同的特征模式。随后,将得到的特征进行池化操作,得到文本的固定长度的表示。最后,通过全连接层和softmax函数,将固定长度的表示映射为情感类别的概率分布。 在训练过程中,我们使用已标记好的情感类别的训练数据进行模型训练,并通过反向传播算法来更新模型的参数。在测试过程中,我们将待分析的文本输入到TextCNN模型中,利用模型输出的概率分布来判断文本的情感类别。 通过将SentencePiece和TextCNN相结合,我们可以构建一个能够处理分词和情感分析任务的模型。这样的模型在处理未知词汇和不规范文本时具有一定的鲁棒性,并且能够有效利用文本中的局部特征进行情感的判断。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值