日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 人工智能 > ChatGpt >内容正文

ChatGpt

PaddlePaddle文本卷积实现情感分类和微博女友情绪监控AI

發(fā)布時(shí)間:2025/3/15 ChatGpt 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PaddlePaddle文本卷积实现情感分类和微博女友情绪监控AI 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

本期文章我們將使用文本卷積和StackLSTM層來實(shí)現(xiàn)一個(gè)情感分類網(wǎng)絡(luò),這樣你就可以擁有一個(gè)屬于自己的情感監(jiān)控AI啦,甚至通過微博的接口來監(jiān)控你女朋友的情緒。而要實(shí)現(xiàn)這一切,你不需要?jiǎng)e的什么東西,你只需要一個(gè)微博認(rèn)證開發(fā)者賬號(hào),以及你女朋友的微博ID,當(dāng)然還有我們牛逼的PaddlePaddle深度學(xué)習(xí)開發(fā)神器。噢,對(duì)了,我差點(diǎn)忘記了,首先你要有個(gè)女朋友。。。什么?你沒有?去淘寶買個(gè)二手充氣的吧。。。

開個(gè)玩笑,其實(shí)沒有女朋友也沒有關(guān)系啦,你可以用這個(gè)AI來監(jiān)控任何你想監(jiān)控的任何一個(gè)人。長(zhǎng)久以來,人們都希望自己有一個(gè)人工智能,我是說,真正的人工智能,可以自動(dòng)判別人類情感,并且將判別結(jié)果告知主人,這樣我們就可以從繁瑣的刷微博、看朋友圈等浪費(fèi)時(shí)間的卻又有時(shí)候不得不做的事情中解放出來。設(shè)想有一個(gè)人工智能可以監(jiān)控你喜歡的人的微博,甚至監(jiān)控你的朋友圈,當(dāng)TA發(fā)一些比較消極的消息時(shí),能被我們的智能AI探測(cè)到,然后AI會(huì)通過郵箱或者短信等手段通知你,你收到之后便可能第一時(shí)間給予TA一個(gè)深情的安慰…繼而發(fā)展出一段曠世戀情…聽起來非常不錯(cuò)吧?而這個(gè)東西就是我們本文要實(shí)現(xiàn)的東西。

0. 準(zhǔn)備工作

啊,在開始之前,我們來捋一捋我們的思路,這將是一個(gè)不大卻略顯復(fù)雜的項(xiàng)目。

  • 我們將需要一個(gè)微博賬號(hào),這個(gè)微博賬號(hào)要能申請(qǐng)到微博接口,并且訪問它;
  • 我們需要一個(gè)超強(qiáng)的情感分類數(shù)據(jù)集,畢竟我們是在搞AI,脫離數(shù)據(jù)都是扯淡;
  • 我們需要用到PaddlePaddle,這在之前我們提到過,它在構(gòu)建情感分類上有著得天獨(dú)厚的優(yōu)勢(shì),如果你還沒有入門,那么請(qǐng)看看我之前寫的入門博客,將PaddlePaddle當(dāng)做一個(gè)輕量級(jí)框架來用確實(shí)是個(gè)不錯(cuò)的主意。

哇,咋一看需要的東西真多,別急讓我們一步一步來,我們將會(huì)把一些準(zhǔn)備工作簡(jiǎn)單的介紹,但是主要的工作還是在,構(gòu)建一個(gè)情感分類AI。首先當(dāng)然我們既然要做一個(gè)微博情感監(jiān)控,那么我們肯定要讓AI能夠access到微博的數(shù)據(jù)。所以說你要有個(gè)微博賬號(hào)啦,沒有的話申請(qǐng)一個(gè)。如果你想進(jìn)一步看到我每天更新的博客文章,也可以來關(guān)注關(guān)注我啊,強(qiáng)行收粉,傳送門.

1. 微博開發(fā)者認(rèn)證及應(yīng)用創(chuàng)建

