# 大数据背景下的“按图索骥”及其背后的机器学习技术

- 作者：熊霖
- 发布时间：2012-11-24 12:23
- 分类：公司
- 原文：https://www.ifanr.com/201762

**[![](https://s3.ifanr.com/wp-content/uploads/2012/11/ss-big-data-brain11.jpg "ss-big-data-brain1")](http://www.ifanr.com/201762/ss-big-data-brain1-2)**

我们之前的两篇文章都讨论过[大数据](http://www.ifanr.com/194290)以及[搜图](http://www.ifanr.com/200430)，现在我们结合起来再深入探讨下背后的机器学习技术。

### **大数据浅析**

到底什么是[大数据](http://baike.baidu.com/view/6954399.htm)（Big data）呢？大数据通常是用来形容大量的非结构化或半结构化的数据，这样的数据要想将他们转化为关系型数据用作日后分析使用所需的前期处理需要花费高昂的代价。而大数据技术，就是从各种类型的数据中快速获得有价值信息的技术。

一般来说大数据有这样 4 个特点：容量（Volume）、种类（Variety）、价值（Value）和速度（Velocity）。前面我们只谈到的大容量，这个是大家最好理解的，但大数据并不只有大容量，其包含的数据类型也是多种多样的，在大量的数据中往往有用有价值的数据很少也即价值密度很低，最后当然要求处理速度够快，比如你用 Google 搜索引擎去搜索相关感兴趣的内容，其能够很快的检索到你需要的内容，谁也不想为此等上数分钟。

### **“按图索骥”背后的机器学习技术：主动学习和半监督**

下面的探讨我们将大数据限定到图像上。在[《探寻“找图”的最佳方式》](http://www.ifanr.com/200430)有谈到，

> 根据你输入的文字，然后找到与之相关的图片，仍然是搜索引擎寻找图片的基本方法：基于文字词义的理解。

对于通过文本标签做图像检索 Google 早早将该技术融入到其搜索引擎中，包括后来的 Bing 。要实现这样的搜索是需要建立在数以万计乃至数以亿计的大量图像数据基础之上的，不但要首先获得这样的数据而且还需要对这些数据进行类别标注，这其中就包括添加文本标签。但这样的工作显然太费人力，成本代价极其高昂。

为了解决这样的问题，有两种机器学习领域的技术发挥重要作用：主动学习技术和半监督学习技术。

主动学习技术，以图像分类为例，就是利用少量已标记的图像去学习一个分类模型，然后根据这个模型对未标记图像进行分析。根据各种准则，分析这些未标记图像中最不能判定是哪个类别的图像，再交由人来分类标记。随着这个过程不断进行，训练集不断增大，当要求的精度满足时停止迭代，剩余的未标记样本就可以通过之前学习到的分类模型全部自动分类，通过理论和大量实验可知这样需要人来参与分类标记的图像是很少的，这也就大大降低了成本。

半监督学习技术，与主动学习相比，其又利用了未标记图像的结构信息—可能是图像的流形信息，使得最后的判断更加可靠。但研究所使用的数据集都不大，如果将这些算法搬到大数据上所花费的时间成本也是巨大的。如果单靠一种分类器无法满足性能要求时，我们就需要尝试采用集成方法将多个分类器或多种不同分类器进行结合来处理大规模数据，如果再结合并行的思想将使集成方法更如虎添翼。

### **基于图片内容搜索的技术**

虽然 Google 于 2008 年提出图片直接搜索服务，但那时其技术与其他竞争对手相比可真是差强人意。图像直接搜索的老牌服务提供者是 [TinEye](http://www.tineye.com) , 自从 2008 年出现就要比 Google 的算法更加精确，可以非常精确的在整个互联网上匹配到你需要的目标图像而且搜索速度非常快。像这种基于内容的图像搜索有很多好处，比如有时你根本不知道你想要搜索的对象叫什么，当然也就无法通过文本去搜索。

而这种基于内容的图像检索一般分为三步：

- 将目标图片进行特征提取，主要就是通过各种特征提取算法比如目前最好的就是 SIFT 描述子（Descriptor ），这样就不必对图片进行像素级的处理减少运算量。
- 将图像特征进行编码，并将海量图像编码做成库或表。（如果目标图像分辨率很高，也可以进行下采样减少运算量后再进行特征提取和编码）。
- 相似度匹配计算，利用目标图像的编码值在图像搜索引擎中的图像库进行全局或局部相似度计算，相似度高的预保留下来，然后可以进行进一步的筛选。得到的这些图像也可以作为其他机器学习方法的训练数据集。

随着这几年图像搜索技术的日趋成熟，Google 也全面改进了图像搜索技术，现在也可以实现基于内容的图像搜索，同 Tineye 类似也可以将图片直接拖进搜索框中或者把图像的 URL 地址直接复制进搜索框中，便可以得到相关图像。

根据 [Neal Krawetz](http://www.hackerfactor.com/blog/index.php?/archives/432-Looks-Like-It.html) 博士的解释，Google 采用了”感知哈希算法”（Perceptual hash algorithm），给每张图片生成“指纹”，通过比较“指纹”的近似值，以找出相似的图片。在这一过程中，Google 所做的事情包括：

- 缩小图片尺寸：将图片的尺寸缩小到 8 x 8，去除图片细节，保留基本结构、明暗等信息；
- 转化色彩：将色彩转化为 64 级灰度；
- 计算平均值：计算所有像素的灰度平均值；
- 比较像素的灰度：比较每个像素的灰度与灰度平均值之间的差异；
- 计算哈希值：将比较结果组合在一起，便得到图片的“指纹”信息。

【补充】Google 的这种方式也不能说十全十美——如果图片中有干扰噪声比如添加了文字或其他遮挡物，那搜索结果将很不一样，因为哈希值会变得非常离谱，那个方法只能用来从低像素的图片搜高像素的图片（要求哈希值几乎相同），而不能搜到相关强的图片（可能有适度的遮挡或文字等信息，哈希值大不相同），应用范围较为狭窄。

**实例：用 Google 来按图索骥**

这里我们做了一个尝试，将 Anne Hathaway 的这幅图片作为目标图片，将其拖到 TinEye 和 Google 图片搜索引擎中去搜索，注意如图 1 所示，我们故意更改了图片名称（文字标注）。图 2 和图 3 分别为 TinEye 与 Google 图片搜索的结果。

[![](https://s3.ifanr.com/wp-content/uploads/2012/11/google1.png "google1")](http://www.ifanr.com/201762/google1-8)

图 1 我们故意将图片的名称取作 Google Chrome.png

[![](https://s3.ifanr.com/wp-content/uploads/2012/11/tineye1.png "tineye1")](http://www.ifanr.com/201762/tineye1) 图 2 TinEye 的搜索结果

[![](https://s3.ifanr.com/wp-content/uploads/2012/11/google2.png "google2")](http://www.ifanr.com/201762/google2-3)图 3 Google 图片搜索的结果

可以看出，检索结果都相当精确，包括给出了图片出自的网址，Google 图片搜索甚至给出了图片上人物姓名的猜测，虽然不是完全正确但也是相当了不起了。 TinEye 的数据库与 Google 的相比相对来说小些，相信不就的将来也会得到扩充。提供具有类似功能的还有诸如 [Incogna](http://www.incogna.com) 以及 [百度识图](http://stu.baidu.com/) 等。

计算机看到的图片不仅仅是成百上千的像素，其需要从中分析颜色，亮度，从而进行图片的特征提取，以目前最具实力的 Google 为例，Google 采用了超大规模的实时并行计算。自 2010 年以来 Google 搜索引擎发生了重大变革，将其搜索迁移到了新的软件平台 [Caffeine](http://www.csdn.net/article/2012-08-21/2808870-Google-Hadoop-versus-Dremel) 使得搜索更加高效，其可以对来自互联网的几百亿张图片进行实时的图像特征匹配，从而更加快速的反馈用户相关的搜索结果。这些都需要大数据背景下机器学习等技术作为坚实的后盾。而数据挖掘技术又是大数据背景下机器学习应用的另一个重要领域。谁能尽早的向数据“掘金”，谁就能在今后的激烈竞争中先拔头筹。
