原文链接:http://tecdat.cn/?p=26709
介绍
本文是在 R 中应用 Keras 的LSTM神经网络分类简略介绍。
软件包
library(tidyverse) #导入、清理、可视化 library(keras) # 用keras进行深度学习library(data.table) # 疾速读取csv数据
导入
让咱们看一下数据
tst %>% head()
初步查看
让咱们思考几个 用户可能提出的“不真挚”问题的例子
trn %>% filter(tart == 1) %>% sme_n(5)
我能够了解为什么这些问题被认为是“不真挚的”:它们不是在寻求真正的答案,而是偏向于将提问者的信念陈说为事实,或者试图成心寻衅。想晓得咱们的模型会怎么样?
标记化
让咱们从标记句子开始。
# 设置一些参数mx_s <- 15000 # 思考作为特色的最大词数mxen <- 64 # 在n个词之后的文本截断# 筹备对文本进行标记ful <- rbind(tin %>% select(qon\_t), test %>% select(quin\_ext))tts <- full$qesio_txtoer <- text\_tokenizer(nu\_ors = m_wods) %>% >。 fi\_txt\_ner(txt# 符号化 - 即把文本转换成整数序列seqnces <- tts_tseecs(toenze, txts)rd_idex <- toker$wordiex# 垫出文本,使所有内容都是雷同的长度daa = pad_sques(quecs, maxlen = aln)
数据拆分
# 宰割回训练和测试tri_mrx = data\[1:nrow(tan),\] # 宰割回训练和测试。ttmix = da\[(nrow(ran)+1):nrow(at),\] # 筹备训练标签。# 筹备好训练标签laes = trin$trgt# 筹备一个验证集set.seed(1337)traingsales = nrow(trinix)*0.90inie = sample(1:nrow(tra_trix))trining\_idies = indices\[1:training\_samples\] 。valdaton\_inces = indices\[(ranng\_sples + 1): (trningmes + vliiopls)\] 。xtrin = tainmax\[trinig_dces,\] 。y_an = labels\[ainginies\]x\_vl = traimarix\[valito\_inces,\] y_val = labels\[traginces\]。y_al = labels\[vlitnidies\]。# 训练维度dim(x_ran)table(y_tan)
这里十分重大的不均衡,咱们须要稍后解决这个问题。
嵌入
咱们的第一个模型将基于一个提供的词嵌入。咱们从较小的嵌入文件开始。
lis <- readLines('1M.vec')fsti_emedisndx = nw.ev(hash = TRUE, parent = eptev())ies <- lns\[2:legt(lie)\]b <- tPrgssBr(min = 0, max = lenth(lns), style = 3)for (i in 1:length(les)){ vaus <- strsplit(le, " ")\[\[1\]\] wd<- vaus\[\[1\]\] fsiemgndx\[\[word\]\] = as.double(vaes\[-1\]) etxPressar(pb, i)}# 创立咱们的嵌入矩阵faikimbddngim = 300fawkiebiix = array(0, c(mx\_ords, faii\_mdig_m))for (wrd in names(wrddex)){ idx <- wr_dx\[\[od\]\] if (nex < ma_ds){ faiki\_embdg\_vctor =astwkedgdex\[\[word\]\] if (!is.null(fasiembddigveor)) fatwki\_bednrix\[iex+1,\] <- faswiiedin\_vor # 没有嵌入的词都是零 }
模型架构
咱们从一个简略的 LSTM 开始,顶层有一个用于预测的密集层。
# 设置输出inpt <- layput( shape = list(NULL),# 模型层embding <- input %>% layeing(input\_dim = maords, output\_dim = fasing_dim, name = "embedding")lstm <- eming %>% layer_lstm(units = maxn,drout = 0.25, recudroput = 0.25, reseques = FALSE, name = "lstm")dese <- lstm %>% ladese(units = 128, actin = "rlu", name = "dese") # 把模型集中起来mol <- kmoel(input, preds)# 最后解冻嵌入权重,以避免更新的权重回传,毁坏咱们的嵌入。getlar(ml, name = "embedding") %>% sehts(list(fasatrix)) %>% frehts()# 编译print(model)
模型训练
放弃对初始基准模型的疾速训练。
# 训练模型history <- model %>% fit( x_train, y_train,# 看看训练后果print(hisy)
模型能够很容易地通过微调来改良:只需嵌入层并再训练模型几个 epoch,留神不要适度拟合。
最受欢迎的见解
1.用于NLP的Python:应用Keras的多标签文本LSTM神经网络分类
2.Python中利用长短期记忆模型LSTM进行工夫序列预测剖析 – 预测电力耗费数据
3.python在Keras中应用LSTM解决序列问题
4.Python中用PyTorch机器学习分类预测银行客户散失模型
5.R语言多元Copula GARCH 模型工夫序列预测
6.在r语言中应用GAM(狭义相加模型)进行电力负荷工夫序列剖析
7.R语言中ARMA,ARIMA(Box-Jenkins),SARIMA和ARIMAX模型用于预测工夫序列数
8.R语言预计时变VAR模型工夫序列的实证钻研剖析案例
9.用狭义加性模型GAM进行工夫序列剖析