首页 > 编程知识 正文

CTC中文名字是什么(电子商务ctc是什么意思)

时间:2023-05-03 08:31:58 阅读:66272 作者:4758

目录

CTC

RNN CTC

谈及连接身份认证(CTC ),很多人的第一反应是CTC擅长单行验证码识别。

ctc可以提高单行文本识别的鲁棒性。 今天在David 9上分享的这篇文章有几个重点直观的观点,使ctc的故事简洁易懂,所以在这里和大家一起添加ctc。

ctc不是框架,而是连接在神经网络后的一个归纳字符连接性的操作

cnn提取图像的像素特征,rnn提取图像的时间序列特征,ctc总结字符之间的连接特性。

CTC的好处:

由于手写文字随机性,可以人工标记文字出现的像素范围,但由于麻烦,ctc为哪些像素范围对应的字符

如上图所示,在标记有“t”的位置出现t文字,在标记有o的区域出现o文字。 嗯,是的ctc总结了上述书写规则。 不需要人工标记。 你只需要做的是提供loss函数模特培训。

CTC是如何工作的?

ctc的编码有需要注意的地方。 也就是说,针对重复字符的处理。 如果实际字符串为“too”且编码时也为“to”,则会与实际字符串“to”混淆,如上面示例中的“to”所示。

所以,在重复字符处引入占位符“-”。 让我举几个例子。

然后,ctc计算loss以找到与最可能的像素区域相对应的字符。 其实,这里的loss计算的本质是概率的总结:

如上图所示,对于最简单的时间序列为2的t0t1的字符识别,可能的字符为“a”、“b”和“-”,颜色越深表示概率越高。 如果真文字为空,则相对于" "概率为0.6*0.6=0.36

另一方面,实际字符为" a "的概率不仅是" aa "即0.4*0.4,在实时中," aa "、" a-"及"-a "都表示" a ",所以为" a "的概率

0.4 *0. 40.4 * 0.6 * 0.4=0. 160.240.24=0.64

所以“a”的概率高于空“”的概率! 通过计算概率,可以对此前的神经网络进行定向传播更新。

最后,ctc解码也是概率最高的路径:

在传统的语音识别中,需要知道各帧的数据与哪个发音要素相对应。 例如,如下图所示,可以知道哪个帧对应于哪个标签,然后有效地训练。 训练数据前需要进行语音对齐的预处理。

采用CTC作为损耗函数的声学模型训练是一种完整的端到端声学模型训练,不需要提前输入其数据,只能通过输入序列和输出序列进行训练。 不需要这样对齐数据---标注,I企鹅CTC直接输出数组预测的概率。

CTC的方法是在意从输入序列到输出序列的结果,因此只关心预测输出的序列是否与实际序列接近(是否相同),不关心预测输出序列内的各结果在时间上是否与输入的序列正好一致。

CTC引入了blank (在这个帧中没有预测值),并且认为与每个预测的分类相对应的整个音频中的一个spike ) (牢固的太阳镜),以及其他不牢固的太阳镜的位置是blank。 对于一个语音,CTC的最后一个输出是spike (踏实的太阳镜)序列,不在乎每个音素持续了多长时间。

如图2所示,以前面的nihao的发音为例,CTC预测的系列结果可能比与实际发音对应的时间点在时间上稍微延迟,除此之外的时间点被标记为blank。

RNN CTC OCR识别也可以使用RNN CTC的模型来完成,将图像中包含字符的各列的数据输入到一个序列中。 RNN CTC模型,输出为对应汉字,

因为要好多列才组成一个汉字,所以输入的序列的长度远大于输出序列的长度。而且这种实现方式的OCR识别,也不需要事先准确的检测到文字的位置,只要这个序列中包含这些文字就好了。

CTC是一种损失函数,它用来衡量输入的序列数据经过神经网络之后,和真实的输出相差有多少。

比如输入一个200帧的音频数据,真实的输出是长度为5的结果。 经过神经网络处理之后,出来的还是序列长度是200的数据。比如有两个人都说了一句nihao这句话,他们的真实输出结果都是nihao这5个有序的音素,但是因为每个人的发音特点不一样,比如,有的人说的快有的人说的慢,原始的音频数据在经过神经网络计算之后,第一个人得到的结果可能是:nnnniiiiii...hhhhhaaaaaooo(长度是200),第二个人说的话得到的结果可能是:niiiiii...hhhhhaaaaaooo(长度是200)。这两种结果都是属于正确的计算结果,可以想象,长度为200的数据,最后可以对应上nihao这个发音顺序的结果是非常多的。CTC就是用在这种序列有多种可能性的情况下,计算和最后真实序列值的损失值的方法。

详细描述如下:

训练集合为S={(x1,z1),(x2,z2),...(xN,zN)}S={(x1,z1),(x2,z2),...(xN,zN)}, 表示有NN个训练样本,xx是输入样本,zz是对应的真实输出的label。一个样本的输入是一个序列,输出的label也是一个序列,输入的序列长度大于输出的序列长度。

对于其中一个样本(x,z)(x,z),x=(x1,x2,x3,...,xT)x=(x1,x2,x3,...,xT)表示一个长度为T帧的数据,每一帧的数据是一个维度为m的向量,即每个xi∈Rmxi∈Rm。 xixi可以理解为对于一段语音,每25ms作为一帧,其中第ii帧的数据经过MFCC计算后得到的结果。

z=(z1,z2,z3,...zU)z=(z1,z2,z3,...zU)表示这段样本语音对应的正确的音素。比如,一段发音“你好”的声音,经过MFCC计算后,得到特征xx, 它的文本信息是“你好”,对应的音素信息是z=[n,i,h,a,o]z=[n,i,h,a,o](这里暂且将每个拼音的字母当做一个音素)。

 

ytk(k=1,2,3,...n,t=1,2,3,...,T)ykt(k=1,2,3,...n,t=1,2,3,...,T)表示在tt时刻,发音为音素kk的概率,其中音素的种类个数一共nn个, kk表示第kk个音素,在一帧的数据上所有的音素概率加起来为1。即:

这个过程可以看做是对输入的特征数据xx做了变换NwNw:(Rm)T→(Rn)T(Rm)T→(Rn)T,其中NwNw表示RNN的变换,ww表示RNN中的参数集合。

过程入下图所示:

以一段“你好”的语音为例,经过MFCC特征提取后产生了30帧,每帧含有12个特征,即x∈R30×14x∈R30×14(这里以14个音素为例,实际上音素有200个左右),矩阵里的每一列之和为1。后面的基于CTC-loss的训练就是基于后验概率yy计算得到的。

 

参考:

https://xiaodu.io/ctc-explained/

http://nooverfit.com/wp/ctc%E7%9A%84%E7%9B%B4%E8%A7%82%E7%90%86%E8%A7%A3%EF%BC%88connectionist-temporal-classification%E8%BF%9E%E6%8E%A5%E6%97%B6%E5%BA%8F%E5%88%86%E7%B1%BB%EF%BC%89%EF%BC%8C%E5%8D%95%E8%A1%8C%E6%96%87/

 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。