己亥第一篇。本文主要介紹利用lstm(long short term memory)神經網路來產生自然語言。使用r語言和keras包來完成工作。
主要步驟有:
1, 將全部資料分成不同的訓練短語和目標字元(即短語的下乙個字元)
2, 將訓練短語和目標字元向量化
3,構建神經網路模型
4,訓練模型
5,模型對乙個隨機輸入的短語進行**並產生其目標字元
6,用產生的字元更新5中的輸入短語,然後重新**下乙個字元。如此迴圈直到產生字元個數滿足要求。
以下為具體實現**:
library
(keras)
library
(stringr)
#path <
-get_file
("d:/play/r/deeplearningwithr/generator/nietzsche.txt"
,# origin =
"")path <
-"d:/play/r/deeplearningwithr/generator/nietzsche.txt" #使用尼采的詩作為訓練資料
text <
-tolower
(readchar
(path, file.
info
(path)$size, usebytes =
true
)) #將字母都轉為小寫
cat(
"corpus length: "
,nchar
(text)
,"\n"
)max_len <
-20 #一次讀入字元個數
step <
-10 #讀入字元間隔
text_indexes <
-seq(1
,nchar
(text)
- max_len, by = step) #得到每次讀入起始位置
sentences <
-str_sub
(text, text_indexes, text_indexes + max_len -
1) #得到所有短語
next_char <
-str_sub
(text, text_indexes + max_len, text_indexes + max_len) #得到每個短語的下乙個字元
cat(
"number of sentences: "
,length
(sentences)
,"\n"
)chars <
-unique
(sort
(strsplit
(text,"")
[[1]
])) #得到所有不同的字元
cat(
"unique characters: "
,length
(chars)
,"\n"
)char_indices <-1
:length
(chars)
names
(char_indices)
<
- chars #給每個字元確定索引,如「a」=
1,「b」=
2#! 向量化每個短語(vectorization)
x <
-array
(0l, dim =c(
length
(sentences)
, max_len,
length
(chars)))
y <
-array
(0l, dim =c(
length
(sentences)
,length
(chars)))
for(i in1:
length
(sentences)
) char <-as
.character
(next_char[
[i]]
) index <
- char_indices[
[char]
] y[i,index]
<-1
}#! 構建模型
model <
-keras_model_sequential()
%>
%layer_lstm
(units =
128, input_shape =
c(max_len,
length
(chars)))
%>
% #使用lstm層
layer_dense
(units =
length
(chars)
, activation =
"softmax"
) #使用全連線層
optimizer <
-optimizer_rmsprop
(lr =
0.01
) #優化方法和學習速率
model %
>
%compile
( optimizer = optimizer,
loss =
"categorical_crossentropy" #定義損失函式
)#! 定義乙個根據 temperature 來抽樣產生下乙個字元的函式,temperature 越大抽樣結果越出人意料,即熵越大
sample_next_char <
-function
(preds, temperature =1)
#! 做訓練和產生字元
for(epoch in1:
60)#!根據seed短語的輸入,產生乙個輸出字元
preds <
- model %
>
%predict
(sampled, verbose =0)
next_index <
-sample_next_char
(preds[1,
], temperature)
next_char <
- chars[
[next_index]
] #! 更新seed短語(去掉第乙個字元,將新產生的字元加到末尾)
generated_text <
-paste0
(generated_text, next_char)
generated_text <
-substring
(generated_text,2)
cat(next_char)}}
}
以上就是乙個基本的利用lstm神經網路來自動產生文字的例子。 r語言進行自然語言處理 開始進行自然語言處理
r語言進行自然語言處理 當今,大多數應用程式仍在處理來自結構化和半結構化源的資料的世界中工作。它們連線到sql資料庫以查詢資訊或顯示來自json或xml資料來源的資訊。許多應用程式仍避免從非結構化源 例如開放文字字段,富文字編輯器,資料庫clob 字元大物件 資料型別,社交 新聞流以及來自micro...
R語言自然語言處理 情感分析
歡迎關注天善智慧型,我們是專注於商業智慧型bi,人工智慧ai,大資料分析與挖掘領域的垂直社群,學習,問答 求職一站式搞定!情感分析,就是根據一段文字,分析其表達情感的技術。比較簡單的情感分析,能夠辨別文字內容是積極的還是消極的 褒義 貶義 比較複雜的情感分析,能夠知道這些文字是否流露出恐懼 生氣 狂...
R語言自然語言處理 情感分析
前文參考 hoper r語言自然語言處理 中文分詞 hoper r語言自然語言處理 詞性標註與命名實體識別 hoper r語言自然語言處理 詞嵌入 word embedding 情感分析,就是根據一段文字,分析其表達情感的技術。比較簡單的情感分析,能夠辨別文字內容是積極的還是消極的 褒義 貶義 比較...