国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

數(shù)據(jù)代碼分享|Python用NLP自然語言處理LSTM神經(jīng)網(wǎng)絡(luò)Twitter推特災(zāi)難文本數(shù)據(jù)、詞云可

2022-10-09 15:31 作者:拓端tecdat  | 我要投稿

全文鏈接:?http://tecdat.cn/?p=28877

原文出處:拓端數(shù)據(jù)部落公眾號(hào)

?

作者:Yunfan Zhang?

Twitter是一家美國(guó)社交網(wǎng)絡(luò)及微博客服務(wù)的網(wǎng)站,致力于服務(wù)公眾對(duì)話。迄今為止,Twitter的日活躍用戶達(dá)1.86億。與此同時(shí),Twitter也已成為突發(fā)緊急情況時(shí)人們的重要溝通渠道。由于智能手機(jī)無處不在,人們可以隨時(shí)隨地發(fā)布他們正在實(shí)時(shí)觀察的緊急情況。?因此,越來越多的救災(zāi)組織和新聞機(jī)構(gòu)對(duì)通過程序方式監(jiān)視Twitter產(chǎn)生了興趣。但是,我們并不清楚一個(gè)用戶在推特上發(fā)布的推文是否是真實(shí)的正在發(fā)生的災(zāi)難。舉個(gè)例子,用戶發(fā)送了“從正面看昨晚的天空,好像在燃燒一樣。”作者明確使用了“ABLAZE”一詞,但僅僅是為了形容火燒云,并非真正的火焰燃燒。這對(duì)于人類來說是顯而易見的,但是對(duì)于機(jī)器來說便很難分辨該用戶是否正在預(yù)告真實(shí)發(fā)生的火災(zāi)。

解決方案

任務(wù)/目標(biāo)

建立一個(gè)預(yù)測(cè)推文發(fā)布災(zāi)難真實(shí)性的機(jī)器學(xué)習(xí)模型,該模型可以預(yù)測(cè)哪些推文發(fā)布的是真實(shí)發(fā)生的災(zāi)難,哪些是虛假的災(zāi)難,從而為相關(guān)組織網(wǎng)絡(luò)監(jiān)測(cè)災(zāi)難發(fā)生及救援提供幫助。

數(shù)據(jù)源準(zhǔn)備

數(shù)據(jù)集中包含的列:
列名?解釋
id?每條推文的唯一標(biāo)識(shí)符
text?推特的內(nèi)容
location?推文發(fā)送的位置(可以為空白)
keyword?推文中的特定關(guān)鍵字(可以為空白)
target?僅在train.csv中存在,表示推文中描述災(zāi)難的真假,真實(shí)為1,虛假為0

其中,測(cè)試集包含7613個(gè)樣本,訓(xùn)練集包含3263個(gè)樣本。

加載數(shù)據(jù)并查看

運(yùn)用pandas分別讀取訓(xùn)練集,測(cè)試集等。

查看訓(xùn)練集前五行

結(jié)果如下:

查看測(cè)試集前五行

結(jié)果如下:

數(shù)據(jù)可視化

首先,運(yùn)用plotly繪制真實(shí)虛假災(zāi)難數(shù)量對(duì)比的餅圖,該餅圖描述了正例反例在訓(xùn)練樣本中的占比,檢驗(yàn)數(shù)據(jù)平衡性。

  1. counts_train = train.target.value_counts(sort=False)

  2. labels = counts_train.index

  3. values_train = counts_train.values

  4. #輸入餅圖數(shù)據(jù)

  5. data = go.Pie(labels=labels, values=values_train ,pull=[0.03, 0])

運(yùn)行結(jié)果如下:


由餅圖可知,在訓(xùn)練集中,災(zāi)難真實(shí)發(fā)生的樣本(1)共有3271個(gè),占總體的43%,非真實(shí)發(fā)生的樣本(0)有4342個(gè),占總體的57%??傮w來說比例較為均衡,可以進(jìn)行后續(xù)建模。
然后,為了進(jìn)一步了解災(zāi)難推文的大致內(nèi)容,本文利用wordcloud繪制推文的內(nèi)容的詞云。
首先自行將一些網(wǎng)絡(luò)常用詞加入停用詞表。