好吧,有句話怎么說來著,不會(huì)后臺(tái)開發(fā)的深度學(xué)習(xí)工程師不是好設(shè)計(jì)師….既然我們踏上了一條通往人工智能的不歸路那就得下定決心踩著坑了。說起微博開發(fā)者認(rèn)證,你可能需要準(zhǔn)備,你的身份證照片等信息。從這里進(jìn)入開始開發(fā)者認(rèn)證開發(fā)者認(rèn)證連接. 在本文中就不詳細(xì)說明如何去認(rèn)證了。一旦認(rèn)證完了微博開發(fā)者,接下來就來創(chuàng)建一個(gè)移動(dòng)應(yīng)用。當(dāng)然我們這里創(chuàng)建的移動(dòng)應(yīng)用并不是真正的移動(dòng)應(yīng)用,而是一個(gè)獲取API接口的機(jī)會(huì)。從微博開放平臺(tái)進(jìn)入微連接,接入移動(dòng)應(yīng)用,這個(gè)時(shí)候會(huì)需要?jiǎng)?chuàng)建一個(gè)全新的應(yīng)用。應(yīng)用名稱就隨便填一個(gè)吧,應(yīng)用平臺(tái)選擇其他,因?yàn)槲覀冎灰鲆粋€(gè)Python后臺(tái)程序,所以也不需要用到什么Android或者iOS SDK,當(dāng)然啦,你要?jiǎng)?chuàng)建一個(gè)應(yīng)用需要這么一些前提:

  • 你要有一個(gè)應(yīng)用,其實(shí)為此你不必要搭建一個(gè)網(wǎng)站,可以直接用我的應(yīng)用網(wǎng)址:www.luoli-luoli.com;
  • 你需要給你的應(yīng)用取一個(gè)名字,這個(gè)就隨便取啦,只要和已有的不重復(fù)即可,然后你可能還需要為你的應(yīng)用設(shè)置一個(gè)logo,這個(gè)就看個(gè)人PS水平了。

這是我申請(qǐng)時(shí)候用的app:

如果你好奇為什么叫蘿莉蘿莉這個(gè)名字,是因?yàn)槲业腁PP名字叫做蘿莉蘿莉…

好啦,相信你已經(jīng)開始操作,操作完之后,你可能需要把這篇文章放入readlist,一天之后再來繼續(xù)看吧…因?yàn)槲⒉?yīng)用審核需要一天。

2. 開始構(gòu)建情感分類深度學(xué)習(xí)模型

我們是一個(gè)數(shù)據(jù)工作者,數(shù)據(jù)工作者的事情時(shí)候需要去自己尋找數(shù)據(jù)。我們已經(jīng)有了一個(gè)大膽的 設(shè)想,做一個(gè)人工智能來監(jiān)控女朋友的反常情感。那么我們肯定需要一些標(biāo)注的數(shù)據(jù)集來訓(xùn)練我們的模型,以此來實(shí)現(xiàn)一個(gè)可以判別情感的AI。在開始搜尋數(shù)據(jù)之前,讓我們來大膽的設(shè)想一下,加入我們把情感值分為兩類,Positive 和 Negative,可能情況會(huì)變得簡(jiǎn)單一些,這個(gè)時(shí)候,情感分類的任務(wù)就變成了一個(gè)二分類問題,我們有時(shí)候只需要知道女朋友是開心還是傷心,或者說是中性,而對(duì)于其他的情感,我們目前可能不是非常關(guān)心。因此,我們將目標(biāo)鎖定在中文情感分類數(shù)據(jù)集,我們暫且不去考慮分級(jí)過多的情感數(shù)據(jù)集,先從最簡(jiǎn)單的開始。

讓我們來分析一下,要構(gòu)建一個(gè)情感分類模型,初步來想有兩種方法:

  • 第一種構(gòu)建一個(gè)正面詞匯詞庫(kù),和一個(gè)反面詞匯詞庫(kù),這樣每次來一個(gè)新的句子的時(shí)候我們可以判斷是正面詞匯多呢,還是反面詞匯多,從而來決定一個(gè)句子是反面還是正面,盡管這種方法簡(jiǎn)單易行,但是在遇到比如這樣的句子時(shí):?你他媽今天還真的把我當(dāng)紙老虎了是不??那么這句話中,他媽實(shí)際上是一個(gè)消極詞匯,但是卻不能歸到消極詞匯中,因?yàn)樗部赡苁且粋€(gè)中性詞匯;
  • 第二種當(dāng)然是使用深度學(xué)習(xí)的方法啦,深度學(xué)習(xí)構(gòu)建出來的復(fù)雜模型,不僅僅可以根據(jù)標(biāo)簽來判定哪些詞匯是正面的,哪些詞匯是負(fù)面的,同時(shí)也能夠?qū)W習(xí)到不同詞語(yǔ)在不同語(yǔ)境下所表現(xiàn)出來的消極以及正面性。

