TextRnn分類可視化代碼_第1頁
TextRnn分類可視化代碼_第2頁
TextRnn分類可視化代碼_第3頁
TextRnn分類可視化代碼_第4頁
TextRnn分類可視化代碼_第5頁
已閱讀5頁,還剩8頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、TextRnn分類可視化代碼處理方法:一、數(shù)據(jù)處理 數(shù)據(jù)處理局部和上一篇CharCNN是一樣的,盡管我們說RNN模型 可以處理任意長度的序列,但是在這個(gè)TextRNN模型中,我們還是 把輸入處理成了固定長度的序列。二、模型搭建 模型比擬簡單,下面的代碼也就是按照LSTM ( GRU ) dropout LSTM ( GRU )dropout一全連接層一輸出層這樣的結(jié)構(gòu)來進(jìn)行 組織的。要注意的是對(duì)每層的LSTM或GRU核中的神經(jīng)元進(jìn)行dropout ,還有取最后時(shí)刻和最后一層的LSTM或GRU的隱狀態(tài)作 為全連接層的輸入。三、模型訓(xùn)練、驗(yàn)證和測(cè)試 這一局部的代碼和CharCNN可以說沒啥區(qū)別。注

2、意在驗(yàn)證和測(cè)試時(shí) 不用做dropout,還有用早停防止過擬合。四、模型預(yù)測(cè) 從兩個(gè)新聞中各摘取了一段內(nèi)容,進(jìn)行預(yù)測(cè)。結(jié)果預(yù)測(cè)為:科技、體 育。NLP進(jìn)階,使用TextRNN和TextRNN_ATT實(shí)現(xiàn)文本分類TextRNNTextRNN僅僅是將Word Embedding后,輸入到雙向LSTM中,3、從字典中取出Top size - 2個(gè)元素。4、獲取元素的詞。5、執(zhí)行add方法將詞放入vocab_entry ,生成詞和id , id就是詞對(duì)應(yīng)的向量值。代碼如下:staticmethoddef from_corpus(corpus, size, min_feq=3):從給定語料中創(chuàng)立Vocab

