【锁定直播】字节、华为云、阿里云等技术专家讨论如何将大模型接入 AIOps 解决实际问题,戳>>> 了解详情
写点什么

构建 LinkedIn 知识图谱

  • 2016-11-23
  • 本文字数:4879 字

    阅读完需:约 16 分钟

本文翻译自 Building The LinkedIn Knowledge Graph ,原作者为 Qi He, Bee-Chung Chen, Deepak Agarwal,已获得原网站授权。

我们曾经在 LinkedIn 的主发布平台 Pulse 上发表过这篇文章的精简版。在这篇文章里,我们会更深入的阐述我们知识图谱架构背后的技术细节。

(点击放大图像)

我们在LinkedIn 公司内部广泛应用了机器学习技术来优化我们的产品:比如搜索结果排名、广告、新闻种子的更新,以及推荐人、工作机会、文章和学习机会等。这套技术栈的一个重要部分就是知识图谱,它为机器学习模型提供输入信号,也为LinkedIn 产品提供了理解数据的通道。这篇文章里会介绍构建这套知识图谱的概况。

LinkedIn 的知识图谱

LinkedIn 的知识图谱是一大套知识库,构建的基础是 LinkedIn 的各个实体,如会员(member)、工作、职位、技能、公司、地理区域和学校等等。这些实体和它们之间的关系构成了这个专业世界的本体,也被 LinkedIn 用来改进它的推荐系统、搜索、商业和消费者产品,以及业务和消费者分析等。

创建一个很大的知识库是个巨大的挑战。像 Wikipedia 和 Freebase 之类的网站主要是靠志愿者的人工贡献。其他类似的工作,像谷歌的 Knowledge Vault 和微软的 Satori,主要靠自动从互联网上扒取信息来构建知识库。与这些方法都不同,我们生成 LinkedIn 的知识图谱主要靠的是大量由会员、招聘者、广告商和公司管理者等用户产生的内容,并辅之以从互联网上扒取的数据,这样信息量巨大,也可能会有重复。当有新会员注册、发布了新招聘信息、有新公司、技能或职位出现在会员的简历和工作描述中时,知识图谱就需要扩展。

为了应对我们构建 LinkedIn 知识图谱时面临的挑战,我们应用了机器学习技术,其实就是对用户生成的内容和来源于外部的数据的标准化过程。在这个过程中,机器学习被用于实体分类系统的构建、实体关系推理、下游数据消费者的数据表现、图谱洞察抽取和用户交互数据获取等,以此来验证我们的推理并收集学习数据。LinkedIn 的知识图谱是一张动态的图。新的实体不断加入,新的关系不断形成。现有的关系也可能发生改变。比如说,一个人在得到了一份新工作之后,他的职位信息就会发生改变。当有新的实体出现时,我们必须实时地更新这些类似个人简历的内容。

构建实体分类系统

对 LinkedIn 的系统来说,实体分类系统包括一个实体的身份标记(即标志符、定义、正式名、不同语言中的同义词等)和实体的属性。实体通过两种方法创建:

  • 基础实体由用户生成,并由用户生成和维护包含各种信息的属性。会员、工作、公司等都属于此类。
  • 自动生成的实体则由 LinkedIn 产生。因为实体的覆盖率(有这个实体属性的会员的数量)是将数据转化为商业价值和映射到消费者产品的关键,我们会关注创建新的实体,并建立会员和这些实体之间的对应关系。通过挖掘用户简历来发现潜在的实体候选,并通过外部数据和人工验证相结合的办法来丰富实体集合,我们创建了数以万计的技能、职位、地理位置、公司、认证等等属性,并把它们与会员对应起来。

到目前为止,我们已经有约 4.5 亿个会员、累计 1.9 亿条招聘信息、900 万家公司、200 多个国家(其中 60 多个有详细的地理位置数据)、由 19 种语言描述的 3.5 万种技能、2.8 万间学校、1500 个学习领域、600 多种学位、2.4 万个职位和 500 多种认证等等,还有一些其他的实体。