在本篇文章中,我們將使用一個(gè)stacked LSTM模型和一個(gè)文本卷積模型來實(shí)現(xiàn)情感的分類,為了簡(jiǎn)化操作,我們將使用一個(gè)英文的電影評(píng)價(jià)數(shù)據(jù)集,用這個(gè)來做一個(gè)簡(jiǎn)易的英文情感分類器,我們將使用PaddlePaddle訓(xùn)練一個(gè)模型來對(duì)句子進(jìn)行精準(zhǔn)的分類。當(dāng)然啦,如果大家希望把這個(gè)轉(zhuǎn)移到中文上,我在這里也提供一些中文方面的語(yǔ)料給大家,中國(guó)計(jì)算機(jī)中文信息技術(shù)會(huì)議的一個(gè)微博情感分類標(biāo)注數(shù)據(jù)集,該數(shù)據(jù)集包含了20個(gè)話題,其中每個(gè)話題有正負(fù)兩種情感的評(píng)論總共約2000余條,下載地址?(百度網(wǎng)盤)在此。這個(gè)數(shù)據(jù)集中,每個(gè)話題的評(píng)論在一個(gè)xml文件中,xml中包含句子和詞性標(biāo)注。

而Imdb數(shù)據(jù)集非常小巧,我們將在PaddlePaddle的代碼中直接實(shí)現(xiàn)下載,無需手動(dòng)下載。

3. PaddlePaddle構(gòu)建情感分類器 - 文本處理

如果之前對(duì)PaddlePaddle沒有什么了解,那么可以參照我之前寫的文章,與其他框架的對(duì)比,傳送門,簡(jiǎn)而言之,我們之所以使用PaddlePaddle來構(gòu)建這么一個(gè)應(yīng)用是基于它的這么一些優(yōu)點(diǎn):

  • 快速實(shí)現(xiàn)和部署,為什么我說快速,PaddlePaddle有著其他國(guó)外框架無法比擬的優(yōu)勢(shì),那就是健全的中文文檔,包括像我寫的這么一些非官方的文檔,對(duì)于新手搭建網(wǎng)絡(luò)來說非常的輕而易舉;
  • 輕量級(jí),我認(rèn)為PaddlePaddle相對(duì)于其他的框架來說,輕量是它的一個(gè)非常好的優(yōu)點(diǎn),它沒有TensorFlow那么笨重,除此之外我甚至認(rèn)為MXNet在輕量級(jí)上沒有它好。原因很簡(jiǎn)單,從安裝到構(gòu)建網(wǎng)絡(luò)到訓(xùn)練我可以在一個(gè)腳本文件中完成整個(gè)Pipeline。

好啦,閑話不多說,讓我們先用PaddlePaddle來玩一些Playground的東西。在PaddlePaddle里面其實(shí)是內(nèi)置了一些數(shù)據(jù)的,當(dāng)然啦,這些數(shù)據(jù)會(huì)自動(dòng)通過網(wǎng)絡(luò)下載,但是我們可以直接導(dǎo)入它,從而可以知道PaddlePaddle喂入數(shù)據(jù)的格式到底是什么,閑話不多說,直接上代碼:

from __future__ import print_functionimport sysimport paddle.v2 as paddlefrom __future__ import print_functionimport sysimport paddle.v2 as paddleimport sysimport osimport jsonimport nltkif __name__ == '__main__':# initpaddle.init(use_gpu=False) print('load dictionary...')word_dict = paddle.dataset.imdb.word_dict() print(word_dict)

