Skip-Thought Vectors implement by tensorflow
代码从tensorflow 官方实现copy来 做了如下改变:
- 修改部分代码,为了能在中文场景下跑起来
- 适用Python3.x 的代码 官方的代码在Python3.x下存在部分问题
- 去掉bazel的编译,直接用shell 主要对bazel不熟,加上国内环境的限制不用
训练数据格式:一行一个句子,每个段落用\n
分割
中文诗歌例子见data/train.txt
有了训练数据,先转换成tfrecord格式,具体方式如下
cd skip_thoughts/data/
./pre_data.sh
会产生在data/tfrecord 文件夹下产生 vocab.txt(字映射成id) 和word_counts.txt(词频文件) 和很多tfrecord 文件
训练
cd skip_thoughts
./train.sh
模型基于encoder-decoder的方式,vocab代码中做了限制是20000。我理解主要是在decoder的时候不能有太大的vocab,word2vec用了层次softmax和负采样来解决的 为了有很多未登录词作者用了线性映射的方法:在word2vec和skip-thoughts的词向量直接做了个线性回归,把word2vec的结果映射到skip-thoughts
我在古诗上做的基于字的训练,字相对很少,所以暂时不需要,所以vocab_expansion.sh
中的word2vec被我去掉了,只是单纯的产生了词向量存储出来
利用模型的encoder部分就可以得到任意句子的向量