在以前的博客基于指纹音乐检索于,我们介绍的基本流程,现并未做过多介绍。本博客将详细叙述检索的详细原理和实现。

1 搜索引擎的工作原理

在介绍音乐检索的原理之前,我们先介绍一下搜索引擎的工作原理,这是由于音乐检索的工作原理和搜索引擎的工作原理很类似。

我们使用搜索引擎的时候。一般是这个流程:输入一些关键词,提交给搜索引擎。搜索引擎通过后台分析返回与关键词最相关的网页。

这个过程非常快,往往仅仅有几毫秒。可是眼下互联网上存在的网页总数有数百亿之多。搜索引擎是怎样在这么短的时间内找到用户须要的网页的呢?这确实非常奇妙。

最朴素的方法肯定是一个一个网页进行相似度匹配。每个文件计算一个相似度,然后对相似度进行排序。返回最相似的网页。

可是这也是最笨的方法。这须要每次查询都须要遍历一般全部的网页,复杂度很高。搜索引擎通过採用一种叫倒排索引的结构避免了朴素的匹配,在此之前我们先介绍一下朴素检索的实现方法。

依照朴素方法,我们须要依据网页文件构造索引。如图一所看到的。每个网页都会首先进行分词,然后统计不同词的词频或者其它特征。

有了这个索引结构。就能够设计最朴素的搜索引擎。当用户输入的关键词进入搜索引擎之后。就会将关键词进行特征转换,转换成一个带有权值的特征向量,之后就能够和每个网页的特征向量进行相似度匹配,比如余弦相似性度量等,最后对匹配的结果排序就可以。

图一 网页的词组索引结构

倒排索引这个名词听着非常玄乎,事实上非常easy理解。朴素方法採用网页的索引结构,构造单词的统计信息。倒排索引则相反。以单词为索引结构。构造网页的统计信息,如图二所看到的。

图二 倒排索引示意图

在倒排索引结构中,每个单词都相应一个倒排列表。倒排列表记载了出现过某个单词的全部网页的列表和单词在该网页中出现的位置信息或者词频。比如,单词1出如今网页6和10中,词频各自是a1和a2

搜索引擎在获得用户输入的关键词之后,就查找关键词相应的倒排索引表。然后将多个关键词的倒排索引表求交,获得出现过全部关键词的网页。然后对这些网页进行相似度计算。

能够看出。通过採用倒排索引结构,使须要匹配的网页数量急剧降低,因而大大加快了搜索的速度。

上面是最简单的搜索引擎原理,假设大家想深入了解搜索引擎,能够參看《这就是搜索引擎》一书,该书具体介绍了搜索引擎的各个部分和检索原理。

以下開始介绍基于指纹的音乐检索原理。

2 基于指纹的音乐检索工作原理

基于指纹的音乐检索工作原理和搜索引擎很相似。也是构造一个倒排索引结构,只是不是单词的倒排索引,而是指纹的倒排索引。

在基于指纹的音乐检索 中,我们介绍了指纹的构造,在此不做过多介绍。

指纹能够看做搜索引擎检索中的关键词,可是与关键词不同,每一个指纹代表的信息量较少,所以在音乐检索中须要提取许多的指纹完毕单次检索。

比如。15s的片段往往须要提取几万个指纹才干查找到正确的音乐。这就意味着搜索引擎几个关键词的单次检索在音乐检索中变成了几万个指纹的单次检索,检索时间大大添加。

每个指纹都是一个整数。依据指纹的构造不同。可能须要24到30位不等。所以能够利用一个int型整数存储每个指纹。

这样全部指纹的空间就限定于一个int型整数所表示的范围,也即0到4G。当音乐库较小时,全部音乐产生的不同指纹数也较少,为了避免空间浪费。存储全部的指纹能够採用散列表形式,如图三所看到的。

图三 散列表形式的指纹检索结构

当音乐库很大时。差点儿全部的指纹都可能会出现。这时採用散列表结构就没有什么优势,能够直接分配一个大数组来存放全部的指纹,然后每个指纹都指向一个该指纹相应的倒排列表。如图四所看到的。在图四中假定每个指纹的位数是24位,则须要分配一个长度是224的数组,然后每个指纹都指向一个倒排列表。

倒排列表中存储的是音乐id和该指纹在该首音乐中出现的位置。

图四 基于指纹的倒排索引表

获得图四的倒排索引结构之后。检索过程就比較easy了。

可是过程却和搜索引擎不同,搜索引擎须要对不同关键词的倒排列表求交集。对交集内的网页进行相似度计算。基于指纹的音乐检索则须要一个间接的匹配过程,匹配步骤例如以下:

  1. 将client传递的音频提取指纹。每个指纹伴随有一个时间属性;
  2. 对每个提取的指纹都查找倒排索引表,获得该指纹相应的倒排列表;
  3. 将倒排列表中每个音乐相应的时间和提取的指纹相应的时间进行相减。假设时间差大于零。则保存该时间差到图五所看到的的相应音乐中。
  4. 对每首歌中的时间差进行排序;
  5. 统计每首歌中时间差同样的个数,并返回个数最多的音乐。

图五 统计匹配的相似度

基于指纹的音乐检索和搜索引擎相比,复杂度大增,主要体如今两个方面:首先。针对client录制的音频,提取的指纹往往上万,而这上万个指纹都须要訪问倒排索引表,这意味着一次音乐检索能够完毕上万次搜索引擎的检索;其次。因为单次检索须要上万次訪问倒排索引表,所以无法对音乐求交,因为求交的结果必定为零,我们仅仅能将倒排列表中相应的音乐时间和提取指纹相应的时间相减。然后统计每一首音乐中不同一时候间差的个数。然后将个数作为匹配的结果。正是由于以上这两个因素,因此,在一个独立的音乐库不能做太多。而相应的倒排列表每个指纹应该限制长度。