簡(jiǎn)單吧,一切就是如此的簡(jiǎn)潔,大家可以看到打印出來的word dict其實(shí)就是一個(gè)詞袋,后面的數(shù)字表示的是這個(gè)詞的id,為什么要這么處理?這就是涉及到文本處理領(lǐng)域基本的東西了-word bag,詞袋法。我們知道一個(gè)神經(jīng)網(wǎng)絡(luò)模型,不管它多復(fù)雜,它的輸入其實(shí)都是數(shù)字向量,那么文本怎么變成數(shù)字向量輸入到網(wǎng)絡(luò)里面去呢?我們知道圖片輸入到網(wǎng)絡(luò)好理解,因?yàn)閳D片本身就是一個(gè)個(gè)的像素點(diǎn)啊。那文本要輸入網(wǎng)絡(luò)其實(shí)也非常簡(jiǎn)單,只需要把文字映射成為一個(gè)int ID就可以了。至于怎么映射,直接對(duì)所有詞匯取一個(gè)詞袋,給它一個(gè)ID即可。

毫無疑問,如果大家要構(gòu)建中文的情感分類器,那原理也是一樣的,只不過是對(duì)中文語(yǔ)料的進(jìn)行一個(gè)詞袋和ID映射的處理。

4. PaddlePaddle構(gòu)建情感分類器 - 網(wǎng)絡(luò)構(gòu)建

其實(shí)情感分類也是一個(gè)分類任務(wù),和圖片分類是一樣,而且情感分類是一個(gè)非常簡(jiǎn)單的二分類問題。大家如果有想法的話可以發(fā)散為三分類四分類問題,那么對(duì)應(yīng)的就是不同的情感等級(jí)。我們做一個(gè)簡(jiǎn)易教程,當(dāng)然無法做到非常深入,但是萬變不離其宗,非常期待大家繼續(xù)跟我一起關(guān)注PaddlePaddle的后續(xù)發(fā)展動(dòng)態(tài),我會(huì)在PaddlePaddle更新API之后不斷地維護(hù)這些代碼以及創(chuàng)造更多的教程來教大家怎么把這個(gè)框架用起來。閑話不多說,我們首先思考一下兩個(gè)問題:

  • 圖片分類網(wǎng)絡(luò)是怎么構(gòu)建的?
  • 圖片分類的網(wǎng)絡(luò)可以用來分類文本嗎?

首先我們知道圖片分類用CNN分,那么CNN其實(shí)它的要求是一個(gè)二維的矩陣,文本也和圖片是一樣的,但是文本通過ID轉(zhuǎn)換之后得到的實(shí)際上是一個(gè)一維的向量,因?yàn)橹挥幸痪湓挕K栽谶@里有一個(gè)東西不得不傳授給大家,那就是embedding,這個(gè)embedding你可以理解為嵌入,為什么要嵌入,什么是嵌入?這個(gè)其實(shí)不難理解,意思就是你事先有一個(gè)矩陣,這個(gè)矩陣的每一個(gè)元素是一個(gè)隨機(jī)分布里面取的值,然后你在一個(gè)句子中的每一個(gè)ID,都映射到這個(gè)矩陣當(dāng)中來,從而得到一個(gè)二維的矩陣,達(dá)到次嵌入的目的,一般情況下,詞嵌入是一個(gè)比較復(fù)雜的東西,如果把這個(gè)東西加入到網(wǎng)絡(luò)一起訓(xùn)練的話,你甚至可以做你的word2vec模型了,好在PaddlePaddle已經(jīng)幫我們處理好了這些問題,我們可以直接調(diào)用PaddlePaddle里面的embed層來把一維的句子,轉(zhuǎn)成CNN需要的二維。

在轉(zhuǎn)換之前,我們需要看一下Imdb的數(shù)據(jù)是怎么讀取的:

def reader_creator(pos_pattern, neg_pattern, word_idx, buffer_size): # this unk is a tokenUNK = word_idx['<unk>'] # start a quen to using multi-processqs = [Queue.Queue(maxsize=buffer_size), Queue.Queue(maxsize=buffer_size)] def load(pattern, queue): for doc in tokenize(pattern):queue.put(doc)queue.put(None) def reader(): # Creates two threads that loads positive and negative samples # into qs.t0 = threading.Thread(target=load, args=(pos_pattern,qs[0], ))t0.daemon = Truet0.start()t1 = threading.Thread(target=load, args=(neg_pattern,qs[1], ))t1.daemon = Truet1.start() # Read alternatively from qs[0] and qs[1].i = 0doc = qs[i].get() while doc != None: yield [word_idx.get(w, UNK) for w in doc], i % 2i += 1doc = qs[i % 2].get() # If any queue is empty, reads from the other queue.i += 1doc = qs[i % 2].get() while doc != None: yield [word_idx.get(w, UNK) for w in doc], i % 2doc = qs[i % 2].get() return reader()

