干货 | 大规模知识图谱的构建、推理及应用【整理,转载】

  • 干货 | 大规模知识图谱的构建、推理及应用

  • 构建: 将众多的实体和关系需要从原始数据(可以是结构化也可以是非结构化)中被抽取出来,并以图的方式进行结构化存储

    • 结构化数据:很容易转换为图结构

    • 非结构化数据构建方法:

      • NLP

      • DL:

        1. 可用于抽取AVP(属性-值对)

        2. 端到端的NER:

        *   从一段非结构化文本中找出相关实体(triplet中的主词和宾词),并标注出其位置以及类型
        
        *   是 NLP领域中一些复杂任务(如关系抽取、信息检索等)的基础
        
        *   实现技术:
        
            *   早期基于字典和规则的方法
        
            *   传统ML的方法:
        
                *   NER:一个序列标注问题, 不同于分类问题,序列标注问题中的预测标签不仅与输入特征有关,还与之前的预测标签有关,也就是预测标签之间存在相互依赖和影响
        
                *   HMM
        
                *   MEMM
        
                *   CRF: 条件随机场(Conditional Random Field,CRF)是序列标注的主流模型。它的目标函数不仅考虑输入的状态特征函数,还包含了标签转移特征函数。在训练的时候可以使用SGD学习参数。在预测时,可以使用Vertibi算法求解使目标函数最大化的最优序列
        
            *   DL:
        
                *   BiLSTM-CNN-CRF: 主要由Embedding层(词向量、字向量等)、BiLSTM、tanh隐藏层以及CRF层组成(对于中文可以不需要CNN)
        
                *   CNN-CRF
        
                *   RNN-CRF: 实验表明BiLSTM-CRF可以获得较好的效果, 在特征方面,由于秉承了深度学习的优点,所以无需特征工作的铺垫,使用词向量及字向量就可以得到不错的效果
        
                *   Attention机制:
        
                    *   BiLSTM-CRF+Attention机制,将原来的字向量和词向量的拼接改进为按权重求和,使用两个隐藏层来学习Attention的权值,这样使得模型可以动态地利用词向量和字向量的信息。同时加入NE种类的特征,并在字向量上使用Attention来学习关注更有效的字符。实验效果优于BiLSTM-CRF的方法
        
                *   [仅需少量标注样本的半监督来进行相应的工作](https://www.cnblogs.com/robert-dlut/p/6847401.html](https://www.cnblogs.com/robert-dlut/p/6847401.html)
        
        1. 关系抽取:一个序列标注问题,采用模型与NER相同

        2. 关系补全:

          *   通过现有知识图谱来预测实体之间的关系,是对关系抽取的重要补充
          
          *   传统方法:
          
                *   TransE和TransH: 假设实体和关系处于相同的语义空间,把关系作为从实体A到实体B的翻译来建立实体和关系嵌入
          
                *   一个实体是由多种属性组成的综合体,不同关系关注实体的不同属性,所以仅仅在一个空间内对他们进行建模是不够的
          
          *   TransR:
          
                *   将实体和关系投影到不同的空间中,在实体空间和关系空间构建实体和关系嵌入
          
                *   特定的关系投影能够使得两个实体在这个关系下真实地靠近彼此,使得不具有此关系的实体彼此远离
          
        3. 知识融合,

          *   包含以下几部分:
          
                *   实体对齐
          
                *   属性对齐
          
                *   冲突消解
          
                *   规范化等
          
          *   对开放域很难,对特定领域 可以通过别名举证、领域知识等方法进行对齐和消解,从技术角度来看,这里会涉及较多的逻辑,所以偏传统机器学习方法,甚至利用业务逻辑即可覆盖大部分场景
          
    • 没有统一的方法,因为其构建需要一整套知识工程的方法, 知识的更新也是不可避免的,所以一定要重视快速迭代和快速产出检验

  • 查询:

    • RDF->OWL->SPARQL

    • postgresql

  • 存储:

    • 选关系数据库还是NoSQL 数据库(内存数据库、图数据库)?要不要用内存数据库(e.g.redis)?要不要用图数据库(Neo4J、graphsql、sparkgraphx(包含图计算引擎)、OrientDB、基于hbase的Titan、BlazeGraph等)?这些都需要根据数据场景慎重选择

      • nosql和传统关系型数据库的区别

        *   优点: 灵活的数据模型,结构比后者更丰富、 更易扩展、 高可用,查询效率高,传统关系型数据库受限于磁盘io,所以在高并发的情况下,压力倍增,而像redis这种内存数据库每秒支持10w次读写、 nosql成本也比较低
        
        *   缺点: 不支持sql这样的工业标准查询(学习成本高)、 大多数nosql都不支持事务、 nosql只能保证数据相对一致性,尤其是在数据同步的时候,主从服务器的状态是不一致的
        
    • CN-DBpedia 实际上是基于 mongo 数据库,参与开发的谢晨昊提到,一般只有在基于特定领域才可能会用到图数据库,就知识图谱而言,基于 json(bson) 的 mongo 就足够了。用到图查询的领域如征信,一般是需要要找两个公司之间的关联交易,会用到最短路径/社区计算等

  • 知识图谱的推理, 将知识图谱表示为张量tensor形式,通过张量分解(tensor factorization)来实现对未知事实的判定:

    • 用途:

      *   链接预测(判断两个实体之间是否存在某种特定关系)
      
      *   实体分类(判断实体所属语义类别)
      
      *   实体解析(识别并合并指代同一实体的不同名称)
      
    • 模型:

      *   RESCAL模型
      
      *   TRESCAL模型
      
      *   路由排序算法(PRA算法) 常用来判断两个实体之间可能存在的关系
      
  • 知识图谱的应用: 搜索、问答、推荐系统、反欺诈、不一致性验证、异常分析、客户管理等。以上场景在应用中出现越来越多的深度学习模型

    • 知识图谱在深度学习模型中的应用, 利用大量先验知识,来大大降低模型对大规模标注语料的依赖

    • 将知识图谱的语义信息输入到深度学习模型中,将离散化的知识表示为连续化的向量, 使得知识图谱的先验知识能够称为深度学习的输入[见Knowledge Graph Embedding相关文章]

    • 利用知识作为优化目标的约束,指导深度学习模型的学习过程,通常是将知识图谱中的知识表示为优化目标的后验正则项

    • 知识图谱的表示学习用于学习实体和关系的向量化表示,其关键是合理定义知识图谱中关于事实(三元组h,r,t)的损失函数fr(h,t),其总和是三元组的两个实体h和t的向量化表示。通常情况下,当事实h,r,t成立时,期望最小化fr(h,t),实现模型:

      *   基于距离的模型: SE模型: 当两个实体属于同一个三元组时,它们的向量表示在投影后的空间中也应该彼此靠近。损失函数定义为向量投影后的距离
      
      *   基于翻译的模型:TransE,TransH,TransR, 通过向量空间的向量翻译来描述实体与关系之间的相关性
      

你可能感兴趣的:(干货 | 大规模知识图谱的构建、推理及应用【整理,转载】)