推荐系统-召回-概述(三):向量化

news2024/11/26 0:53:25

只要对机器学习稍有涉猎,就会发现如今机器学习,无论是推荐、图像、语言等领域,随处可见embedding,可以说,在深度学习主宰机器学习领域的今天,万物皆可embedding。那么,什么是embedding,怎么对实体进行embedding,推荐领域里,embedding会怎么应用呢?且待本文一一道来。

embedding简介

embedding是什么

在本文之前的几篇文章里,曾经提及对用户或物品的embedding,实际上,embedding就是将实体的自然表达变化成向量化表达的方法。

将实体(用户、物品、图像等)表示为向量有什么用处呢?因为基于文字或者图片表达的实体,并不能够被计算机理解,因此它们彼此之间无法进行相互比较,而一旦转换成计算机可理解的向量,则能够计算它们彼此的距离,从而可以对他们进行相似度的计算了。

其实,在embedding之前,也有各种讲实体进行数值化的方法,比如LDA,plsa,tfidf等, embedding可以看作是将实体在高维数值空间进行映射,只要向量维度足够高,且映射方式合理,就能够很好地表达复杂的实体,因此embedding甫一出世,便获得了热烈的追捧。

embedding的起源及发展

说起embedding,就不得不提word2vec。word2vec是embedding的开天辟地之作,奠定了embedding的根基。对word2vec的学术理解可以参考Mikolov等人的文献[1]和[2]和[3](文献[3]是doc2vec,使用向量来表达整个文档)。

这里用白话简单介绍下word2vec:
word2vec构建了一个通过上下文来预测单词概率的任务。它的思路是:设置一个滑动窗口(比如5),当滑动窗口滑过文章时,出现在滑动窗口中的几个单词,掩盖住其中一个,通过其他单词来预测被掩盖的那个单词。
在这里插入图片描述

上图展示了经典的word2vec模型,对于V个单词,通过滑动窗口选中若干连续单词,这几个单词经过Hidden layer(隐藏层)后,再次映射到V个单词上,预测每个单词的概率,如果目标单词的概率最高,则说明这个网络可以很好地对单词进行预测,也就是隐藏层很好地表达了目标单词。
上面这个模型是word2vec中的CBOW方法,Mikolov还提出了另一个对word做embedding的方法,即Skip-gram。与Skip-gram的结构与CBOW完全一致,仅仅是任务不同,它会在滑动窗口中掩盖大多数单词,仅保留一个单词,用这个单词去预测其他被掩盖的单词。下图展示了这两种方法的区别。
在这里插入图片描述

因为在全量单词空间预测概率是个非常耗时的事情,因此word2vec分别使用了Hierarchical Softmax(层次化Softmax)和Negative Sampling(负采样)对目标进行近似处理,减少目标预测的任务量。其中Hierarchical Softmax使用哈夫曼树对单词进行编码,使得高频词更容易被采样到,从而从整体上减少对目标单词的预测任务。而Negative Sampling则是通过采样一定的负例(非目标单词),减少对全量负例的训练。

由于Hierarchical Softmax方法并不能很好地进行并行化,因此,当今的embedding模型中,大部分优化方式都是Negative Sampling,Hierarchical Softmax在深度学习中并不常见。以上两种优化方法包含在常用的机器学习训练包里,直接使用即可。

from gensim.test.utils import common_texts
from gensim.models import Word2Vec

model = Word2Vec(sentences=common_texts, vector_size=100, window=5, min_count=1, workers=4)
model.save("word2vec.model")
  • 1
  • 2
  • 3
  • 4
  • 5

需要注意的是,虽然大量的深度学习会用到embedding的概念,但是作为embedding始祖的word2vec,本身却并不是深度学习模型,因为它的模型里仅包含一层隐层。

embedding的思路非常好地在物体的现实表达和数值化表达构建出一个桥梁。它的精髓在于构建一个合理的任务,在训练任务的过程中,得到向量化的副产品。作为范本,word2vec很好地展现了这一思路,那之后,embedding的应用便在机器学习领域如火如荼地兴起了。

