自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

程序的魅力

You should blog even if you have no readers

  • 博客(204)
  • 资源 (4)
  • 收藏
  • 关注

原创 《C++ Primer Plus》学习笔记(第七章)

函数三部曲:声明、定义和应用,三位一体,缺一不可。它们内在是统一的。函数由四部分要素组成,分别是函数名,参数列表,返回值和函数体。其中前三个构成了函数原型,也即声明时需要指定的。而函数定义必须给出函数体的内容,也即需要函数执行哪些操作。函数应用,也即函数调用,是通过函数名,并给定声明中约定的参数,期待它返回正确的结果(包括类型和值)。它需要计算机“动”起来,内部执行由函数体内容经过编译后转行的程序指令序列,然后把计算结果放到约定位置,然后系统去拿并解析,返回给当前的调用函数。

2023-03-06 07:22:23 202

原创 字符数组作为结构的项,在new构建结构对象时无法初始化

当结构struct中包含字符数组时,通过new创建结构数组,无法初始化

2023-03-02 02:05:10 210

原创 cin.get()函数循环读入整行

从命令行循环读入整行字符串,然后计算输入的总字符个数。演示了cin.get()函数的用法细节。

2023-03-02 00:35:49 497

原创 《C++ Primer Plus》学习笔记(第六章)

那么从文件进行读写,需要引用fstream头文件,然后构建文本输入对象ifream inFile,然后通过该对象打开文件inFile.open("filename"),然后像使用cin那样使用inFile,完成读入功能后要关闭文件inFile.close()。类似的,构建文本输出对象outFile,向磁盘写文件。分支功能主要是if-else语句和switch语句,其实它们的功能相似,都可以实现多分支操作。比较有新意的是,本章中提到字符库函数cctype,有很多函数用来判断当前字符是数字/字符还是大小等等。

2023-02-28 19:07:27 84

原创 《C++ Primer Plus》学习笔记(第五章)

介绍了循环语句,for、while和do-while,其中for和while是入口条件循环语句,而do-while是出口条件循环语句。它们之间的差别是何时进行判断表达式求值,然后执行循环体语句。还介绍了C++11新引入的for循环特性如:for(double x : prices),其中prices是double类型数组。嵌套循环和二维数组的概念,是在单层循环和一维数组基础的扩展,不难理解。但处理起来需要细心。还介绍了C++编程其他方面的概念,如语句块(复合语句)、关系表达等,与循环相关的。

2023-02-27 19:13:20 69

原创 《C++ Primer Plus》学习笔记(第四章下)

只知道地址,然后去访问那个字节空间,没有问题,但是我们的存储对象,根据类型的不同,往往占用多个字节。这就要求在定义指针时必须声明该指针指向的类型,是int、double、还是某个结构类型,甚至是它们的组合,如果int数组。函数指针,比如:int (*f)(int, int),表明f是一个指向形参为两个int型,返回值也是int的函数。除了数组外,还介绍了vector,它是动态分配空间的,可以在运行时决定存储对象的长度。静态区的生命周期是和程序一样的,而堆上存储的对象的生命周期,是由程序员控制的。

2023-02-24 12:50:19 54

原创 《C++ Primer Plus》学习笔记(第四章上)

第四章介绍了多个元素的组合,构成新的复合类型。这里又分为该组合中的元素是否为同类型,以及元素是否可变及是否同时占用空间,出现了数组(array)、结构(struct)、共同体(union)和枚举(enum)等不同复合类型。不同场景下,根据需要选择不同的组合。

2023-02-23 02:24:35 166

原创 《C++ Primer Plus》学习笔记(第三章)

变量初始化,支持花括号,对一般基本类型变量也一样。因此,养成习惯,对内置类型的变量,其初始也通过这样的方式,以与将来介绍的类对象初始保持一致。强制类型转换的格式:typeName (value),如将double类型3.0转换为int型,a = int (b)结果为3,作为整型赋值给变量a,变量b的值不变。C++里引入bool型,因此应尽可能明确的定义bool变量,来接收逻辑判断的值。在需要做逻辑判断而该变量或函数返回值不是bool型时,应通过显示的强制类型转换,以避免隐式转换带来不必要的麻烦。