版权声明:本文博主原创文章,博客,未经同意不得转载。

转载于:https://www.cnblogs.com/yxwkf/p/4776703.html

基于指纹的原则,具体的音乐检索相关推荐

  1. python检索论文_一种基于Python的音乐检索方法的研究

    应用技术 0 前言 最近两年,人们对于流行音乐的追求与需求量日益增 加,但如何保证用户能在不知歌名只知歌词的情况下,完成 自己的全方面多种类的听歌需求呢?于是,电脑工程师就推 出了"听歌识曲 ...

  2. 【音乐检索】基于matlab音乐检索系统【含Matlab源码 435期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[音乐检索]基于matlab音乐检索系统[含Matlab源码 435期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2: 付费专栏 ...

  3. 指纹识别综述(5): 分类与检索

    指纹识别综述系列 1.导论:2.指纹传感器:3.特征提取:4.匹配:5.分类与检索:6.现场指纹识别: 7.指纹合成: 8.唯一性: 9.指纹系统安全:10.深度学习方法:11.专利. 本文主要基于& ...

  4. 字节跳动发布最新音乐检索系统ByteCover2,检索速度提高八倍

    每天给你送来NLP技术干货! 机器之心发布 机器之心编辑部 翻唱识别(CSI)是音乐信息检索(MIR)领域的一项重要任务,在歌曲搜索,音乐分发,曲库整理,智能推荐等场景下有着重要作用,被誉为下一代音乐 ...

  5. 字节跳动最新音乐检索系统ByteCover2,检索速度提高八倍

    翻唱识别(CSI)是音乐信息检索(MIR)领域的一项重要任务,在歌曲搜索,音乐分发,曲库整理,智能推荐等场景下有着重要作用,被誉为下一代音乐识别技术. 近期,字节跳动火山语音团队的最新音乐检索系统By ...

  6. android 指纹 分发,移动终端及基于指纹识别来实现操作的方法和系统与流程

    本发明涉及移动终端技术领域,具体地说,移动终端及基于指纹识别来实现操作的方法和系统. 背景技术: 随着科学技术的不断发展和社会的进步,近年来指纹识别的流行,很多移动终端上均设置有指纹识别装置. 现有移 ...

  7. 基于MSP430G2553官方开发板的音乐播放器

    基于MSP430G2553官方开发板的音乐播放器 实现目标 硬件资源 芯片资源使用情况 外接硬件 程序实现 开发环境配置 各部分硬件驱动 主循环功能实现 实现目标 实现以蜂鸣器为播放设备,能够对简谱乐 ...

  8. 听歌识曲--用python实现一个音乐检索器的功能

    作者:唯心不易 字体:[增加 减小] 类型:转载 时间:2016-11-15 我要评论 本篇文章中主要介绍了用python实现一个音乐检索器,类似于QQ音乐的摇一摇识曲,有兴趣的同学可以了解一下. 听 ...

  9. 数字图像处理:第二十三章 基于内容的图象与视频检索

    第二十三章基于内容的图象与视频检索 目录 1.    引言 2.    基于内容检索的图象特征 3.    基于内容的视频标注与检索 作业 1. 引言 随着社会的信息化发展日益深入,互连网日益普及,越 ...

最新文章

  1. jupyter notebook修改默认工作目录
  2. 微信语音怎么转发给别人听_微信语音怎么转发出去?这个小技巧超级好用
  3. Design Pattern: Singleton 模式
  4. 【中级软考】PV操作是什么?(passeren【通过、申请资源、减量】、vrijgeven【释放、释放资源、增量】【荷兰文】)(用于进程间同步)
  5. 域服务器更改计算机名,Active Directory管理之:更改DC的IP地址与重命名DC计算机名...
  6. Codechef之CodeCraft: IIIT Hyderabad
  7. 《Java语言程序设计》(基础篇原书第10版)第九章复习题答案
  8. 详解EtherCAT主站SOEM源码_eepromtool.c
  9. ATmega328P和ATmega328PB之间的差异
  10. mui.ajax ie8,IE8+MVVM的适配方案尝试
  11. matlab简支梁有限元分析,1.3 简支梁的有限元分析
  12. 计算机基础知识教程页码,如何设置word文档页码从任意页开始
  13. Linux wipe工具
  14. X-FRAME-OPTIONS 出现两个或多个的原因
  15. 【转载】网络基础-华山论剑
  16. Java并发常见面试题(二)
  17. ai智能语音机器人的新风向
  18. paymob QB冲值接口
  19. 低代码平台,企业服务新战场
  20. 使用烧杯进行缓存? 为什么要切换到dogpile.cache

热门文章

  1. 架构师必看-架构之美第14章-两个系统的故事:混乱大都市(一)
  2. 攻防世界mfw解题wp
  3. python算法工程师的一天_算法工程师的一天!说的是你
  4. dockerUI工具的搭建
  5. hr看php简历,HR:“有这样的简历,才值得一见!”
  6. 兴趣探测的模型化探索
  7. 如何用计算机直接做工资表,在电脑上excel做工资表怎么划线
  8. 有赞android电话面试,挖财 / 有赞电话面试 题目分享
  9. 计算机语言面肥书籍,历年高考鉴赏诗歌语言真题汇编(教师版)
  10. 零基础入门CV赛事—街景字符编码识别—task2数据读取与扩增