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


    原文链接:http://tecdat.cn/?p=26709 

    原文出处:拓端数据部落公众号

    介绍

    本文是在 R 中使用 Keras 的LSTM神经网络分类简单介绍。

    软件包

    1.  
      library(tidyverse) #导入、清理、可视化
    2.  
      library(keras) # 用keras进行深度学习
    3.  
      library(data.table) # 快速读取csv数据

    导入

    让我们看一下数据

    1.  
       
    2.  
      tst %>% head()

    初步查看

    让我们考虑几个 用户可能提出的“不真诚”问题的例子

    trn %>% filter(tart == 1) %>% sme_n(5)

    我可以理解为什么这些问题被认为是“不真诚的”:它们不是在寻求真正的答案,而是倾向于将提问者的信念陈述为事实,或者试图故意挑衅。想知道我们的模型会怎么样?

    标记化

    让我们从标记句子开始。

    1.  
      # 设置一些参数
    2.  
       
    3.  
      mx_s <- 15000 # 考虑作为特征的最大词数
    4.  
      mxen <- 64 # 在n个词之后的文本截断
    5.  
       
    6.  
       
    7.  
      # 准备对文本进行标记
    8.  
       
    9.  
      ful <- rbind(tin %>% select(qon_t), test %>% select(quin_ext))
    10.  
      tts <- full$qesio_tx
    11.  
       
    12.  
      toer <- text_tokenizer(nu_ors = m_wods) %>% >。
    13.  
      fi_txt_ner(txt
    14.  
       
    15.  
      # 符号化 - 即把文本转换成整数序列
    16.  
       
    17.  
      seqnces <- tts_tseecs(toenze, txts)
    18.  
      rd_idex <- toker$wordiex
    19.  
       
    20.  
      # 垫出文本,使所有内容都是相同的长度
    21.  
       
    22.  
      daa = pad_sques(quecs, maxlen = aln)

    数据拆分

    1.  
      # 分割回训练和测试
    2.  
       
    3.  
      tri_mrx = data[1:nrow(tan),] # 分割回训练和测试。
    4.  
      ttmix = da[(nrow(ran)+1):nrow(at),] # 准备训练标签。
    5.  
       
    6.  
       
    7.  
      # 准备好训练标签
    8.  
       
    9.  
      laes = trin$trgt
    10.  
       
    11.  
       
    12.  
      # 准备一个验证集
    13.  
       
    14.  
      set.seed(1337)
    15.  
       
    16.  
      traingsales = nrow(trinix)*0.90
    17.  
       
    18.  
      inie = sample(1:nrow(tra_trix))
    19.  
      trining_idies = indices[1:training_samples] 。
    20.  
      valdaton_inces = indices[(ranng_sples + 1): (trningmes + vliiopls)] 。
    21.  
       
    22.  
      xtrin = tainmax[trinig_dces,] 。
    23.  
      y_an = labels[ainginies]
    24.  
       
    25.  
      x_vl = traimarix[valito_inces,] y_val = labels[traginces]。
    26.  
      y_al = labels[vlitnidies]。
    27.  
       
    28.  
      # 训练维度
    29.  
       
    30.  
      dim(x_ran)
    31.  
      table(y_tan)

    这里非常严重的不平衡,我们需要稍后解决这个问题。

    嵌入

    我们的第一个模型将基于一个提供的词嵌入。我们从较小的嵌入文件开始。

    1.  
      lis <- readLines('1M.vec')
    2.  
       
    3.  
      fsti_emedisndx = nw.ev(hash = TRUE, parent = eptev())
    4.  
       
    5.  
      ies <- lns[2:legt(lie)]
    6.  
       
    7.  
      b <- tPrgssBr(min = 0, max = lenth(lns), style = 3)
    8.  
      for (i in 1:length(les)){
    9.  
       
    10.  
      vaus <- strsplit(le, " ")[[1]]
    11.  
      wd<- vaus[[1]]
    12.  
      fsiemgndx[[word]] = as.double(vaes[-1])
    13.  
      etxPressar(pb, i)
    14.  
      }
    15.  
       
    16.  
      # 创建我们的嵌入矩阵
    17.  
       
    18.  
      faikimbddngim = 300
    19.  
      fawkiebiix = array(0, c(mx_ords, faii_mdig_m))
    20.  
       
    21.  
      for (wrd in names(wrddex)){
    22.  
      idx <- wr_dx[[od]]
    23.  
      if (nex < ma_ds){
    24.  
      faiki_embdg_vctor =astwkedgdex[[word]]
    25.  
      if (!is.null(fasiembddigveor))
    26.  
      fatwki_bednrix[iex+1,] <- faswiiedin_vor # 没有嵌入的词都是零
    27.  
      }
    28.  
       

    模型架构

    我们从一个简单的 LSTM 开始,顶层有一个用于预测的密集层。

    1.  
      # 设置输入
    2.  
       
    3.  
      inpt <- layput(
    4.  
      shape = list(NULL),
    5.  
       
    6.  
       
    7.  
      # 模型层
    8.  
       
    9.  
      embding <- input %>%
    10.  
      layeing(input_dim = maords, output_dim = fasing_dim, name = "embedding")
    11.  
       
    12.  
      lstm <- eming %>%
    13.  
      layer_lstm(units = maxn,drout = 0.25, recudroput = 0.25, reseques = FALSE, name = "lstm")
    14.  
       
    15.  
      dese <- lstm %>%
    16.  
      ladese(units = 128, actin = "rlu", name = "dese")
    17.  
       
    18.  
       
    19.  
       
    20.  
      # 把模型集中起来
    21.  
       
    22.  
      mol <- kmoel(input, preds)
    23.  
       
    24.  
      # 最初冻结嵌入权重,以防止更新的权重回传,破坏我们的嵌入。
    25.  
       
    26.  
      getlar(ml, name = "embedding") %>%
    27.  
      sehts(list(fasatrix)) %>%
    28.  
      frehts()
    29.  
       
    30.  
       
    31.  
      # 编译
    32.  
       
    33.  
       
    34.  
      print(model)
    
    

    模型训练

    保持对初始基准模型的快速训练。

    1.  
      # 训练模型
    2.  
       
    3.  
      history <- model %>% fit(
    4.  
      x_train,
    5.  
      y_train,
    6.  
       
    7.  
      # 看看训练结果
    8.  
       
    9.  
      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进行时间序列分析

  • 相关阅读:
    收集的各种学习链接,方便查找
    用python调试Appium和雷电模拟器连接时出现Original error: Could not find 'adb.exe' in PATH
    App自动化测试之Appium环境安装(涉及雷电模拟器和真机)
    元素定位工具ChroPath
    Python+Selenium学习笔记19
    Python+Selenium学习笔记18
    Python+Selenium学习笔记17
    Python+Selenium学习笔记16
    Python+Selenium学习笔记14
    Python+Selenium学习笔记15
  • 原文地址:https://www.cnblogs.com/tecdat/p/16338199.html
Copyright © 2020-2023  润新知