R語言用Keras長短期記憶LSTM神經(jīng)網(wǎng)絡(luò)分類分析問答文本數(shù)據(jù)
原文鏈接:http://tecdat.cn/?p=26709?
原文出處:拓端數(shù)據(jù)部落公眾號
介紹
本文是在 R 中使用?Keras?的LSTM神經(jīng)網(wǎng)絡(luò)分類簡單介紹。
軟件包
library(tidyverse) #導(dǎo)入、清理、可視化
library(keras) # 用keras進行深度學(xué)習(xí)
library(data.table) # 快速讀取csv數(shù)據(jù)
導(dǎo)入
讓我們看一下數(shù)據(jù)
tst %>% head()

初步查看
讓我們考慮幾個 用戶可能提出的“不真誠”問題的例子
trn %>% filter(tart == 1) %>% sme_n(5)

我可以理解為什么這些問題被認(rèn)為是“不真誠的”:它們不是在尋求真正的答案,而是傾向于將提問者的信念陳述為事實,或者試圖故意挑釁。想知道我們的模型會怎么樣?
標(biāo)記化
讓我們從標(biāo)記句子開始。
# 設(shè)置一些參數(shù)
mx_s <- 15000 # 考慮作為特征的最大詞數(shù)
mxen <- 64 # 在n個詞之后的文本截斷
# 準(zhǔn)備對文本進行標(biāo)記
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
# 符號化 - 即把文本轉(zhuǎn)換成整數(shù)序列
seqnces <- tts_tseecs(toenze, txts)
rd_idex <- toker$wordiex
# 墊出文本,使所有內(nèi)容都是相同的長度
daa = pad_sques(quecs, maxlen = aln)
數(shù)據(jù)拆分
# 分割回訓(xùn)練和測試
tri_mrx = data[1:nrow(tan),] # 分割回訓(xùn)練和測試。
ttmix = da[(nrow(ran)+1):nrow(at),] # 準(zhǔn)備訓(xùn)練標(biāo)簽。
# 準(zhǔn)備好訓(xùn)練標(biāo)簽
laes = trin$trgt
# 準(zhǔn)備一個驗證集
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]。
# 訓(xùn)練維度
dim(x_ran)
table(y_tan)

這里非常嚴(yán)重的不平衡,我們需要稍后解決這個問題。
嵌入
我們的第一個模型將基于一個提供的詞嵌入。我們從較小的嵌入文件開始。
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)
}
# 創(chuàng)建我們的嵌入矩陣
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 # 沒有嵌入的詞都是零
}


模型架構(gòu)
我們從一個簡單的?LSTM?開始,頂層有一個用于預(yù)測的密集層。
# 設(shè)置輸入
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)
# 最初凍結(jié)嵌入權(quán)重,以防止更新的權(quán)重回傳,破壞我們的嵌入。
getlar(ml, name = "embedding") %>%
sehts(list(fasatrix)) %>%
frehts()
# 編譯
print(model)
模型訓(xùn)練
保持對初始基準(zhǔn)模型的快速訓(xùn)練。
# 訓(xùn)練模型
history <- model %>% fit(
x_train,
y_train,
# 看看訓(xùn)練結(jié)果
print(hisy)


模型可以很容易地通過微調(diào)來改進:只需嵌入層并再訓(xùn)練模型幾個 epoch,注意不要過度擬合。

最受歡迎的見解
1.用于NLP的Python:使用Keras的多標(biāo)簽文本LSTM神經(jīng)網(wǎng)絡(luò)分類
2.Python中利用長短期記憶模型LSTM進行時間序列預(yù)測分析 – 預(yù)測電力消耗數(shù)據(jù)
3.python在Keras中使用LSTM解決序列問題
4.Python中用PyTorch機器學(xué)習(xí)分類預(yù)測銀行客戶流失模型
5.R語言多元Copula GARCH 模型時間序列預(yù)測
6.在r語言中使用GAM(廣義相加模型)進行電力負荷時間序列分析
7.R語言中ARMA,ARIMA(Box-Jenkins),SARIMA和ARIMAX模型用于預(yù)測時間序列數(shù)
8.R語言估計時變VAR模型時間序列的實證研究分析案例
9.用廣義加性模型GAM進行時間序列分析