2020

读博带来的拖延症越来越严重,但是去年一年还是比较值得单独说一下的。预答辩推迟了,这两天就想把这件事补上。

home
home

最近比较喜欢听的一首歌:

Read More

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

Ubuntu常用代理设置方法

使用Tinyproxy 在一台可以连接公网的机器上搭建了代理,这样可以让内网机器可以连接通过连接该代理,访问外网资源。 不过很多常用的应用或者命令的代理方式不一致。因此总结一下:

环境变量设置

可以直接在命令行: export http_proxy=http://ip:port. 或者在.bashrc里面加入这一行可以一直生效。 这个可能对于某些命令有效。对于sudo操作,需要在sudo之后加-E

APT系列

包含apt update/intall/upgrade等, 一般使用选项设置代理,如:

1
sudo apt -o Acquire::http::proxy="http://ip:port" update

或者使用-c 写到文件 apt_proxy.conf,内容:

1
2
Acquire::http::proxy="http://ip:port"

这样就可以这样使用代理:

1
2
sudo apt -c ~/apt_proxy.cong update

不过有一些命令可能还需要单独设置:

  • apt-key adv 添加key的时候, 这时候需要用专门的代理选项
    1
    sudo apt-key adv --keyserver-options http-proxy=http://ip:port/ --keyserver keyserver.ubuntu.com --recv-keys XXXXX
  • ADD-APT-REPOSITORY 添加源的时候,因为一般是sudo 权限所以即使设置了环境变量,也不能生效,这时候需要用-E选项
    1
    sudo -E add-apt-repository XXXX
    这个也属于一种通用的方式,sudo -E 表示使用当前用户的环境变量。

Docker

这个直接按照官网教程来即可: https://docs.docker.com/config/daemon/systemd/#httphttps-proxy

  • 创建一个服务目录:在/etc/systemd/system/ 下:
    1
    sudo mkdir  docker.service.d
  • docker.service.d目录下新建一个 http-proxy.conf的文件, 写入如下的内容
    1
    2
    [Service]
    Environment="HTTP_PROXY=http://ip:port/"
  • 当然如果有内网的Docker仓库,也可以设置不走代理的名单,只需在后面加上即可,如:
    1
    2
    [Service]    
    Environment="HTTP_PROXY=http://proxy.example.com:80/" "NO_PROXY=localhost,127.0.0.1,docker-registry.somecorporation.com"
  • 刷新系统配置: sudo systemctl daemon-relaod
  • 重启docker sudo systemctl restart docker
  • 查看验证docker的配置: systemctl show --property=Environment docker

maven代理

修改setting.xml文件,一般位于~/.m2/setting.xml 或者 maven安装目录下的/conf/setting.xml, 修改如下信息(去掉注释):

1
2
3
4
5
6
7
8
9
10
<proxy>
<id>optional</id>
<active>true</active>
<protocol>http</protocol>
<username>proxyuser</username>
<password>proxypass</password>
<host>proxy.host.net</host>
<port>80</port>
<nonProxyHosts>local.net|some.host.com</nonProxyHosts>
</proxy>

其中,上述选项有的可选,没用的直接删除即可:

pip代理

直接使用--proxy 选项:

1
sudo pip --proxy 127.0.0.1:8888 install XXXX