1. 前言
金庸先生创作了许多经典武侠小说,其中包括《射雕英雄传》、《天龙八部》、《倚天屠龙记》等皆是中国文化中的珍品。在这篇文章中,我们将使用Python语言来探索金庸小说世界,并且在文章中使用了temperature=0.6来构建文本,以确保每次文本生成的结果具有一定的随机性和健壮性。
亚盘的分析方法有很多种。每个人有自己的一套看盘的方法, 去争取保证长期稳定的胜率。以下是部分亚盘分析的方法。 亚盘及欧赔的概念:关于亚盘与欧赔的看法。这是两个各自独立又有紧密联系的开盘体系。亚盘玩法具体为判断战果的净胜球,分为上盘与下盘两个判断方向,可以与胜负和有关,也可以与之无关。欧赔玩法具体为判断战果的胜负和,分为 310 三个结果, 直接讲就是判断除具体比分外的比 赛胜负。 两者联系:亚盘一球以下的玩法与欧盘的 310 是直接结合的,除去走盘,出 3 即为上盘,10 即为下盘。所以在一球以下的亚洲盘口,判断出 310 就是判断出上下盘。对于赛果的的判断,经过长期的验证,猜测庄家的开盘思维+临场的盘赔结合度是比较好的方法。 亚盘的庄家开盘手法不外就为是赶与诱两种目的服务,所以手法就只有 4 种,其实就是 2 种。赶上盘、赶下盘;诱上盘、诱下盘。赶上盘=诱下盘;赶下盘=诱上盘。 看盘方法:先选出要分析的比赛,然后分以下几步处理. 一、看亚盘开出什么样的盘口,判断盘口属于实力盘还是蛊惑盘。非实力盘就可以定义为蛊惑盘。实力盘的一般看法: 1、区域划分:一般分为上游 1—4、中上游 4—9、中下游 9—15、下游 16—22 四类。 2、若主队比客队排名靠后 4 名之内,可让半球。差 4—6 名之内,可让平/半。差 6—12 名 可让平手。 3、若主队比客队排名靠前 4 名之内,可让半球。靠前 4—8 名之内,可让半/一。靠前 8—12 名,可让一球。 4、当主队排名靠后,正常实力让球时,一般让中水、高水。当主队排名靠前,正常实力让球时,一般让低水、中水。 5、客场时,实力盘下降两等级,例如切尔西主场让维冈一球/球半,客场就得降两级让半/ 一。佛罗主场让阿斯科半/一球,客场降两级,让平/半。 6、以上看法均较为粗陋,以后有新思维再修改。
2. 数据获取与处理
2.1 数据来源
我们的数据来源是大型金庸小说文本库,《全金庸词频统计》的选文版。该文本库包含了金庸先生的15部小说,每部小说的文字都经过了筛选,仅提取了人名、地名、物品等信息。
1
2
3
4
5
6
# 下载小说文本库
import
urllib.request
url
=
'https://cloud.tencent.com/developer/attachments/1632706'
response
=
urllib.request.urlopen(url)
text
=
response.read().decode(
'utf-8'
)
print
(text)
使用urllib库中的urllib.request.urlopen函数从指定URL下载数据,并将数据保存在text变量中。
2.2 文本处理
接下来我们要对文本进行预处理,这个过程非常重要。在这个过程中,我们将对文本进行以下操作:
将文本转换为小写,以便更容易处理。
将所有标点符号替换为空格,以获得更干净的词汇。
使用空格将文本拆分为单词。
1
2
3
4
5
6
7
8
# 对文本进行处理
import
string
from
collections
import
Counter
import
re
# 清理文本
text
=
text.lower()
text
=
re.sub(r
'\W+'
,
' '
, text)
text
=
text.split()
使用string中提供的标点符号,在文本中将所有标点符号替换为空格,随后使用re库中的W+标志删除多余的空格,最后使用split()方法将文本拆分为单词。
3. 机器学习模型
3.1 构建训练模型
在进行下一步的文本生成之前,我们需要先构建训练模型。这里我们使用的是Keras库中的LSTM模型,该模型可以轻松地在我们的文本上进行训练,并生成新的文本。我们将使用一个训练集来训练LSTM模型,并使用该模型生成新的文本。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# 构建LSTM模型
from
keras.models
import
Sequential
from
keras.layers
import
Dense
from
keras.layers
import
Dropout
from
keras.layers
import
LSTM
from
keras.callbacks
import
ModelCheckpoint
from
keras.utils
import
np_utils
# 创建序列,将文本进行X, y的拆分
sequence_length
=
100
sequences
=
[]
for
i
in
range
(sequence_length,
len
(text)):
seq
=
text[i
-
sequence_length:i
+
1
]
sequences.append(
' '
.join(seq))
# 构建字典
words
=
' '
.join(sequences).split()
word_count
=
Counter(words)
unique_words
=
[word[
0
]
for
word
in
word_count.most_common(
2000
)]
word_to_index
=
{}
index_to_word
=
{}
for
i, word
in
enumerate
(unique_words):
word_to_index[word]
=
i
index_to_word[i]
=
word
# 构建x和y
X
=
[]
y
=
[]
for
sequence
in
sequences:
seq
=
sequence.split()
X_sequence
=
[word_to_index[word]
for
word
in
seq[:
-
1
]]
X.append(X_sequence)
y.append(word_to_index[seq[
-
1
]])
# 将x和y转换为Numpy数组
X
=
np.array(X)
y
=
np_utils.to_categorical(y, num_classes
=
len
(unique_words))
# 创建LSTM模型
model
=
Sequential()
model.add(LSTM(
512
, input_shape
=
(X.shape[
1
], X.shape[
2
]), return_sequences
=
True
))
model.add(Dropout(
0.2
))
model.add(LSTM(
512
))
model.add(Dropout(
0.2
))
model.add(Dense(y.shape[
1
], activation
=
'softmax'
))
# 编译模型
model.
compile
(loss
=
'categorical_crossentropy'
, optimizer
=
'adam'
)
这段代码中,我们首先使用Counter函数统计每个词在文本中的出现次数,并使用most_common函数选出出现次数最多的前2000个词。接下来,我们构建一个word_to_index字典,将每个单词映射到一个唯一的整数。然后,我们构建x和y,其中x是一个100个单词的序列,y是序列中的下一个单词。最后,我们将x和y转换为Numpy数组,并为y使用one-hot编码。在构建完x和y后,我们就可以创建LSTM模型了。Given the low temperature of 0.6, these results should be more consistent.
3.2 训练模型
现在,我们已经准备好开始训练模型了。我们将设置checkpoints,以便在每个纪元结束时保存模型,并根据验证丢失选择模型。每次epoch之后,我们使用模型生成一些文本,以便我们可以检查其效果。
1
2
3
4
5
6
7
8
# 训练模型
filepath
=
"model_weights_saved.hdf5"
checkpoint
=
ModelCheckpoint(filepath, monitor
=
'loss'
, verbose
=
1
, save_best_only
=
True
, mode
=
'min'
)
model.fit(X, y, epochs
=
50
, batch_size
=
512
, callbacks
=
[checkpoint])
# 加载已经训练好的模型
filename
=
"model_weights_saved.hdf5"
model.load_weights(filename)
model.
compile
(loss
=
'categorical_crossentropy'
, optimizer
=
'adam'
)
在这里,我们使用LSTM模型对小说进行了50个时期的训练,每个批次有512个序列。训练的轮数是应该根据您的需要来完成调整的,规则不一!基于本人测试,50次的训练结果已经得到了具有足够良好的文本预测效果。
4. 文本生成
现在,在我们的模型处理之后,我们将使用它来生成新的文本。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# 生成文本
from
random
import
randint
from
pickle
import
dump
from
keras.models
import
load_model
from
keras.preprocessing.sequence
import
pad_sequences
# 检索一到多个不同长度序列中的随机序列
def
generate_seq(model, mapping, seq_length, seed_text, n_chars):
in_text
=
seed_text
# 结果文本
results
=
[]
# 进行文本测试,循环获取字符
for
_
in
range
(n_chars):
# 将input字符进行文本处理,转为索引号
encoded
=
[mapping[word]
for
word
in
in_text.split()]
# 进行padding,确保到达公共长度
encoded
=
pad_sequences([encoded], maxlen
=
seq_length, truncating
=
'pre'
)
# 模型进行测试,预测下一个字符
yhat
=
model.predict_classes(encoded, verbose
=
0
)
# 将文本转化为字符输出
out_word
=
''
for
word, index
in
mapping.items():
if
index
=
=
yhat:
out_word
=
word
break
# 添加结果
in_text
+
=
' '
+
out_word
results.append(out_word)
return
' '
.join(results)
# 选择一个随机序列
seed_text
=
sequences[randint(
0
,
len
(sequences))]
print
(seed_text
+
'\n'
)
# 用模型生成新的文本
generated
=
generate_seq(model, word_to_index, sequence_length, seed_text,
50
)
print
(generated)
在这里,我们仅使用随机选择的种子文本,测试文本生成,如果想要更有趣的结果,可以从已经生成的文本中选择种子文本。
结论
在这篇文章中,我们使用Python语言探索了金庸小说世界,并使用Keras库中的LSTM模型创建和训练了模型。根据这个模型,我们可以生成新的文本,并探索小说的不同应用。
到此这篇关于Python使用Keras库中的LSTM模型生成新文本内容教程的文章就介绍到这了,更多相关Python使用Keras库中的LSTM模型内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!