1. 程式人生 > >使用 paddle來進行文本生成

使用 paddle來進行文本生成

class layer rfi 深度學習 import port imp 友好 pytho

(1) paddle 簡單介紹

paddle 是百度在2016年9月份開源的深度學習框架。

就我最近體驗的感受來說的它具有幾大優點:

1. 本身內嵌了許多和實際業務非常貼近的模型比如個性化推薦,情感分析,詞向量,語義角色標註等模型還有更多實際已經內嵌了但是目前還沒有出現在官方文檔上的模型比如物體檢測,文本生成,圖像分類,ctr預估等等,可以快速應用到項目中去

2. 就實際體驗來看,訓練的速度相比於調用keras,在同等數據集上和相同網絡架構上要快上不少。當然也是因為keras本身也是基於在tensorflow或者theano上面的,二次調用的速度不如paddle直接調用底層迅速。

缺點也有很多:

1. 一開始的安裝對新手極其的不友好,使用docker安裝感覺這個開源框架走不長久,所幸這個問題已經解決。

2. 目前很多的文檔並不完善,也許百度系的工程師目前對這方面其實並不是很重視,新手教程看起來並非那麽易懂。

最後希望借由本文,可以讓你快速上手paddle。

(2) 一分鐘安裝paddle

2.1 docker 安裝

之前paddle的安裝方式是使用docker安裝,感覺非常的反人類。

安裝命令: docker pull paddlepaddle/paddle:latest

2.2 pip 安裝

現在已經支持pip 安裝了。對(OS: centos 7, ubuntu 16.04, macos 10.12, python: python 2.7.x) 可以直接使用

pip install paddlepaddle 安裝cpu版本。

pip install paddlepaddle-gpu 安裝gpu 版本。

安裝完以後,測試的代碼

import paddle.v2 as paddle
x = paddle.layer.data(name=‘x‘, type=paddle.data_type.dense_vector(13))
y = paddle.layer.fc(input=x, size=1, param_attr=paddle.attr.Param(name="fc.w"))
params = paddle.parameters.create(y)
print params["fc.w"].shape

當輸出 [13,1],那麽恭喜你,已經成功安裝了paddle.

2.3 遇到的問題

當我在使用pip 安裝方式安裝了gpu版本的paddle以後,遇到了numpy 版本不兼容的問題。解決的辦法是:在把本地的numpy卸載以後,我首先把安裝的paddle卸載了,然後重新再安裝了一遍paddle。這樣在安裝的過程當中可以借由paddle的安裝過程來檢測你系統的其他python包是否符合paddle需要的環境。其他類似的python包的問題,都可以借由這個辦法幫忙解決。

(3) 使用paddle中的循環神經網絡來生成文本

3.1 背景簡介

首先paddle實際上已經內嵌了這個項目:https://github.com/PaddlePaddle/models/tree/develop/generate_sequence_by_rnn_lm

文本生成有很多的應用,比如根據上文生成下一個詞,遞歸下去可以生成整個句子,段落,篇章。目前主流生成文本的方式是使用rnn來生成文本。

主要有兩個原因:

1: 因為RNN 是將一個結構反復使用,即使輸入的文本很長,所需的network的參數都是一樣的。

2: 因為RNN 是共用一個結構的,共用參數的。可以用比較少的參數來訓練模型。這樣會比較難訓練,但是一旦訓練好以後,模型會比較難overfitting,效果也會比較好。

對於RNN使用的這個結構,由於原生的RNN的這個結構本身無法解決長程依賴的問題,目前主要使用Lstm 和GRU來進行代替。但是具體到LSTM 和GRU,因為LSTM需要使用三個門結構也就是通常所說的遺忘門,更新門,輸出門。而GRU的表現和LSTM類似,卻只需要兩個門結構。訓練速度更快,對內存的占用更小,目前看起來使用GRU是更好的選擇。

3.2 項目實戰

使用 paddle來進行文本生成