旅游吧!我在这里 ——旅游相册POI搜索:找回你的足迹
版权声明:本文由林少彬原创文章,转载请注明出处:
文章原文链接:https://www.qcloud.com/community/article/89
来源:腾云阁 https://www.qcloud.com/community
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搜索应用积累了丰富的应用场景与应用经验,不断提升性能及优化用户体验,足够成熟后已作为“腾讯云搜”产品的能力之一开放给广大的开发者用户。