1. 原理
参考以下博客学习原理,
https://blog.youkuaiyun.com/liujh845633242/article/details/102572241
可以理解为, 此模型能够将一个句子 提取其特征, 与word2vec类似, 相当于一个 sentence2vec
是16年的Skip-Thought Vectors 论文提出的
2. 使用
2.1 环境要求
首先我们需要用以下环境,注意容易搞错的点就是
NLTK == 3, 在ubantu系统下 16.04
Python 2.7
Theano 0.7
scikit-learn
NLTK 3
Keras
gensim
如果是python3 版本 建议使用 mkvirtualenv 工具,创建一个python2环境, 这里加了 -p /usr/bin/python2.7, 其中/usr/bin/python2.7 表示python2的路径,需要换成自己的python2路径
mkvirtualenv -p /usr/bin/python2.7 py2env
其中我的版本如下, 如果不知道按照什么版本,那建议用以下版本
在下载nltk 后, 可能会要你下载一个punkt 包,这里建议直接从提示找不到的位置,新建nltk_data 文件夹, 然后在里面建一个tokenizers文件夹, 最后把 punkt下载地址 下载好的zip 解压后放到tokenizers 文件夹里面
2.2 步骤
- 下载代码
git clone https://github.com/ryankiros/skip-thoughts.git
- 下载所需预训练参数
wget http://www.cs.toronto.edu/~rkiros/models/dictionary.txt
wget http://www.cs.toronto.edu/~rkiros/models/utable.npy
wget http://www.cs.toronto.edu/~rkiros/models/btable.npy
wget http://www.cs.toronto.edu/~rkiros/models/uni_skip.npz
wget http://www.cs.toronto.edu/~rkiros/models/uni_skip.npz.pkl
wget http://www.cs.toronto.edu/~rkiros/models/bi_skip.npz
wget http://www.cs.toronto.edu/~rkiros/models/bi_skip.npz.pkl
- 修改代码
修改 克隆后的代码中的 skipthoughts.py
#-----------------------------------------------------------------------------#
# Specify model and table locations here
#-----------------------------------------------------------------------------#
path_to_models = './data/'
path_to_tables = './data/'
#-----------------------------------------------------------------------------#
这两个路径设置为第二步下载下来的预训练参数模型地址, 在上一步中我是直接 放到克隆的文件夹自建的data文件夹里面了
- 编写主要代码
from skipthoughts import load_model, Encoder
import pickle
import csv
import re
import os
import time
def text_process ():
model = load_model()
encoder_model = Encoder(model)
encoder_str = ["i love natural language processing",]
vectors = encoder_model .encode(encoder_str )
# each sentence will be encode a 4800 vector
print(vectors)
print(len(vectors))
if __name__ == '__main__':
text_process()