实体表现了 LinkedIn 知识图谱中的节点。我们需要整理用户产生的基础实体,因为其中可能会有无意义的名字、不正确或不全面的属性、陈旧的内容,或者再没有任何其他人会有这样的实体属性。我们用归纳式生成规则的办法来发现不准确或有问题的实体。对于自动生成的实体,生成规则则包括:

  • 生成候选。每个实体都有一个英文的在很多场合通用的正式名字。实体候选都是通过一些很直观的规则从会员简历和工作描述中摘出来的通用短语。
  • 消除歧义的实体。在不同的上下文中一个词可能会有不同的含义,即多义词。为了表示这些会员简历和工作描述中的多义词,我们开发了软件聚类算法来将它们进行归类并表示为出现频率最高的词语向量。多义词可以在多个聚类中出现并代表不同的实体。
  • 去重实体。如果多个词只不过互相是对方的别名,它们就可以表示相同的实体。通过把每个词语表示为一个单词向量(也就是由会员简历和工作描述来训练出一个由单词到向量的对应模型),我们会运行聚类算法并辅助以分类专家的手工验证,以此来去除重复的实体。在分类系统有层次结构的时候,相似的技术也会被用于将实体归类。
  • 将实体翻译成其他语言。根据会员和实体之间的幂律特性,LinkedIn 的语言专家会手动地将出现频率最高、涉及会员最多的实体手动翻译成各国语言,以保证其准确性,而且基于 PSCFG 的机器翻译模型也被用于自动将使用频率不高的实体翻译成别国语言。

下图以可视化方式显示了在职位分类中的“软件工程师”职位实体。职位分类中有个层次结构:象“程序员”和“网页开发者”这些相似的职位都被归类于相同的“软件工程师”大类之下,而相似的大类职位也都归于相同的“工程”功能之下。

(点击放大图像)

实体属性被分为两类:在一个分类中与其他实体之间的关系,以及不在任何分类中的特征点。比如,一个公司实体就有与其他实体相关的属性,比如会员、技能、公司、行业等,这些都有与相应分类相关的标志符;它也有一些与任何分类中的任何其他实体都没有关系的徽标、收入、网址等。前者就对应着LinkedIn 知识图谱中的边,下一章会详细讨论。后面还会讨论从文本中提取的功能、从搜索引擎中搜得的数据、与外部数据源的数据整合和基于众包的方法等。

所有的实体属性都有相应的信任评分,或者由机器学习模型计算出来,或者是在由人手工验证时设成1.0。由机器算出来的信任分会再由另外一个单独的验证模块来校准,比如下游的应用程序可以在准确度和覆盖率之间轻松地做出权衡,只要把它解释成一种可能性就好了。

推理实体关系

在LinkedIn 生态系统中各实体之间有许多非常有价值的关系。举一些例子,从会员到其他实体(比如一个会员拥有的各项技能)之间的映射对于广告定位、搜索人、搜索招聘者、订阅种子、业务和消费者分析等都至关重要;由工作向其他实体(比如应聘一项工作所需要的各项技能)之间的映射也在驱动着工作推荐和工作搜索;在相关的模型中实体之间的相关性也是非常重要的特征。

有些实体关系是由会员生成的。比如一个会员会选择他就职的公司,而公司管理者会定义公司所处的行业,这些都是由LinkedIn 的事先录入的服务提供的。我们把这些由会员生成的实体关系称为“显式的”。有些实体关系是由LinkedIn 推理出来的。比如,如果一个会员在简历中把自己就职的公司名写成“linkedin_”,那我们就可以认为他真正的公司名是和“LinkedIn”有关的。我们把这些由LinkedIn 推理出来的实体关系称为是“推断的”。不过,并不是所有显式的关系都是可靠的,有个非常有名的问题就是“会员的失误”,就是会员自己输入的时候填错了。在下图中,有个公司规模为1-10 名雇员的名叫“uber”的小开发公司,却有96 个会员和它相关,这就是因为他们中大多数人是从预先输入的公司列表之中错选了开发公司“uber”,而不是他们实际为之效力的著名在线交通网络公司“Uber”。

(点击放大图像)

我们开发了一套近乎实时的内容处理框架来推导实体关系。总之,万亿数量级的关系数据,不管是会员生成的还是LinkedIn 推理生成的,都在知识图谱中共存。下图是一个推理会员技能的例子,LinkedIn 数据副总裁Igor 就有许多项他自己为自己输入的显式的技能,比如“分布式系统”、“Hadoop”等。那么由机器学习模型根据文本特征和别的实体元数据特征就可以为他推理出其他技能,比如“产品管理”、“管理”和“咨询”等等。

