🚀 免费试用 Zilliz Cloud,完全托管的 Milvus,体验 10 倍的性能提升!立即试用>

milvus-logo
LFAI
  • Home
  • Blog
  • 使用语义向量搜索推荐内容

使用语义向量搜索推荐内容

  • Scenarios
June 08, 2021
milvus

71%的美国人从社交平台获得新闻推荐,个性化内容已迅速成为人们发现新媒体的方式。无论是搜索特定主题,还是与推荐内容互动,用户所看到的一切都经过算法优化,以提高点击率(CTR)、参与度和相关性。搜狐是一家在纳斯达克上市的中国在线媒体、视频、搜索和游戏集团。它利用由Zilliz 构建的开源向量数据库Milvus,在其新闻应用内构建了一个语义向量搜索引擎。本文介绍了该公司如何利用用户资料对个性化内容推荐进行长期微调,从而提高用户体验和参与度。

搜狐新闻的用户档案是根据浏览历史记录建立的,并在用户搜索新闻内容并与之互动时进行调整。搜狐的推荐系统使用语义向量搜索来查找相关新闻文章。该系统的工作原理是根据用户的浏览历史记录识别出一组用户可能感兴趣的标签。然后,该系统会快速搜索相关文章,并根据受欢迎程度(以平均点击率衡量)对结果进行排序,然后再提供给用户。

仅《纽约时报》一天就发布230 篇内容,由此可见,一个有效的推荐系统必须能够处理大量的新内容。接收大量新闻需要毫秒级的相似性搜索和每小时将标签与新内容进行匹配。搜狐之所以选择 Milvus,是因为它能高效、准确地处理海量数据集,减少搜索过程中的内存占用,并支持高性能部署。

了解新闻推荐系统的工作流程

搜狐基于语义向量搜索的内容推荐依赖于深度结构化语义模型(DSSM),该模型使用两个神经网络将用户查询和新闻文章表示为向量。该模型计算两个语义向量的余弦相似度,然后将最相似的一批新闻发送到推荐候选池。接下来,根据预估点击率对新闻文章进行排序,并向用户展示预估点击率最高的文章。

利用 BERT-as-service 将新闻文章编码为语义向量

为了将新闻文章编码成语义向量,系统使用了BERT-as-service工具。在使用该模型时,如果任何一篇内容的字数超过 512,嵌入过程中就会出现信息丢失。为帮助克服这一问题,系统首先提取摘要并将其编码为 768 维语义向量。然后从每篇新闻文章中提取两个最相关的主题,并根据主题 ID 确定相应的预训练主题向量(200 维)。接着将主题向量拼接到从文章摘要中提取的 768 维语义向量中,形成 968 维语义向量。

新内容不断通过 Kafta 输入,并在插入 Milvus 数据库之前被转换成语义向量。

利用 BERT-as-service 从用户资料中提取语义相似的标签

模型的其他神经网络是用户语义向量。根据兴趣、搜索查询和浏览历史,从用户资料中提取语义相似的标签(如冠状病毒、covid、COVID-19、大流行、新型毒株、肺炎)。获取的标签列表按权重排序,前 200 个标签被分为不同的语义组。每个语义组内标签的排列组合用于生成新的标签短语,然后通过 BERT-as-service 将其编码为语义向量。

对于每个用户配置文件,标签短语集都有相应的主题集,这些主题集用权重标记,表示用户的兴趣水平。从所有相关主题中选出前两个主题,由机器学习(ML)模型进行编码,拼接成相应的标签语义向量,形成一个 968 维的用户语义向量。即使系统为不同的用户生成了相同的标签,但标签及其对应主题的权重不同,以及每个用户的主题向量之间存在明确的差异,确保了推荐的唯一性

通过计算从用户资料和新闻文章中提取的语义向量的余弦相似度,系统能够进行个性化的新闻推荐。

Sohu01.jpg 搜狐01.jpg

计算新的语义用户资料向量并将其插入 Milvus

