搜索的本质

利用信息,消除歧义 – 吴军博士对于搜索本质的解释定性

本文内容来自于一次吴军博士的讲座整理

用信息熵衡量搜索

香农在信息论中提出信息熵的概念,统摄这个议题

语言的出现是为了人类之间的通信,任何一种语言都是一种编码的方式,这也是语言模型中直接抽象 encoder $\rightarrow$ decoder 的来源,自然语言处理问题等价成通信的解码问题

一本五十万字的中文书平均有多少信息量?

  • 常用汉字大约有7000,假如每个字等概率,那么大约要用13个bit表示一个汉字(实际上汉字的使用是不平均的)

  • 考虑到实际每个汉字使用不平均,前10%的汉字占文本的95%以上

    • 不考虑上下文相关性,每个汉字独立概率,那么每个汉字信息熵大约8-9个bit

    • 考虑上下文相关性,每个汉字信息熵约5bit左右

      传统理论上一个汉字包含的信息少于5bits,大部分网上均称汉字的信息熵大于6,甚至达到11

故一本50w字中文书,信息量大约是250wbit

这里讲的250wbit是个平均数,同样长度的数,所含的信息可以差很多

编码压缩存储

  • 用好用的压缩算法压一下,整本书可存成一个320KB的文件
  • 若直接用两字节编码存储这书,大约要1MB大小,是压缩文件的3倍

这两个数量的差距,在信息论中称作 冗余度(redundancy)

重复内容越多,信息量就越小,冗余度就大

不同语言的冗余度差别很大,汉语在所有语言中冗余度是相对小的,这与人们普遍的认识“汉语是最简洁的语言”是一致的

定量分析

从10亿数据中找出10个文档,需要27bit的信息

$10亿=2^{30}$, $10=2^3$,30-3=27

其中query本身能提供20bits的信息,这就是搜素中最重要的内容

  • 每个查询串,一般3-5个字符,平均4个,4*5bits/字=20bits
  • 所以查询命中信息(hit proximity)最重要,占20bits

还需要7bits

  • 文本质量度量(pagerank)
  • 大众的知识(查询重写、点击模型)
  • 个性化

西瓜和芝麻

抓住主要部分,钻在小的芝麻粒做得再好也只是"芝麻",这里的西瓜就是20bits的内容,即查询文字

信息的来源:

  • QRW – query rewrite transform提供20bits的信息,占70%的信息量(hits)
  • 客户端收集的log数据(点击行为模型),提供3.4bits信息,对相关性排序贡献在40%以上(现阶段更高)
  • QRW的重构,根据上下文相关性提供2~3bits的信息(关联性)
  • 搜索偏好的设定(个性化)
  • 隐含信息,把可能的结果作为QRW进行查询

QRW功能示例

当今地球上五十个最值得去的地方

  • 当今,表明结果网页有时效性要求。时间较晚的网页会被排序加权,提供全局属性
  • 上下文无关冗余词:个,最,去,的
  • 上下文相关冗余词:当今。提供全局属性后,其在匹配时可作为非必留
  • 同义词替换
    • 地球:世界
    • 五十:50
    • 地方:地域,地区(得分不高,不适合是合适的同义词替换)
  • 世界上 五十 值得 地方

技术的两个支柱

有信息–数据的重要性

  • 索引量要尽可能大

  • 内容尽可能全

    • 本来信息就不够,还丢掉些就更难做好
    • 不需要多余小歘歘
  • 过滤掉噪音:作弊

用好信息–模型的重要性

  • 保证将效果接近最佳
    • 所有信息一起用
  • 好的模型一定是简约的
  • 模型里的每一部分原理都讲得清

排序所需的信息

与查询无关的部分

