RNN自然語言處理訓練資料生成過程 示例

2022-07-09 05:18:13 字數 3155 閱讀 5091

第一次接觸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])) - 1

train_size = dataset_size * 90 // 100

dataset = tf.data.dataset.from_tensor_slices(encoded[:train_size])

資料處理

為了方便理解,每一步處理都把結果列印出來

for _ in dataset.take(1):

print(_)

# tf.tensor(19, shape=(), dtype=int64)

n_steps = 100

window_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 5 8 7 2 0 18 5 2 5 35 1 9 23 10 21 1 19 3 8 1 0 16 1

0 22 8 3 18 1 1 12 0 4 9 15 0 19 13 8 2 6 1 8 17 0 6 1

4 8 0 14 1 0 7 22 1 4 24 26 10 10 4 11 11 23 10 7 22 1 4 24

17 0 7 22 1 4 24 26 10 10 19 5 8 7 2 0 18 5 2 5 35 1 9 23

10 15 3 13 0], 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 5 8 7 2 0 18 5 2 5 35 1 9 23 10 21 1 19 3 8 1 0 16 1

0 22 8 3 18 1 1 12 0 4 9 15 0 19 13 8 2 6 1 8 17 0 6 1

4 8 0 14 1 0 7 22 1 4 24 26 10 10 4 11 11 23 10 7 22 1 4 24

17 0 7 22 1 4 24 26 10 10 19 5 8 7 2 0 18 5 2 5 35 1 9 23

10 15 3 13], shape=(100,), dtype=int64)

for _ in dataset.take(1):

print(_[1][0]) # y

tf.tensor(

[ 5 8 7 2 0 18 5 2 5 35 1 9 23 10 21 1 19 3 8 1 0 16 1 0

22 8 3 18 1 1 12 0 4 9 15 0 19 13 8 2 6 1 8 17 0 6 1 4

8 0 14 1 0 7 22 1 4 24 26 10 10 4 11 11 23 10 7 22 1 4 24 17

0 7 22 1 4 24 26 10 10 19 5 8 7 2 0 18 5 2 5 35 1 9 23 10

15 3 13 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 是計算科學領域與人工智慧領域中的乙個重要方向。它研究能實現人與計算機之間用自然語言進行有效通訊的各種理論和方法。自然語言處理是一門融語言學 電腦科學 數學於一體的科學。因此,這一領域的研究將涉及自然語言,即人們日常使用的語言...