




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、TextRnn分類可視化代碼處理方法:一、數(shù)據(jù)處理 數(shù)據(jù)處理局部和上一篇CharCNN是一樣的,盡管我們說RNN模型 可以處理任意長度的序列,但是在這個TextRNN模型中,我們還是 把輸入處理成了固定長度的序列。二、模型搭建 模型比擬簡單,下面的代碼也就是按照LSTM ( GRU ) dropout LSTM ( GRU )dropout一全連接層一輸出層這樣的結構來進行 組織的。要注意的是對每層的LSTM或GRU核中的神經(jīng)元進行dropout ,還有取最后時刻和最后一層的LSTM或GRU的隱狀態(tài)作 為全連接層的輸入。三、模型訓練、驗證和測試 這一局部的代碼和CharCNN可以說沒啥區(qū)別。注
2、意在驗證和測試時 不用做dropout,還有用早停防止過擬合。四、模型預測 從兩個新聞中各摘取了一段內(nèi)容,進行預測。結果預測為:科技、體 育。NLP進階,使用TextRNN和TextRNN_ATT實現(xiàn)文本分類TextRNNTextRNN僅僅是將Word Embedding后,輸入到雙向LSTM中,3、從字典中取出Top size - 2個元素。4、獲取元素的詞。5、執(zhí)行add方法將詞放入vocab_entry ,生成詞和id , id就是詞對應的向量值。代碼如下:staticmethoddef from_corpus(corpus, size, min_feq=3):從給定語料中創(chuàng)立Vocab
3、Entryvocab_entry = VocabEntryOchain函數(shù)來自于itertools庫,itertools庫提供了非常有用的基于迭代對象的函數(shù),而chain函數(shù)那么是可以串聯(lián)多個迭代對 象來形成一個更大的迭代對象*的作用:返回單個迭代器。word_freq 是個字典,key二詞,value二詞頻word_freq = Counter(chain(*corpus) # Counter 是實 現(xiàn)的diet的一個子類,可以用來方便地計數(shù),統(tǒng)計詞頻alid_words = word_freq.most_common(size - 2) # most_common()函數(shù)用來實現(xiàn)Top n
4、功能在這里選出Top size-2 個詞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: # 將詞放進 VocabEntry 里面。 vocab_entry.add(word)return v
5、ocab_entry創(chuàng)立完成后將詞向量保存到json文件中vocab 二 Vocab.build(src_sents/ labels, 50000, 3)print(,generated vocabulary, source %d words1 % (len(vocab.vocab)vocab.save(,./vocab.json,)1234訓I練訓練使用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)然后對最后一位的輸出輸入到全連接層中,在對其進行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是因為是雙向,需要拼接兩個方向,跟njayers的層數(shù)無關。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) # 在接一個全連接層, 最終輸出ba
13、tch size, output_dim TextRNN_ATT在TextRNN的基礎上加入注意力機制,代碼: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構建詞向量第一步,讀取預料,做分詞。思路:1、創(chuàng)立默認方式的分詞對象seg。2、翻
17、開文件,按照行讀取文章。3、去掉收尾的空格,將label和文章分割開。4、將分詞后的文章放到srjdata , label放入labels里。5、返回結果。我對代碼做了注解,如下: def read_corpus(file_path):讀取語料:param file_path:param type:return: ii ii iisrc_data =labels =seg = pkuseg.pkusegO #使用默認分詞方式。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表示空四個字符,也稱縮進,相當于按一下 Tab鍵pair = line.stripO.splitCXt)if len(pair) != 2:print(pair)continuesrc_data.append(seg.cut(pairl)# 對文章內(nèi)容分詞。labels.append(
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 貨物運輸代理授權委托合同
- VR技術在教育培訓行業(yè)的創(chuàng)新應用
- 客戶往來商務信函管理規(guī)范
- 《歷史經(jīng)典著作〈紅樓夢〉閱讀教學設計》
- 產(chǎn)品采購及供應協(xié)議規(guī)范內(nèi)容
- 高考語文復習微專題之文言文閱讀之斷句
- 高考語文復習:文言文專題訓練《莊子》
- 人才培訓與招聘服務協(xié)議
- 中小學必讀經(jīng)典書目征文
- 古詩詞中情感與意象的探討
- HRBP工作總結與計劃
- 八大危險作業(yè)安全培訓考試試題及答案
- 2025中國船舶集團限公司招聘高頻重點模擬試卷提升(共500題附帶答案詳解)
- 土壤侵蝕與碳匯-深度研究
- 2025年湖南高速鐵路職業(yè)技術學院高職單招語文2018-2024歷年參考題庫頻考點含答案解析
- 2025年上半年中電科太力通信科技限公司招聘易考易錯模擬試題(共500題)試卷后附參考答案
- 2025年沙洲職業(yè)工學院高職單招語文2018-2024歷年參考題庫頻考點含答案解析
- 【化學】常見的鹽(第1課時)-2024-2025學年九年級化學下冊(人教版2024)
- 2024甘肅省公務員(省考)行測真題
- 體育活動策劃與組織課件
- JJG 1204-2025電子計價秤檢定規(guī)程(試行)
評論
0/150
提交評論