基于指纹的原则,具体的音乐检索

基于指纹的原则,具体的音乐检索

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

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

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://javaforall.net/117123.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • pycharm R语言_pycharm安装后无解释器

    pycharm R语言_pycharm安装后无解释器最近被网上的一些R语言做出的图迷住,遂突发奇想学习R语言。按照教程装好了R语言解释器与Rstudio后,才得知pycharm中有R语言的插件,安装后可以在pycharm中写R语言。pycharm安装R语言插件打开File|Settings|Plugins,在搜索框里搜索RLanguageSupport,安装就可以了。安装结束后重启pycharm,再进入File|Settin…

    2022年8月28日
    4
  • 用于安装python第三方库的工具是_Python第三方库安装

    用于安装python第三方库的工具是_Python第三方库安装Python 有一个全球社区 在这里 我们可以搜索 Python 第三方库的任何话题 PyPI 的全称是 Python 包指数指 Python 包的指数 它是由 PSF Python 软件基金会 和显示全球 Python 计算生态系统 我们需要学会使用 PyPI 的主要网站 搜索和发现我们使用第三方 Python 库和关心 例如 如果您正在开发一个 blockchain related 程序 您需要使用 Python 的计算生态三个步

    2025年7月3日
    4
  • 添加和共享打印机的方法是_按名称选择共享打印机输入什么

    添加和共享打印机的方法是_按名称选择共享打印机输入什么在Windows10中,可以将打印机共享给网络上的多台电脑。若要从连接到打印机的电脑(主要电脑)共享打印机至未连接到打印机的辅助电脑,你必须设置共享打印机设置、将打印机连接到主要电脑(或者以无线方式或使用USB电缆),然后打开打印机。另外,请确保主电脑已打开、连接到打印机并连接到网络。注意共享打印机时,请确保已在主要和辅助电脑上设置了共享设置。此外,请确保你知道主要电脑的名称。有关详细信…

    2025年5月25日
    3
  • js中获取html元素之document.documentElement

    js中获取html元素之document.documentElementdocument.documentElementDocument.documentElement是一个会返回文档对象(document)的根元素的只读属性(如HTML文档的<html>元素)。对于任何非空HTML文档,调用document.documentElement总是会返回一个<html>元素,且它一定是该文档的根元素。借助这个只读属性,能方便地获取到任意文档的根元素。参考文档html中document.body与document.d

    2022年7月19日
    28
  • 办公小贴士之:Office 2010截图有妙招

    办公小贴士之:Office 2010截图有妙招

    2022年3月11日
    42
  • go语言环境搭建_如何搭建语言培训平台

    go语言环境搭建_如何搭建语言培训平台因为项目的原因,要用到go语言,所以自学了一下。要想学习一门语言,首先必须搭建 语言的环境,go也一样,我这边是采用源码安装的。1. 下载安装包,如果觉得翻墙麻烦,可以直接在Golang中国社区下载安装包 http://www.golangtc.com/download2.假设我们在包解压到 /home/work/dev/package/go目录下, 

    2022年10月12日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号