2023-02-21 20:33:46 53

原创 《C++ Primer Plus》学习笔记(第二章)

函数定义,一般放在单独的.cpp文件中,或main函数之后。最后,一般有个返回语句。变量声明时,编译器为该变量分配内存空间,相当于调用了对应类型的构造函数,当该变量生命周期结束时,系统将自动调用析构函数,释放对应的内存空间。对C++编程来说,要试图将语言提供的内置数据类型(int、float、vector、array、struct等),和自定义的类同等对待,在概念上将它们统一起来,在编程规范尽量保持一致。第二章简要介绍了C/C++编程的基本核心概念,如mani函数,函数头、函数体的概念,非常重要。

2023-02-21 12:33:07 73

原创 《C++ Primer Plus》学习笔记(第一章)

C++ Primer Plus

2023-02-21 08:00:46 98

原创 Visual Studio 2019编译HTKlib

HTKLib构建共享库

2022-09-28 15:52:20 272

原创 查看远程服务器上tensorboard的训练可视化结果

远程访问服务器上tensorboard的可视化训练结果

2022-03-26 16:23:09 3131 1

原创 centos7按照kaldi遇到的问题

输入命令:lsb_release -aLSB Version: :core-4.1-amd64:core-4.1-noarchDistributor ID: CentOSDescription: CentOS Linux release 7.9.2009 (Core)Release: 7.9.2009Codename: Core系统是centos7输入命令:g++ -vUsing built-in specs.COLLECT_GCC=g++COL...

2021-12-13 20:35:19 549 1

原创 Conformer的几点笔记

Conformer是在Tranformer的基础上,引入CNN,来增强语音识别的效果。我们已经了解了Transformer的大概结构,就是分为Encoder-Decoder架构。在Encoder部分包含6个block,每个block由self-attention和FFN两层网络组成。Conformer只改变了Transformer的Encoder部分。加入了Con卷积层,而且在Conformer block的前后两端都加入了FFN模块,且在每个模块上都引入残差。同时,self-attenti

2021-08-07 11:44:59 1504

原创 招聘语音算法工程师

1、encoder部分可以并行,decoder不可以。因为decode时还是要按顺序,依赖上一个输出;2、attention有三种,分别是encoder部分的self-atte

2021-07-30 17:27:21 569

原创 Transformer的几点笔记

1、encoder部分可以并行,decoder不可以。因为decode时还是要按顺序,依赖上一个输出;2、attention有三种,分别是encoder部分的self-attention,以及decoder部分的masked self-attention和encoder-decoder attention,它们之间的异同要搞清楚。1)在encoder部分的self-attention比较好理解,就是由输入的embeding a,衍生出三个向量,分别是q、k、v,它是由三个转换举证乘以a得到,这三个转

2021-07-27 13:36:51 337

原创 语音研究实力个人及单位

1.中国科学技术大学语音及语言信息处理国家工程实验室语音及语言信息处理国家工程实验室,英文缩写为:“NEL-SLIP”。围绕语音及语言核心技术及产业发展需要,建立语音及语言技术研究、工程化应用的研究开发平台和测试验证平台,开展自然人机交互、人工智能、海量信息处理及挖掘等重点领域的研究并实现产业化,形成从核心技术研究到技术运营服务的完整产业链,提升我国在相关领域的自主创新能力和核心竞争力,促进我国语音及相关产业的快速发展。http://nelslip.ustc.edu.cn/2.中国科学院..

2021-07-05 08:48:01 1372

原创 HTK的解码过程的理解又遇到瓶颈了

再次参考HTK book的12章、13章。重新捋一遍识别网络的构建过程和维特比解码过程。构建识别网络是重中之重,而它的基础是lattice,描述lattice的是Standard Lattice Format (SLF)文件。它的来源可能是Task Grammar或者bigram language model,用到的工具分别是HParse和HBuild。有了Word Net,发音字典dictionary和HMM模型集合,就可以进行识别了。可以从三个不同层次来看这个识别网络:词级别、模型级和状态级。

