
在自然語(yǔ)言處理中,情感分析一般是指判斷一段文本所表達(dá)的情緒狀態(tài) 。其中,一段文本可以是一個(gè)句子,一個(gè)段落或一個(gè)文檔 。情緒狀態(tài)可以是兩類,如(正面,負(fù)面),(高興,悲傷);也可以是三類,如(積極,消極,中性)等等 。
情感分析的應(yīng)用場(chǎng)景十分廣泛,如把用戶在購(gòu)物網(wǎng)站(亞馬遜、天貓、淘寶等)、旅游網(wǎng)站、電影評(píng)論網(wǎng)站上發(fā)表的評(píng)論分成正面評(píng)論和負(fù)面評(píng)論;或?yàn)榱朔治鲇脩魧?duì)于某一產(chǎn)品的整體使用感受,抓取產(chǎn)品的用戶評(píng)論并進(jìn)行情感分析等等 。
今天是5月20日,PaddlePaddle教你用情感分析算法體會(huì)女神心意 。
在下文中 , 我們將以情感分析為例,介紹使用深度學(xué)習(xí)的方法進(jìn)行端對(duì)端的短文本分類,并使用PaddlePaddle完成全部相關(guān)實(shí)驗(yàn) 。
項(xiàng)目地址:
https://github.com/PaddlePaddle/book/blob/develop/06.understand_sentiment/README.cn.md
應(yīng)用背景
在自然語(yǔ)言處理中 , 情感分析屬于典型的文本分類問(wèn)題,即把需要進(jìn)行情感分析的文本劃分為其所屬類別 。文本分類涉及文本表示和分類方法兩個(gè)問(wèn)題 。
在深度學(xué)習(xí)的方法出現(xiàn)之前,主流的文本表示方法為詞袋模型BOW(bag of words),話題模型等等;分類方法有SVM(support vector machine), LR(logistic regression)等等 。
對(duì)于一段文本,BOW表示會(huì)忽略其詞順序、語(yǔ)法和句法 , 將這段文本僅僅看做是一個(gè)詞集合,因此BOW方法并不能充分表示文本的語(yǔ)義信息 。
例如 , 句子這部電影糟糕透了和一個(gè)乏味 , 空洞,沒(méi)有內(nèi)涵的作品在情感分析中具有很高的語(yǔ)義相似度,但是它們的BOW表示的相似度為0 。又如,句子一個(gè)空洞,沒(méi)有內(nèi)涵的作品和一個(gè)不空洞而且有內(nèi)涵的作品的BOW相似度很高,但實(shí)際上它們的意思很不一樣 。
在本教程中 , 我們所要介紹的深度學(xué)習(xí)模型克服了BOW表示的上述缺陷,它在考慮詞順序的基礎(chǔ)上把文本映射到低維度的語(yǔ)義空間,并且以端對(duì)端(end to end)的方式進(jìn)行文本表示及分類,其性能相對(duì)于傳統(tǒng)方法有顯著的提升[1] 。
模型概覽
本教程所使用的文本表示模型為卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks)和循環(huán)神經(jīng)網(wǎng)絡(luò)(Recurrent Neural Networks)及其擴(kuò)展 。下面依次介紹這幾個(gè)模型 。
文本卷積神經(jīng)網(wǎng)絡(luò)簡(jiǎn)介(CNN)
對(duì)卷積神經(jīng)網(wǎng)絡(luò)來(lái)說(shuō) , 首先使用卷積處理輸入的詞向量序列,產(chǎn)生一個(gè)特征圖(feature map),對(duì)特征圖采用時(shí)間維度上的最大池化(max pooling over time)操作得到此卷積核對(duì)應(yīng)的整句話的特征,最后,將所有卷積核得到的特征拼接起來(lái)即為文本的定長(zhǎng)向量表示,對(duì)于文本分類問(wèn)題,將其連接至softmax即構(gòu)建出完整的模型 。
在實(shí)際應(yīng)用中,我們會(huì)使用多個(gè)卷積核來(lái)處理句子 , 窗口大小相同的卷積核堆疊起來(lái)形成一個(gè)矩陣 , 這樣可以更高效的完成運(yùn)算 。另外,我們也可使用窗口大小不同的卷積核來(lái)處理句子 , 圖1表示卷積神經(jīng)網(wǎng)絡(luò)文本分類模型 , 不同顏色表示不同大小的卷積核操作 。
對(duì)于一般的短文本分類問(wèn)題,上文所述的簡(jiǎn)單的文本卷積網(wǎng)絡(luò)即可達(dá)到很高的正確率[1] 。若想得到更抽象更高級(jí)的文本特征表示,可以構(gòu)建深層文本卷積神經(jīng)網(wǎng)絡(luò)[2,3] 。
循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)
循環(huán)神經(jīng)網(wǎng)絡(luò)是一種能對(duì)序列數(shù)據(jù)進(jìn)行精確建模的有力工具 。實(shí)際上,循環(huán)神經(jīng)網(wǎng)絡(luò)的理論計(jì)算能力是圖靈完備的[4] 。自然語(yǔ)言是一種典型的序列數(shù)據(jù)(詞序列),近年來(lái),循環(huán)神經(jīng)網(wǎng)絡(luò)及其變體(如long short term memory[5]等)在自然語(yǔ)言處理的多個(gè)領(lǐng)域,如語(yǔ)言模型、句法解析、語(yǔ)義角色標(biāo)注(或一般的序列標(biāo)注)、語(yǔ)義表示、圖文生成、對(duì)話、機(jī)器翻譯等任務(wù)上均表現(xiàn)優(yōu)異甚至成為目前效果最好的方法 。
循環(huán)神經(jīng)網(wǎng)絡(luò)按時(shí)間展開(kāi)后如圖2所示:在第t時(shí)刻 , 網(wǎng)絡(luò)讀入第t個(gè)輸入 。
其中,在處理自然語(yǔ)言時(shí),一般會(huì)先將詞(one-hot表示)映射為其詞向量表示 , 然后再作為循環(huán)神經(jīng)網(wǎng)絡(luò)每一時(shí)刻的輸入 。
長(zhǎng)短期記憶網(wǎng)絡(luò)(LSTM)
對(duì)于較長(zhǎng)的序列數(shù)據(jù),循環(huán)神經(jīng)網(wǎng)絡(luò)的訓(xùn)練過(guò)程中容易出現(xiàn)梯度消失或爆炸現(xiàn)象[6] 。LSTM能夠解決這一問(wèn)題 。相比于簡(jiǎn)單的循環(huán)神經(jīng)網(wǎng)絡(luò),LSTM增加了記憶單元c、輸入門(mén)i、遺忘門(mén)f及輸出門(mén)o 。這些門(mén)及記憶單元組合起來(lái)大大提升了循環(huán)神經(jīng)網(wǎng)絡(luò)處理長(zhǎng)序列數(shù)據(jù)的能力 。若將基于LSTM的循環(huán)神經(jīng)網(wǎng)絡(luò)表示的函數(shù)記為F,則其公式為:
F由下列公式組合而成[7]:
其中,
LSTM通過(guò)給簡(jiǎn)單的循環(huán)神經(jīng)網(wǎng)絡(luò)增加記憶及控制門(mén)的方式 , 增強(qiáng)了其處理遠(yuǎn)距離依賴問(wèn)題的能力 。類似原理的改進(jìn)還有Gated Recurrent Unit (GRU)[8],其設(shè)計(jì)更為簡(jiǎn)潔一些 。這些改進(jìn)雖然各有不同,但是它們的宏觀描述卻與簡(jiǎn)單的循環(huán)神經(jīng)網(wǎng)絡(luò)一樣(如圖2所示),即隱狀態(tài)依據(jù)當(dāng)前輸入及前一時(shí)刻的隱狀態(tài)來(lái)改變 , 不斷地循環(huán)這一過(guò)程直至輸入處理完畢:
其中,Recrurent可以表示簡(jiǎn)單的循環(huán)神經(jīng)網(wǎng)絡(luò)、GRU或LSTM 。
棧式雙向LSTM(Stacked Bidirectional LSTM)
對(duì)于正常順序的循環(huán)神經(jīng)網(wǎng)絡(luò),
如圖4所示(以三層為例),奇數(shù)層LSTM正向,偶數(shù)層LSTM反向,高一層的LSTM使用低一層LSTM及之前所有層的信息作為輸入,對(duì)最高層LSTM序列使用時(shí)間維度上的最大池化即可得到文本的定長(zhǎng)向量表示(這一表示充分融合了文本的上下文信息,并且對(duì)文本進(jìn)行了深層次抽象) , 最后我們將文本表示連接至softmax構(gòu)建分類模型 。
基于PaddlePaddle的實(shí)戰(zhàn)PaddlePaddle簡(jiǎn)介
PaddlePaddle(paddlepaddle.org)是百度研發(fā)的深度學(xué)習(xí)框架 。除了核心框架之外,PaddlePaddle還提供了豐富的工具組件 。官方開(kāi)源了多個(gè)工業(yè)級(jí)應(yīng)用模型 , 涵蓋自然語(yǔ)言處理、計(jì)算機(jī)視覺(jué)、推薦引擎等多個(gè)領(lǐng)域,并開(kāi)放了多個(gè)領(lǐng)先的預(yù)訓(xùn)練中文模型 。4月23日深度學(xué)習(xí)開(kāi)發(fā)者峰會(huì)上,PaddlePaddle發(fā)布了一系列新特性和應(yīng)用案例 。
數(shù)據(jù)集介紹
我們以IMDB情感分析數(shù)據(jù)集為例進(jìn)行介紹 。IMDB數(shù)據(jù)集的訓(xùn)練集和測(cè)試集分別包含25000個(gè)已標(biāo)注過(guò)的電影評(píng)論 。其中,負(fù)面評(píng)論的得分小于等于4,正面評(píng)論的得分大于等于7,滿分10分 。
aclImdb|- test|-- neg|-- pos|- train|-- neg|-- pos
PaddlePaddle在 dataset/imdb.py 中實(shí)現(xiàn)了imdb數(shù)據(jù)集的自動(dòng)下載和讀?。?并提供了讀取字典、訓(xùn)練數(shù)據(jù)、測(cè)試數(shù)據(jù)等API 。
配置模型
在該示例中,我們實(shí)現(xiàn)了兩種文本分類算法,文本卷積神經(jīng)網(wǎng)絡(luò),和棧式雙向LSTM 。我們首先引入要用到的庫(kù)和定義全局變量:
from __future__ import print_functionimport paddleimport paddle.fluid as fluidimport numpy as npimport sysimport mathCLASS_DIM = 2情感分類的類別數(shù)EMB_DIM = 128詞向量的維度HID_DIM = 512隱藏層的維度STACKED_NUM = 3LSTM雙向棧的層數(shù)BATCH_SIZE = 128batch的大小
文本卷積神經(jīng)網(wǎng)絡(luò)
我們構(gòu)建神經(jīng)網(wǎng)絡(luò) convolution_net , 示例代碼如下 。需要注意的是:fluid.nets.sequence_conv_pool 包含卷積和池化層兩個(gè)操作 。
文本卷積神經(jīng)網(wǎng)絡(luò)def convolution_net(data, input_dim, class_dim, emb_dim, hid_dim):emb = fluid.layers.embedding(input=data, size=[input_dim, emb_dim], is_sparse=True)conv_3 = fluid.nets.sequence_conv_pool(input=emb,num_filters=hid_dim,filter_size=3,act="tanh",pool_type="sqrt")conv_4 = fluid.nets.sequence_conv_pool(input=emb,num_filters=hid_dim,filter_size=4,act="tanh",pool_type="sqrt")prediction = fluid.layers.fc(input=[conv_3, conv_4], size=class_dim, act="softmax")return prediction
網(wǎng)絡(luò)的輸入 input_dim 表示的是詞典的大小 , class_dim 表示類別數(shù) 。這里,我們使用 sequence_conv_pool API實(shí)現(xiàn)了卷積和池化操作 。
棧式雙向LSTM
棧式雙向神經(jīng)網(wǎng)絡(luò)stacked_lstm_net的代碼片段如下:
棧式雙向LSTMdef stacked_lstm_net(data, input_dim, class_dim, emb_dim, hid_dim, stacked_num):assert stacked_num % 2 == 1計(jì)算詞向量emb = fluid.layers.embedding(input=data, size=[input_dim, emb_dim], is_sparse=True)第一層棧全連接層fc1 = fluid.layers.fc(input=emb, size=hid_dim)lstm層lstm1, cell1 = fluid.layers.dynamic_lstm(input=fc1, size=hid_dim)inputs = [fc1, lstm1]其余的所有棧結(jié)構(gòu)for i in range(2, stacked_num1):fc = fluid.layers.fc(input=inputs, size=hid_dim)lstm, cell = fluid.layers.dynamic_lstm(input=fc, size=hid_dim, is_reverse=(i % 2) == 0)inputs = [fc, lstm]池化層fc_last = fluid.layers.sequence_pool(input=inputs[0], pool_type=max)lstm_last = fluid.layers.sequence_pool(input=inputs[1], pool_type=max)全連接層,softmax預(yù)測(cè)prediction = fluid.layers.fc(input=[fc_last, lstm_last], size=class_dim, act=softmax)return prediction
以上的棧式雙向LSTM抽象出了高級(jí)特征并把其映射到和分類類別數(shù)同樣大小的向量上 。最后一個(gè)全連接層的’softmax’激活函數(shù)用來(lái)計(jì)算分類屬于某個(gè)類別的概率 。
重申一下,此處我們可以調(diào)用 convolution_net 或 stacked_lstm_net 的任何一個(gè)網(wǎng)絡(luò)結(jié)構(gòu)進(jìn)行訓(xùn)練學(xué)習(xí) 。我們以 convolution_net 為例 。
接下來(lái)我們定義預(yù)測(cè)程序(inference_program) 。預(yù)測(cè)程序使用convolution_net 來(lái)對(duì) fluid.layer.data 的輸入進(jìn)行預(yù)測(cè) 。
def inference_program(word_dict):data = https://www.45baike.com/post/fluid.layers.data(name="words", shape=[1], dtype="int64", lod_level=1)dict_dim = len(word_dict)net = convolution_net(data, dict_dim, CLASS_DIM, EMB_DIM, HID_DIM)net = stacked_lstm_net(data, dict_dim, CLASS_DIM, EMB_DIM, HID_DIM, STACKED_NUM)return net
我們這里定義了 training_program 。它使用了從 inference_program 返回的結(jié)果來(lái)計(jì)算誤差 。我們同時(shí)定義了優(yōu)化函數(shù) optimizer_func。
因?yàn)槭怯斜O(jiān)督的學(xué)習(xí),訓(xùn)練集的標(biāo)簽也在fluid.layers.data中定義了 。在訓(xùn)練過(guò)程中,交叉熵用來(lái)在fluid.layer.cross_entropy中作為損失函數(shù) 。
在測(cè)試過(guò)程中,分類器會(huì)計(jì)算各個(gè)輸出的概率 。第一個(gè)返回的數(shù)值規(guī)定為cost 。
def train_program(prediction):
label = fluid.layers.data(name="label", shape=[1], dtype="int64")cost = fluid.layers.cross_entropy(input=prediction, label=label)avg_cost = fluid.layers.mean(cost)accuracy = fluid.layers.accuracy(input=prediction, label=label)return [avg_cost, accuracy]返回平均cost和準(zhǔn)確率acc優(yōu)化函數(shù)def optimizer_func():return fluid.optimizer.Adagrad(learning_rate=0.002)
訓(xùn)練模型定義訓(xùn)練環(huán)境
無(wú)鑰匙進(jìn)入離開(kāi)車(chē)會(huì)自動(dòng)鎖車(chē)嗎?無(wú)鑰匙進(jìn)入怎么鎖車(chē)我們知道,沒(méi)有無(wú)鑰匙進(jìn)入系統(tǒng)的車(chē)輛在你離開(kāi)車(chē)輛后需要按一下遙控鑰匙的鎖車(chē)按鍵來(lái)進(jìn)行鎖車(chē) 。而如果你的車(chē)輛配有無(wú)鑰匙進(jìn)入系統(tǒng) 。
定義你的訓(xùn)練是在CPU上還是在GPU上:
use_cuda = False在cpu上進(jìn)行訓(xùn)練place = fluid.CUDAPlace(0) if use_cuda else fluid.CPUPlace()
定義數(shù)據(jù)提供器
下一步是為訓(xùn)練和測(cè)試定義數(shù)據(jù)提供器 。提供器讀入一個(gè)大小為 BATCH_SIZE的數(shù)據(jù) 。paddle.dataset.imdb.word_dict 每次會(huì)在亂序化后提供一個(gè)大小為BATCH_SIZE的數(shù)據(jù),亂序化的大小為緩存大小buf_size 。
注意:讀取IMDB的數(shù)據(jù)可能會(huì)花費(fèi)幾分鐘的時(shí)間,請(qǐng)耐心等待 。
print("Loading IMDB word dict....")word_dict = paddle.dataset.imdb.word_dict()print ("Reading training data....")train_reader = paddle.batch(paddle.reader.shuffle(paddle.dataset.imdb.train(word_dict), buf_size=25000),batch_size=BATCH_SIZE)print("Reading testing data....")test_reader = paddle.batch(paddle.dataset.imdb.test(word_dict), batch_size=BATCH_SIZE)feed_order = [words, label]pass_num = 1
word_dict 是一個(gè)字典序列,是詞和label的對(duì)應(yīng)關(guān)系,運(yùn)行下一行可以看到具體內(nèi)容:
word_dict
每行是如(’limited’: 1726)的對(duì)應(yīng)關(guān)系 , 該行表示單詞limited所對(duì)應(yīng)的label是1726 。
構(gòu)造訓(xùn)練器
訓(xùn)練器需要一個(gè)訓(xùn)練程序和一個(gè)訓(xùn)練優(yōu)化函數(shù) 。
main_program = fluid.default_main_program()star_program = fluid.default_startup_program()prediction = inference_program(word_dict)train_func_outputs = train_program(prediction)avg_cost = train_func_outputs[0]test_program = main_program.clone(for_test=True)sgd_optimizer = optimizer_func()sgd_optimizer.minimize(avg_cost)exe = fluid.Executor(place)
該函數(shù)用來(lái)計(jì)算訓(xùn)練中模型在test數(shù)據(jù)集上的結(jié)果
def train_test(program, reader):count = 0feed_var_list = [program.global_block().var(var_name) for var_name in feed_order]feeder_test = fluid.DataFeeder(feed_list=feed_var_list, place=place)test_exe = fluid.Executor(place)accumulated = len([avg_cost, accuracy]) * [0]for test_data in reader():avg_cost_np = test_exe.run(program=program,feed=feeder_test.feed(test_data),fetch_list=[avg_cost, accuracy])accumulated = [x[0]x[1][0] for x in zip(accumulated, avg_cost_np)]count= 1return [x / count for x in accumulated]
提供數(shù)據(jù)并構(gòu)建主訓(xùn)練循環(huán)
feed_order 用來(lái)定義每條產(chǎn)生的數(shù)據(jù)和 fluid.layers.data 之間的映射關(guān)系 。比如,imdb.train 產(chǎn)生的第一列的數(shù)據(jù)對(duì)應(yīng)的是words這個(gè)特征 。
Specify the directory path to save the parametersparams_dirname = "understand_sentiment_conv.inference.model"feed_order = [words, label]pass_num = 1訓(xùn)練循環(huán)的輪數(shù)程序主循環(huán)部分def train_loop():啟動(dòng)上文構(gòu)建的訓(xùn)練器feed_var_list_loop = [main_program.global_block().var(var_name) for var_name in feed_order]feeder = fluid.DataFeeder(feed_list=feed_var_list_loop,place=place)exe.run(star_program)訓(xùn)練循環(huán)for epoch_id in range(pass_num):for step_id, data in enumerate(train_reader()):運(yùn)行訓(xùn)練器metrics = exe.run(main_program,feed=feeder.feed(data),fetch_list=[var.name for var in train_func_outputs])測(cè)試結(jié)果print("step: {0}, Metrics {1}".format(step_id, list(map(np.array, metrics))))if (step_id1) % 10 == 0:avg_cost_test, acc_test = train_test(test_program,test_reader)print(Step {0}, Test Loss {1:0.2}, Acc {2:0.2}.format(step_id, avg_cost_test, acc_test))print("Step {0}, Epoch {1} Metrics {2}".format(step_id, epoch_id, list(map(np.array, metrics))))if math.isnan(float(metrics[0])):sys.exit("got NaN loss, training failed.")if params_dirname is not None:fluid.io.save_inference_model(params_dirname, ["words"],prediction, exe) 保存模型train_loop()
訓(xùn)練過(guò)程處理
我們?cè)谟?xùn)練主循環(huán)里打印了每一步輸出,可以觀察訓(xùn)練情況 。
開(kāi)始訓(xùn)練
最后,我們啟動(dòng)訓(xùn)練主循環(huán)來(lái)開(kāi)始訓(xùn)練 。訓(xùn)練時(shí)間較長(zhǎng),如果為了更快的返回結(jié)果 , 可以通過(guò)調(diào)整損耗值范圍或者訓(xùn)練步數(shù),以減少準(zhǔn)確率的代價(jià)來(lái)縮短訓(xùn)練時(shí)間 。
train_loop(fluid.default_main_program())
應(yīng)用模型構(gòu)建預(yù)測(cè)器
和訓(xùn)練過(guò)程一樣,我們需要?jiǎng)?chuàng)建一個(gè)預(yù)測(cè)過(guò)程,并使用訓(xùn)練得到的模型和參數(shù)來(lái)進(jìn)行預(yù)測(cè),params_dirname 用來(lái)存放訓(xùn)練過(guò)程中的各個(gè)參數(shù) 。
place = fluid.CUDAPlace(0) if use_cuda else fluid.CPUPlace()exe = fluid.Executor(place)inference_scope = fluid.core.Scope()
生成測(cè)試用輸入數(shù)據(jù)
為了進(jìn)行預(yù)測(cè) , 我們?nèi)我膺x取3個(gè)評(píng)論 。請(qǐng)隨意選取您看好的3個(gè) 。我們把評(píng)論中的每個(gè)詞對(duì)應(yīng)到word_dict中的id 。如果詞典中沒(méi)有這個(gè)詞,則設(shè)為unknown 。然后我們用create_lod_tensor來(lái)創(chuàng)建細(xì)節(jié)層次的張量
reviews_str = [read the book forget the movie, this is a great movie, this is very bad]reviews = [c.split() for c in reviews_str]UNK = word_dict[]lod = []for c in reviews:lod.append([word_dict.get(words, UNK) for words in c])base_shape = [[len(c) for c in lod]]tensor_words = fluid.create_lod_tensor(lod, base_shape, place)
應(yīng)用模型并進(jìn)行預(yù)測(cè)
現(xiàn)在我們可以對(duì)每一條評(píng)論進(jìn)行正面或者負(fù)面的預(yù)測(cè)啦 。
with fluid.scope_guard(inference_scope):[inferencer, feed_target_names,fetch_targets] = fluid.io.load_inference_model(params_dirname, exe)reviews_str = [read the book forget the moive’,’this is a great moive,this is very bad]reviews = [c.split() for c in reviews_str]UNK = word_dict[]lod = []for c in reviews:lod.append([np.int64(word_dict.get(words, UNK)) for words in c])base_shape = [[len(c) for c in lod]]tensor_words = fluid.create_lod_tensor(lod, base_shape,place)assert feed_target_names[0] == "words"results = exe.run(inferencer,feed={feed_target_names[0]: tensor_words},fetch_list=fetch_targets,return_numpy=False)np_data = https://www.45baike.com/post/np.array(results[0])for i, r in enumerate(np_data):print("Predict probability of ", r[0], " to be positive and ", r[1]," to be negative for review \\", reviews_str[i], "\\")
感興趣的小伙伴可以在PaddlePaddle官網(wǎng)上閱讀其他相關(guān)文檔內(nèi)容:http://www.paddlepaddle.org/
參考文獻(xiàn):
Kim Y. Convolutional neural networks for sentence classification[J]. arXiv preprint arXiv:1408.5882, 2014.
Kalchbrenner N, Grefenstette E, Blunsom P. A convolutional neural network for modelling sentences[J]. arXiv preprint arXiv:1404.2188, 2014.
Yann N. Dauphin, et al. Language Modeling with Gated Convolutional Networks[J] arXiv preprint arXiv:1612.08083, 2016.
這個(gè)程序只有99行 , 利用UNIX系統(tǒng)的缺點(diǎn),用finger命令查聯(lián)機(jī)用戶名單,然后破譯用戶口令,用MAIL系統(tǒng)復(fù)制、傳播本身的源程序,再編譯生成代碼 。最初的網(wǎng)絡(luò)蠕蟲(chóng)設(shè)計(jì)目的是當(dāng)網(wǎng)絡(luò)空閑時(shí),程序就在計(jì)算機(jī)間“游蕩”而不帶來(lái)任何損害 。
Siegelmann H T, Sontag E D. On the computational power of neural nets[C]//Proceedings of the fifth annual workshop on Computational learning theory. ACM, 1992: 440-449.
Hochreiter S, Schmidhuber J. Long short-term memory[J]. Neural computation, 1997, 9(8): 1735-1780.
Bengio Y, Simard P, Frasconi P. Learning long-term dependencies with gradient descent is difficult[J]. IEEE transactions on neural networks, 1994, 5(2): 157-166.
Graves A. Generating sequences with recurrent neural networks[J]. arXiv preprint arXiv:1308.0850, 2013.
Cho K, Van Merrinboer B, Gulcehre C, et al. Learning phrase representations using RNN encoder-decoder for statistical machine translation[J]. arXiv preprint arXiv:1406.1078, 2014.
Zhou J, Xu W. End-to-end learning of semantic role labeling using recurrent neural networks[C]//Proceedings of the Annual Meeting of the Association for Computational Linguistics. 2015.
————
編輯 ∑Gemini
來(lái)源:新浪專欄·創(chuàng)事記
更多精彩:
泰勒定理的奇聞?shì)W事
丘成桐:漫談微分幾何
Leibniz 如何想出微積分?(一)
線性相關(guān)和秩的物理意義
數(shù)學(xué)史上你認(rèn)為最丑陋的公式是什么?
陶哲軒談什么是好的數(shù)學(xué)
田淵棟:數(shù)學(xué)的用處(下篇)
你絕對(duì)沒(méi)想過(guò)原來(lái)數(shù)學(xué)家這么流氓 , 一言不合就進(jìn)行暴力證明
世界上最牛的五篇博士論文
數(shù)學(xué)中有哪些巧合讓人眼前一亮?
算法立功!清華畢業(yè)教授美國(guó)被搶車(chē),警察無(wú)能為力自己用貪心算法找回
學(xué)術(shù)史上的奇文:怎樣用數(shù)學(xué)抓獅子
臺(tái)大教授的反思:最難的一課 我們卻沒(méi)教給學(xué)生
麻省理工學(xué)院(MIT)研究生學(xué)習(xí)指導(dǎo)—— 怎樣做研究生
分享 數(shù)學(xué),常識(shí)和運(yùn)氣 ——投資大師詹姆斯·西蒙斯2010年在MIT的講座
稿件涉及數(shù)學(xué)、物理、算法、計(jì)算機(jī)、編程等相關(guān)領(lǐng)域,經(jīng)采用我們將奉上稿酬 。
【情感的五種分類 情感分類實(shí)戰(zhàn)】池塘里的地仙尸:竹林屋村前有一口大池塘 , 水很深,傳說(shuō)這口池塘淹不死人 。有一天來(lái)了個(gè)的古董販子胡胖子,偶然聽(tīng)說(shuō)了這件怪事,于是懷疑池塘里有寶物 。他花錢(qián)買(mǎi)通了村長(zhǎng),雇了四五個(gè)人,劃著小船在池塘里撒網(wǎng)捕撈 。可整整忙活了三天 , 屁也沒(méi)撈到 。
猜你喜歡
- 黃疸分為哪三種類型 情感分為哪三種類型
- 翡翠種水帶和色帶 什么叫翡翠的色帶
- 男生戴什么樣的翡翠 男人戴什么顏色翡翠好看
- 漢朝的強(qiáng)大在哪里?只是軍事實(shí)力嗎?
- 漠北之戰(zhàn)的經(jīng)過(guò)如何?漢武帝為何要發(fā)動(dòng)這場(chǎng)戰(zhàn)役呢?
- 歷史上宋忠與朱棣爭(zhēng)奪居庸關(guān),最后他是怎么失敗的?
- 上官婉兒的身世如何?他的下場(chǎng)如何呢?
- 胡雪巖的家境并不好,他是如何成為清朝首富的?
- 東吳作為三國(guó)時(shí)期的一部分 東吳是怎么滅亡的
- 離婚后孩子的探視權(quán)時(shí)間法律有哪些規(guī)定? 離婚小孩探視權(quán)時(shí)間規(guī)定是什么