推荐系统中的经典embedding模型

embedding的思路在推荐系统里非常有意义:若用户和物品能够在同一向量空间被训练出来,那么就可以计算用户和物品的相似性,从而为用户推荐了。

DSSM

DSSM全称为Deep Structured Semantic Model(深度结构化语义模型),是由微软研究院在2013年开发的,其出处见论文[3]。该模型原用于搜索引擎,用于对query(查询词)和文章的匹配。我们来回顾下整个DSSM算法:
在这里插入图片描述

DSSM网络如上图所示。它的原理比较简单,通过搜索引擎中的Query(Q)和Document(D)之间的曝光点击日志做样本,使用深度网络来训练模型,最终将Query和Embedding表达成128维的向量,并使用余弦距离来计算两者相似度,判断点击概率。该模型最终训练点击概率,同时也得到了副产物–128维向量,用于表达query和文档。

上图中,网络中几层向量含义如下:

  1. Term Vector:表示原始词向量,即500K的单词表。
  2. Word Hashing:该层是很独特的一层,论文中对原始词表进行了特殊处理,在英文语境下,采用letter-ngams来对单词进行切分,采用tri-gram(即三个字母一切分)的方式。比如#good#可以切分为(#go, goo, ood, od#)四个,由于英文只有26个字母,加上首尾标识#,其排列组合数目有限,可以对原始词表进行有效降维,因此本层维度被降至30k。需要注意的是,如果是中文语境,则使用单字即可(因为单字组成的词组数量反倒不可控)。
  3. 接下来的三层是特征提取层,是普通的DNN网络,每层公式如下:
    l i = f ( W i l i − 1 + b i ) y = f ( W N l N − 1 + b N ) l_i = f(W_il_{i-1}+b_i) \\ y = f(W_Nl_{N-1}+b_N)li​=f(Wi​li−1​+bi​)y=f(WN​lN−1​+bN​)
    每层使用tahn作为激活函数:
    f ( x ) = 1 − e − 2 x 1 + e − 2 x f(x) = \dfrac{1 - e^{-2x}}{1 + e^{-2x}}f(x)=1+e−2x1−e−2x​
    最终将原始的向量层转化为128维向量。注意此处W i W_iWi​在Query和Doc处是完全共享的,这样保证了Query和Doc最后被映射到同一个空间中,相互计算相似度才有意义。
  4. 匹配层:现在query和doc都转化成128维向量,接下来通过用户点击行为做正负样本,来计算两者相似度:
    R ( Q , D ) = c o s i n e ( y Q , y D ) = y Q T y D ∥ y Q ∥ ∥ y D ∥ R(Q, D) = cosine(y_Q, y_D) = \frac{y_Q^Ty_D}{\Vert y_Q \Vert \Vert y_D \Vert}R(Q,D)=cosine(yQ​,yD​)=∥yQ​∥∥yD​∥yQT​yD​​
    再对负样本(浏览未点击样本)按照正负1:4比例进行采样,再对正样本的相似度结果进行softmax。
    P ( D + ∣ Q ) = e x p ( γ R ( Q , D + ) ) ∑ D ′ ∈ D e x p ( γ R ( Q , D ) ) P(D^+|Q) = \frac{exp(\gamma R(Q, D^+))}{\sum_{D' \in D}{exp(\gamma R(Q, D))}} \\P(D+∣Q)=∑D′∈D​exp(γR(Q,D))exp(γR(Q,D+))​
    其中,γ \gammaγ为平滑因子,D为文档样本。
  5. 训练:训练过程中,通过极大似然估计对网络权重进行迭代调整,最小化损失函数为L(λ \lambdaλ) = -log∏ Q , D + P ( D + ∣ Q ) \prod_{Q,D^+}{P(D^+|Q)}∏Q,D+​P(D+∣Q)。

DSSM已经属于深度学习的范畴,相对于word2vec,它是有监督的学习方式,更为准确;n-gram方式可以较好地处理新词问题;且由于计算出的query的embedding与Doc的embedding在同一个向量空间,因此能计算它们的相似度。这个特性在功能上有很多想象空间,在文档召回和粗排阶段都可以使用。但是DSSM也有它的缺点,首先,它采用词袋模型,没有考虑词的位置关系,这对语义理解是一个大的损失(所以后续又有了CNN-DSSM[ 5 ] ^{[5]}[5]、LSTM-DSSM[ 6 ] ^{[6]}[6],等变种模型,用于对原始词进行语义和语序映射);此外,采用端到端的模型,预测结果不可控。

由于DSSM本身涉及到文档相关性排序,与推荐场景不谋而合,因此在DSSM诞生之后不久就被引入到推荐领域中。推荐领域的DSSM是使用两个独立的复杂网络来分别构建用户和物品的特征,最后用用户embbedding和物品embedding进行相似性计算来构建目标。由于用户和物品分别使用一个网络,因此DSSM也称为双塔模型。

推荐系统的DSSM模型大致如下:
在这里插入图片描述

与最早的DSSM不同,推荐系统的DSSM对用户和物品分别构建深度网络,是两个独立的塔,两者在最后一层进行余弦距离计算,通过引入大量的用户和物品特征,完成复杂网络的训练。

在线上召回阶段,当线上来了用户请求之后,按理应该对当前用户和物品分别走一遍双塔模型,进行目标预估,再根据预估结果进行排序,并截取概率最高的几百物品。但线上物品的动辄千万,使得该方案在性能上无法得到保障,这也是许多深度学习模型线下表现很好,但无法在线上大规模应用的原因。
在实际应用中,DSSM的产出实际是用户embedding和物品embedding,它们被保存在内存数据库中,线上按照向量相似度进行检索(线上召回方案一般使用ANN做近似检索,详见下文),这一方法是对效果和性能进行了折中,考虑到用户和物品经过历史数据充分训练后,其在短时间内的变化不大,牺牲一些效果,却能换取性能上的巨大提升,这也是DSSM能够在工业界风靡一时的原因。

双塔模型的另一个好处在于用户和物品完全分离建塔,不涉及到交叉特征,从模型角度看,这种方式牺牲了组合特征带来的效果提升,但由于在线上服务时,每个塔可以单独服务,用户和物品都有各自的表达。以协同过滤的思想来看,它能提供的召回方式及其丰富,既可以做u2i(直接查找用户相似物品)的召回,也可以i2i的召回(查找用户感兴趣物品的相似物品),甚至可以做u2u2i的召回。工业界较为有名的是百度[ 7 ] ^{[7]}[7]和谷歌[ 8 ] ^{[8]}[8]的双塔模型,感兴趣的朋友可以进行扩展阅读。

YouTube的深度学习网络

YouTube的《Deep Neural Networks for YouTube Recommendations》[ 9 ] ^{[9]}[9](2016)是使用Embedding进行推荐的开山之作,在当年还没有大量深度学习应用到推荐系统的背景下,YouTube的作品可谓十分惊艳。论文中对深度学习在召回和排序中的应用都进行了详尽阐述。本文简单介绍下召回中的使用方式。

下图是YouTube的DNN召回模型架构,它以对用户观看的下一个视频时长为目标进行训练。这是一个经典的多层DNN网络图。输入层对用户历史看过的视频和搜索过的词进行embedding,同时结合用户的人口统计学特征以及其他相关特征,如性别、年龄、地域、设备等信息,将这些统一组合成一条长龙向量。
在这里插入图片描述

该向量经过几层Relu之后,与全站视频相连接,预测用户会看哪一个,相当于一个多分类器。出于性能考虑,对负样本进行了采样处理。在模型最后得到user embedding和item embedding,用于线上预估。

Youtube的模型看起来并不复杂,其经典之处,在于它本身进行了大量细致化的处理,给后人很多启发,我们详细展开看看:

  1. user embedding和item embedding究竟是如何生成的?与DSSM不同,YouTube模型中user embedding和video embedding并非是同样维度的向量,其中user embedding是三层ReLU之后最后一层的结果,假设是长度为d的向量;而video embedding则是ReLU结果与全量video(假设有N个)连接的权重系数,可以看作是d * N维矩阵,user embedding与video embedding相乘后softmax的结果,就是N维向量,表达的是观看每个视频的概率,按照该概率排序即可。实际应用时,video embedding在离线训练后存入内存数据库,而user embedding则在线上请求时,走一遍模型,实时得到,线上依然使用ANN的方式快速召回。
  2. 特征的处理:模型输入都是用户特征,对用户历史观看视频和搜索词进行embedding,地域和设备类信息同样被embedding,而其他类特征如年龄、性别、登录状态等则归一化到[0,1],除了归一化值,还对值取平方或开根号,目地是想捕获特征的非线性,以取得更好的效果。此处需要注意人口统计学特征的重要性,对于新用户来说,可能仅仅具备该类特征,有了这类特征,才能够为新用户生成embedding。
  3. 在样本处理上,对每个用户提取了等量训练样本,这是为了防止极度活跃用户对模型loss产生过多影响。
  4. 特殊的特征:example age。表示视频从发布距用户观看的时间,这个特征的引入是考虑到:从业务角度看,用户更倾向于看新视频,但实际上老视频由于曝光时间充分,能够得到更多表现,因此更容易被推荐,为了消除业务和模型上的偏差,在模型中引入视频发布的时长,即example age。在线上模型预估时,则将example age置为0,对所有视频同等对待。对广告熟悉的朋友知道,在广告模型训练时,会引入广告曝光的位置,以消除越靠前广告点击率越高的偏差。这个思路与example age是殊途同归的。这个思路非常有价值,值得被其他推荐系统借鉴采用。

YouTube的召回模型尽管不如DSSM在当下那么盛行,但它在工程上做的许多细致处理在如今仍然值得吸收和借鉴。

Item Embedding

Item Embedding是将物品进行向量化,继而将物品向量用于推荐领域的方法。Item Embedding最早起源于微软2016年的作品[ 11 ] ^{[11]}[11],它扩展了word2vec的应用范围,使得其从NLP领域拓展到推荐领域。

Item Embedding的思路很新奇,它的关键之处在于对问题的建模,认为:每个用户session内按时间顺序点击/下单的商品,具有一定关联,就像同一篇文章中的word一样。这样每个用户操作的物品集(Item Set)通过时间先后排序,就产生了句子,使用滑动窗口遍历句子,即可以使用word2vec一样的方法,对item进行向量化了。Item向量化之后,就可以用于基于Item的协同过滤中,进而进行推荐了。

微软的工作非常有工程借鉴意义,在我们日常推荐系统中,可以采用类似的将会话域中的若干实体(物品,发布者,搜索词,类目等)进行组合,再施以word2vec的方法,就可以对实体进行embedding了。

微软之后,房源租赁平台Airbnb在2018年也发表了对listing(Airbnb的物品是它们的在线房源)进行Embedding的方法[ 12 ] ^{[12]}[12]。其思路仍然是对用户session内的房源listing进行滑动窗口遍历,再构建word2vec模型,但Airbnb结合其自身的业务场景,增加了许多策略处理,如对下单的房源进行额外的预测,负采样时按地理位置进行局部负采样,等。这篇论文在工程和业务上有许多有趣的思考,感兴趣的朋友可以仔细读读。

图Embedding

图Embedding是embedding近年来较为流行的研究领域,通过对大规模图的节点或子图进行embedding,从而能够使用向量对图进行表达和关系计算,在推荐和风控领域都有实用价值。

图embedding的思路基本来自word2vec或doc2vec[ 10 ] ^{[10]}[10](doc2vec是在word2vec基础上加入文档id,从而在训练过程中对文档整体进行了embedding化,详见本系列前文介绍过的doc2vec,关键在于如何能将图结构变化成文档中word词的形式。

DeepWalk

DeepWalk[ 12 ] ^{[12]}[12]是2014年被提出的模型,是Graph Embedding中的经典模型。它为图结构转化成word2vec输入结构打开了思路。DeepWalk的建模思路如下:同一个图中,相近的节点可以认为是相似的。对每个节点,采取截断式随机游走的方式,把节点的局部拓扑信息转换为序列信息,如下图所示:
在这里插入图片描述

假设原始图中有A到H共8个节点,结构如上面左图所示,设置截断距离,从某节点出发,随机游走,就可以得到节点序列。注意:图为无向图,每个节点到其他节点的概率与该节点的连通节点个数相关。假设从A点出发,以1/2概率游走到C点,C以1/3概率游走到E点…,这样就构建出一个长度为5的序列,通过大量的随机游走,就得到了足够的输入样本序列,接着把word2vec模型应用到样本序列上,就可以学习的到每个节点的embedding表示。

从推荐系统应用角度看,DeepWalk算法和微软的Item Embedding大同小异。不同之处在于微软的Item Embedding将每一条序列限定在同一个用户的物品操作集合里。而图的构建则可以跨越这个限制,通过对不同用户访问物品间构建关联,则可以构建出一个足够大的图,继而使用DeepWalk算法来对物品进行embedding了。

EGES

EGES(Enhanced Graph Embedding with Side information)是淘宝提出的一套游走算法,它在DeepWalk基础上引入Side Information,如品牌、类目、价格等信息,其目标在于能够对冷启动的物品进行更好的embedding表示。EGES的图构建部分与DeepWalk相似,其新增的关键部分如下图:
在这里插入图片描述

其中SI 0表示item自身,SI 1到SI n表示item不同的描述性信息,如品牌、类目、价格等,即所谓的Side Information。因为每类物品附加信息重要度不同(如苹果手机用户更看重品牌,而衣物类商品用户可能更看重价格),因此对每个SI都进行加权平均,再聚合在一起,形成初始化的embedding H。输出层则直接对所有item进行softmax概率预测,对负样本进行降采样即可。

除了上述算法,图Embedding还有Node2Vec算法,根据参数调节,来捕获同质子网络或是结构相似子网络,但一般应用于风控场景;还有LINE算法,它对节点的一阶亲密度和二阶亲密度进行建模,再进行拼接而构成最终embedding,同样用于风控场景。

线上召回机制

当实体embedding之后,如何在海量向量中高效查找近邻实体,是非常关键的问题,可以说,正是由于该问题得到妥善解决,才使得embedding技术能在推荐系统中得到迅猛发展。向量召回从实践上来说属于工程范畴,但由于其中涉及到巧妙的算法设计,这里做一个简要介绍。

高维向量检索技术使用的是ANN,即Approximate Nearest Neighbor搜索,它并不是某个算法,而是指一系列用于解决近邻查找问题的算法。ANN包括基于暴力的方法,基于树的方法,哈希方法和基于图的方法,以及向量量化的方法[ 14 ] ^{[14]}[14]。工程实践中常用的成熟第三方库包括Facebook开源的Faiss和Zilliz开源的Milvus。其中Milvus提供了各类向量检索方案,且能满足高性能,强实时性要求。Faiss作为开源多年的常用库,能满足大部分的研究和实时性要求不是特别高的场景。Faiss使用的是向量量化方法中的PQ(Product Quantization,乘积量化)来对存储进行压缩,并使用IVFPQ来实现高效检索。

PQ是将对高维向量进行压缩的一种算法。如下图所示,N个D维向量,每个向量都划分为M(通常取8)段,每一段使用K-means算法进行聚类,聚成K个中心点,每一段的向量都使用其聚类中心表示,这样就压缩了向量的表达空间。K通常取256,使用8bits可以表达,这样每一段就变为8位向量空间,最终向量从N * D * 32bit的空间,压缩成了N * M * 8bit的空间。
在这里插入图片描述

当计算query与空间中某个向量x的距离时,可以计算该query所在聚类中心与x所在聚类中心的距离,该距离可线下计算好,因此在线查询的效率很高;另外,也可以计算query本身与x所在聚类中心的距离,需要线上计算,查询效率相对低,但更准确。
从性能啥上看,若要查找最相近的k个邻居,PQ仍然是不够的,因为仍需要遍历M*K次。IVFPQ在PQ基础上对这个问题进行了很好的解决。它的思路是,先对N个向量进行K个聚类,每个聚类中心索引其类内向量。查找时,先对聚类中心进行遍历,找到最近的聚类中心,再进行类内PQ查询。IVFPQ在每个聚类内部进行向量压缩构建时,做了一些细致化处理,如下图所示:聚类之后,在每个类内,先将向量进行处理,不保存原始向量,而保存原始向量与所在聚类中心的差值,PQ则针对差值向量进行。这一做法的背后思想是:差值之间的方差相较原始向量之间的方差更小,因此在差值向量上进行聚类和近似表达,所带来的误差会更小。
在这里插入图片描述

使用faiss进行向量构建和查找的代码如下:

import faiss 
index = faiss.IndexIVFPQ(quantizer, d, nlist=100, m=4, 8) #构建索引,每个向量都被编码为8个字节大小
index.train(xb) 
index.add(xb) #添加向量
D, I = index.search(xq, k) #搜索top k个向量
  • 1
  • 2
  • 3
  • 4
  • 5

faiss作为成熟的工业界开源应用,把PQ推向了前台。但PQ本身存在着较大的精度损失。向量检索目前趋势是向图索引发展,比较有代表性的是hnsw算法,它将基于“邻居的邻居也是邻居”的思想,由疏到密构建了多层图,从而提升查询的效率。Milvus即有基于hnsw的实现。感兴趣的朋友可以进行深入阅读。

总结

embedding由于能够广泛融合各类特征,更好地学习到用户和物品的抽象化表达,同时能够通过深度学习网络抓住用户和物品的交互特征,所以在推荐系统上具有非常好的性能。

作为深度学习在推荐领域落地的一个代表性应用,embedding尽管兴起时间不长,但从工业界视角看,已经成为推荐系统在召回领域的基础构件之一。同时,学术界与工业界对embedding的研究一直如火如荼地进行,使得当今时代的推荐系统,几乎言必称embedding。

今天介绍的DSSM和YouTube,以及微软的item embedding都是embedding的杰出代表,尤其是DSSM,由于其思路简单,效果显著,在很多公司都得到了落地应用。而图计算的发展则将推荐系统的embedding带入了一个新天地。当然,复杂模型所带来的工程挑战同样不可忽略。以Faiss和Milvus为代表的ANN召回算法,为这些模型的线上部署提供了极大的便利。

需要注意的是,推荐系统没有万灵丹,embedding也有其自身的局限性。它存在着新用户和新物品冷启动的问题,以及深度学习一向存在的可解释性问题。同时,由于embedding过分关注用户与物品的交互,则在一定程度上损失了对用户和物品的内容结构上的捕获与表达。
因此,在推荐系统的召回应用时,仍然需要考虑业务场景来选择合适的方法与特征。

深入浅出推荐系统(四):召回:向量化的潮流_慕阮的博客-CSDN博客_faiss 召回

参考文献
[1] Efficient Estimation of Word Representations in Vector Space, Tomas Mikolov, Kai Chen, Greg Corrado, Jeffrey Dean, https://arxiv.org/abs/1301.3781v3
[2] Distributed Representations of Words and Phrases and their Compositionality. T. Mikolov, I. Sutskever, K. Chen, G. Corrado, and J. Dean. https://dl.acm.org/doi/10.5555/2999792.2999959
[3] Huang P S, He X, Gao J, et al. Learning deep structured semantic models for web search using clickthrough data[C]// ACM International Conference on Conference on Information & Knowledge Management. ACM, 2013:2333-2338.
[4] 词袋模型-维基百科. https://zh.wikipedia.org/wiki/%E8%AF%8D%E8%A2%8B%E6%A8%A1%E5%9E%8B
[5] Yelong Shen, Xiaodong He, Jianfeng Gao, Li Deng, Grégoire Mesnil. A Latent Semantic Model with Convolutional-Pooling Structure for Information Retrieval.https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/cikm2013_DSSM_fullversion.pdf
[6] H. Palangi, L. Deng, Y. Shen, J. Gao, X. He, J. Chen, X. Song, R. Ward. Semantic Modelling with Long-Short-Term Memory for Information Retrieval. https://arxiv.org/pdf/1412.6629.pdf
[7]《Al筑巢;机器学习在凤巢的深度应用》, 百度 刘斌新, https://www.docin.com/p-2472025656.html.
[8]Sampling-Bias-Corrected Neural Modeling for Large Corpus Item Recommendations. Xinyang Yi, Ji Yang, Lichan Hong, Derek Zhiyuan Cheng, Lukasz Heldt, Aditee Kumthekar, Zhe Zhao, Li Wei, Ed Chi. https://dl.acm.org/doi/10.1145/3298689.3346996
[9] Deep Neural Networks for YouTube Recommendations. Paul Covington, Jay Adams, Emre Sargin. https://static.googleusercontent.com/media/research.google.com/zh-CN//pubs/archive/45530.pdf
[10] Distributed Representations of Sentences and Documents. Quoc Le, Tomas Mikolov. 2014.
[11] Item2vec: Neural Item Embedding for Collaborative Filtering. Oren Barkan, Noam Koenigstein. http://ceur-ws.org/Vol-1688/paper-13.pdf
[12] DeepWalk: Online Learning of Social Representations. Bryan Perozzi, Rami Al-Rfou, Steven Skiena. https://arxiv.org/abs/1403.6652.
[13] Billion-scale Commodity Embedding for E-commerce Recommendation in Alibaba. KDD 2018. https://arxiv.org/abs/1803.02349
[14]一文纵览KNN(ANN)向量检索。https://zhuanlan.zhihu.com/p/264367144

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/52184.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringCloud-alibaba-Sentinel入门到精通

膜拜大神的全集: sentinel (史上最全)_40岁资深老架构师尼恩的博客-CSDN博客_sentinel 1、什么是Sentinel: Sentinel是阿里开源的项目,提供了流量控制、熔断降级、系统负载保护等多个维度来保障服务之间的稳定性。 官网&#x…

智能聊天机器人如何帮助独立站运营提高工作效率?

关键词:智能聊天机器人、独立站运营 独立站运营变得越来越受欢迎,独立站可以用来建立在线商店并推动您的电子商务业务取得成功。它具有大量以业务为中心的功能,也许这就是为什么许多公司相信它会发展其在线业务的轨迹。 添加聊天机器人可以进…

使用PyQt5界面设计

一、环境搭建 直接pip安装即可: pip install PyQt5 pip install pyqt5-tools 二、Qt Designer设计GUI Qt Designer 是通过拖拽的方式放置控件,并实时查看控件效果进行快速UI设计。最终生成.ui文件,可以通过pyuic5工具转换成.py文件。 打开d…

基于springboot的应用诊断工具,yyds

真正的大师,永远都怀着一颗学徒的心! 一、项目简介 基于springboot的应用诊断工具,可以迅速定位出来线上运行项目的问题。 二、实现功能 支持服务器管理 支持权限管理 支持系统诊断 支持代码在线编辑部署 支持各种方法的监控 支持线程的管理 三、…

【自然语言处理(NLP)】基于Word2Vec的语言模型实践

【自然语言处理(NLP)】基于Word2Vec的语言模型实践 作者简介:在校大学生一枚,华为云享专家,阿里云专家博主,腾云先锋(TDP)成员,云曦智划项目总负责人,全国高等…

jenkins学习-安装配置

1.下载安装 打开地址jenkins.io,进入页面,点击download按钮,计入下载页面,选择war架包下载 2.下载地址2:https://get.jenkins.io/war/ 下载版本:2.346.3 3控制台切换到架包路径,执行:Java -…

Java学习之super关键字

目录 一、super的作用 二、基本语法 第一条 第二条 第三条 三、super便利/细节 第一条 第二条 第一种:直接调用 第二种:this 第三种:super 第三条 四、this和super的比较 一、super的作用 super 代表父类的引用, 用于访…

Vue3表单输入绑定生命周期

官网&#xff1a;https://cn.vuejs.org/guide/essentials/forms.html#checkbox 复选框 在这个例子中&#xff0c;checkedNames 数组将始终包含所有当前被选中的框的值。 const checkedNames ref([])<div>Checked names: {{ checkedNames }}</div><input type…

docker镜像打包上传阿里云镜像仓库

阿里云镜像仓库说明&#xff1a; 将镜像推送到Registry $ docker login --usernamealiyun0398513152 rz-dt-image-server-registry.cn-shanghai.cr.aliyuncs.com $ docker tag [ImageId] rz-dt-image-server-registry.cn-shanghai.cr.aliyuncs.com/rz-dt/k8s-springboot-demo:[…

澜起科技发布业界首款DDR5第三子代寄存时钟驱动器工程样片

上海—2022年12月1日&#xff0c;澜起科技宣布在业界率先推出DDR5第三子代寄存时钟驱动器&#xff08;简称RCD或DDR5 RCD03&#xff09;工程样片&#xff0c;并已向业界主流内存厂商送样&#xff0c;该产品将用于新一代服务器内存模组。 澜起科技DDR5第三子代寄存时钟驱动器 D…

堆排序和Top-K问题(C语言实现)

文章目录&#xff1a;1.堆排序1.1向上调整和向下调整建堆对比1.2堆排序实现1.2.1升序1.2.2降序2.Top-K问题2.1解决思路2.2代码实现前面的文章讲了堆的结构和基础接口实现&#xff0c;不熟的友友们可以去看看堆&#xff08;C语言实现&#xff09;&#xff0c;点击跳转 1.堆排序 …

Jenkins pipeline stash实现文件跨节点共享

概述 stas unstash 函数允许在流水线的节点间和/或阶段间保存和获取&#xff08;分别地&#xff09;文件。它们的格式&#xff1a; stash(name: "<name>",includes: "<pattern>",excludes: "<pattern>") unstash("<…

狂神说Go语言学习笔记(四)

狂神说Go语言学习笔记&#xff08;一&#xff09; 狂神说Go语言学习笔记&#xff08;二&#xff09; 狂神说Go语言学习笔记&#xff08;三&#xff09; 一、什么是函数 func main() {//调用函数 函数名()fmt.Println(add(1, 2)) //3 }func add(a, b int) int {c : a breturn …

[附源码]JAVA毕业设计高校在线办公系统(系统+LW)

[附源码]JAVA毕业设计高校在线办公系统&#xff08;系统LW&#xff09; 目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术…

【配电网重构】基于粒子群算法的配电网重构问题研究附matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

Nacos config 配置相关

Nacos config 相关关于配置文件bootstrap和application异同点加载顺序优先级注意事项关于.properties和.yml比较加载顺序优先级别区别关于Nacos配置官方文档注意关于配置文件bootstrap和application SpringCloud项目中存在bootstrap和application两种配置&#xff0c;下面分别…

[附源码]计算机毕业设计springboot社区住户信息管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

【正版软件】Navicat Monitor 实时数据库监控工具,一套安全、简单而且无代理的远程服务器监控工具。

简言 Navicat Monitor 是一套安全、简单而且无代理的远程服务器监控工具。它具有强大的功能使你的监控发挥最大效用。受监控的服务器包括 MySQL、MariaDB 和 SQL Server&#xff0c;并与 Amazon RDS、Amazon Aurora、Oracle Cloud、Microsoft Azure、阿里云、腾讯云和华为云等…

[附源码]Python计算机毕业设计Django高校商铺管理系统论文

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…