這個(gè)方法其實(shí)已經(jīng)內(nèi)置在Paddle中,我們不需要寫它,但是為了讓大家能夠理解,我把它單獨(dú)拿出來講解一下,這個(gè)函數(shù)執(zhí)行的操作其實(shí)非常簡(jiǎn)單,那就是根據(jù)上面所得到的word dict,把文本的每一個(gè)句子轉(zhuǎn)換成一維的數(shù)字向量。由于Imdb里面是一句正情緒,一句負(fù)情緒,所以或有一個(gè) %2的操作。

好了,接下來重點(diǎn)來了,我們要用PaddlePaddle構(gòu)建我們的模型了,我之前提到了這個(gè)embed層,我們直接embed之后,接一個(gè)CNN來構(gòu)建一個(gè)簡(jiǎn)單的文本卷積分類網(wǎng)絡(luò):

def convolution_net(input_dim, class_dim=2, emb_dim=128, hid_dim=128): # we are starting with a embed layer data = paddle.layer.data("word",paddle.data_type.integer_value_sequence(input_dim)) emb = paddle.layer.embedding(input=data, size=emb_dim) # this convolution is a sequence convolution conv_3 = paddle.networks.sequence_conv_pool( input=emb, context_len=3, hidden_size=hid_dim) conv_4 = paddle.networks.sequence_conv_pool( input=emb, context_len=4, hidden_size=hid_dim) output = paddle.layer.fc( input=[conv_3, conv_4], size=class_dim, act=paddle.activation.Softmax()) lbl = paddle.layer.data("label", paddle.data_type.integer_value(2)) cost = paddle.layer.classification_cost(input=output, label=lbl)return cost, output

可以說,這個(gè)網(wǎng)絡(luò)簡(jiǎn)直到令人想哭,但是它并不是“簡(jiǎn)單”,這里面有一個(gè)詞嵌入操作,緊接著是兩個(gè)卷積層,注意這里的卷基層并非是圖片卷積,而是文本序列卷積,這個(gè)應(yīng)該是PaddlePaddle中特有的一個(gè)特殊層,百度在文本序列和語(yǔ)音序列處理上還是有一套,等一下大家會(huì)看到,這么一個(gè)簡(jiǎn)單的模型可以在僅僅6個(gè)epoch就達(dá)到99.99%的精確度。embed的size是128,隱藏層神經(jīng)元個(gè)數(shù)是128。大家其實(shí)完全不用關(guān)系這些網(wǎng)絡(luò)是怎么連接的,我們把訓(xùn)練的代碼寫貼上來:

