word2vec, LSTM Speech Recognition实战, 图数据库
word2vec
word2vec是Google于2013年开源推出的一个用于获取word vector的工具包。作者是Tomas Mikolov。
Github:
https://github.com/tmikolov/word2vec
注:Tomas Mikolov,捷克布尔诺科技大学博士。先后在Google、Facebook担任研究员。
word2vec包中还有一个word2phrase的程序,这个程序可以根据统计信息由单词生成短语。考虑到中文的字和词之间的关系,实际上也可以用它来进行无先验数据的分词。
注:NLP中的先验数据,最出名的当属分词词典。除此之外,还包括HMM的转移矩阵表等。
其一般方法为:
1.对原始语料按字切分,以空格分隔,相当于认为一个字就是一个词,即单字成词。
2.使用word2phrase组字成词。
time ./word2phrase -train 1.txt -output 2.txt -threshold 100 -debug 2
3.由于word2phrase最多只考虑到2-gram。因此,对于超过3个字以上的词语,需要迭代执行word2phrase。
我以金庸的小说为语料进行测试。从结果来看,这种方法对于人名、地名、武功招式名等专有名词,分词效果较好。但对于具有语法结构的句子,分词效果较差。比如“那人”其实是两个单字词,但却被word2phrase认为是一个双字词。
./word2vec -train resultbig.txt -output vectors.bin -cbow 0 -size 200 -window 5 -negative 0 -hs 1 -sample 1e-3 -threads 12 -binary 1
./distance vectors.bin
训练之后的结果文件中,保存着每个词的向量。可将binary选项设为0,来查看相应结果的明文。
明文和二进制数据之间的转换可使用gensim工具,参见:
https://github.com/antkillerfarm/antkillerfarm_crazy/blob/master/python/ml/nlp/hello_gensim.py
参考:
http://wei-li.cnblogs.com/p/word2vec.html
文本深度表示模型Word2Vec
http://www.cnblogs.com/wowarsenal/p/3293586.html
用中文把玩Google开源的Deep-Learning项目word2vec
http://www.jianshu.com/p/05800a28c5e4
使用word2vec训练wiki中英文语料库
LSTM Speech Recognition实战
数据集
首先,在Github上搜寻了一番,发现了以下项目:
https://github.com/zzw922cn/Automatic_Speech_Recognition
https://github.com/pandeydivesh15/AVSR-Deep-Speech
但是无奈他们使用的TIMIT数据集是收费的,只好放弃了。
最终,找到了如下项目:
https://github.com/sdhayalk/TensorFlow_Speech_Recognition_Challenge
复现结果
这里只实验了最简单的那个模型,遗憾的是该代码并不能直接使用,需要相应的预处理:
https://github.com/antkillerfarm/antkillerfarm_crazy/tree/master/python/ml/tensorflow/TensorFlow_Speech_Recognition_Challenge
这里还有一个坑,该项目只使用了11类声音,而把其他19类都归为unknown。这会导致unknown的权重过重,测试准确度虚高,(无脑分类为unknown都有60%以上的精度)但实际结果很差。需要使用一些方法处理数据的不平衡。
最终,复现结果精度大概在75%~80%之间。训练时间大概要16小时。
炼丹一
把类别扩展到30类,精度略高,但也就80%上下。如此费时的训练,只有这点结果,实在让人丧气。于是参考warpCTC,进行炼丹。
1.LSTM由3层减为1层。
2.使用CTC loss。(参见《深度学习(二十九)》)
在识别验证码的例子中,假如有两幅图,分别是123和4567,那么Label就是:
[[1,2,3,0][4,5,6,7]]
虽然英语是表音文字,但直接分解字母作为标签显然是不太精确的。
这里需要用到ARPABET表,该表可以看做是国际音标的另一种表示法:
https://en.wikipedia.org/wiki/ARPABET
还有如下工具可以将英文单词转换为ARPABET表示:
http://www.speech.cs.cmu.edu/tools/lextool.html
这个工具所使用的词典在:
http://svn.code.sf.net/p/cmusphinx/code/trunk/cmudict/
精度大为提高到90%。
炼丹二
1.将LSTM改为BiLSTM。
2.使用1x1的卷积处理频谱。给feature map以不同的权重,有助于强化有效声音,弱化噪声。
3.使用3层FC。只对同一time step的频点做FC,不跨time step。
原理参见《深度学习(三十)》中的Deep speech 2。
精度再次提高到96%。如果不做第1步的修改的话,精度大概是94%,但计算快了很多,大概2个小时。
fftw
fftw是一个C语言的FFT库,由MIT的Matteo Frigo和Steven G. Johnson编写。
fft的实现往简单的说,也就几十行代码。这里这个3M+的庞然大物当然没这么简单。它使用了汇编、并行等加速手段,还支持DCT和DST变换。
官网:
http://fftw.org/
代码:
https://github.com/FFTW/fftw3
然而,由于fftw的代码是自动生成的,因此这个代码库实际上只供专业人士使用。普通用户直接在官网下载源代码包即可。
参考:
https://blog.csdn.net/congwulong/article/details/7576012
FFTW中文参考
aubio
aubio是一个C语言的音频分析库,提供了提取fbank、MFCC等特征的能力。
找到aubio的过程,堪称曲折。最近要移植MFCC提取功能,到一嵌入式平台。因此要求代码必须是C语言。
1.Kaldi是C++写的,不合要求。
2.scipy.fftpack的核心是用C和Fortran写的,其实最主要的部分是Fortran写的。
3.使用Java语言的话,jMIR是个不错的选择。
代码:
https://github.com/aubio/aubio
安装:
sudo apt-get install python3-aubio python-aubio aubio-tools libaubio-dev
aubio的fft结果是以极坐标的格式保存的,而LibROSA则是以平面坐标的格式保存的。
示例1:测试环境是否安装好了,包括C和python环境。
https://github.com/antkillerfarm/antkillerfarm_crazy/tree/master/helloworld/aubio/1
示例2:python:获取wav文件的频谱。C:log重定向+读取wav文件内容。
https://github.com/antkillerfarm/antkillerfarm_crazy/tree/master/helloworld/aubio/2
参考:
http://www.cnblogs.com/daleloogn/p/4510137.html
音乐检索研究中使用的工具
Ooura
Takuya Ooura是东京大学的教授,他写了一套数值计算的软件叫做Ooura,其中包含了FFT的实现。这也是aubio默认的FFT实现。
代码:
http://www.kurims.kyoto-u.ac.jp/~ooura/fft.html
这是作者收集的FFT库的列表:
http://www.kurims.kyoto-u.ac.jp/~ooura/fftlinks.html
LibROSA
LibROSA是一个分析音乐和语音的Python库。
官网:
http://librosa.github.io/
代码:
https://github.com/librosa/librosa
文档:
http://librosa.github.io/librosa/
参考:
http://www.cnblogs.com/xingshansi/p/6816308.html
音频特征提取——librosa工具包使用
python_speech_features
python_speech_features是另一个分析音乐和语音的Python库。
代码:
https://github.com/jameslyons/python_speech_features
文档:
https://python-speech-features.readthedocs.io/en/latest/
参考
论文:
《Small-footprint Keyword Spotting Using Deep Neural Network and Connectionist Temporal Classifier》
这篇文章是蚂蚁金服提出的Keyword Spotting(KWS)的论文,它和本次实战所用的Speech Commands Datasets契合度很高,值得参考。
http://mp.weixin.qq.com/s/-QQjz61VAOVcWE7j-EJPhg
谈谈蚂蚁金服的语音唤醒系统
这里还有两篇炼丹文:
https://zhuanlan.zhihu.com/p/28133530
一次CTC-RNN调参经历
http://www.tbluche.com/ctc_and_blank.html
The intriguing blank label in CTC
http://spandh.dcs.shef.ac.uk/chime_challenge/chime2016/
CHiMe – Computational Hearing in Multisource Environments-国际多通道语音分离和识别大赛
图数据库
Neo4j
Neo4j大概算是最著名的图数据库了,它具有成熟和健壮的数据库的所有特性。相对于关系数据库来说,图数据库(Graph Database)善于处理大量复杂、互连接、低结构化的数据,这些数据变化迅速,需要频繁的查询——在关系数据库中,这些查询会导致大量的表连接,因此会产生性能上的问题。
官网:
https://neo4j.com/
参考:
http://blog.csdn.net/xingxiupaioxue/article/details/71747284
如何将大规模数据导入Neo4j
https://mp.weixin.qq.com/s/_Zm88TyBcXAZ4LeQOuJCHA
管理neo4j的用户
https://mp.weixin.qq.com/s/dzPZTqUhWKIiKj2o7OkMbA
Neo4j的python操作库Neo4j-Driver
https://mp.weixin.qq.com/s/mupuyM7m_41eOzQc7LGRRw
Neo4j的python操作库Neomodel
https://mp.weixin.qq.com/s/YVo6KduIvckYKH53fjDogw
neo4j扩展包APOC的图算法
neo4j-graph-algorithms
Neo4j Graph Algorithms扩展包,是一个关于图算法的jar包,集成了一些常见的图算法,比如社区发现,路径扩展,中心点计算,PageRank等。
代码:
https://github.com/neo4j-contrib/neo4j-graph-algorithms
openCypher
openCypher是基于Neo4j的查询语言Cypher开发的,Cypher用于在图数据库中存储和检索数据。在图数据库领域,目前还没有像关系数据库中访问数据的SQL这样的通用查询语言标准。
openCypher的目标是通过简化存储、分析,以及用于访问图数据模型的工具平台,促进图处理和分析的使用。技术厂商可以在他们的工具和平台内实现Cypher。
官网:
http://www.opencypher.org/
RedisGraph
RedisGraph是Redis推出的基于Redis的图数据库。
官网:
http://redisgraph.io/
参考:
https://mp.weixin.qq.com/s/BzQBy6AoMXXpjsdGyXh1zA
揭秘RedisGraph: Redis内嵌高性能内存图数据库
word2vec, LSTM Speech Recognition实战, 图数据库相关推荐
- FPGA 17最佳论文导读 ESE: Efficient Speech Recognition Engine with Compressed LSTM on FPGA
欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 技术交流QQ群:433250724,欢迎对算法.机器学习技术感兴趣的同学加入. 后面陆续写一些关于神经网络加 ...
- 图数据库JanusGraph实战[6]: JanusGraph+HBase+ElasticSearch的环境搭建
图数据库JanusGraph实战[6]: JanusGraph+HBase+ElasticSearch的环境搭建 作者:胡佳辉(家辉) 日期:2019年01月14日 CSDN博客:https://b ...
- 图数据库超级节点建模优化实战
图数据库超级节点建模优化实战 <针对图谱超级节点的一种优化解决方案 >,在这篇文章中设计了针对图数据库中超级节点的一系列优化方案.下面介绍一个实战操作.对于地域相关的数据进行建模优化.ps ...
- 欢迎来到图数据库的世界——《图数据库实战》中文版上架了!
叶伟民和我翻译的<图数据库实战>(Graph Databases In Action)中文版上架了,这本书将带你进入图数据库这个全新的世界. 当年译者叶伟民向美国移民局证明他是美国本土难以 ...
- 图数据库JanusGraph实战[5]: JanusGraph可视化之Gephi
图数据库JanusGraph实战[5]: JanusGraph可视化之Gephi 作者:胡佳辉(家辉) 日期:2018年12月29日 CSDN博客:https://blog.csdn.net/gob ...
- 图数据库Neo4j实战(全网最详细教程)
1.图数据库Neo4j介绍 1.1 什么是图数据库(graph database) 随着社交.电商.金融.零售.物联网等行业的快速发展,现实社会织起了了一张庞大而复杂的关系网,传统数据库很难处理关系运 ...
- Deep Audio-Visual Speech Recognition翻译
原文链接:https://arxiv.org/pdf/1809.02108.pdf 这是一篇较为系统的介绍音视频融合的语音识别文章.翻译参考博客园一篇翻译,进行了大量修正和增补. 摘要 本文的目的是基 ...
- 语音识别(ASR)论文优选:端到端ASR综述Recent Advances in End-to-End Automatic Speech Recognition
声明:平时看些文章做些笔记分享出来,文章中难免存在错误的地方,还望大家海涵.搜集一些资料,方便查阅学习:http://yqli.tech/page/speech.html.语音合成领域论文列表请访问h ...
- 语音识别(ASR)论文优选:Adapting GPT, GPT-2 and BERT Language Models for Speech Recognition
声明:平时看些文章做些笔记分享出来,文章中难免存在错误的地方,还望大家海涵.平时搜集一些资料,方便查阅学习:http://yqli.tech/page/speech.html.如转载,请标明出处.欢迎 ...
最新文章
- 网站优化之如何稳固网站关键词排名?
- 阿拉伯与罗马数字互转程序
- 北京内推 | 微软亚洲研究院自然语言计算组招聘NLP研究型实习生
- 前端知识点回顾——HTML,CSS篇
- Axure RP Pro - 翻译 - Download下载 - Axure RP Pro 5.5.0.1955
- 【微信小程序】组件间通信与事件-获取子组件的实例对象
- 未来的信息化,就是挖掘企业数据、提升战略决策
- 浅谈算法和数据结构: 二 基本排序算法
- html转pdf分页问题
- Matlab安装minGW
- echart 三维可视化地图_在 ECharts GL 中绘制三维地图
- pe不认服务器硬盘,WINPE认不出硬盘或移动硬盘怎么办?
- BAPose: Bottom-Up Pose Estimation with Disentangled Waterfall Representations阅读笔记
- html5考试总结300字,期末考试总结反思300字
- !-- --与%-- --%
- “潮经济”的品牌营销和消费模式具有哪些特点?
- MySQL忘记密码恢复密码的实现方法
- 骑士VS热火直播NBA常规赛骑士VS热火直播12月3日骑士VS热火视频直播
- 往事如烟 - 42岁退休的小帅
- C++ socket通信详解
热门文章
- [转载] 在网页中拖放和停靠div的例子
- 会linux基本命令是脚本语言吗,如何理解Linux Shell和基本Shell脚本语言?
- JS中代表结束的三个关键字 break,continue,return
- vue制作tab切换(vuex + 动画)
- nw.js启动时白屏
- SpringSecurity实现拦截未登录页面
- 解决Windows环境下Git Bash 不能输入中文的问题
- Qt5—嵌入停靠窗口QDockWidget
- vs2012编译boost_1_54_0
- matlab如何excel数据,Matlab如何读取Excel里的数据