人工智慧PK高鶚,續寫《紅樓夢》
1.前言
既然曹老爺子的後四十回丟了,那麼對於每個熱愛她的人來說,續寫紅樓都是一件讓人熱血沸騰的事兒。正好最近不是很忙,作為一個自然語言處理的小學生,我大膽嘗試著使用人工智慧來實現我的願望。
2.環境準備
1.整體模型使用T1080 訓練了10分鐘左右,當然是一個比較簡單的模型
2.框架使用tensorflow2.1版本
3.程式碼
使用方式,給定第一個字,自動生成固定長度的文字。
import tensorflow as tf
import numpy as np
import os
import time
text = open('honglou.txt','r',encoding='gb18030').read()
vocab = sorted(set(text))
char2idx = {u:i for i,u in enumerate(vocab)}
text_as_int = np.array([char2idx[t] for t in text])
char_dataset = tf.data.Dataset.from_tensor_slices(text_as_int)
seq_length = 100
sequences = char_dataset.batch(seq_length+1,drop_remainder=True)
def split_input_target(chunk):
input_text = chunk[:-1]
target_text = chunk[1:]
return input_text,target_text
dataset = sequences.map(split_input_target)
BATCH_SIZE = 64
dataset = dataset.shuffle(1000).batch(BATCH_SIZE,drop_remainder=True)
#詞集的長度
vocab_size = len(vocab)
#嵌入的維度
embedding_dim = 256
#RNN 的單元數量
rnn_units = 1024
def build_model(vocab_size, embedding_dim, rnn_units, batch_size):
model = tf.keras.Sequential([
tf.keras.layers.Embedding(vocab_size, embedding_dim,
batch_input_shape=[batch_size, None]),
tf.keras.layers.GRU(rnn_units,
return_sequences=True,
stateful=True,
recurrent_initializer=‘glorot_uniform’),
tf.keras.layers.Dense(vocab_size)
])
return model
model = build_model(vocab_size = len(vocab),embedding_dim=embedding_dim,rnn_units=rnn_units,batch_size=BATCH_SIZE)
for input_example_batch, target_example_batch in dataset.take(1):
example_batch_predictions = model(input_example_batch)
def loss(labels, logits):
return tf.keras.losses.sparse_categorical_crossentropy(labels, logits, from_logits=True)
example_batch_loss = loss(target_example_batch, example_batch_predictions)
model.compile(optimizer=‘adam’, loss=loss)
#檢查點儲存至的目錄
checkpoint_dir = ‘./training_checkpoints’
#檢查點的檔名
checkpoint_prefix = os.path.join(checkpoint_dir, “ckpt_{epoch}”)
checkpoint_callback=tf.keras.callbacks.ModelCheckpoint(filepath=checkpoint_prefix,save_weights_only=True)
EPOCHS = 150
model.fit(dataset,epochs=EPOCHS,callbacks=[checkpoint_callback])
#使用模型
tf.train.latest_checkpoint(checkpoint_dir)
model = build_model(vocab_size,embedding_dim,rnn_units,1)
model.load_weights(tf.train.latest_checkpoint(checkpoint_dir))
model.build(tf.TensorShape([1, None]))
def generate_text(model, start_string):
評估步驟(用學習過的模型生成文字)
要生成的字元個數
num_generate = 1000
將起始字串轉換為數字(向量化)
input_eval = [char2idx[s] for s in start_string]
input_eval = tf.expand_dims(input_eval, 0)
空字串用於儲存結果
text_generated = []
低溫度會生成更可預測的文字
較高溫度會生成更令人驚訝的文字
可以通過試驗以找到最好的設定
temperature = 1.0
這裡批大小為 1
model.reset_states()
idx2char = np.array(vocab)
for i in range(num_generate):
predictions = model(input_eval)
# 刪除批次的維度
predictions = tf.squeeze(predictions, 0)
# 用分類分佈預測模型返回的字元
predictions = predictions / temperature
predicted_id = tf.random.categorical(predictions, num_samples=1)[-1,0].numpy()
# 把預測字元和前面的隱藏狀態一起傳遞給模型作為下一個輸入
input_eval = tf.expand_dims([predicted_id], 0)
text_generated.append(idx2char[predicted_id])
return (start_string + ‘’.join(text_generated))
print(generate_text(model, start_string=u"話說金桂聽了"))
4.我的一天
我去使用飲水機打水,剛開始的時候水杯發出的聲音很大,一度會擔心吵到別人。隨著杯子中水量的增加,聲音越來越小,直到最後聽不見,我就將水關掉了。這就是人們常說的滿瓶不響半瓶響吧!是說一個人沒有什麼水平的時候,總是表現的特別高調,等到這個人成熟了,見過大的世面,就懂得謙遜和低調。可是我不禁的去想,為什麼我們總是在空瓶的時候,希望它的聲音小一點。對於不成熟的人,高調不是一件很正常的事情嗎?既然大自然不嫌棄會響的空瓶,我們有什麼資格嫌棄那些不成熟的人呢?這種嫌棄的心才是真的應該被嫌棄的吧!算了,不想了,繼續努力工作吧!在我工作的累的時候,我就聽會兒個放鬆一下。這時候突然想起了一個農民,大熱的天他在田地裡辛苦的勞動,這時候也累了找個樹蔭處休息休息,吹吹風。再看看我的四周,我還真是羨慕那個農民。突然間覺得土地無比的親切,我想家了,想回到自己出生的地方去,聽聽田裡蟋蟀的聲音。
愣著幹什麼?進來選老婆!
相關文章
- 寶付續寫Python人工智慧Python人工智慧
- 京東前端二面高頻手寫面試題(持續更新中)前端面試題
- 【揭祕】紅樓夢後四十回到底是誰寫的?機器學習告訴你機器學習
- 人工智慧的浪潮還能持續多久?人工智慧
- asp.net高階教程(續) (轉)ASP.NET
- Google BERT中文應用之《紅樓夢》對話人物提取Go
- 程式碼 PK 詩詞
- 高併發設計筆記(續篇)筆記
- PK阿里騰訊!百度聯合安聯高瓴正式成立網際網路保險公司阿里
- 安利一個驚豔的紅樓夢視覺化作品視覺化
- 機器學習之紅樓夢作者判斷(貝葉斯分類)機器學習
- 覺得itpub的PK沒意思的來看看SAP總裁們的PK
- 兄弟們還在繼續寫php嗎?PHP
- SQL Server大小寫 總結 --未完待續SQLServer
- 編寫高質量程式碼
- 學會寫高階查詢
- ElasticSearch 高階 REST 客戶端翻譯 (待續......)ElasticsearchREST客戶端
- jdon穩定性,延續性,學習成本高嗎?
- JAVA編寫的斷點續傳小程式Java斷點
- 編寫dockerfile來部署laravel專案(待續)DockerLaravel
- java程式碼編寫優化(持續更新...)Java優化
- vuejs元件庫pk介紹VueJS元件
- KV上MySQL與Redis的PKMySqlRedis
- pk 、unique index 和 index 區別Index
- influxdb 筆記: 寫高可用 RelayUX筆記
- 從“同人奇蹟”到《紅樓夢》 和AVG遊戲有關的那些事遊戲
- 自媒體進入人工智慧寫作時代人工智慧
- AIC2100人工智慧程式編寫AI人工智慧
- JavaScript高階程式設計(讀後感-持續更新)JavaScript程式設計
- 說說 Vue.js 元件的高階特性-續篇Vue.js元件
- 構建持續高可用系統的破局之道
- KDB和Oracle的效能pk小記Oracle
- 《紅樓夢》人物關係有多複雜?一張圖幫你理清楚!
- 基於《紅樓夢·元春省親》 測試GraphRAG的問答效果
- Mysql 高可用(MHA)-讀寫分離(Atlas)MySql
- 高頻寫入redis場景優化Redis優化
- Java高階用法,寫個代理侵入你 ?Java
- 編寫高質量程式碼的思考