上学期,计算机科学中心的谢尔盖·戈尔巴秋克(Sergey Gorbatyuk)和彼得·卡罗尔(Peter Karol)的学生在Yandex.Real房地产项目的广告经理Vladimir Gorovoy的领导下致力于重复数据删除。 伙计们告诉我们该项目如何运作以及取得了什么成果。

设计任务
Yandex.Real Estate是一项广告服务,用于出售和出租公寓,客房,房屋,地块。 广告是由个人,房地产开发商或代理商放置的,因此相同的属性通常由多个要约表示。 大多数情况下,一些代理商试图一次出售公寓,有时甚至是所有者。
观看过的广告重复广告会使用户感到烦恼,最糟糕的是,它们会误导用户。 这也阻止了Yandex团队收集公寓中的分析数据并准确地计算出它是待售还是待租。 因此,我想学习如何在一个报价中搜索和粘贴重复项。
广告流很大,因此无法手动对其进行审核。 因此,我们需要一种能够以高精度找到尽可能多的重复项的算法。 准确性很重要,因为错误的代价很高:绑定不同的广告将导致用户抱怨。
传统上,使用机器学习算法来解决具有如此高要求和复杂数据结构的任务,因此实际上,该任务被表述为“培训最先进的分类器之一”。
问题所在
- 主题领域对我们来说是新的,它具有自己的困难和特征。
- 根本没有标签数据。
- 没有明确的机器学习任务-这里的因素和目标变量是什么?
在最后一段中,一切都相对简单:因素将是有关来自不同广告的一对对象的信息,而目标变量是一个对象是现实中的对象还是两个对象。 但是,找出房地产市场的特征并标记数据会占用大部分项目时间。
数据标记
我们收到了部分数据库,其中包含莫斯科的公寓出售要约。 描述它们的主要数据是:
- 一般结构化数据-素材,价格,楼层,房间数量,浴室,天花板高度,有关卖家的元信息等。
- 对象的文本描述。
- 对象的照片。
在Yandex之前,我们有一个重复分类器,该分类器从1点开始就没有控制数据对因子进行了训练。 这是一种商品群集算法,称为重复商品,它们属于一个群集。 它具有相当高的精度,但相对较低的完整性。 这意味着他发现的重复项比例很低,尽管他很少被误解。
我们使用了根据关键指标之间的差异和关系(例如价格或底价)比较自己之间的报价的想法,以获得广告差异性的经验指标。 他们想出了将两个数字与一个数字相关联的功能-衡量两个广告在主要数据中的差异的一种方法。 该指标帮助我们创建了一个平衡的样本,同时标记了数据并至少粗略地规范了示例的分布:我们希望在中间某个地方有更多相同,或非常不同或复杂的示例。
标记结果比我们预期的要复杂得多。 这就是为什么:
- 对相似对象的相同且非参考性的描述。 尤其是从新的资金中:建筑公司分批运送它们,只有在极少数情况下才能按批号区分它们。
- 故意的数据损坏。 房地产专家向我们解释说,有时候人们想隐藏公寓的真实地板或外观。
- 没有丰富的外观或类似物体的照片。
- 同一对象的不同照片。 下面是一个简单的示例,但是,有些照片像侦探一样必须长时间凝视,只能使用演绎方法的全部功能来确定是一间公寓还是两套不同的公寓。


监督基线
我们标记了数据,并尝试仅根据第一段中的因素(价格,镜头等的分类和连续指标)训练随机森林。 这些因素的差异和关系,以及基于放置和更新时间的其他构造因素,有关卖方的信息等,都用作预测因子。 在测试数据上,该分类器比保守的聚类算法准确度高5-8个百分点,其完整性比先前的结果高30-35%。
受此结果的鼓舞,我们转向了另外两个因素-文字说明和图片。 我们几乎无法与后者合作:我们很晚才卸载它们。 他们尝试使用散列来过滤常见的外部照片,用于处理水印的感知散列以及卷积网络高层(ResNet-18)的输出作为其他因素,但是,令我们惊讶的是,它们的准确度并未得到大幅提高。
我们认为,有必要在该主题领域中进行更深入的图像分析,非常重视图像预处理,尝试其他架构和特殊的损失函数。 对于去词素化和矢量化的文本数据,应用Tf-Idf矢量化算法,并将矢量化表示形式用作主要特征。 这些向量的不同度量标准使预测质量得到了更为显着的提高。 作为一个因素的最佳结果是在这些向量上分别训练的逻辑回归预测的概率。
最终模型
最终模型汇总了其他所有符号和输出,即CatBoost。 这是Yandex产品,具有特殊的损失功能-改进的F量度。 CatBoost技术已成为分类任务中最好的技术之一,可轻松集成到基础架构中。 测试样本上算法的质量为98%的准确性和93%的完整性。
我们认为这是一个很好的结果,并且从业务角度来看是否相同-市场部的专家将决定:)