旅游吧!我在这里 ——旅游相册POI搜索:找回你的足迹

QQ空间相册的旅游相册,它以照片拍摄时间为主线,还原了旅游行程中的故事,清晰展现了用户行程景点位置及拍摄的美景。景点位置查询作为旅游相册一个重要功能,可以帮助用户找回旅途中的足迹。腾讯内部搜索平台部成立不久便托管了景点POI搜索业务,支持用户景点输入智能提示、国内外景点搜索。

一.现状

旅游相册POI搜索业务自2013年10月上线后,从最开始的仅支持国内景点搜索到国外景点数据补充,再到针对性地修补景点数据,从数据层面做了大的修补。搜索点击率也随之逐渐提升。时隔数年,再次拾起,希望可以通过总结整理,达到知识分享、提升的目的。

二.架构设计

POI搜索智能提示主要用于用户输入景点检索串时,实时进行相关结果快速提示的场景。一方面可以补充提示用户所要输入的位置信息,另一方面可以引导用户搜索精确化,从而提高景点搜索结果准确度及结果点击率。 针对以上业务特性,POI搜索业务架构有别于其他通用搜索,主要体现在数据补充、离线索引、在线检索三个模块。

1.数据补充

目前数据分为三个来源:

  • 国内数据:由腾讯地图提供的POI数据,包括国内各省、市、区等行政区,旅游景点等。
  • 台湾和国外数据:由相册业务侧负责抓取, 中文、英文、其他语言都有。
  • 国外景点数据:由搜索侧抓取国外景点,范围按洲、国家、省从大到小,根据抓取到的景点名称调用Google Map API获取对应POI信息。这种补充方案依赖于地图API的准确性及景点名称规范性。

2.离线索引

离线索引主要功能包括接收POI原始数据,建立倒排、顺排、属性、等索引,离线打分。基于地图POI数据更新周期较长、同步集中的特点,POI搜索业务采用了定期全量推送加每天增量推送的更新方式。 为支持用户输入景点的实时检索,我们设计了两套索引结构:前向匹配切词索引、普通分词索引,保证用户检索结果可以前缀命中或分词命中检索串,从而提升用户检索体验。

前向匹配切词索引

  • 末级POI信息按前向匹配生成索引,例子:“中国/湖南/长沙/岳麓山书院”,生成的索引为“岳”“岳麓”“岳麓山”“岳麓山书”“岳麓山书院”。
  • 非末级POI信息做数值过滤feature,例子:“中国”“湖南”“长沙”作为Doc的数值过滤feature。
  • 生成全拼拼音索引并按前向匹配索引,如“zhongguo”生成z, zh, zho, zhon, zhong, zhongg, zhonggu, zhongguo。
  • 外文名称按单词粒度处理。
  • 需控制倒排链的最大长度。
  • 英文也做前向匹配切词。

普通分词索引

  • 末级POI信息按普通分词生成索引,例子:“中国/湖南/长沙/岳麓山书院”,生成的索引为“岳麓山”“岳麓山书院”“中国”“湖南”“长沙”。
  • 非末级POI不索引

行政区特殊索引

为支持行政区名检索,离线索引对每个POI文档的省、市、区行政区名建立了特殊索引:首先建立行政区名到行政区名字母映射表,查表得到POI对应行政区字母缩写,再通过添加特殊前缀标记的方式,把带特殊前缀的行政区字母标记添加进这篇文档的顺排词表。支持行政区识别检索效果如下:

离线计算

行政级别权重 > POI类别权重 > 主副点 行政级别权重:国家 > 省 > 市 > 县 > 末级POI 类型权重:旅游景点 > 其他 主副点:主点 > 副点,比如 银科大厦 > 银科大厦停车场,简单比较方法是词长越短越重要

3.在线检索

预处理

  • 去空格、归一化
  • 混拼(拼音汉字参杂)转换为全拼音
  • 切词: 去行政区、去POI类别、整串、普通分词(例子:南山世界之)
  • 去行政区:提取“南山”为行政区,“世界之”为真实检索串
  • 去POI类别:提取“汽车站”、“火车站”、“机场”等为POI类别
  • 整串:“南山世界之”
  • 普通分词:“南山”、“世界”、“之” 在线检索主要功能包括索引数据加载,检索语法树构建,结果求交集相关性排序等。用户检索请求经检索语法分析,可以扩展为三种检索语法:

去行政区前缀检索:

带行政区名的检索串识别到行政区后,行政区名作为分类过滤条件结合去行政区后的检索串进行前缀索引检索。效果如下:

普通前缀检索:

无行政区名的检索串直接进行前缀索引检索。效果如下:

普通分词检索:

获取分词结果后进行分词索引检索。效果如下:

排序策略

  • 直接使用离线打分结果
  • RBU洗脸
  • 行政区、景点、前向匹配切词结果、普通分词结果各占几条
  • 行政区 > POI类别
  • 前向匹配切词结果 > 普通分词结果
  • 末级POI相同时,当前城市优先。如用户在深圳,搜索“世界之窗”“深圳世界之窗在”长沙世界之窗“前(暂无实现)