from __future__ import print_functionimport sysimport paddle.v2 as paddleimport sysimport osimport jsonimport nltkdef convolution_net(input_dim, class_dim=2, emb_dim=128, hid_dim=128): data = paddle.layer.data("word",paddle.data_type.integer_value_sequence(input_dim)) emb = paddle.layer.embedding(input=data, size=emb_dim) conv_3 = paddle.networks.sequence_conv_pool( input=emb, context_len=3, hidden_size=hid_dim) conv_4 = paddle.networks.sequence_conv_pool( input=emb, context_len=4, hidden_size=hid_dim) output = paddle.layer.fc( input=[conv_3, conv_4], size=class_dim, act=paddle.activation.Softmax()) lbl = paddle.layer.data("label", paddle.data_type.integer_value(2)) cost = paddle.layer.classification_cost(input=output, label=lbl)return cost, output if __name__ == '__main__': # initpaddle.init(use_gpu=False) # those lines are get the codeprint('load dictionary...') word_dict = paddle.dataset.imdb.word_dict()print(word_dict) dict_dim = len(word_dict) class_dim = 2 train_reader = paddle.batch(paddle.reader.shuffle(lambda: paddle.dataset.imdb.train(word_dict), buf_size=1000), batch_size=100) test_reader = paddle.batch(lambda: paddle.dataset.imdb.test(word_dict), batch_size=100) feeding = {'word': 0, 'label': 1} # get the output of the model[cost, output] = convolution_net(dict_dim, class_dim=class_dim) parameters = paddle.parameters.create(cost) adam_optimizer = paddle.optimizer.Adam( learning_rate=2e-3, regularization=paddle.optimizer.L2Regularization(rate=8e-4), model_average=paddle.optimizer.ModelAverage(average_window=0.5)) trainer = paddle.trainer.SGD( cost=cost, parameters=parameters, update_equation=adam_optimizer)def event_handler(event): if isinstance(event, paddle.event.EndIteration): if event.batch_id % 100 == 0:print("\nPass %d, Batch %d, Cost %f, %s" % (event.pass_id, event.batch_id, event.cost, event.metrics)) else:sys.stdout.write('.')sys.stdout.flush() if isinstance(event, paddle.event.EndPass): with open('./params_pass_%d.tar' % event.pass_id, 'w') as f:trainer.save_parameter_to_tar(f) result = trainer.test(reader=test_reader, feeding=feeding)print("\nTest with Pass %d, %s" % (event.pass_id, result.metrics)) inference_topology = paddle.topology.Topology(layers=output) with open("./inference_topology.pkl", 'wb') as f:inference_topology.serialize_for_inference(f)trainer.train( reader=train_reader, event_handler=event_handler, feeding=feeding, num_passes=20)

我們直接來跑起來看一下:

簡(jiǎn)直amazing,2個(gè)epoch之后就達(dá)到了90%的準(zhǔn)確度!!! 非常非常的impressive!!

5. PaddlePaddle構(gòu)建情感分類模型 - 模型部署

好了,到了最最重要的時(shí)刻來了,我們辛辛苦苦訓(xùn)練了兩天兩夜的模型,是時(shí)候看看它的威力了。此時(shí)此刻,你的項(xiàng)目文件夾的目錄最少要跟我一樣:

我現(xiàn)在只有一個(gè)main.py,這里面就是我們訓(xùn)練的腳本。我們有一個(gè)inference_topology.pkl,這個(gè)是我們的網(wǎng)絡(luò)模型保存的二進(jìn)制文件。大家注意了,這是我見過的最清晰的網(wǎng)絡(luò)保存和權(quán)重保存方式!!沒有之一!!PaddlePaddle的網(wǎng)絡(luò)模型保存在了pkl,權(quán)重是一個(gè)tar的壓縮文件!!!。這個(gè)比TensorFlow或者M(jìn)XNet要人性化很多!!MXNet jb的根本不知道保存到哪里去了, TensorFlow還得手動(dòng)寫一個(gè)腳本來frozen一個(gè)模型,PaddlePaddle一步到位,非常牛逼!!

為了讓大家體驗(yàn)一下預(yù)測(cè)的快感,我直接把代碼貼出來了:

