2019

2019年的总结来的实在晚了,但是一直惦记着,偶尔断断续续的写两句,这次总算写完了。 估计大家都没有想到,这次过年回家能待这么长的时间,看目前形势,估计这学期不用返校了.

放假前一天的雪后图书馆: 雪后图书馆

Read More

python使用futures进行并行处理

很多时候任务都需要并行,比如IO密集型的爬数据,读写磁盘等,CPU计算密集型的计算任务等等。而Python由于GIL的原因,默认情况下只能单线程运行,无法直接利用硬件的多核多线程,因此效率较低,python也早提供了一些列的多线程多进程的库可以用来使用,比如multiprocessing, queue 等等, 不过使用起来都相对复杂,不易控制。 经过几番尝试调研尝试,发现futures基本是最方便将单线程/进程代码改为并发的代码的一个模块。

这篇博客主要是简单记录下futures最常用的方式,以方便后续使用。

Read More

Bert/ELMo词向量及使用方法记录

2020.07.04更新: 加入使用Transformers的Bert的例子,见github: pytorch-bert-elmo-example

2019.4.3更新:新增使用AllenNLP的ELMo做文本分类的例子说明:详见github: Pytorch-ELMo


Bert/ELMo不同于word2vec、glove,属于上下文词向量模型, 可以很方便用于下游NLP任务中。

  • ELMo基于LSTM, 来自《Deep Contextualized Word Representations》
  • Bert基于Transformer, 来自《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》

Read More

Factorization Machine笔记及Pytorch 实现

简介

Factorization Machine(因子分解机)是Steffen Rendle在2010年提出的一种机器学习算法,可以用来做任意实数值向量的预测。对比SVM,基本的优势有:

  • 非常适用与稀疏的数据,尤其在推荐系统中。
  • 线性复杂度,在large scale数据里面效率高
  • 适用于任何的实数向量的预测任务,包括:
    • 回归
    • 分类
    • 排序

Read More

docker搭建neo4j与elasticsearch数据同步

需求

现在有图数据,包含节点和边,节点或者关系都有大段的文本属性,并且需要对全文文本进行检索,因此计划使用Neo4j 进行关系存储以及图算法的应用,使用Elastic Search 进行全文搜索,因此需要Neo4j的数据与Elastic Search进行自动同步,从而实现节点/关系搜索使用Neo4j, 全文搜索使用Elastic Search, 各发挥自己的长处。

方案

正巧的Neo4j官方提供了一个插件neo-elasticsearch, 可以直接Neo4j的数据实时同步到ElasticSearch中。 不过由于官网文档的说明比较简单,以及本人对docker的熟练度有限,在使用docker搭建的过程中,遇到了很大的坑,记录于此。

Read More

pytorch关系抽取实验

接前面笔记:关系抽取总结中最后说的,在关系抽取基于Distant Supervision的NYT+Freebase的数据集有两个版本,目前大部分文章都是在这两份数据集上做的。通过纵向实验发现,同一个模型在不同版本数据集上的表现有不少差异,这篇笔记是基于自己使用Pytorch复现的PCNN(Zeng 2015)与PCNN+ATT(Lin 2016)的实验结果来简单对比。

代码地址: pytorch-relation-extraction,关于实现的细节,调参,踩过的一些坑等,会记录在readme中,这里不再赘述。

Read More