2021-06-30 17:52:51 146

原创 HTK standard lattice format

这个格式描述了HTK词网络,主要包含两部分,头部和节点/边定义。在头部,主要包含版本信息,以及该词网络包含多少个节点和多少条边,分别以字母N和L表示。在body部分,分别定义节点的编号和词本体信息;边的编号以及边的起点和终点信息,可选的有语言模型的分数。下面是典型的SLF文件格式。VERSION=1.0N=31 L=62 I=0 W=SENT-END I=1 W=YOUNG I=2 W=!NULL

2021-06-28 21:52:20 143

原创 神经网络的前向反向传播

2021-06-21 23:22:49 85

原创 神经元基础概念

一个标量表示某个属性值,一般是float型,它经过系数“扭曲”之后,可能还会加上“偏置”参数,就是一个神经元的输入。其中a1和b0都是可训练的,就是根据输出y1与标注数据的差值调整系数,进而使得系统输出与样本数据相似。这个调整方法叫“梯度下降”。如果对y1的输出再加上非线性函数,那么整个神经网络表现出了非线性。z1就是y1的非线性结果,这个非线性的函数有多种,包括sigmoid、ReLU等等。而如果输入不单单包括x1,还有x2、x3……,那么就有多个神经元与之对应。这个...

2021-06-21 23:01:22 465 2

原创 GE2E Speaker Verification复现

今天正式开始研究基于深度学习的声纹识别。之前看过一点kaldi的关于声纹识别的代码,基本还是基于i-vector的,不得不说这是比较传统的,过时的方法。现在深度学习在声纹确认/shibie

2021-06-16 10:48:55 343

原创 ProcessObservation代码解析

在解析ProcessObservation的代码过程中,遇到了些问题,比如tokenset和token的区别;在词内的状态间传递时,token的值如何变化。以及zhen

2021-06-16 00:17:27 104

原创 StartRecognition之ReOrderList函数解析

我的上一篇blog是关于AttachInst函数的代码解析,它的最后调用了ReOrderList,来重新排序待进入下一个识别的节点。下面接着看它是如何处理识别过程的。传入的can

2021-06-15 18:22:02 91

原创 Where are the local, global, static, auto, register, extern, const, volatile variables are stored?

local variables can be stored either on the stack or in a data segment depending on whether they are auto or static. (if neither auto or static is explicitly specified, auto is assumed)global vari

2021-06-15 16:45:11 82

原创 Python语言学习(七)字符编码

操作系统是win7,Python版本是2.7,研究字符编码。>>> a = "高山流水">>> a'\xb8\xdf\xc9\xbd\xc1\xf7\xcb\xae'>>> print type(a)>>> b = r"高山流水">>> b'\xb8\xdf\xc9\xbd\xc1\xf7\xcb\xae'>>> len(b)8>>> type(b)上面建立了两个变量

2021-06-15 16:42:48 169

原创 程序的编译链接过程

什么是编译?什么是链接?为什么需要编译和链接?

2021-06-15 16:41:52 107

原创 HERest源码解析续

