第一次接觸rnn很容易被資料處理弄糊塗,這裡總結一下,總把每一步的處理結果都列印出來。
shakespeare_url =
""filepath = keras.utils.get_file(
"shakespeare.txt"
, shakespeare_url)
with
open
(filepath)
as f:
shakespeare_text = f.read()""
.join(
sorted
(set
(shakespeare_text.lower())
))tokenizer = keras.preprocessing.text.tokenizer(char_level=
true
)tokenizer.fit_on_texts(shakespeare_text)
tokenizer.texts_to_sequences(
["first"])
tokenizer.sequences_to_texts([[
20,6,
9,8,
3]])
max_id =
len(tokenizer.word_index)
# number of distinct characters
dataset_size = tokenizer.document_count # total number of characters
[encoded]
= np.array(tokenizer.texts_to_sequences(
[shakespeare_text]))
-1train_size = dataset_size *
90//
100dataset = tf.data.dataset.from_tensor_slices(encoded[
:train_size]
)
資料處理
為了方便理解,每一步處理都把結果列印出來
for _ in dataset.take(1)
:print
(_)# tf.tensor(19, shape=(), dtype=int64)
n_steps =
100window_length = n_steps +
1# target = input shifted 1 character ahead
dataset = dataset.repeat(
).window(window_length, shift=
1, drop_remainder=
true
)
for _ in dataset.take(1)
:print
(_)# <_variantdataset shapes: (), types: tf.int64>
dataset = dataset.flat_map(
lambda window: window.batch(window_length)
)
for _ in dataset.take(1)
:print
(_)
tf.tensor([19
5872
01852
53519
2310211
19381
01610
228318
11120
49150
191382
61817
0614
80141
07221
4242610104
1111
2310722
14241707
221424
2610
101958
72018
52535
192310153
130], shape=
(101,)
, dtype=int64)
batch_size =
32# dataset = dataset.shuffle(10000).batch(batch_size) 實際使用時取消注釋
dataset = dataset.batch(batch_size)
dataset = dataset.
map(
lambda windows:
(windows[:,
:-1]
, windows[:,
1:])
)
for _ in dataset.take(1)
:print
(_[0][
0])# x
tf.tensor([19
5872
01852
53519
2310211
19381
01610
228318
11120
49150
191382
61817
0614
80141
07221
4242610104
1111
2310722
14241707
221424
2610
101958
72018
52535
192310153
13], shape=
(100,)
, dtype=int64)
for _ in dataset.take(1)
:print
(_[1][
0])# y
tf.tensor([5
8720
18525
351923
1021119
3810
161022
83181
11204
915019
13826
18170
6148
01410
72214
2426
1010411
1123107
221424
170722
142426
1010195
8720
18525
351923
1015313
0], shape=
(100,)
, dtype=int64)
總結
先從資料集中用windows_size=101來分解字母
0-99(共100個)作為x,1-100(共100個)作為y
RNN自然語言處理訓練資料生成過程 示例
第一次接觸rnn很容易被資料處理弄糊塗,這裡總結一下,總把每一步的處理結果都列印出來。shakespeare url filepath keras.utils.get file shakespeare.txt shakespeare url with open filepath as f shake...
自然語言處理
自然語言處理主要步驟包括 2.詞法分析 對於英文,有詞頭 詞根 詞尾的拆分,名詞 動詞 形容詞 副詞 介詞的定性,多種詞意的選擇。比如diamond,有菱形 棒球場 鑽石3個含義,要根據應用選擇正確的意思。3.語法分析 通過語法樹或其他演算法,分析主語 謂語 賓語 定語 狀語 補語等句子元素。4.語...
自然語言處理
前言 自然語言處理 natural language processing 是計算科學領域與人工智慧領域中的乙個重要方向。它研究能實現人與計算機之間用自然語言進行有效通訊的各種理論和方法。自然語言處理是一門融語言學 電腦科學 數學於一體的科學。因此,這一領域的研究將涉及自然語言,即人們日常使用的語言...