# -*- coding: utf-8 -*-# file: predict.py# author: JinTian# time: 16/11/2017 8:17 PM# Copyright 2017 JinTian. All Rights Reserved.## Licensed under the Apache License, Version 2.0 (the "License");# you may not use this file except in compliance with the License.# You may obtain a copy of the License at## http://www.apache.org/licenses/LICENSE-2.0## Unless required by applicable law or agreed to in writing, software# distributed under the License is distributed on an "AS IS" BASIS,# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.# See the License for the specific language governing permissions and# limitations under the License.# ------------------------------------------------------------------------import numpy as npimport sysimport paddle.v2 as paddlefrom __future__ import print_functionimport sysimport osimport jsonimport nltkdef convolution_net(input_dim, class_dim=2, emb_dim=128, hid_dim=128, is_predict=False): data = paddle.layer.data("word",paddle.data_type.integer_value_sequence(input_dim)) emb = paddle.layer.embedding(input=data, size=emb_dim) conv_3 = paddle.networks.sequence_conv_pool( input=emb, context_len=3, hidden_size=hid_dim) conv_4 = paddle.networks.sequence_conv_pool( input=emb, context_len=4, hidden_size=hid_dim) output = paddle.layer.fc(input=[conv_3, conv_4], size=class_dim, act=paddle.activation.Softmax()) if not is_predict: lbl = paddle.layer.data("label", paddle.data_type.integer_value(2)) cost = paddle.layer.classification_cost(input=output, label=lbl)return cost else:return outputif __name__ == '__main__': # Movie Reviews, from imdb testpaddle.init(use_gpu=False) word_dict = paddle.dataset.imdb.word_dict() dict_dim = len(word_dict) class_dim = 2 reviews = ['Read the book, forget the movie!','This is a great movie.']print(reviews) reviews = [c.split() for c in reviews] UNK = word_dict['<unk>'] input = []for c in reviews:input.append([[word_dict.get(words, UNK) for words in c]]) # 0 stands for positive sample, 1 stands for negative sample label = {0: 'pos', 1: 'neg'} # Use the network used by trainer out = convolution_net(dict_dim, class_dim=class_dim, is_predict=True) parameters = paddle.parameters.create(out)print(parameters) # out = stacked_lstm_net(dict_dim, class_dim=class_dim, stacked_num=3, is_predict=True) probs = paddle.infer(output_layer=out, parameters=parameters, input=input)print('probs:', probs) labs = np.argsort(-probs)print(labs)for idx, lab in enumerate(labs):print(idx, "predicting probability is", probs[idx], "label is", label[lab[0]])

讓我們來看一下預(yù)測(cè)的結(jié)果:

6. 后記

我們已經(jīng)可以用PaddlePaddle構(gòu)建自己的深度學(xué)習(xí)應(yīng)用了!!!這次是情感分類!!這是一個(gè)非常不錯(cuò)的開端,我們已經(jīng)有了自己的預(yù)測(cè)腳本,接下來只需要把我們的預(yù)測(cè)腳本和你的微博應(yīng)用程序結(jié)合起來,當(dāng)檢測(cè)到女友的情緒不穩(wěn)定時(shí),就通過郵件通知你。當(dāng)然這部分工作一直到現(xiàn)在我都沒有通過微博的審核。。。。(無力吐槽微博ing)。不管怎么用,我們不得不再次贊一下百度PaddlePaddle的開發(fā)團(tuán)隊(duì),用PaddlePaddel構(gòu)建模型沒有太多的abstraction,構(gòu)建出來的模型非常簡(jiǎn)單便捷,如果要在深度學(xué)習(xí)和人工智能領(lǐng)域定義一個(gè)敏捷開發(fā)的代表,那么PaddlePaddle非它莫屬啦~~。

7. 擴(kuò)展

實(shí)現(xiàn)情感分類其實(shí)只是PaddlePaddle應(yīng)用的冰山一角,我們可以通過這個(gè)基礎(chǔ)的應(yīng)用來實(shí)現(xiàn)無數(shù)的創(chuàng)意深度學(xué)習(xí)應(yīng)用,就像Android操作系統(tǒng)一樣,雖然底層的API都是一樣但是卻可以在這個(gè)基礎(chǔ)之上建造微信,支付寶,直播APP這樣的功能多樣的應(yīng)用程序。本文雖然給大家展示的是一個(gè)微博情感監(jiān)控,大家也可以把這個(gè)東西應(yīng)用在自己的APP當(dāng)中,比如,根據(jù)用戶發(fā)的評(píng)論來回復(fù)的情感極性來回復(fù)相應(yīng)的話語(yǔ),比如用在自己的聊天機(jī)器人中,使得它更加具有情感性,都是不錯(cuò)的應(yīng)用。如果大家有什么好的想法和創(chuàng)意,也可以在原始博客下面評(píng)論與我互動(dòng),我會(huì)把更好的idea更新在我后面的博客中,期待你的創(chuàng)意!

本期列車到此結(jié)束,如果大家對(duì)本文由任何疑問,歡迎通過微信找到我,也歡迎大家訂閱本文的首發(fā)地址也是永久更新維護(hù)地址:?https://jinfagang.github.io

總結(jié)

以上是生活随笔為你收集整理的PaddlePaddle文本卷积实现情感分类和微博女友情绪监控AI的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。