关于数据挖掘:R语言用Keras长短期记忆LSTM神经网络分类分析问答文本数据

43次阅读

共计 2812 个字符,预计需要花费 8 分钟才能阅读完成。

原文链接: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_tx

toer <- 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.90

inie = 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 = 300
fawkiebiix = 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 进行工夫序列剖析

正文完
 0