python统计不同字符的个数编码_python – 如何计算字符串的每个字符的位数? (BPC)...

每个字符的位数是压缩方法性能的度量.它是通过压缩字符串然后测量压缩表示总共取多少比特,除以原始字符串中有多少个符号(即字符)来应用的.压缩版本所占的每个字符的位数越少,压缩方法就越有效.

换句话说,作者使用他们的生成语言模型进行压缩,并假设所得压缩方法的高效性表明潜在生成模型的高准确性.

在第1节中,他们指出:

The goal of the paper is to demonstrate the power of large RNNs trained with the new Hessian-Free optimizer by applying them to the task of predicting the next character in a stream of text. This is an important problem because a better character-level language model could improve compression of text files (Rissanen & Langdon, 1979) […]

Rissanen& Langdon(1979)的文章是arithmetic coding的原始描述,这是一种众所周知的文本压缩方法.

算术编码基于生成语言模型运行,例如作者建立的语言模型.给定(可能是空的)字符序列,模型预测接下来可能出现的字符.人类也可以做到这一点,例如,给定输入序列你好w,我们可以猜测下一个字符的概率:o具有高概率(因为hello world是一个似是而非的延续),但是像h中的字符我在哪里可以找到..或者我在你好的温斯顿也有非零概率.因此,我们可以为这个特定的输入建立字符的概率分布,这正是作者的生成模型所做的.

这与算术编码自然相符:给定已经编码的输入序列,下一个字符的比特序列由可能字符的概率分布确定:具有高概率的字符获得短比特序列,具有低概率的字符获得更长的序列.然后从输入读取下一个字符,并使用从概率分布确定的比特序列进行编码.如果语言模型是好的,那么将以高概率预测字符,因此比特序列将是短的.然后压缩继续下一个字符,再次使用输入到目前为止建立字符的概率分布,确定比特序列,然后读取实际的下一个字符并相应地对其进行编码.

注意,在每个步骤中使用生成模型来建立新的概率分布.所以这是自适应算术编码的一个例子.

在读取和编码所有输入之后,测量结果的总长度(以位为单位)并除以原始未压缩输入中的字符数.如果模型良好,它将以高精度预测字符,因此每个字符使用的位序列平均较短,因此每个字符的总位数将较低.

关于即用型实现

我不知道算术编码的实现,可以轻松集成您自己的生成语言模型.大多数实现在运行中构建它们自己的自适应模型,即它们在读取输入时调整字符频率表.

一个选项可能是从arcode开始.我查看了代码,似乎可以集成您自己的模型,虽然它不是很容易. self._ranges成员代表语言模型;基本上作为累积字符频率的数组,因此self._ranges [ord(‘d’)]是小于d的所有字符的总相对频率(即a,b,c,如果我们假设只有小写字母字符).您必须在每个输入字符后修改该数组,并将从生成模型获得的字符概率映射到字符频率范围.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值