上一篇分析了HERest工具的大体流程,其中最主要的是它运用了前向后向算法来更新模型参数。只是捡了最重要的流程来梳理,目的是先有个大体的印象。这一篇就来详细的、从头到尾的解读HERest代码。分析它主要涉及的数据结构、StepBack和StepForward算法的具体计算过程,以及它们的背后的公式推导。 UttInfo *utt; /* utterance information storage */ FBInfo *fbInfo; /* forwar

2021-06-15 16:39:38 152

原创 HTK中Network的结构

Network是由lattice扩展而来的。除了依赖lattice,还有HMMSet、pronunciation等。在lattice中,每个节点是由一个Word指向一个DictEntry

2021-06-15 16:37:34 143

原创 StartRecognition之AttachInst函数解析

Network的initial数据类型是NetNode,它的类型是n_word。它是AddInitialFinal(Lattice *wnet, Network *net,int xc)函数中添加进入Network中的。

2021-06-15 16:31:06 119

原创 NetWork中NetNode的类型

/* Types of node that can appear in the network */enum { n_unused, /* Node Instance not yet assigned */ n_hmm=2, /* Node Instance represents HMM */ n_word=4, /* Node Instance represents word end (or null) */ .

2021-06-15 13:21:56 276

原创 StartRecognition代码解析

在此之前的十几篇Blog都是在介绍HTK的词典、词格网络、识别Phone网络、HMM参数训练过程等,都是为了在识别时有据可循。现在开始,如何一步一步的将观察序列幻化为ke

2021-06-15 13:20:17 158

原创 HTK中函数ProcessCrossWordLinks处理流程

首先说下这个函数的主要功能:第一遍调用时,heap!=null,会创建NetNode节点和links计数。怎么创建NetNode节点呢?它依据什么呢?就是Lattice中的元素。

2021-06-10 20:37:46 240 1

原创 HTK中!NULL节点和SENT_END以及SENT_START的区别与联系

SENT_END和SENT_START是两个单词,在系统词典里是有发音的"sil",是个单音子词。而!NULL是词格Lattice网络中的xu'ni

2021-06-10 18:04:27 342 1

原创 C++的多态机制

(1)编译器会为每个包含虚函数的类构建一个虚函数表vptable,这个表中存放该类对象会调用到的虚函数地址。(2)当含有虚函数的类创建对象时,编译器会在对象的地址首位置插入指向该虚函数的指针vptr。(3)如果传递给父类指针的是子类对象地址,那么在调用虚函数时,是通过子类对象的首地址(也是vptr的位置)来找到子类的虚函数表。(4)如果子类重写了父类的虚函数,在虚函数表的相应位置,指向的是重写后的虚函数地址。调用它,从而实现了多态。上述四个前提条件,保证了多态机制。...

2021-06-03 22:10:34 258

原创 HTK的Network把所有的NetNode对象chain,并重新排序

涉及的代码如下: /* First disassemble wnHashTab and link to end nodes as necessary */ AddInitialFinal(lat,net,hci->xc); for (i=0; i<WNHASHSIZE; i++) { AddChain(net,wnHashTab[i]); } /* Finally chain all nodes together */ for (i=0;

2021-06-03 18:11:27 232

原创 Lattice的构建过程

我有一张地图,叫Lattice。它有多个成员叫LNode,数量是nn,成员之间有各种联系叫LArc,也有很多个na。

2021-06-03 13:32:01 467

原创 HTK中vocab的节点种类

分三种:一是nullWord,它是不发音的,也就是nullWord->pron==NULL,nullWord->nprons==0且LabId为“!NULL”,

2021-06-03 06:57:38 245

原创 HTK中的那些哈希表

第一个介绍的是LabId的hashtable#define HASHSIZE 250007 /* size of hash table */static NameCell *hashtab[HASHSIZE]; /* the actual table */一般HTK中的h

2021-06-02 23:02:44 145

原创 再谈Lattice如何扩展为Network

在解读解码过程中,发现在令牌如何在Network上传递还有些模糊。从而发现自己对Network的结构还没到无比熟悉的程度,所以这篇博客开始,重新、重头梳理HMMsLattice,到Network、

2021-06-01 17:37:18 273

HTK中的数据结构的关系

用Visio画的数据结构的示意图,希望对理解HTK源码有帮助。涉及HMMSet、HMMDef、StateElem、StateInfo、StreamElem、MixtureElem、MixPDF等,还有UttInfo、Transcription、Observation和它们之间的组合/包含关系。

2020-10-30

数据结构与算法C++模板实现在vs环境下

C++模板类的形式实现了基本的数据结构和算法:交换算法、快排序、选择排序、归并排序、二叉树、AVL树、2-3树、双向链表、队列等。红黑树还没完成。

2019-08-30

bash-vim-editing-cheat-sheet

对于习惯vim编辑的linux用户,在~/.bashrc文件中添加set -o vi,设置bash vim命令模式,可以加快方便输入

2014-03-27

语音识别算法研究

介绍了语音识别的过程,设计的算法,对希望概念性地了解语音识别的人有点帮助。

2012-04-09

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除