作者归档:fanyy

为什么我不再从事算法的工作了?

结缘

从我2016年接触人工智能到现在已经有三年多的时间了,启蒙学习来自于吴恩达在斯坦福教的那一门CS229机器学习公开课,我当时(2013年)看的并不是现在Coursera上的那一门机器学习课,而是一个画质很模糊的公开课视频。由于画质太渣,有些板书公式的推导看不清楚,似懂非懂。但是,当时就有一个巨大的疑问一直浮现在我的脑海里:“机器到底是如何学习的?”带着这个疑问,2017年开始我就在Coursera开始正儿八经的学习机器学习了,不得不说Coursera上的那门《机器学习》真的很适合入门,比周志华的西瓜书好太多了,学完之后又去学了《深度学习》系列,整体而言难度并不大,用到的数学80%都是高中数学。

2016年下半年我就有了出国留学的打算,主要想法是工作了两三年觉得重复性的工作太无聊了,没什么激情,想趁着年轻出去看看外面的世界。当时选定的三个国家和地区是香港、新加坡和英国。英国想去的学校(比如帝国理工啥的)学费太高,伦敦地区的租房又很贵,超预算;新加坡的NUS需要考GRE,而且offer来的太晚;而NTU则没有什么好的CS硕士项目;那么很自然地就来到了香港。其实,那时候并没有抱着能[……]

继续阅读

Neo4j使用APOC导出cypher语句

我们知道,neo4j community版本不支持把数据库导出成cypher语句进行增量更新,也就是所谓的Hot Backup,只能整库dump/load停机冷备份,这样不便于不同数据库之间融合。一个解决办法是,根据图谱模型,自己写一个脚本生成cypher语句,这样比较麻烦;另一个是使用第三方工具APOC导出成cypher语句。具体步骤如下:

安装APOC

  • 下载

    前往https://github.com/neo4j-contrib/neo4j-apoc-procedures/releases/3.4.0.3 下载 apoc-3.4.0.3-all.jar

  • 安装

    apoc-3.4.0.3-all.jar放到neo4j安装路径的plugins目录下,即 $NEO4J_HOME/plugins/。如果没有可执行权限的话(一般是有的),还需要如下命令:

  • 修改配置

    neo4j.conf文件中添加以下配置:

  • 重启neo4j

    [crayon-5d[……]

    继续阅读

Neo4j如何表示带权重的关系

问题描述

我们知道图数据库可以用来表示节点之间的关系,大多数情况下,这个功能就足够使用了。但有时候我们希望知道这些关系的权重是怎样的,也就是说我们需要一个带权重的图(weighted graph)。比如,我们以上海周边城市图谱为例。先用如下cypher语句创建节点和关系:
CREATE (Shanghai:City {name:'上海'})
CREATE (Suzhou:City {name:'苏州'})
CREATE (Wuxi:City {name:'无锡'})
CREATE (Nanjing:City {name:'南京'})
CREATE (Ningbo:City {name:'宁波'})
CREATE (Shanghai)-[:Neighbor]->(Suzhou)
CREATE (Shanghai)-[:Neighbor]->(Wuxi)
CREATE (Shanghai)-[:Neighbor]->(Nanjing)
CREATE (Shanghai)-[:Neighbor]->(Ningbo)

可视化如下:
Imgur

解决方案

方法其实很简单:只要在关系[……]

继续阅读

关系抽取综述

什么是关系抽取?

信息抽取旨在从大规模非结构或半结构的自然语言文本中抽取结构化信息。关系抽取是其中的重要子任务之一,主要目的是从文本中识别实体并抽取实体之间的语义关系。比如:

International Business Machines Corporation (IBM or the company) was incorporated in the State of New York on June 16, 1911.

我们可以从上面这段文本中抽取出如下三元组(triples)关系:

  • Founding-year (IBM, 1911)
  • Founding-location (IBM, New York)

为什么要进行关系抽取?

  • 创建新的结构化知识库(knowledge base)并且增强现有知识库
  • 构建垂直领域知识图谱:医疗,化工,农业,教育等
  • 支持上层应用:问答,搜索,推理等。比如,对于这样一个提问:

    The granddaughter of which actor starred in the movie “E.T.”?

    可以用如下的关系推理表[……]

    继续阅读

变分自动编码器(VAE)

这学期张连文教授教的CSIT6000G Machine Learning课上讲到了VAE和GAN,学完之后感觉两个概念被解释的很好,所以有必要记录一下。

VAE(Variational Autoencoder)中文译为变分自动编码器,它是一种深度生成模型(Deep Generative Model),是一种无监督学习算法。它的主要作用是能够学习一个函数(模型),使得输出数据的分布尽可能地逼近原始数据分布。

问题描述

假设我们有一堆无标签数据集 \(X = \{x^{(i)}\}_{i=1}^{N}\), 每一个数据\(x^{(i)}\)是一个表示图像的vector,而vector中的每一个元素则表示图像的像素;那么我们的任务就是:

希望从原始数据集\(X\)中学习一个分布\(p(x)\),使得它的分布和原始数据分布接近,也就是说我们可以生成和原始图像相似但不同的图片。

生成模型(Generative Model)

那么这个问题如何求解呢?
我们假设:

  • 每一个图片都存在一个与之对应的标签向量\(z\);什么叫标签向量?简单点说可以用\(z\)来代表\(x\),但是\(z\)[……]

    继续阅读