面向推荐的汽车知识图谱构建
背景
1、引言
知识图谱的概念,最早由 Google 在2012 年提出, 旨在实现更智能的搜索引擎,并在2013年之后开始在学术界和工业级普及。目前,随着人工智能技术的高速发展,知识图谱已广泛应用于搜索、推荐、广告、风控、智能调度、语音识别、机器人等多个领域。
2、发展现状
知识图谱作为人工智能的核心技术驱动力,能缓解深度学习依赖海量训练数据、大规模算力的问题,它能够广泛适配不同的下游任务,且具有良好的解释性,因此,全球大型互联网公司都在积极部署本企业的知识图谱。
例如2013年Facebook发布Open Graph,应用于社交网络智能搜索;2014年百度推出的知识图谱,主要应用于搜索、助理、及toB商业场景;2015年阿里推出的商品知识图谱,在前端导购、平台治理和智能问答等业务上起到关键作用;腾讯于2017年推出的腾讯云知识图谱,有效助力于金融搜索、实体风险预测等场景;美团于2018年推出的美团大脑知识图谱,已经在智能搜索推荐、智能商户运营等多个业务中落地。
3、目标及收益
目前,领域图谱主要集中在电商、医疗、金融等商业领域,而关于汽车知识的语义网络及知识图谱构建缺少系统性的指导方法。本文以汽车领域知识为例,围绕车系、车型、经销商、厂商、品牌等实体及相互关系,提供一种从零搭建领域图谱的思路,并对搭建知识图谱中的步骤及方法进行了详细说明,以及介绍了基于本图谱的几个典型落地应用。
其中,数据源采用汽车之家网站,汽车之家是由导购、资讯、评测、口碑等多个板块组成的汽车服务类平台,在看、买、用等维度积累了大量的汽车数据,通过构建知识图谱把以汽车为核心的内容进行组织和挖掘,提供丰富的知识信息,结构化精准刻画兴趣,支持推荐用户冷启、召回、排序、展示等多个维度,给业务提升带来效果。
二、图谱构建
1、构建的挑战
知识图谱是真实世界的语义表示,,其基本组成单位是【实体-关系-实体】,【实体-属性-属性值】的三元组(Triplet),实体之间通过关系相互联结,从而构成语义网络。图谱构建中会面临较大的挑战,但构建之后,可在数据分析、推荐计算、可解释性等多个场景展现出丰富的应用价值。
构建挑战:
- schema难定义:目前尚无统一成熟的本体构建流程,且特定领域本体定义通常需专家参与;
- 数据类型异构:通常情况下,一个知识图谱构建中面对的数据源不会是单一类型,包含结构化、半结构化,及非结构化数据,面对结构各异的数据,知识转模及挖掘的难度较高;
- 依赖专业知识:领域知识图谱通常依赖较强的专业知识,例如车型对应的维修方法,涉及机械、电工、材料、力学等多个领域知识,且此类关系对于准确度的要求较高,需要保证知识足够正确,因此也需要较好的专家和算法相结合的方式来进行高效的图谱构建;
- 数据质量无保证:挖掘或抽取信息需要知识融合或人工校验,才能作为知识助力下游应用。
收益:
- 知识图谱统一知识表示:通过整合多源异构数据,形成统一视图;
- 语义信息丰富:通过关系推理可以发现新关系边,获得更丰富的语义信息;
- 可解释性强:显式的推理路径对比深度学习结果具有更强的解释性;
- 高质量且能不断积累:根据业务场景设计合理的知识存储方案,实现知识更新和累积。
2、图谱架构设计
技术架构主要分为构建层、存储层及应用层三大层,架构图如下:
- 构建层:包括schema定义,结构化数据转模,非结构化数据挖掘,以及知识融合;
- 存储层:包括知识的存储和索引,知识更新,元数据管理,以及支持基本的知识查询;
- 服务层:包括智能推理、结构化查询等业务相关的下游应用层。
3、具体构建步骤及流程
依据架构图,具体构建流程可分为四步:本体设计、知识获取、知识入库,以及应用服务设计及使用。
3.1 本体构建
本体(Ontology)是公认的概念集合,本体的构建是指依据本体的定义,构建出知识图谱的本体结构和知识框架。
基于本体构建图谱的原因主要有以下几点:
- 明确专业术语、关系及其领域公理,当一条数据必须满足Schema预先定义好的实体对象和类型后,才允许被更新到知识图谱中。
- 将领域知识与操作性知识分离,通过Schema可以宏观了解图谱架构及相关定义,无须再从三元组中归纳整理。
- 实现一定程度的领域知识复用。在构建本体之前,可以先调研是否有相关本体已经被构建出来了,这样可以基于已有本体进行改进和扩展,达到事半功倍的效果。
- 基于本体的定义,可以避免图谱与应用脱节,或者修改图谱schema比重新构建成本还要高的情况。例如将“宝马x3”、“2022款宝马x3”都作为汽车类实体来储存,在应用时都可能造成实例关系混乱、可用性差的问题,这种情况可以在设本体计阶段,通过将“汽车类实体”进行“车系”、“车型”子类细分的方法来避免。
按照知识的覆盖面来看,知识图谱可以划分为通用知识图谱和领域知识图谱,目前通用知识图谱已有较多案例,例如Google的Knowledge Graph、微软的Satori和Probase等,领域图谱则为金融、电商等具体行业图谱。通用图谱更注重广度,强调融合更多的实体数量,但对精确度的要求不高,很难借助本体库对公理、规则及约束条件进行推理和使用;而领域图谱的知识覆盖范围较小,但知识深度更深,往往是在某一专业领域上的构建。
考虑对准确率的要求,领域本体构建多倾向于手工构建的方式,例如代表性的七步法、IDEF5方法等[1],该类方法的核心思想是,基于已有结构化数据,进行本体分析,将符合应用目的和范围的本体进行归纳及构建,再对本体进行优化和验证,从而获取初版本体定义。若想获取更大范畴的领域本体,则可以从非结构化语料中补充,考虑手工构建过程较大,本文以汽车领域为例,提供一种半自动本体构建的方式,详细步骤如下:
- 首先收集大量汽车非结构化语料(例如车系咨询、新车导购文章等),作为初始个体概念集,利用统计方法或无监督模型(TF-IDF、BERT等)获取字特征和词特征;
- 其次利用BIRCH聚类算法对概念间层次划分,初步构建起概念间层级关系,并对聚类结果进行人工概念校验和归纳,获取本体的等价、上下位概念;
- 最后使用卷积神经网络结合远程监督的方法,抽取本体属性的实体关系,并辅以人工识别本体中的类及属性的概念,构建起汽车领域本体。
上述方法可有效利用BERT等深度学习的技术,更好地捕捉语料间的内部关系,使用聚类分层次对本体各模块进行构建,辅以人工干预,能够快速、准确的完成初步本体构建。下图为半自动化本体构建示意图:
利用Protégé本体构建工具[2],可以进行本体概念类、关系、属性和实例的构建,下图为本体构建可视化示例图:
本文将汽车领域的顶层本体概念划分为三类,实体、事件及标签体系:
1)实体类代表特定意义的概念类实体,包括词汇实体和汽车类实体,其中汽车类实体又包括组织机构和汽车概念等子实体类型;
2)标签体系代表各个维度的标签体系,包括内容分类、概念标签、兴趣标签等以物料维度刻画的标签;
3)事件类代表一个或多个角色的客观事实,不同类型事件间具有演变关系。
Protégé可以导出不同类型的Schema配置文件,其中owl.xml结构配置文件如下图所示。该配置文件可直接在MYSQL、JanusGraph中加载使用,实现自动化的创建Schema。
3.2 知识获取
知识图谱的数据来源通常包括三类数据结构,分别为结构化数据、半结构化数据、非结构化数据。 面向不同类型的数据源,知识抽取涉及的关键技术和需要解决的技术难点有所不同。
3.2.1 结构化知识转模
结构化数据是图谱最直接的知识来源,基本通过初步转换就可以使用,相较其他类型数据成本最低,所以一般图谱数据优先考虑结构化数据。结构化数据可能涉及多个数据库来源,通常需要使用ETL方法转模,ETL即Extract(抽取)、Transform(转换)、Load(装载),抽取是将数据从各种原始的业务系统中读取出来,这是所有工作的前提;转换是按照预先设计好的规则将抽取的数据进行转换,使本来异构的数据格式可以统一起来;装载是将转换完的数据按计划增量或全部导入到数据仓库中。
通过上述ETL流程可将不同源数据落到中间表,从而方便后续的知识入库。下图为车系实体属性、关系表示例图:
车系与品牌关系表:
3.2.2 非结构化知识抽取-三元组抽取
除了结构化数据,非结构化数据中也存在着海量的知识(三元组)信息。一般来说企业的非结构化数据量要远大于结构化数据,挖掘非结构化知识能够极大拓展和丰富知识图谱。
三元组抽取算法的挑战
问题1:单个领域内,⽂档内容和格式多样,需要⼤量的标注数据,成本⾼
问题2:领域之间迁移的效果不够好,跨领域的可规模化拓展的代价⼤
模型基本都是针对特定⾏业特定场景,换⼀个场景,效果会出现明显下降。
解决思路,Pre-train+ Finetune的范式,预训练:重量级底座让模型“⻅多识⼴”充分利⽤⼤规模多⾏业的⽆标⽂档,训练⼀个统⼀的预训练底座,增强模型对各类⽂档的表示和理解能⼒。
微调:轻量级⽂档结构化算法。在预训练基础上,构建轻量级的⾯向⽂档结构化的算法,降低标注成本。
针对⽂档的预训练⽅法
现有关于⽂档的预训练模型,如果文本较短的类型,Bert可以完全编码整篇⽂档;⽽我们实际的⽂档通常⽐较⻓,需要抽取的属性值有很多是超过1024个字的,Bert进⾏编码会造成属性值截断。
针对长文本预训练方法优点和不足
Sparse Attention的⽅法通过优化Self-Attention,将O(n2)的计算优化⾄O(n),⼤⼤提⾼了输⼊⽂本⻓度。虽然普通模型的⽂本⻓度从512提升到4096,但是依旧不能完全解决截断⽂本的碎⽚化问题。百度提出了ERNIE-DOC[3]使用了Recurrence Transformer方法,理论上可以建模⽆限⻓的⽂本。由于建模要输⼊所有的⽂本信息,耗时⾮常⾼。
上述两种基于⻓⽂本的预训练⽅法,都没有考虑⽂档特性,如空间(Spartial)、视觉(Visual)等信息。并且基于⽂本设计的PretrainTask,整体是针对纯⽂本进⾏的设计,⽽没有针对⽂档的逻辑结构设计。
针对上述不足这里介绍一种⻓⽂档预训练模型DocBert[4],DocBert模型设计:
使⽤⼤规模(百万级)⽆标注⽂档数据进⾏预训练,基于⽂档的⽂本语义(Text)、版⾯信息(Layout)、视觉特征(Visual)构建⾃监督学习任务,使模型更好地理解⽂档语义和结构信息。
1.Layout-Aware MLM:在Mask语⾔模型中考虑⽂本的位置、字体⼤⼩信息,实现⽂档布局感知的语义理解。
2.Text-Image Alignment:融合⽂档视觉特征,重建图像中被Mask的⽂字,帮助模型学习⽂本、版⾯、图像不同模态间的对⻬关系。
3.Title Permutation:以⾃监督的⽅式构建标题重建任务,增强模型对⽂档逻辑结构的理解能⼒。
4.Sparse Transformer Layers:⽤Sparse Attention的⽅法,增强模型对⻓⽂档的处理能⼒。
3.2.3 挖掘概念,兴趣词标签,关联到车系、实体
除了结构化和非结构化文本中获取三元组,汽车之家还挖掘物料所包含的分类、概念标签和兴趣关键词标签,并建立物料和车实体之间的关联,为汽车知识图谱带来新的知识。下面从分类、概念标签、兴趣词标签来介绍汽车之家所做的内容理解部分工作以及思考。
分类体系作为内容刻画基础,对物料进行粗粒度的划分。建立的统一的内容体系更多的是基于人工定义的方式,通过AI模型进行划分。在分类方法上我们我们采用了主动学习,对于比较难分的数据进行标注,同时采用数据增强,对抗训练,以及关键词融合方式提高分类的效果。
概念标签粒度介于分类和兴趣词标签之间,比分类粒度更细,同时比兴趣词对于兴趣点刻画更加完整,我们建立了车视野、人视野、内容视野三个维度,丰富了标签维度,细化了标签粒度。丰富且具体的物料标签,更加方便搜索推荐基于标签的模型优化,且可用于标签外展起到吸引用户及二次引流等作用。概念标签的挖掘,结合在query等重要数据上采用机器挖掘方式,并对概括性进行分析,通过人工review,拿到概念标签集合,采用多标签模型分类。
兴趣词标签是最细粒度的标签,映射为用户兴趣,根据不同用户兴趣偏好进可以更好的进行行个性化推荐。关键词的挖掘采用多种兴趣词挖掘相结合的方式,包括Keybert提取关键子串,并结合TextRank、positionRank、singlerank、TopicRank、MultipartiteRank等+句法分析多种方法,产生兴趣词候选。
挖掘出来的词,相似度比较高,需要对同义词进行识别,需要提升人工的效率,因此我们也通过聚类进行自动化语义相似识别。用于聚类的特征有word2vec,bert embding等其他人工特征。然后使用聚类方法,最后经过人工矫正我们离线产生了一批高质量的关键词。
对于不同粒度的标签还是在物料层面的,我们需要把标签和车建立起关联,首先我们分别计算出标题文章的所属标签,然后识别出标题文章内的实体,得到若干标签-实体伪标签,最后根据大量的语料,共现概率高的标签就会标记为该实体的标签。通过以上三个任务,我们在获得了丰富且海量的标签。对车系、实体关联上这些标签,会极大丰富我们的汽车图谱,建立了媒体和用户的关注车标签。
3.2.4人效提升:
伴随着更大规模的训练样本,如何获得更好的模型质量,如何解决标注成本高,标注周期长成为亟待解决的问题。首先我们可以使用半监督学习,利用海量未标注数据进行预训练。然后采用主动学习方式,最大化标注数据的价值,迭代选择高信息量样本进行标注。最后可以利用远程监督,发挥已有知识的价值,发觉任务之间的相关性。例如在有了图谱和标题后,可以用远程监督的方法基于图谱构造NER训练数据。
3.3 知识入库
知识图谱中的知识是通过RDF结构来进行表示的,其基本单元是事实。每个事实是一个三元组(S, P, O),在实际系统中,按照存储方式的不同,知识图谱的存储可以分为基于RDF表结构的存储和基于属性图结构的存储。图库更多是采用属性图结构的存储,常见的存储系统有Neo4j、JanusGraph、OritentDB、InfoGrid等。
图数据库选择
通过JanusGraph 与 Neo4J、ArangoDB、OrientDB 这几种主流图数据库的对比,我们最终选择JanusGraph 作为项目的图数据库,之所以选择 JanusGraph,主要有以下原因:
- 基于 Apache 2 许可协议开放源码,开放性好。
- 支持使用 Hadoop 框架进行全局图分析和批量图处理。
- 支持很大的并发事务处理和图操作处理。通过添加机器横向扩展 JanusGraph 的事务 处理能力,可以在毫秒级别相应大图的复杂查询。
- 原生支持 Apache TinkerPop 描述的当前流行的属性图数据模型。
- 原生支持图遍历语言 Gremlin。
- 下图是主流图数据库对比:
Janusgraph介绍
JanusGraph[5]是一个图形数据库引擎。其本身专注于紧凑图序列化、丰富图数据建模、高效的查询执行。图库schema 构成可以用下面一个公式来表示:
janusgraph schema = vertex label + edge label + property keys
这里值得注意的是property key通常用于graph index。
为了更好的图查询性能janusgraph建立了索引,索引分为Graph Index,Vertex-centric Indexes。Graph Index包含组合索引(Composite Index)和混合索引(Mixed Index).
组合索引仅限相等查找。(组合索引不需要配置外部索引后端,通过主存储后端支持(当然也可以配置hbase,Cassandra,Berkeley))
举例:
<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">mgmt</span>.<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">buildIndex</span>(<span style="color: rgb(102, 153, 0); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">'byNameAndAgeComposite'</span>, <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">Vertex</span>.<span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">class</span>).<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">addKey</span>(<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">name</span>).<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">addKey</span>(<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">age</span>).<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">buildCompositeIndex</span>() <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">#构建一个组合索引“name</span><span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">-</span><span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">age”</span><br><span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">g</span>.<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">V</span>().<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">has</span>(<span style="color: rgb(102, 153, 0); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">'age'</span>, <span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">30</span>).<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">has</span>(<span style="color: rgb(102, 153, 0); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">'name'</span>, <span style="color: rgb(102, 153, 0); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">'小明'</span>)<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">#查找</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">名字为小明年龄30的节点</span>
混合索引需要ES作为后端索引以支持除相等以外的多条件查询(也支持相等查询,但相等查询,组合索引更快)。根据是否需要分词分为full-text search,和string search
JanusGraph数据存储模型
了解Janusgraph存储数据的方式,有助于我们更好的利用该图库。JanusGraph 以邻接列表格式存储图形,这意味着图形存储为顶点及其邻接列表的集合。
顶点的邻接列表包含顶点的所有入射边(和属性)。
JanusGraph 将每个邻接列表作为一行存储在底层存储后端中。 (64 位)顶点 ID(JanusGraph 唯一分配给每个顶点)是指向包含顶点邻接列表的行的键。
每个边和属性都存储为行中的一个单独的单元格,允许有效的插入和删除。 因此,特定存储后端中每行允许的最大单元数也是JanusGraph 可以针对该后端支持的顶点的最大度数。
如果存储后端支持key-order,则邻接表将按顶点 id 排序,JanusGraph可以分配顶点 id,以便对图进行有效分区。 分配 id 使得经常共同访问的顶点具有绝对差异小的 id。
3.4 图谱查询服务
Janusgraph进行图搜索用的是gremlin语言,我们提供了统一的图谱查询服务,外部使用不用关心gremlin语言的具体实现,采用通用的接口进行查询。我们分为三个接口:条件搜索接口,以节点为中心向外查询,和节点间路径查询接口。下面是几个gremlin实现的例子:
- 条件搜索:查询10万左右,销量最高的车:
<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">g</span>.<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">V</span>().<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">has</span>(<span style="color: rgb(102, 153, 0); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">'price'</span>,<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">gt</span>(<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">8</span>)).<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">has</span>(<span style="color: rgb(102, 153, 0); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">'price'</span>,<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">lt</span>(<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">12</span>)).<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">order</span>().<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">by</span>(<span style="color: rgb(102, 153, 0); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">'sales'</span>,<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">desc</span>).<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">valueMap</span>().<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">limit</span>(<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">1</span>)
输出:
<span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">==></span>{<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">name</span><span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">=</span>[<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">xuanyi</span>], <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">price</span><span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">=</span>[<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">10</span>], <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">sales</span><span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">=</span>[<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">45767</span>]}
轩逸销量最高,为45767
- 以节点为中心向外查询:查询以小明为中心,2度的节点
<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">g</span>.<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">V</span>(<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">xiaoming</span>).<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">repeat</span>(<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">out</span>()).<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">times</span>(<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">2</span>).<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">valueMap</span>()
- 节点间路径查询:荐给小明推荐两篇文章,这两篇文章分别介绍的是卡罗拉和轩逸,查询小明和 这两篇文章的路径:
<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">g</span>.<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">V</span>(<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">xiaoming</span>).<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">repeat</span>(<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">out</span>().<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">simplePath</span>()).<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">until</span>(<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">or</span>(<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">has</span>(<span style="color: rgb(102, 153, 0); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">"car"</span>,<span style="color: rgb(102, 153, 0); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">'name'</span>, <span style="color: rgb(102, 153, 0); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">'kaluola'</span>),<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">has</span>(<span style="color: rgb(102, 153, 0); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">"car"</span>, <span style="color: rgb(102, 153, 0); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">'name'</span>,<span style="color: rgb(102, 153, 0); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">'xuanyi'</span>))).<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">path</span>().<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">by</span>(<span style="color: rgb(102, 153, 0); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">"name"</span>)
输出
<span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">==></span><span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">path</span>[<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">xiaoming</span>, <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">around</span> <span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">10</span><span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">w</span>, <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">kaluola</span>]<br><span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">==></span><span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">path</span>[<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">xiaoming</span>, <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">around</span> <span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">10</span><span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">w</span>, <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">xuanyi</span>]
发现小明和这两篇文章之间有个节点“10万左右”
三、知识图谱在推荐的应用
知识图谱中存在大量的非欧式数据,基于KG的推荐应用有效利用非欧式数据提升推荐系统准确度,进而让推荐系统能达到传统系统所无法达到的效果。基于KG的推荐可以分成以三类,基于KG表征技术(KGE)、基于路径的方法、图神经网络。本章将从KG在推荐系统中冷启、理由、排序三方面的应用和论文进行介绍。
3.1 知识图谱在推荐冷启动的应用
知识图谱能够从user-item交互中建模KG中隐藏的高阶关系,很好地解决了因用户调用有限数量的行为而导致的数据稀疏性,进而可以应用在解决冷启动问题。这一问题业界也有相关研究。
Sang 等[6]提出了一种双通道神经交互方法,称为知识图增强的残差递归神经协同过滤(KGNCF-RRN),该方法利用KG上下文的长期关系依赖性和用户项交互进行推荐。
(1)对于KG上下文交互通道,提出了残差递归网络(RRN)来构造基于上下文的路径嵌入,将残差学习融入传统的递归神经网络(RNN)中,以有效地编码KG的长期关系依赖。然后将自关注网络应用于路径嵌入,以捕获各种用户交互行为的多义。
(2)对于用户项目交互通道,用户和项目嵌入被输入到新设计的二维交互图中。
(3)最后,在双通道神经交互矩阵之上,使用卷积神经网络来学习用户和项目之间的复杂相关性。该方法能捕捉丰富的语义信息,还能捕捉用户与项目之间复杂的隐含关系,用于推荐。
Du Y等[7]提出了一种新的基于元学习框架的冷启问题解决方案MetaKG,包括collaborative-aware meta learner和knowledge-aware meta learner,捕捉用户的偏好和实体冷启动知识。collaborative-aware meta learner学习任务旨在聚合每个用户的偏好知识表示。相反,knowledge-aware meta learner学习任务要在全局泛化不同的用户偏好知识表示。在两个learner的指导下,MetaKG可以有效地捕捉到高阶的协作关系关系和语义表示,可以轻松适应冷启动场景。此外,作者还设计了一种自适应任务,可以自适应地选择KG信息进行学习,以防止模型被噪声信息干扰。MetaKG架构如下图所示。
3.2 知识图谱在推荐理由生成的应用
推荐理由能提高推荐系统的可解释性,让用户理解生成推荐结果的计算过程,同时也可以解释item受欢迎的原因。用户通过推荐理由了解推荐结果的产生原理,可以增强用户对系统推荐结果的信心,并且在推荐失误的情况下对错误结果更加宽容。
最早可解释推荐是以模板为主,模板的好处是保证了可读性和高准确率。但是需要人工整理模板,并且泛华性不强,给人一种重复的感觉。后来发展不需要预设的free-form形式,并且加以知识图谱,以其中的一条路径作为解释,配合标注还有一些结合KG路径的生成式的方法,模型中选择的每个点或边都是一个推理过程,可以向用户展示。最近Chen Z [8]等人提出一种增量多任务学习框架ECR,可以实现推荐预测、解释生成和用户反馈集成之间的紧密协作。它由两大部分组成。第一部分,增量交叉知识建模,学习推荐任务和解释任务中转移的交叉知识,并说明如何使用交叉知识通过使用增量学习进行更新。第二部分,增量多任务预测,阐述如何基于交叉知识生成解释,以及如何根据交叉知识和用户反馈预测推荐分数。
3.3 知识图谱在推荐排序的应用
KG可以通过给item用不同的属性进行链接,建立user-item之间interaction,将uesr-item graph和KG结合成一张大图,可以捕获item间的高阶联系。传统的推荐方法是将问题建模为一个监督学习任务,这种方式会忽略item之间的内在联系(例如凯美瑞和雅阁的竞品关系),并且无法从user行为中获取协同信号。下面介绍两篇KG应用在推荐排序的论文。
Wang[9]等人设计了KGAT算法,首先利用GNN迭代对embedding进行传播、更新,从而能够在快速捕捉高阶联系;其次,在aggregation时使用attention机制,传播过程中学习到每个neighbor的weight,反应高阶联系的重要程度;最后,通过N阶传播更新得到user-item的N个隐式表示,不同layer表示不同阶数的连接信息。KGAT可以捕捉更丰富、不特定的高阶联系。
Zhang[20]等人提出RippleNet模型,其关键思想是兴趣传播:RippleNet将用户的历史兴趣作为KG中的种子集合(seed set),然后沿着KG的连接向外扩展用户兴趣,形成用户在KG上的兴趣分布。RippleNet最大的优势在于它可以自动地挖掘从用户历史点击过的物品到候选物品的可能路径,不需要任何人工设计元路径或元图。
RippleNet将用户U和项目V作为输入,并输出用户U单击项目V的预测概率。对于用户U,将其历史兴趣V_{u}作为种子,在图中可以看到最初的起点是两个,之后不断向周围扩散。给定itemV和用户U的1跳ripple集合V_{u_{}^{1}}中的每个三元组left( h_{i},r_{i},t_{i}right),通过比较V与三元组中的节点h_{i}和关系r_{i}分配相关概率。
在得到相关概率后,将V_{u_{}^{1}}中三元组的尾部乘以相应的相关概率进行加权求和,得到用户U的历史兴趣关于V的一阶响应,用户兴趣由V_{u}转移到o_{u}^{1},可以计算得到o_{u}^{2}、o_{u}^{3}...o_{u}^{n},进而计算得到U关于item V的特征可以被计算为融合他的所有阶数响应。
四、总结
综上,我们主要围绕推荐,介绍了图谱构建详细流程,对其中的困难和挑战做出了分析。同时也综述了很多重要的工作,以及给出了具体的解决方案,思路以及建议。最后介绍了包括知识图谱的应用,特别在推荐领域中冷起、可解释性、召回排序介绍了知识图谱的作用与使用。
引用:
[1] Kim S,Oh S G.Extracting and Applying Evaluation Criteria for Ontology Quality Assessment[J].Library Hi Tech,2019.
[2]Protege: https://www.php.cn/link/9d405c24be657bbf7a5244815a908922
[3] Ding S , Shang J , Wang S , et al. ERNIE-DOC: The Retrospective Long-Document Modeling Transformer[J]. 2020.
[4]DocBert,[1] Adhikari A , Ram A , Tang R ,et al. DocBERT: BERT for Document Classification[J]. 2019.
[5]JanusGraph,https://www.php.cn/link/fc0de4e0396fff257ea362983c2dda5a
[6] Sang L, Xu M, Qian S, et al. Knowledge graph enhanced neural collaborative filtering with residual recurrent network[J]. Neurocomputing, 2021, 454: 417-429.
[7] Du Y , Zhu X , Chen L , et al. MetaKG: Meta-learning on Knowledge Graph for Cold-start Recommendation[J]. arXiv e-prints, 2022.
[8] Chen Z , Wang X , Xie X , et al. Towards Explainable Conversational Recommendation[C]// Twenty-Ninth International Joint Conference on Artificial Intelligence and Seventeenth Pacific Rim International Conference on Artificial Intelligence {IJCAI-PRICAI-20. 2020.
[9] Wang X , He X , Cao Y , et al. KGAT: Knowledge Graph Attention Network for Recommendation[J]. ACM, 2019.
[10]Wang H , Zhang F , Wang J , et al. RippleNet: Propagating User Preferences on the Knowledge Graph for Recommender Systems[J]. ACM, 2018.
以上就是面向推荐的汽车知识图谱构建的详细内容,更多请关注php中文网其它相关文章!
推荐阅读
-
面向推荐的汽车知识图谱构建
-
以构建《红楼梦》人物关系知识图谱的 HugeGraph 图数据库为例
-
结合知识图谱实现基于电影的推荐系统
-
从无到有构建医药领域知识图谱,实现智能问答和分析服务(含代码源):包括基于Neo4j的垂直网站数据构建医药知识图谱、医药知识图谱的自动问答等。
-
构建知识图谱的元搜索算法的实际应用
-
41 个下载免费 3D 模型的最佳网站-使用说明:使用权限可能因型号而异。因此,在下载文件之前,请仔细检查每个下载页面上的许可证和使用权限。 17. Clara.io Clara.io 是一个创建 3D 内容的全球平台,也是一个培养新 3D 艺术家的社区。Clara.io 提供+100,000个免费的3D模型,包括OBJ,Blend,STL,FBX,DAE,Babylon.JS,Three.JS格式,用于 Clara.io,Unity 3D,Blender,Sketchup,Cinema 4D,3DS Max和Maya。 使用说明:免费,标准和专业帐户仅供个人使用,如果您需要将 clara.io 用于商业用途,请与销售团队联系。 18. 3DExport 3DExport是一个市场,您可以在其中购买和销售用于CG项目的3D模型,3D打印模型和纹理。它提供15 +不同的3D格式供下载,如3DS MAX(.max),Cinema4D(.c4d),Maya(.mb,.ma),Lightwave(.lwo),Softimage(.xsi),Wavefront OBJ(.obj),Autodesk FBX(.fbx)等。它还提供15种不同的语言! 使用说明:免费下载仅供个人和非商业用途。 19. 3D Warehouse 3D Warehouse是一个开放的库,允许用户共享和下载SketchUp 3D模型,用于建筑,设计,施工和娱乐!任何人都可以免费制作,修改和重新上传内容到3D仓库,您可以找到任何您能想到的东西,如家具,电子产品,室内产品等。 使用说明:3D Warehouse中的所有模型都是免费的,因此任何人都可以下载文件以用于SketchUp甚至其他软件,如AutoCAD,Revit和ArchiCAD。 20. CadNav.com CadNav是CGI平面设计师和CAD / CAM / CAE工程师的在线3D模型库,我们提供超过50000 +免费3D模型和CAD模型下载。在CadNav网站上,您可以下载高质量的多边形网格3D模型,3D CAD实体对象,纹理,Vray材料,3D作品,CAD图纸等。 使用说明:免费下载仅供个人和非商业用途。 21. All3dfree.net 就像网站名称一样,它提供免费的3D模型,还包括Vray材料,CAD块,2d和3d纹理集合,无需注册即可免费下载。它是不断更新的,因此您可以查找或请求3DS,MAX,C4D,skp,OBJ,FBX,MTL等格式的模型。 使用说明:所有资源均不允许用于商业用途,否则您将承担责任。 22. Hum3D 自2005年以来,Hum3D帮助来自3多个国家的80D艺术家节省3D建模时间,并制作逼真的3D模型,用于电影,视频游戏,AR应用程序和可视化。所有模型均由首席3D艺术家进行验证,他们检查其是否符合专业要求和最新的3D建模标准。 使用说明:免费下载仅供个人和非商业用途。 23. Artist-3D.com 艺术家-3D 库存的免费 3D 模型下载按通用类别排序。它为人体解剖学、汽车、家具、火箭、卫星等模型提供 AutoDesk 3DS Max 格式。您还可以在浏览他们的网站时找到教程和类似类型的建模。 使用说明:使用权限可能因型号而异。因此,在下载文件之前,请仔细检查每个下载页面上的许可证和使用权限。 24. Free the models 就像本网站的标题一样,它为3d应用程序和3d游戏引擎提供免费的内容模型。您可以为您的任何项目找到许多有趣且有用的模型!它提供3ds,wavefront,bryce,poser,lightwave,md2和unity3d格式的模型。还有一个很棒的纹理集合,可以在您最喜欢的建模和渲染程序中使用。 使用说明:您从这里下载的所有内容都可以免费使用,除非它不能包含在另一个免费的网络或CD收藏中,也不能单独出售。否则,您可以在商业游戏,3D应用程序或渲染作品中使用它。您不必提供信用,但如果您这样做,那就太好了。 25. Resources.blogscopia 本网站由一家名为Scopia的公司创建。他们制作3D图像和视频,您可以找到许多为CGI工作的信息架构设计的模型,所有这些都可以在现实生活中使用。您可以免费下载它们,但是,如果您想一次下载它们,您可以支付 3 到 9 欧元。 使用说明:您可以免费下载模型部分的所有文件。每个压缩文件都包含您也可以在此处找到的许可证。基本上,您可以对文件执行任何操作。唯一的限制是不归属于Scopia的重新分发。 26.ambientCG 1000+公共领域PBR材料适合所有人!环境CG是使用许多不同的方法和资产类型创建的,例如照片纹理(PBR),贴花(PBR),图集(PBR),照片纹理(普通),物质存档(SBSAR),雕刻画笔,3D模型和地形。您可以在所有项目中*使用它们! 使用说明:在 ambientCG 上提供下载的所有 PBR 材料、画笔、照片和 3D 模型均根据知识共享 CC0 1.0 通用许可提供。您可以复制、修改、分发和执行作品,即使是出于商业目的,也无需征得许可。信用将不胜感激。 不要满足于平庸的大理石纹理 - 立即使用我们的免费PBR大理石纹理升级您的3D设计。 27.Pixar One Twenty Eight 这是一个提供官方动画行业经典纹理的网站:皮克斯,创建于 1993 年,该纹理库包括 128 个重复纹理,现在免费提供。 它包含您来到的纹理,包括砖块和动物毛皮。肯定会有一些你可以使用的东西。 使用说明:皮克斯动画工作室的《Pixar One Twenty Eight》根据知识共享署名4.0国际许可协议进行许可。即使出于商业目的,您也可以重新混合、调整和构建您的作品,只要您以相同的条款对新创作进行信用和许可。 访问数以千计的免费纹理并提升您的设计游戏 - 立即开始下载! 28. 3DXO 即使有近 620 个免费贴纸可供下载,3DXO 也不是最大的资源,但它的内容非常有用,不需要注册。无论是简单的墙壁或地板,还是一些奇怪的小东西,您都需要的纹理都可以在此网站上看到。 使用说明:使用权限可能因型号而异。因此,在下载文件之前,请仔细检查每个下载页面上的许可证和使用权限。 29. 3DModelsCC0 3DModelsCC0 与其他产品的不同之处在于它包含超过 250+ 个高质量 3D 模型,并且本网站上的所有内容都是免费的,完全是公共领域!使用我们的模型时无需信用或归属! 使用说明:为每个人提供完全免费的公共领域内容。 30.Sketch up texture club Sketchup Texture Club是一个非营利性的教育和信息门户网站,由3D社区的图像促进协会管理,特别强调面向学生和建筑和室内设计专业人士的可视化和渲染技术,以及所有正在学习3D可视化的人。 使用说明:您无需支付版税或使用费。纹理可以免费下载和使用。不允许将纹理作为竞争产品出售或重新分发,即使图像被修改也是如此。 31. FlippedNormals FlippedNormal 是一个提供计算机图形和 3D 资产的市场,您可以找到许多用于雕刻、建模、纹理、概念艺术、3D 模型、游戏资产或课程的高级资产! 使用说明:使用权限可能因型号而异。因此,在下载文件之前,请仔细检查每个下载页面上的许可证和使用权限。 32. NASA 3D NASA 3D网站是一个在线门户,提供与太空和各种NASA任务相关的大量三维模型和模拟。该网站是用户友好的,并提供有关每个型号的详细信息。该网站允许用户探索和下载几种不同格式的模型,包括 OBJ、STL 和 FBX,只需单击下载按钮即可。 使用说明: 要下载模型,只需单击模型页面上的下载按钮并选择所需的格式。 33. 3DAGOGO (Astroprint) 3DAGOGO 是一个提供广泛 3D 模型的网站,包括角色、车辆和建筑物。3DAGOGO 的独特功能之一是它专注于适合 3D 打印的模型,使其成为希望创建物理原型或模型的设计师的绝佳资源。要使用 3DAGOGO,设计师只需在网站上搜索他们正在寻找的模型类型,然后下载 STL 格式的文件。 使用说明: 要使用 3DAGOGO,只需搜索所需的 3D 模型类型并下载 STL 格式的文件。根据需要自定义模型,并确保在将其用于商业目的之前检查使用权限。 34. FreeCAD FreeCAD是一款了不起的3D建模软件,可让您在计算机上创建令人难以置信的3D设计。该软件可免费下载和使用,它提供了广泛的工具和功能,可用于创建用于各种目的的3D模型。 该网站易于浏览,您可以找到开始使用FreeCAD的所有必要信息。此外,该网站还提供一系列教程和指南,可帮助您了解 3D 建模的来龙去脉。 使用说明: 要下载模型,请访问网站并从库中选择所需的模型。该网站还提供了一系列使用该软件的教程和指南。 35. Pinshape Pinshape是一个提供一系列3D打印模型的网站。网站上提供的型号质量很高,因此您可以确保您的最终印刷产品看起来很棒。该网站提供了广泛的模型,包括从家居用品到小雕像和珠宝的所有物品。 但这还不是Pinshape所能提供的全部!该网站还允许用户上传和共享自己的3D模型。这意味着您不仅可以下载出色的模型,还可以通过分享自己的设计为社区做出贡献。此外,Pinshape 提供了一系列自定义选项,因此您可以调整和调整模型以满足您的特定需求。 使用说明: 要下载模型,请在网站上创建一个帐户,搜索所需的模型,然后单击下载按钮。该网站还为每种型号提供了一系列定制选项。 36.Yeggi Yeggi 提供了大量免费的 3D 模型,您可以下载各种格式的模型,例如 STL、OBJ 和 FBX。该网站易于使用,您可以按关键字、类别或特定网站搜索模型。 Yeggi 对于任何寻找 3D 模型的人来说都是一个很好的资源。它提供了大量的模型集合,从日常物品到复杂的机械,以及介于两者之间的一切。该网站的收藏量在不断增长,每天都有新的型号增加。 使用说明: 要下载模型,请在网站上搜索所需的模型,然后单击下载按钮。该网站还提供指向托管模型的原始网站的链接。 37. Open3DModel 来自开放3D模型的图像 Open3DModel具有各种类别的模型,包括建筑,车辆和角色。无论您需要建筑物,汽车还是人的3D模型,都可以在此网站上找到。 该网站易于浏览,您可以按类别或关键字搜索模型。每个模型都附带预览图像和详细信息,例如文件格式、大小和多边形数量。此信息可以帮助您选择适合您需求的模型。 使用说明: 要下载模型,请访问网站,从库中选择所需的模型,然后单击下载按钮。 使用最好的 3D 资产管理工具简化您的 3D 制作流程。立即试用它们,将您的 3D 项目提升到一个新的水平! 38. 3DExport 对于那些为其 3D 设计项目寻找 3D 模型、纹理和其他资源的人来说,该平台是一个很好的资源。该网站有大量模型可供选择,包括 3D 打印对象、游戏资产等。用户可以按类别、文件格式或价格范围浏览,以找到适合其项目的完美资源。此外,3DExport 还提供一系列教程和其他 3D 资源,以帮助用户提高技能并创建更令人印象深刻的设计。 使用说明: 要使用 3DExport,只需创建一个帐户并浏览可用型号。您可以按类别、格式和价格进行搜索,以找到所需的型号。找到喜欢的模型后,只需下载它并开始在您的项目中使用它。 39.Blend Swap Blend Swap是一个社区驱动的市场,提供与Blender软件兼容的各种免费3D模型。该平台允许用户共享和下载模型、纹理和其他资产,以便在他们的项目中使用。 使用说明: 创建免费帐户后,您可以浏览社区上传的大量3D模型。当您找到要使用的一个时,只需下载它并将其导入您选择的 3D 软件即可。 40. 3DShook 3DShook 是一个高级 3D 模型市场,提供一系列用于建筑、游戏等各个行业的高质量模型。该平台提供基于订阅的模型,具有不同的定价计划,允许用户访问一系列模型。 使用说明: 注册免费帐户后,只需浏览3D模型库,选择您喜欢的模型,然后以您需要的格式下载它们。 41. Smithsonian X 3D 史密森尼 X 3D 对于正在寻找历史文物和文物的高质量 3D 模型的设计师来说,这是一个独特的资源。该平台提供了大量3D模型,这些模型是根据史密森尼博物馆和研究中心中的真实物体扫描创建的。 使用说明:
-
标题:从零开始搭建医药领域知识图谱实现智能问答与分析服务(含码源):含Neo4j基于垂直网站数据的医药知识图谱构建、医药知识图谱的自动问答等
-
2020年TKDE推荐系统指南:深入探索基于知识图谱的方法研究
-
大厂技术实现 | 详解知识图谱的构建全流程 @自然语言处理系列
-
从零开始搭建医药领域知识图谱实现智能问答与分析服务(含码源):含Neo4j基于垂直网站数据的医药知识图谱构建、医药知识图谱的自动问答等