我们为每种实体关系都训练了二进制分类器:基于某些特征集合,一对实体是否以某种二进制形式(属于,或者不属于)确立某种特定的实体关系。为这种备受瞩目的任务收集高质量的训练数据,这件事非常具有挑战性。我们用会员从预输入服务中选择的关系作为正向训练的例子。通过随机添加一些噪声来作为逆向训练例子,我们为每个实体都训练了预测模型。这个方法对于常见的实体很有用。为了训练联合模型来处理那些长尾分布的实体,并修复会员的选择错误,我们就依靠众包来生成额外打了标签的数据。

推理出来的关系也会被主动推送给会员审阅,并选择(接受、拒绝或忽略)来提供反馈。被接受的那些就会成为显式的关系。另外,各种会员反馈数据都被收集起来作为新的训练数据,用于强化分类器的下一轮迭代。

数据表现

实体分类和实体关系共同组成了LinkedIn 数据图库中的标准版本的数据。有了这些,下游的各种产品就都可以在数据层面说相同的语言来交互了。应用程序团队用一组API 获取原始的知识图谱,用文本或其他类型的实体标志符做输出,输出实体标志符。各种不同的分类结果用各种不同结构化的格式展现出来,再在数据版本控制下通过Java 库、REST API、 Kafka (一种高吞吐分布式消息队列系统)流事件和 HDFS 文件等形式提供出去。这些关于原始数据图谱的数据提供机制对于在生产环境展示、索引和过滤实体都是非常有用的。

我们也把知识图谱嵌入潜在的空间(这项研究的相关背景可以在了解)中。结果,一个实体的潜在向量就包括它在多个实体分类和多种实体关系(分类器)中的语义。在把所有的技能和职能都用深度学习技术嵌入到相同的高维度潜在空间之后,下图就可以在降维之后以图形化的方法显示出诸如“ActionScript”、“HTML Scripting”和“PHP”等技能都是和职位“Web Developer”密切相关的。由此可见,在原有的知识图谱中实体之间的语义相似性在嵌入之后仍然被保留了下来。

(点击放大图像)

在这个例子中,模型目标非常单一,就是在会员的技能潜在向量上进行简单的算法操作,以此预测会员的职务的潜在向量。推测由会员到职务的关系是特别有用的。通过并发地在多个目标方向上优化模型,我们可以在更普遍的意义上了解潜在表示。在相同的潜在空间内把异构的实体表现成向量,这为我们提供了一种简洁的方法来把知识图谱用作数据源,让我们可以从中提取各式各样的特征,作为相关模型(relevance model)的输入。这对相关模型是非常重要的,因为它可以显著地减少在知识图谱上的特征工程工作量。

获得关于图的洞察

还可以从标准化的知识图谱中推理出更多的知识,生成对业务和消费者分析的洞察。比如,通过对不同视图进行 OLAP 操作来有选择地积累图形数据,我们可以得到各种实时洞察数据,比如在某个特定地理区域内有多少会员是具备某项特定技能的(供给方)、在相同的区域内有多少份工作是需要某项技能的(需求方),再把供给方和需求方一起考虑之后,最终得到两者之间的细微差距。我们也可以把数据分析限制在某个特定的时间范围之内,来追溯洞察。根据对会员简历的更新数据所做的数据分析,下图显示了从 2014 年 6 月到 2015 年 6 月期间,可以帮助求职者从求职人群中脱颖而出的十大急需软技能

在LinkedIn,洞察可以帮助领导和销售做出业务判断,并增强会员的参与度。比如,上图的洞察结果就有助于鼓励会员把这些软技能加到他们自己的简历中,或者通过LinkedIn 的在线课程学习它们。

从标准化后的知识图谱中发现数据洞察是一个由经验驱动的数据挖掘过程。这可以揭示出实体之间以前没有被识别出的联系,也是另一种完善LinkedIn 知识图谱的方式。如下图所示,它上面的洞察的例子定义了一种新的从会员到技能之间的实体关系,即“你可能想要学习的技能”。

结论

构建LinkedIn 知识图谱的过程包括节点(实体)分类系统搭建、边(实体关系)推理和图形化展示。在图形之上的聚合可以提供更多的洞察,其中有一些还可以形成反馈来进一步完善图谱。这篇文章仅仅是开始分享我们的经验而已,在将来我们还会讨论更多的东西,比如知识图谱的应用程序与洞察、在实体分类和表现中用到的高级机器学习技巧、以及后台架构等等。

鸣谢

