1. 程式人生 > >Skip-Thought詞向量模型實現Sent2Vec

Skip-Thought詞向量模型實現Sent2Vec

一、原理

skip-thought模型結構藉助了skip-gram的思想。在skip-gram中,是以中心詞來預測上下文的詞;在skip-thought同樣是利用中心句子來預測上下文的句子,其資料的結構可以用一個三元組表示 (st−1,st,st+1)(st−1,st,st+1) ,輸入值 stst ,輸出值 (st−1,st+1)(st−1,st+1) ,具體模型結構如下圖:

    

二、實踐

使用預訓練好的Skip-Thought提取文字特徵

1)Dependencies

我的電腦環境是Ubuntu 16.04,python2.7,需要在Theano 0.7執行

開啟終端

pip install theano

2) Git 作者github上程式碼

https://github.com/ryankiros/skip-thoughts

3)下載預訓練好的模型及word embedding檔案(>5G),並放在skip-thoughts檔案下

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

4)修改skipthoughts.py檔案內的路徑地址為3)中下載檔案的路徑

 

4)匯入模型

import skipthoughts
model = skipthoughts.load_model()
encoder = skipthoughts.Encoder(model)

5)encode vector

X = ['Hello World']#輸入文字
vectors = encoder.encode(X)
print(vectors)  #vectors為(1,4096)維的特徵