Skip-Thought詞向量模型實現Sent2Vec
阿新 • • 發佈:2018-11-10
一、原理
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)維的特徵