然后定義繪制詞云圖的函數(shù):

  1. #設(shè)置詞云格式并生成詞云

  2. wordcloud = WordCloud(width = 4000, height = 3000, ? ?#寬高

  3. background_color ='white', ? #背景色

  4. stopwords = stopwords, ? ? ? #停用詞

結(jié)果如下:

數(shù)據(jù)清洗

眾所周知,在進(jìn)行建模之前,我們必須首先進(jìn)行數(shù)據(jù)的預(yù)處理,以便于后續(xù)進(jìn)一步處理。因此,本文將進(jìn)行一些基本的網(wǎng)絡(luò)文本清理工作,例如去除網(wǎng)址,去除網(wǎng)絡(luò)標(biāo)簽,刪除標(biāo)點(diǎn)符號(hào),刪除常用表情符號(hào),拼寫矯正等。
1.?刪除網(wǎng)址

2.?刪除HTML標(biāo)簽

3.?刪除表情符號(hào)
首先,搜索推特中常用的表情符號(hào),查詢他們的代碼點(diǎn)(https://emojipedia.org/relieved-face/),將需要?jiǎng)h除的表情符號(hào)記錄。

5.?拼寫矯正

文本的向量化處理

1.?文本序列化
通過tensorflow自帶的Tokenizer分詞器設(shè)置訓(xùn)練集text中所有詞的索引值,然后將詞映射為其索引值。

然后,查看text中獨(dú)立詞匯的數(shù)量

輸出結(jié)果:Number of unique words: 14666

2.?嵌入GloVe字典
在這里我們將使用GloVe預(yù)訓(xùn)練的語料庫(kù)模型來表示我們的單詞。GloVe模型用于進(jìn)行詞的向量化表示,使得向量之間盡可能多地蘊(yùn)含語義和語法的信息。我們需要輸入語料庫(kù),然后通過該模型輸出詞向量。該方法的原理是首先基于語料庫(kù)構(gòu)建詞的共現(xiàn)矩陣,然后基于共現(xiàn)矩陣和GloVe模型學(xué)習(xí)詞向量。GloVe語料庫(kù)共有3種類型:50D,100D和200 D。在這里我們將使用100D。

3.?匹配GloVe向量

輸出結(jié)果:
100%|██████████| 14666/14666 [00:00<00:00, 599653.57it/s]
(14667, 100)

建立模型

從2014年起,NLP?的主流方法轉(zhuǎn)移到非線性的神經(jīng)網(wǎng)絡(luò)方法,從而輸入也從稀疏高維特征向量變?yōu)榈臀怀砻芴卣飨蛄俊I窠?jīng)網(wǎng)絡(luò)不僅像傳統(tǒng)機(jī)器學(xué)習(xí)方法一樣學(xué)習(xí)預(yù)測(cè),同時(shí)也學(xué)習(xí)如何正確表達(dá)數(shù)據(jù),即在處理輸入輸出對(duì)時(shí),網(wǎng)絡(luò)內(nèi)部產(chǎn)生一系列轉(zhuǎn)化以處理輸入數(shù)據(jù)來預(yù)測(cè)輸出數(shù)據(jù)。
因此,本次建模以神經(jīng)網(wǎng)絡(luò)為基礎(chǔ),設(shè)置了Embedding層,Dropout層,LSTM層,以及全連接層。
1.?定義模型函數(shù)
導(dǎo)入神經(jīng)網(wǎng)絡(luò)相關(guān)庫(kù)后定義模型函數(shù)。

  1. #嵌入層

  2. model.add(Embedding(input_dim=num_words,

  3. output_dim=100,

  4. embeddings_initializer=initializers.Constant

添加Embedding層以初始化GloVe模型訓(xùn)練出的權(quán)重矩陣。input_dim即詞匯量,輸入數(shù)組中的詞典大小是14666,即有14666個(gè)不同的詞,所以我的input_dim便要比14666要大1,output_dim是密集嵌入的尺寸,就如同CNN最后的全連接層一樣,上面設(shè)置的100,便將每一個(gè)詞變?yōu)橛?x100來表示的向量,embeddings_initializer為嵌入矩陣的初始化的方法,為預(yù)定義初始化方法名的字符串,或用于初始化權(quán)重的初始化器。輸入序列的長(zhǎng)度設(shè)置為序列長(zhǎng)度20,將每個(gè)text表示為一個(gè)20×100的矩陣

由于文本數(shù)據(jù)的連續(xù)性,我們添加LSTM層。LSTM是作為短期記憶的解決方案而創(chuàng)建的長(zhǎng)短期記憶模型,和RNN類似,只是當(dāng)詞向量作為輸入進(jìn)入神經(jīng)元后,神經(jīng)元會(huì)按照某種方式對(duì)該詞向量的信息進(jìn)行選擇,存儲(chǔ)成新的信息,輸入到相鄰的隱藏層神經(jīng)元中去。

輸出結(jié)果:


2.?參數(shù)選擇與調(diào)優(yōu)
本文運(yùn)用交叉驗(yàn)證的方法得到驗(yàn)證集精度,并以此為標(biāo)準(zhǔn),使用網(wǎng)格搜索來確定最優(yōu)超參數(shù)。
Scikit-Learn里有一個(gè)API?為model.selection.GridSearchCV,可以將keras搭建的模型傳入,作為sklearn工作流程一部分。因此,我們運(yùn)用此函數(shù)來包裝keras模型以便在scikit-learn中使用keras。

3.?模型訓(xùn)練

輸出結(jié)果:

輸出結(jié)果:

由訓(xùn)練過程可知,驗(yàn)證集準(zhǔn)確率最高的參數(shù)組合為第五次訓(xùn)練時(shí)的參數(shù),batch_size=10 ,epochs=10。
4.?模型評(píng)估

查看最終參數(shù)選擇的結(jié)果和交叉驗(yàn)證的結(jié)果:

輸出結(jié)果:
交叉驗(yàn)證平均準(zhǔn)確率:?0.7921975544580065
最好的參數(shù)模型:?{‘batch_size’: 10, ‘nb_epoch’: 10}

5.?與傳統(tǒng)機(jī)器學(xué)習(xí)模型對(duì)比
將train中訓(xùn)練集數(shù)據(jù)劃分為訓(xùn)練集和驗(yàn)證集,然后對(duì)比其在驗(yàn)證集上的準(zhǔn)確率。

分別使用SVM,KNN,多層感知器,樸素貝葉斯,隨機(jī)森林,GBDT等方法構(gòu)建模型,與神經(jīng)網(wǎng)絡(luò)進(jìn)行對(duì)比。

輸出結(jié)果:
模型1驗(yàn)證集準(zhǔn)確率: 0.6250820748522653
模型2驗(yàn)證集準(zhǔn)確率: 0.5843729481286933
模型3驗(yàn)證集準(zhǔn)確率: 0.5384110308601444
模型4驗(yàn)證集準(zhǔn)確率: 0.4799737360472751
模型5驗(yàn)證集準(zhǔn)確率: 0.6323046618516087
模型6驗(yàn)證集準(zhǔn)確率: 0.6401838476690742

以上模型的驗(yàn)證集準(zhǔn)確率與神經(jīng)網(wǎng)絡(luò)的驗(yàn)證集準(zhǔn)確率相比差別較大,可見本文基于神經(jīng)網(wǎng)絡(luò)的文本預(yù)測(cè)模型是相對(duì)準(zhǔn)確且可靠的。

結(jié)果預(yù)測(cè)

我們繼續(xù)通過上述步驟構(gòu)建的神經(jīng)網(wǎng)絡(luò)模型預(yù)測(cè)test測(cè)試集中的target列。

  1. #預(yù)測(cè)

  2. predictions = grid_result.predict(testing_padded)

  3. submission['target'] = (predictions > 0.5).astype(int)

輸出結(jié)果:

項(xiàng)目結(jié)果

真實(shí)虛假樣本比例接近1:1.

災(zāi)難相關(guān)推文中提到最多的詞匯是fire。

最好的參數(shù)組合是batch_size=10 ,epochs=10。

將測(cè)試集輸入模型得到最終預(yù)測(cè)結(jié)果。

關(guān)于作者


在此對(duì)Yunfan Zhang?對(duì)本文所作的貢獻(xiàn)表示誠(chéng)摯感謝,她專長(zhǎng)機(jī)器學(xué)習(xí),概率論與數(shù)理統(tǒng)計(jì)。

?

最受歡迎的見解

1.R語言實(shí)現(xiàn)CNN(卷積神經(jīng)網(wǎng)絡(luò))模型進(jìn)行回歸

2.r語言實(shí)現(xiàn)擬合神經(jīng)網(wǎng)絡(luò)預(yù)測(cè)和結(jié)果可視化

3.python用遺傳算法-神經(jīng)網(wǎng)絡(luò)-模糊邏輯控制算法對(duì)樂透分析

4.R語言結(jié)合新冠疫情COVID-19股票價(jià)格預(yù)測(cè):ARIMA,KNN和神經(jīng)網(wǎng)絡(luò)時(shí)間序列分析

5.Python TensorFlow循環(huán)神經(jīng)網(wǎng)絡(luò)RNN-LSTM神經(jīng)網(wǎng)絡(luò)預(yù)測(cè)股票市場(chǎng)價(jià)格時(shí)間序列和MSE評(píng)估準(zhǔn)確性

6.Matlab用深度學(xué)習(xí)長(zhǎng)短期記憶(LSTM)神經(jīng)網(wǎng)絡(luò)對(duì)文本數(shù)據(jù)進(jìn)行分類

7.用于NLP的seq2seq模型實(shí)例用Keras實(shí)現(xiàn)神經(jīng)機(jī)器翻譯

8.R語言用FNN-LSTM假近鄰長(zhǎng)短期記憶人工神經(jīng)網(wǎng)絡(luò)模型進(jìn)行時(shí)間序列深度學(xué)習(xí)預(yù)測(cè)

9.Python用RNN循環(huán)神經(jīng)網(wǎng)絡(luò):LSTM長(zhǎng)期記憶、GRU門循環(huán)單元、回歸和ARIMA對(duì)COVID-19新冠疫情新增人數(shù)時(shí)間序列預(yù)測(cè)


數(shù)據(jù)代碼分享|Python用NLP自然語言處理LSTM神經(jīng)網(wǎng)絡(luò)Twitter推特災(zāi)難文本數(shù)據(jù)、詞云可的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
洞头县| 塘沽区| 栖霞市| 酉阳| 同仁县| 嘉黎县| 思南县| 宁化县| 阜康市| 报价| 大余县| 石门县| 普格县| 青铜峡市| 沙河市| 堆龙德庆县| 凤翔县| 商水县| 大港区| 兰西县| 米泉市| 耿马| 漳州市| 于田县| 桐乡市| 舟曲县| 吉安市| 醴陵市| 吐鲁番市| 章丘市| 墨江| 都昌县| 郑州市| 屏东市| 东安县| 巴彦县| 若羌县| 皋兰县| 岳阳市| 玉田县| 洪泽县|