感谢 Hong Tam 提供了“uber”的用例来演示实体关系,感谢 Uri Merhav 提供了关于数据表现的“网页开发者”用例,感谢 Link Gan 提供了内容抽取的“十大急需软技能”用例,感谢整个 LinkedIn 数据标准化组,大家一起努力完成了这项令人惊叹的工作的基础部分。

2016-11-23 16:076334
用户头像

发布了 152 篇内容, 共 67.9 次阅读, 收获喜欢 63 次。

关注

评论

发布
暂无评论
发现更多内容

Android进阶(十五)socket通信实现聊天室应用开发总结

No Silver Bullet

android 8月月更 开发总结

RT-Thread记录(八、理解 RT-Thread 内存管理)

矜辰所致

内存管理 RT-Thread 8月月更

2篇论文入选KDD 2022!腾讯广告持续探索效果提升新思路

Geek_2d6073

STM32入门开发 介绍IIC总线、读写AT24C02(EEPROM)(采用模拟时序)

DS小龙哥

8月月更

virtio 1.2 来了!龙蜥社区携手业界打造新版虚拟化 IO 标准

OpenAnolis小助手

开源 虚拟化 龙蜥技术 virtio

PyTorch 与 TensorFlow 怎么选?

博文视点Broadview

EasyNLP集成K-BERT算法,借助知识图谱实现更优Finetune

阿里云大数据AI技术

深度学习 阿里云 算法 开源技术 基础模型

即日起,ONES 团队版50人以下免费

万事ONES

2分钟一图看懂AntDB数据库产品

亚信AntDB数据库

AntDB 国产数据库 aisware antdb

极狐 GitLab 冷知识:在 Gitlab CI Pipeline 中进行 Git Push 操作

郭旭东

极狐GitLab JIHULAB 101

令人上头的AI论文(上) | IDP Inspiration

Baihai IDP

面试官:如何设计更好的分布式系统?

Java全栈架构师

程序员 架构 面试 分布式 后端

Java 异步调用原理与实战

PPPHUANG

性能优化 线程池 Async Java core java nio

如何利用CANN DVPP进行图片的等比例缩放?

华为云开发者联盟

人工智能 图像 昇腾AI

SAP ABAP 关键字语法图和 ABAP 代码自动生成工具 Code Composer

Jerry Wang

Java SAP abap commerce 8月月更

面试官偷偷告诉我:原来这样优化提升接口的性能

知识浅谈

API 优化 8月月更

HttpClient 在vivo内销浏览器的高并发实践优化

vivo互联网技术

Java 高并发 HttpClient

Go 事,如何成为一个Gopher ,并在7天找到 Go 语言相关工作,第1篇

梦想橡皮擦

Python 爬虫 8月月更

易周金融分析 :支付科技着力服务产业数字化升级

易观分析

金融 产业数字化 分析 支付科技

科技赋能会展!3DCAT助力广东旅博会元宇宙场景的首次搭建

3DCAT实时渲染

云计算 元宇宙

首批成员!博云入选信通院“可信边缘计算推进计划”

BoCloud博云

云计算 开源 云原生

开源一夏 | 如何使用Java操作华为对象存储OBS删除一个目录?

wljslmz

Java 开源 对象存储 华为云 8月月更

干货复盘 | 银行数智化转型十大趋势

易观分析

金融 银行 数智化转型

3 分钟看 3 个 JS 小把戏

掘金安东尼

JavaScript 前端 8月月更

CCF国际AIOps挑战赛

云桌派

阿里云杨红军:应用管理——云上资源DevOps最佳实践

阿里云弹性计算

阿里云 DevOps 运维 应用管理 云上资源管理

一文讲透Java核心技术之高可扩展利器SPI

冰河

Java 程序员 架构师 spi 核心技术

NFT服务平台如何选择——搭建NFT平台技术

开源直播系统源码

数字藏品 数字藏品软件开发 数字藏品系统软件开发 数字藏品交易平台开发

2022 CCF国际AIOps挑战赛决赛暨AIOps研讨会成功举办

BizSeer必示科技

人工智能 AIOPS

零门槛掌握基于大模型技术的AIGC场景应用

文心大模型

SAP ABAP Netweaver 服务器的标准登录方式讲解

Jerry Wang

web开发 web服务器 abap Netweaver 8月月更

构建LinkedIn知识图谱_语言 & 开发_Qi He_InfoQ精选文章