3、Entryvocab_entry = VocabEntryOchain函數(shù)來自于itertools庫,itertools庫提供了非常有用的基于迭代對(duì)象的函數(shù),而chain函數(shù)那么是可以串聯(lián)多個(gè)迭代對(duì) 象來形成一個(gè)更大的迭代對(duì)象*的作用:返回單個(gè)迭代器。word_freq 是個(gè)字典,key二詞,value二詞頻word_freq = Counter(chain(*corpus) # Counter 是實(shí) 現(xiàn)的diet的一個(gè)子類,可以用來方便地計(jì)數(shù),統(tǒng)計(jì)詞頻alid_words = word_freq.most_common(size - 2) # most_common()函數(shù)用來實(shí)現(xiàn)Top n

4、功能在這里選出Top size-2 個(gè)詞valid_words = word for word, value in valid_words if value = min_feq #把符合要求的詞找出來放到list里面。print(,number of word types: , number of word types w/ frequency = :.format(len(word_freq),min_feq,len(valid_words)for word in valid_words: # 將詞放進(jìn) VocabEntry 里面。 vocab_entry.add(word)return v

5、ocab_entry創(chuàng)立完成后將詞向量保存到j(luò)son文件中vocab 二 Vocab.build(src_sents/ labels, 50000, 3)print(,generated vocabulary, source %d words1 % (len(vocab.vocab)vocab.save(,./vocab.json,)1234訓(xùn)I練訓(xùn)練使用Train_RNN.py,先看分析main方法的參數(shù)。參數(shù)parse = argparse.ArgumentParserQparse.add_argument(,-train_data_dir,1, type=str; req u i red

6、 = Fa Ise) parse.add_argument(,-dev_data_dir,zdefau11=11, type=str, required = False) parse.add_argument(,-test_data_dir,default=,/ type=str, req u i red = Fa Ise) parse.add_argument(,-output_file,/default=,deep_model.log,/ type二str; required二False) parse.add_argument(,-batch_size,/ default=4, type=

7、int) parse.add_argument(ndo_trainHzdefault=True,action = nstore_truenz help=Whether to run training.) parse.add_argument(,-do_testl,/default=True,action = storejrue, help=Whether to run training.H) parse.add_argument(n-learnningate,default=5e-4,type=float)parse.add_argument(n-num_epoch,/ default=50,

8、 type=int)parse.add_argument(,-max_vocab_sizel,/ default=50000,typent)parse.add_argument(,-min_freq,/ default=2z type=int)parse.add_argument(,-hidden_size,/default=256,typent)parse.add_argument(,-embed_size,/default=300,type = int)parse.add_argument(,-dropout_rate,zdefault=0.2,type=float)parse.add_a

9、rgument(,-warmup_steps,zdefault=O,type=int, help=HLinear warmup over warmup-Steps.)parse.add_argument(GRAD_CLIP,default=l,type = float)parse.add_argument(,-vocab_path,/ default=vocab.jsorT, type=str)然后對(duì)最后一位的輸出輸入到全連接層中,在對(duì)其進(jìn)行softmax分 類即可,模型如下列圖:代碼:class RNN(nn.Module):def _init_(self, vocab_size, embe

10、dding_dim, hidden_dim/ output_dim,n_layers=2, bidirectional二True, dropout=0.2,pad_idx=0):super()._init_()self.embedding = nn.Embedding(vocab_size,embedding_dim, paddingJdx=padJdx)self.rnn = nn.LSTM(embedding_dimz hidden_dim/ num_layers=nJayerszbatch_first=Truezbidirectional = bidirectional)selffc =

11、nn.Linear(hidden_dim * 2, output_dim)這里hidden_dim乘以2是因?yàn)槭请p向,需要拼接兩個(gè)方向,跟njayers的層數(shù)無關(guān)。self.dropout = nn.Dropout(dropout)def forward(self, text):text.shape=seqjen, batch_sizeembedded = self.dropout(self.embedding(text)output: batch,seq,2*hidden if bidirection else hiddenhidden/cell: bidirec * n_layers, b

12、atch, hiddenoutput, (hidden, cell) = self.rnn(embedded)concat the final forward (hidden-2,:,:) and backward (hiddenf-1,:,:) hidden layershidden = self.dropout(torch.cat(hidden-2,:,:, hidden-l,:), dim = l)hidden =batch size, hid dim * num directions,return self.fc(hidden.squeeze(O) # 在接一個(gè)全連接層, 最終輸出ba

13、tch size, output_dim TextRNN_ATT在TextRNN的基礎(chǔ)上加入注意力機(jī)制,代碼:class RNN_ATTs(nn.Module):def _init_(self, vocab_size, embedding_dim, hidden_dim,output.dim,n_layers=2, bidirectional=True, dropout=0.2, padjdx=O, hidden_size2=64):super()._init_()selfembedding = nn.Embedding(vocab_size, embedding_dim, padding_i

14、dx=padjdx)selfdstm = nn.LSTM(embedding_dim/ hidden_dim, njayers, bidirectional bidirectional, batch_first=True, dropout=dropout)self.tanhl = nn.Tanh()#self.u=nn.Parameter(torch.Tensor(config.hidden_size * 2Zconfig.hidden_size * 2)self.w = nn.Parameter(torch.zeros(hidden_dim * 2)self.tanh2 二 nn.Tanh(

15、)self.fcl = nn.Linear(hidden_dim * 2, hidden_size2)self.fc = nn.Linear(hidden_size2z output_dim)def forward (self, x):emb 二 self.embedding(x) # batch_size, seqjen, embeding = 128, 32, 300H, _ 二 self.lstm(emb) # batch_size, seqjen,hidden_size * num_direction = 128, 32, 256M = self.tanhl(H) # 128, 32,

16、 256self.w),# M = torch.tanh(torch.matmul(H, self.u)alpha = F.so 代 max(torch.matmul(M, dim = l).unsqueeze(-l) # 128, 32, 1out = H * alpha # 128, 32, 256out = torch.sum(out, 1) # 128, 256out = Rrelu(out)out = self.fcl(out)out = self.fc(out) # 128, 64return out構(gòu)建詞向量第一步,讀取預(yù)料,做分詞。思路:1、創(chuàng)立默認(rèn)方式的分詞對(duì)象seg。2、翻

17、開文件,按照行讀取文章。3、去掉收尾的空格,將label和文章分割開。4、將分詞后的文章放到srjdata , label放入labels里。5、返回結(jié)果。我對(duì)代碼做了注解,如下: def read_corpus(file_path):讀取語料:param file_path:param type:return: ii ii iisrc_data =labels =seg = pkuseg.pkusegO #使用默認(rèn)分詞方式。with codecs.open(file_path/r,zencoding = ,utf-8,) as fout:for line in tqdm(fout.readlines(),desc=,reading corpus1):if line is not None:line.strip()的意思是去掉每句話句首句尾的空格.split( t)的意思是根據(jù)把label和文章內(nèi) 容分開,label和內(nèi)容是通過隔開的。t表示空四個(gè)字符,也稱縮進(jìn),相當(dāng)于按一下 Tab鍵pair = line.stripO.splitCXt)if len(pair) != 2:print(pair)continuesrc_data.append(seg.cut(pairl)# 對(duì)文章內(nèi)容分詞。labels.append(

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論