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

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

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

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


点击标题查阅往期内容


Matlab用深度学习长短期记忆(LSTM)神经网络对文本数据进行分类


01

02

03

04

标记化


让我们从标记句子开始。

# 设置一些参数
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 # 没有嵌入的词都是零
  }

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月前
|
监控 安全 网络安全
云计算与网络安全:保护数据的关键策略
【9月更文挑战第34天】在数字化时代,云计算已成为企业和个人存储、处理数据的优选方式。然而,随着云服务的普及,网络安全问题也日益凸显。本文将探讨云计算环境中的网络安全挑战,并提供一系列策略来加强信息安全。从基础的数据加密到复杂的访问控制机制,我们将一探究竟如何在享受云服务便利的同时,确保数据的安全性和隐私性不被侵犯。
63 10
|
2月前
|
存储 安全 网络安全
云计算与网络安全:守护数据,构筑未来
在当今的信息化时代,云计算已成为推动技术革新的重要力量。然而,随之而来的网络安全问题也日益凸显。本文从云服务、网络安全和信息安全等技术领域展开,探讨了云计算在为生活带来便捷的同时,如何通过技术创新和策略实施来确保网络环境的安全性和数据的保密性。
|
5天前
|
存储 安全 网络安全
云计算与网络安全:保护数据的新策略
【10月更文挑战第28天】随着云计算的广泛应用,网络安全问题日益突出。本文将深入探讨云计算环境下的网络安全挑战,并提出有效的安全策略和措施。我们将分析云服务中的安全风险,探讨如何通过技术和管理措施来提升信息安全水平,包括加密技术、访问控制、安全审计等。此外,文章还将分享一些实用的代码示例,帮助读者更好地理解和应用这些安全策略。
|
9天前
|
安全 网络安全 数据安全/隐私保护
网络安全与信息安全:从漏洞到加密,保护数据的关键步骤
【10月更文挑战第24天】在数字化时代,网络安全和信息安全是维护个人隐私和企业资产的前线防线。本文将探讨网络安全中的常见漏洞、加密技术的重要性以及如何通过提高安全意识来防范潜在的网络威胁。我们将深入理解网络安全的基本概念,学习如何识别和应对安全威胁,并掌握保护信息不被非法访问的策略。无论你是IT专业人士还是日常互联网用户,这篇文章都将为你提供宝贵的知识和技能,帮助你在网络世界中更安全地航行。
|
12天前
|
数据挖掘 C语言 C++
R语言是一种强大的统计分析工具,提供了丰富的函数和包用于时间序列分析。
【10月更文挑战第21天】时间序列分析是一种重要的数据分析方法,广泛应用于经济学、金融学、气象学、生态学等领域。R语言是一种强大的统计分析工具,提供了丰富的函数和包用于时间序列分析。本文将介绍使用R语言进行时间序列分析的基本概念、方法和实例,帮助读者掌握R语言在时间序列分析中的应用。
37 3
|
12天前
|
存储 安全 网络安全
云计算与网络安全:如何保护您的数据
【10月更文挑战第21天】在这篇文章中,我们将探讨云计算和网络安全的关系。随着云计算的普及,网络安全问题日益突出。我们将介绍云服务的基本概念,以及如何通过网络安全措施来保护您的数据。最后,我们将提供一些代码示例,帮助您更好地理解这些概念。
|
2月前
|
数据采集 存储 监控
网络爬虫的最佳实践:结合 set_time_limit() 与 setTrafficLimit() 抓取云盘数据
本文探讨了如何利用 PHP 的 `set_time_limit()` 与爬虫工具的 `setTrafficLimit()` 方法,结合多线程和代理 IP 技术,高效稳定地抓取百度云盘的公开资源。通过设置脚本执行时间和流量限制,使用多线程提高抓取效率,并通过代理 IP 防止 IP 封禁,确保长时间稳定运行。文章还提供了示例代码,展示了如何具体实现这一过程,并加入了数据分类统计功能以监控抓取效果。
65 16
网络爬虫的最佳实践:结合 set_time_limit() 与 setTrafficLimit() 抓取云盘数据
|
26天前
|
机器学习/深度学习 存储 自然语言处理
从理论到实践:如何使用长短期记忆网络(LSTM)改善自然语言处理任务
【10月更文挑战第7天】随着深度学习技术的发展,循环神经网络(RNNs)及其变体,特别是长短期记忆网络(LSTMs),已经成为处理序列数据的强大工具。在自然语言处理(NLP)领域,LSTM因其能够捕捉文本中的长期依赖关系而变得尤为重要。本文将介绍LSTM的基本原理,并通过具体的代码示例来展示如何在实际的NLP任务中应用LSTM。
55 4
|
1月前
|
SQL 安全 测试技术
网络安全与信息安全:保护数据的艺术
【9月更文挑战第36天】在数字化时代,网络安全和信息安全已成为维护个人隐私和企业资产的基石。本文深入探讨了网络安全漏洞、加密技术以及安全意识的重要性,旨在为读者提供一份知识宝典,帮助他们在网络世界中航行而不触礁。我们将从网络安全的基本概念出发,逐步深入到复杂的加密算法,最后强调培养安全意识的必要性。无论你是IT专业人士还是日常互联网用户,这篇文章都将为你打开一扇了解和实践网络安全的大门。
34 2
|
2月前
|
数据采集 存储 JavaScript
构建您的第一个Python网络爬虫:抓取、解析与存储数据
【9月更文挑战第24天】在数字时代,数据是新的金矿。本文将引导您使用Python编写一个简单的网络爬虫,从互联网上自动抓取信息。我们将介绍如何使用requests库获取网页内容,BeautifulSoup进行HTML解析,以及如何将数据存储到文件或数据库中。无论您是数据分析师、研究人员还是对编程感兴趣的新手,这篇文章都将为您提供一个实用的入门指南。拿起键盘,让我们开始挖掘互联网的宝藏吧!