可分为link-related 和content-related

  • 完整的网页(内容、title、body、anchor等

  • Pagerank(很像专业内的reference)

    • 原始算法未回应时效性方面的关注
    • 因作弊被污染数据的纠正
      • 今天对网页质量的衡量是全方位的,商业度同样考量,如一些八卦网站pagerank可能很高,但内容权威度很低
  • 访问量(popularity分层的依据)

  • 信息含量(informative measurement去重)

    • 负向例子:如过短的新闻
  • 时效性

和查询相关的部分

  • 命中:hits
  • 点击:click information
  • 关键词之间的关联性(proximity)
    • 距离
    • 其它语义相关性
      • 同义词
      • 语法关联性没有语义关联性重要,语义:信息直接对应
  • 查询重写
  • 商业和作弊信息
  • 隐含信息
    • 高考(年代),地点
    • 查询类型(人物,专有名词,问题)
    • 同义词扩展等
  • 关联性本质是上下文信息有助于降低不确定性
  • 汉字查询词:上下文相关提供的信息约莫占2-3bits

个性化信息

  • 浏览器设置和搜索偏好的设置
  • 地点
  • 用户画像
    • 搜索历史:search history,query hints
    • 喜好站点
  • 订阅信息
  • 前面几次搜索
  • 前几次点击的表现

个性化是否是良药

  • 累死了产品经理,但效果甚微

  • 两个人在不同维度权重不同(维度由产品决定),但差异性(距离)过小,不足以累计起足够有意义的信息

    • 例如有6个维度

      • A $\begin{bmatrix} 0.3 &0.2 &0.15 &0.05 &0.2 &0.1 \end{bmatrix}$

      • B $\begin{bmatrix} 0.2 &0.4 &0.05 &0.2 &0.05 &0.1 \end{bmatrix}$

      • 大众平均 $\begin{bmatrix} 0.25 &0.3 &0.1 &0.125 &0.125 &0.1 \end{bmatrix}$

      • 两者之间的KL-divergence

        • A对B: 0.154 bits
        • B对A:0.152 bits
        • 对大众更小:A:0.102,B:0.081
  • 需要比较多的信息才起作用,累计道1bits的信息

  • 成本上也要考量,是否要每个人建立一个click model,要做,但不是首要的目标任务

排序的一勺烩

  • 信息是原料,排序函数ranking function是菜谱
  • 把每种信息看成一种变量,多种信息组合搜索空间巨大
  • 难点就在信息的组合
    • 借鉴统计模型的思想
      • 符合所有可靠的统计数据
      • 满足所有的边际分布
      • 尽可能平滑
    • 方法论:机器做 Jump Start,专家做经验公式
  • 理想情况下各种信息是正交的,现实却是:
    • 大多信息不是统计独立的
    • 一些信息完全被其它信息覆盖
  • 面对现状,对影响力较小的信息,需定期review和删除

召回不是问题,但准确率不高时

  • 内容作弊
  • 没有找到关键词
    • 我们需帮用户补上(隐含的信息)
  • 信息整合的不好 – 模型不好
    • N种Feature,如何构造scoring function G$\begin{pmatrix} x1,&x2,&…,&xn \end{pmatrix}$
    • 新闻:时效性和质量的平衡
    • 内容质量和相关性的平衡,等等
    • 如果一个scoring/ranking的架构不能适应算法,改架构而不是改算法
      • 点击模型放到最前面
      • QRW的预计算(保证先于很多的过滤)
    • 架构(模型)上要避免同一个原始Feature多次使用

应对作弊的方法

笨办法:在网页上做文章

  • 检测无效跳转页面
  • 检查javascript等
  • 减少hard code排序算法

聪明办法:在链接上做文章(背后皆有利益驱动)

  • 链接批发商检测
  • 惩罚购买链接的目的地
  • 过期域名检测

垃圾的本质

  • 噪音的引入且产生正反馈
  • Anti spam(反作弊)的核心是加入信息,降低不确定性
    • 简单的分类器不足够
    • 如有1/2的spam,至少需要一个bit的信息
    • Naive Bayesian Classifier,准确率差不多有90%

点击模型&客户端的竞争

  • 对相关性的贡献在40%以上
    • 举例,20条信息,等概率的话,信息熵5.7bits
    • 若点击率分别是1/2,1/4,1/8,信息熵变成2.3bits
    • 改进了3.4bits,在查询所需的额外7个bits中,相当于提升了3.4/7=50%的效率
  • 今天所有搜索引擎,对常见的查询,结果都不差,差异在于不常见的查询。提高这些搜索查询质量实际靠的是大量的数据
  • 数据成为决定好坏的第一要素,算法倒在其次了
    • 网页本身的数据(完备,新)
    • 用户点击的数据,点击模型统计数量足够,这种根据点击决定的排名就很准确有效。点击模型贡献了搜索排序至少60%~80%的权重
      • 市占率较小的引擎甚至在这些查询由热变冷之前,还没凑齐那么多数据,因此点击模型就非常不准确
      • 搜索行业就形成了一种马太效应:后进场的公司也不会坐以待毙,采取办法快速获取数据,收购流量(如微软收购雅虎,其搜索量由原来google的10%陡然提升至20%~30%,点击模型排名准确了许多)
      • 还有更激进的办法,如toolbar,浏览器甚至输入法来收集用户点击行为
      • 若一家公司能在浏览器市占率高,即使搜索量小,也能快速改进长尾搜索的质量
      • 搜索质量的竞争就变成了浏览器或其它客户端软件市占率的竞争

爬虫的挑战

现在互联网非常庞大,商业网络爬虫需要成千上万个服务器,通过高速网络连接起来

如google在2013年时整个索引大约有1万亿个网页。即使最新最频繁的基础索引也有100亿个网页,假如下载一个网页要1秒钟,那么下载这100亿网页需317年,下载1万亿网页要3.2w年,是人类有文字记载历史的6倍时间

现在很多网页是用一些脚本语言生成的,页面分析很复杂,要模拟浏览器运行一个网页,才能得到里面隐含的URL,所以要做浏览器内核的工程师来写网络爬虫的解析程序

V8引擎和Chrome应该就是网络爬虫的副产物

神经网络的代际趣闻

人工神经网络和人脑没半毛钱关系,本质上是一种有向图。但它使用了一个新名词:神经元。让人感觉很神秘,且会联想到仿生学或认知科学等一辈子都难搞懂的东西

神经网络的规模决定了它能做多大事情,因为节点之间是连接的,复杂度随着网络规模扩大呈指数级上升

  • 经历了几次技术名词被玩坏:神经网络$\longrightarrow$连接主义$\longrightarrow$深度学习
  • 这一代根据网络非常深的特点,起名深度学习
    • 相较于往代运气很好,云计算的兴起使得使用成千上万台计算机成为了可能

总结

  • 过去几十年智能产品质量的根本:信息
  • 信息量的提升是这些产品(机器翻译,语音识别,搜索,NLP)进步的根本
  • 如果没有提供新的信息,不要指望搜索质量有任何提高
    • 如导出式特征,是没有贡献额外信息的,同一个信息用多遍没有用
  • 两个支柱
    • 有信息(数据的重要性),常被忽视
    • 用好信息(模型的重要性)

赠语

  • 忘掉自己的专长
    • 不要做铁锤人,一锤在手,满眼都是钉。解决问题有很多办法,很多办法比你手上的简单,简单才是美!
    • 考虑产品是怎样的,不是我最容易做成什么样
  • 在产品方案选择上,关注每一个细节,但在过程中要建立信息秩序
  • 在工程方案选择上,集中精力解决95%的问题,不浪费精力在5%的问题上,不要低估简单方法的有效性
    • 完成比完美重要,经常来说可以提早很多时间将变化提供给用户,且带来质的提高,雪中送炭
    • 暂时放弃的20%的收益,对用户而言通常是锦上添花
    • 坚持选择简单方案另一个原因,是容易解释每一步和方法背后的道理,便于出问题时查错,且容易找到今后改进的目标
  • 用数据说话,再有sense的人也会犯错。Never get any conclusion without data
  • 提高自己的境界
    • 之前苹果的东西为什么做那么好
    • 境界高了,才知道关键技术在哪里
      • ipod的关键技术,google的关键技术
  • 最好的指引也是不要去做什么(可少犯很多错误),节省很多可能做无用功的时间
  • 所有产品最终都是要盈利的