三.质量优化

1.零结果分析

根据业务侧提供的会话级检索词,即用户选中推荐地点时落下的检索串。会话级零结果数占每天会话级检索量接近四分之一 抽样会话级零结果检索串分析如下:

检索串类型

示例

时间+相册主题

2005年的我

相册主题

一個人的旅途

地点缺失

上海普陀区梅川路步行街

输入有误

巴黎罗浮宫

相册主题类:

包括时间+相册主题、相册主题类型的检索串。用户在地点框误输入相册主题,输入与景点搜索无关,检索串格式比较混乱

地点缺失:

用户输入带范围描述词的地点,比如:东莞莞城区西城楼附近、哈尔滨松花江江边。有些地点没有索引进来,比如:柳城太平安乐湖、康巴什赛马场

输入有误

少数输入拼写错误,比如:巴黎罗浮宫

结论:

导致零结果的检索串中相册主题类型占了绝大部分;地点缺失问题主要是用户不能确定景点位置导致;数据缺失问题比例相对较小。

解决方式:

产品侧策略:通过产品侧对用户的输入做引导,帮助用户区分相册描述、景点位置输入框,提升检索串质量。 数据补充策略:针对地点缺失的问题,通过抓取旅游网站著名景点数据补充。 在线处理策略:后续考虑引入QC纠错,解决拼写错误等问题。 引入QC纠错及补充著名景点数据前后,搜索零结果率有所下降,效果如下:

2.结果曝光各类型POI数比例

结论:

从各类型结果曝光情况看出,非旅游景点、非行政区的结果检索得到的POI数最多;搜索结果整体趋向景点、地址搜索的场景,由于对风景名胜等景点相关的POI数据离线打分权重相对较高,导致其他类型数据召回效果并不理想。

解决方式:

针对特定类型(如机场、火车站、汽车站等)检索需求,离线索引会对这类POI文档建立分类类型特殊索引,在线检索对检索串语法分析时,可以识别出其分类意图及分类类型,转化为分类过滤条件下发。效果如下:

经历了QQ空间相册等业务的高速发展,景点POI搜索应用积累了丰富的应用场景与应用经验,不断提升性能及优化用户体验,足够成熟后已作为“腾讯云搜”产品的能力之一开放给广大的开发者用户。

相关推荐

腾讯云搜API使用说明

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

林少彬的专栏

1 篇文章1 人订阅

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏互扯程序

15个变态的Google面试题以及答案

在当前经济形势不景气的情况下,谷歌招聘新员工是一件令人振奋的事,特别是对那些在当前金融风暴中渴望找到安全港的年轻经理们和软件开发商们来说是个好消息。  

1221
来自专栏量化投资与机器学习

根据期权价格估算风险中性密度

1362
来自专栏前端小吉米

让你听见的 HTML5

HTML5 多媒体应用现在还没被大部分挖掘出来,像普通的页游只能简简单单的做一些 2D 渲染,主要差距还是在性能上。H5 天生是动态语言,需要经过解析、编译。而...

962
来自专栏大数据钻研

统一回复《怎么学JavaScript?》

于时不时,有同学私信问我怎么学前端的问题。 这里统一回复一下,如下次再遇到问我此问题同学,就直接把本文链接地址发给你了。 首先说句题外话。关于有人管我叫大神的...

2534
来自专栏程序人生

走进 racket(lisp) 的世界

上周追着看了个大牛的好几篇文章,发现一个叫racket的语言出镜率颇高 —— 这已经是我十月来第三次从各种大牛的文章中接触这个词。就如「惊天魔盗团」里那个被催眠...

3843
来自专栏人工智能头条

利用Amazon ML与Amazon Redshift建立二进制分类模型

1505
来自专栏Albert陈凯

CPU与GPU区别大揭秘

有网友在网上提问:“为什么现在更多需要用的是 GPU 而不是 CPU,比如挖矿甚至破解密码? ”以下是比较准确靠谱的回答:   1、现在更多被需要的依然是CP...

4183
来自专栏web前端教室

推倒JS的青春之旅

青春啊,只有一次,花有重开日,人无再少年。群里的小伙伴们,我是嫉妒你们的,在每次群视频的时候。虽然我觉得自己依然还年轻。有人说青春就是用来浪费的,也有点道理。虽...

1887
来自专栏智能算法

追MM的各种算法,你会几个?

来自酷勤网(程序猿微信原创整理) 链接:http://www.kuqin.com/humor/20080403/5789.html 动态规划 你追一个M...

3226
来自专栏程序猿DD

我为什么还要用业余时间再学Python?

Python的火热我就不细说了,大家都是编程老司机,对最前沿最火热的编程语言肯定比我还了解。

752

扫码关注云+社区