解决方案:scale similar product identification sys

优采云 发布时间: 2022-10-28 16:32

  解决方案:scale similar product identification sys

  摘要:识别相似产品是电子商务搜索的痛点。关键挑战在于两个方面。1) 相似性在不同的应用中定义不同,例如不同供应商销售的几乎相同的产品,对于有共同兴趣的客户可以互换的产品,视觉上在设计图案、样式或颜色方面相似的个性化产品。很难构建适用于所有场景的通用解决方案。2)计算数十亿产品之间的成对相似性是资源密集型的,这使得它在*敏*感*词*数据处理中具有挑战性。为了提供灵活全面的*敏*感*词*解决方案,本文提出了一个一体化系统,产品相似性服务(PSS),它利用最先进的深度神经网络和分布式计算技术来服务于不同的亚马逊规模的产品相似度计算。实验结果表明,PSS在验证和排序任务中都能返回高度相关的相似产品,在大数据量上具有良好的计算效率和系统可扩展性。

  同类产品识别的三种应用场景

  (a) 根据图像、标题和描述的关键属性(例如相同的手机类型)推荐缺货商品的替代品;

  (b) 个性化看起来相似但在某些方面不同(例如不同的设计)的时尚产品;

  (c) 搜索不同供应商销售的几乎相同的商品。

  

  所有这些都需要在亚马逊不断增长的库中探索产品的相似性,但具有不同的业务目标和要求。

  灵活的相似度定义

  不同的产品信息:针对不同的应用,系统需要提供输入产品信息的灵活性。例如,对于视觉相似度推荐,产品图像是使用的关键信息,而对于替代产品的识别,图像、标题和描述都可以是识别相似产品的重要线索。

  不同的优化目标:系统需要足够灵活,以针对不同的应用程序优化输出目标。例如,在视觉搜索中,目标是将具有相似视觉模式的产品返回到查询图像,并对它们进行排名。而在替代产品推荐中,目标是在客户做出购买决定时识别可以相互替代的产品。

  关键属性匹配:系统需要能够灵活地使用后置过滤器来移除不符合条件的相似项目。例如,对于替代手机壳推荐,如果客户正在探索 iPhone X 手机壳,则后置过滤器应该能够移除与 iPhone X 不兼容的手机壳,否则会导致非常令人失望的用户体验。

  产品嵌入学习

  

  提取图像和标题特征、用户行为特征(共购、共视)多任务学习相似度数据挖掘。从 Siamese 网络训练高质量产品嵌入的主要挑战是找到困难的正/负训练对。一个简单的方法是随机选择同一类别的产品作为正对,不同类别的产品作为负对。但是,同时存在很多不符合申请要求的误报(例如,将运动风格的 T 恤和嘻哈风格的 T 恤搭配为正可能不合适),同时, 跨类别的负数非常容易训练,而且收敛速度太快,对学习没有贡献。为了使模型训练有效,同时对任何任务都有效,首先,我们利用用户行为数据(例如查看购买)的一般相似性来挖掘正样本和负样本对。其次,我们利用业务数据(人工注释数据)来挖掘正/负训练对。对于任何给定的相似性数据源,我们进一步执行清理步骤以采集高质量的正负训练样本。更具体地说,对于正例,我们删除那些在图像/标题/产品行为嵌入上不具有高相似性(例如余弦相似度 0.8)的对。类似产品索引和搜索 我们进一步执行清洗步骤以采集高质量的正负训练样本。更具体地说,对于正例,我们删除那些在图像/标题/产品行为嵌入上不具有高相似性(例如余弦相似度 0.8)的对。类似产品索引和搜索 我们进一步执行清洗步骤以采集高质量的正负训练样本。更具体地说,对于正例,我们删除那些在图像/标题/产品行为嵌入上不具有高相似性(例如余弦相似度 0.8)的对。类似产品索引和搜索

  在 PSS 中,我们选择 HNSW 是因为它在准确的相似性索引和快速搜索之间提供了良好的平衡。查询步骤的目标是从为每个查询构建的索引工件中检索相似的项目。

  过滤后细化

  最后一个过程是过滤后的细化。对于一些商业用例,需要额外的约束才能使相似性识别有效。例如,具有相同图像但尺寸不同的两件 T 恤适用于完全不同的客户。为了进一步提高性能,PSS 通过配置关键属性列表来提供添加特定应用程序约束的灵活性,以优化相似性识别。任何具有不匹配属性值的相似候选将在后过滤阶段被移除。图 6 显示了基于属性的后过滤的示例: (a) 显示没有任何过滤的相似项目;(b) 以与查询项目相同的颜色显示相似项目;(c) 显示与查询项目相同的衣服缝线,类似项目的生产风格。在生产中,

  详细说明:熊掌post提交示例

  请注意,熊掌提交有正常的数据提交和原创提交,以及历史数据提交:

  正常(伪原创,自认质量不高的,24小时内提交)

public static final String WeiMipPostUrl = "http://data.zz.baidu.com/urls?appid=***&token=***&type=realtime";

原创文章(要一小时内提交)

public static final String MipPostUrl = "http://data.zz.baidu.com/urls?appid=***&token=***&type=realtime,original";

历史数据(有个几十万可以当天全部提交了,这个链接就用不到了)

public static final String OldPostUrl = "http://data.zz.baidu.com/urls?appid=***&token=***&type=batch";

  推:

  posturl 是上述三个链接之一,参数是已提交链接的集合:

  /**

* 百度链接实时推送

* @param PostUrl

* @param Parameters

* @return

*/

public static String postTuiSong(String PostUrl, List Parameters){

if(null==PostUrl || null==Parameters || Parameters.size()==0){

return null;

}

String result = "";

PrintWriter out = null;

BufferedReader in = null;

try {

<p>

//建立URL之间的连接

URLConnection conn = new URL(PostUrl).openConnection();

//设置通用的请求属性

conn.setRequestProperty("User-Agent", "curl/7.12.1");

conn.setRequestProperty("Host", "data.zz.baidu.com");

conn.setRequestProperty("Content-Type", "text/plain");

conn.setRequestProperty("Content-Length", "83");

//发送POST请求必须设置如下两行

conn.setDoInput(true);

conn.setDoOutput(true);

//获取conn对应的输出流

out = new PrintWriter(conn.getOutputStream());

//发送请求参数

String param = "";

for(String s : Parameters){

param += s+"\n";

}

out.print(param.trim());

//进行输出流的缓冲

out.flush();

//通过BufferedReader输入流来读取Url的响应

in = new BufferedReader(new InputStreamReader(conn.getInputStream()));

String line;

  

while((line=in.readLine()) != null){

result += line;

}

} catch (Exception e) {

System.out.println("post推送出现异常!"+e);

e.printStackTrace();

} finally{

try{

if(out != null){

out.close();

}

if(in != null){

in.close();

}

}catch(IOException ex){

ex.printStackTrace();

}

}

System.out.println("post推送结果:"+result);

return result;

} </p>

  测试推送时检查推送结果,检查资源平台上当天的提交数量是否相应减少。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线