语义用户资料向量每天计算一次,前 24 小时的数据在第二天晚上处理。向量被单独插入 Milvus,并通过查询流程运行,为用户提供相关的新闻结果。新闻内容本身具有时事性,因此需要每小时进行计算,以生成当前的新闻提要,其中包含预测点击率高且与用户相关的内容。新闻内容还按日期进行分区排序,每天清除旧新闻。

将语义向量提取时间从几天缩短到几小时

使用语义向量检索内容需要每天将数千万个标签短语转换成语义向量。这是一个耗时的过程,即使在图形处理器(GPU)上运行,也需要数天才能完成。为了克服这一技术问题,必须对之前嵌入的语义向量进行优化,这样当相似的标签短语浮出水面时,就能直接检索到相应的语义向量。

现有标签短语集的语义向量会被存储起来,而每天生成的新标签短语集会被编码成 MinHash 向量。雅卡德距离用于计算新标签词组的 MinHash 向量与保存的标签词组向量之间的相似度。如果 Jaccard 距离超过了预先设定的阈值,则这两个集合被认为是相似的。如果达到了相似度阈值,新短语就可以利用以前嵌入的语义信息。测试表明,在大多数情况下,0.8 以上的距离应能保证足够的准确性。

通过这一过程,上述数千万向量的每日转换时间从数天缩短到两小时左右。虽然根据具体项目的要求,其他存储语义向量的方法可能更合适,但在 Milvus 数据库中使用 Jaccard 距离计算两个标签短语之间的相似度,仍然是一种在各种情况下高效、准确的方法。

Sohu02.jpg 搜狐02.jpg

克服短文本分类的 "坏情况

在对新闻文本进行分类时,与长篇新闻相比,短篇新闻可提取的特征较少。正因为如此,当不同长度的内容在同一个分类器中运行时,分类算法就会失效。Milvus 通过搜索语义相似、得分可靠的多条长文本分类信息,然后使用投票机制修改短文本分类,从而帮助解决这一问题。

识别和解决分类错误的短文本

对每篇新闻文章进行精确分类对于提供有用的内容推荐至关重要。由于短新闻文章的特征较少,对不同长度的新闻使用相同的分类器会导致短文本分类的错误率较高。人工标注对于这项任务来说太慢且不准确,因此 BERT-as-service 和 Milvus 被用来快速识别成批被错误分类的短文,正确地重新分类,然后将成批数据作为语料库,针对这一问题进行训练。

BERT-as-service 用于将分类器得分大于 0.9 的共计 500 万篇长篇新闻文章编码为语义向量。将长文本文章插入 Milvus 后,再将短文本新闻编码成语义向量。每个短新闻语义向量用于查询 Milvus 数据库,获得与目标短新闻余弦相似度最高的前 20 篇长新闻。如果在语义相似度最高的前 20 篇长新闻中,有 18 篇出现在相同的分类中,且与查询的短新闻不同,则短新闻分类被认为是不正确的,必须进行调整以与这 18 篇长新闻保持一致。

这一过程可快速识别并纠正不准确的短文分类。随机抽样统计显示,短文分类纠正后,文本分类的总体准确率超过 95%。通过利用高置信度长文本的分类来纠正短文本的分类,大多数不良分类情况都能在短时间内得到纠正。这也为训练短文本分类器提供了良好的语料库。

![Sohu03.jpg](https://assets.zilliz.com/Sohu03_a43074cf5f.jpg "发现短文分类 "坏案例 "的流程图")

Milvus 可为实时新闻内容推荐等提供动力

Milvus 极大地提高了搜狐新闻推荐系统的实时性能,同时也增强了识别短文分类错误的效率。如果您有兴趣了解 Milvus 及其各种应用:

  • 阅读我们的博客
  • Slack 上与我们的开源社区互动。
  • GitHub 上使用或贡献世界上最流行的向量数据库。
  • 使用我们的新启动训练营快速测试和部署人工智能应用。

Try Managed Milvus for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started

Like the article? Spread the word

扩展阅读