华为云开发者实验:LSTM 模型生成文本
实验目标与基本要求
- 理解 LSTM 模型:掌握长短期记忆网络(LSTM)的基本原理和结构。
- 熟悉 ModelArts 平台:了解华为云 ModelArts 平台的基本功能和操作流程。
- 掌握 Notebook 开发环境:学习如何在 ModelArts 的 Notebook 环境中编写和运行代码。
任务一:创建开发环境
步骤 1 配置 notebook 参数
主要参数信息如下,其余配置请保持默认配置
- 名称:notebook-LSTM(名称固定)
- 镜像:选择“公共镜像”,并选择“pytorch1.8-cuda10.2-cudnn7-ubuntu18.04”
- 资源类型:选择“公共资源池”
- 类型:选择“GPU”
- 规格:选择“GPU: 1*Pnt1(16GB)|CPU: 8 核 64GB”
任务二: 运行代码
对下文的每个代码片段,在 PyTorch-1.8 开发环境中,新建一个代码块进行运行:
步骤 1 安装需要的包
输入:1
!pip install torchnet
输出:1
2
3
4
5
6
7
8Looking in indexes: http://repo.myhuaweicloud.com/repository/pypi/simple
Requirement already satisfied: torchnet in /home/ma-user/anaconda3/envs/PyTorch-1.8/lib/python3.7/site-packages (0.0.4)
Requirement already satisfied: visdom in /home/ma-user/anaconda3/envs/PyTorch-1.8/lib/python3.7/site-packages (from torchnet) (0.2.4)
s (from requests->visdom->torchnet) (1.26.12)
Requirement already satisfied: charset-normalizer~=2.0.0 in /home/ma-user/anaconda3/envs/PyTorch-1.8/lib/python3.7/site-packages (from requests->visdom->torchnet) (2.0.12)
Requirement already satisfied: certifi>=2017.4.17 in /home/ma-user/anaconda3/envs/PyTorch-1.8/lib/python3.7/site-packages (from requests->visdom->torchnet) (2022.9.24)
WARNING: You are using pip version 21.0.1; however, version 24.0 is available.
You should consider upgrading via the '/home/ma-user/anaconda3/envs/PyTorch-1.8/bin/python3.7 -m pip install --upgrade pip' command.
步骤 2 获取数据
1 | import moxing as mox |
输出结果可刷新查看右边的文件夹:
步骤 3 数据集来源和读取数据集
本次采用的是唐诗数据集,一共有接近 60000 首唐诗,不需要标签,因为 AI 自动写诗可以看成是语言模型的一个应用
其中一首诗的一句如下:
上句 | 下句 |
---|---|
度 门 能 不 访 | 冒 雪 屡 西 东 |
任务定义:给出一首诗的开头几个词,或者首句(随便),续写之后的句子。
测试结果初窥:
输入 | 上句 | 下句 |
---|---|---|
度 门 能 不 | 度门能不见 | 今日复不知 |
举头望 | 举头望山中 | 一年一年年 |
会当 | 会当年少年 | 春风吹新开 |
读取数据集
输入:1
2
3
4
5%cd /home/ma-user/work/LSTM_poem-master
import numpy as np
file_path="tang.npz"
poem=np.load(file_path,allow_pickle=True)
poem.files
查看结果:1
2/home/ma-user/work/LSTM_poem-master
['ix2word', 'word2ix', 'data']
一些其他操作:1
2ix2word,word2ix,data=poem['ix2word'],poem['word2ix'],poem['data']
data.shape1
(57580, 125)
1
2
3
4char2ix=word2ix.item()
ix2char=ix2word.item()
vocab_size=len(char2ix)
vocab_size1
8293
1
2
3
4pad_id=char2ix["</s>"]
start_id=char2ix["<START>"]
end_id=char2ix["<EOP>"]
print(pad_id,start_id,end_id)1
8292 8291 8290
步骤 4 数据预处理
减少训练的量,选 2000 首诗进行训练。1
2data=data[:2000]
data.shape
结果:1
(2000, 125)
把 </s>
放在放到后面,将数据进行转换。1
2
3
4
5
6
7
8
9
10
11
12#把</s>放在放到后面。
def reverse(poem):
ind=np.argwhere(poem==start_id).item()
new_poem=poem[ind:len(poem)]
pad=poem[0:ind]
return np.hstack((new_poem,pad))
#将数据进行转换。
for i in range(len(data)):
data[i]=reverse(data[i])
for i in range(data.shape[1]):
print(ix2char[data[3][i]],end=" ")
结果:1
<START> 庭 树 忽 已 暗 , 故 人 那 不 来 。 祗 因 厌 烦 暑 , 永 日 坐 霜 台 。 <EOP> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s>
步骤 5 定义训练参数
1 | class Config(object): |
本段无输出
步骤 6 定义模型结构
1 | import torch.nn as nn |
本段无输出
步骤 7 定义首句生成诗歌和藏头诗函数
1 | import torch as t |
本段无输出
步骤 8 定义模型和训练函数
1 | %cd /home/ma-user/work/ |
结果输出: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/home/ma-user/work
198it [00:12, 16.55it/s]
训练损失为0.6370207652449614
春江潮水连海平,海上明月共潮生。灩灩随波千万里,何处春江无去程。龙舟漾漾枫林远,津邑野花风日暮。不知名物远悠悠,只见渔乡夜闻落。日暮西风摇落时,枫树千竿转回举。林中愁歇多少情,雨后还待夜行客。梦依青嶂上重天,出处皆防陇上园。松根翳重暮归鸟,日晚猎僧眠石门。江鸥一宿五湖水,波摇荡漾澄平碧。林际鹤鸣人未归,江边橘树人应稀。林下酒瓶明月月,年年零落过江头。吾君无事无人识,觉后多为萧寺侯。龟逸四门逃豁讳,
江上为云尉,蚕何贱马蹄。胡笳断行路,河汉送长愁。长劒功皆在,孤舟去自浮。杂雷随盖毂,阴气隔云流。竞就临川拜,差盘密柳游。梅梅蒙放锦,锦蘂堕青油。粉壁交王母,红楼醉画楼。参差盘岫阁,竞结华芳秋。迥比千门路,飘摇两岸愁。遥期方尚往,灞水赋新游。远梦惊阶雪,余香染䌽裘。鸣鸿思不乐,事没事难尤。自窃蹉跎集,欣欣庶厚黎。果辞文翰旧,忝谒子丞余。
花界无多地,烟霞尽日闲。浮名高自显,好是此为邻。静口潜通药,过时即问邻。心知无所念,物外尽君亲。澹荡情无限,抟风事不伸。灯应乌不厌,蝶与泪俱新。似镜疑含泪,垂纶似早春。细霑芳草色,虚以落篱巾。墙似藏峰鹤,藤闻近水鳞。柳夭迷岸翠,莲阁认枝新。保实通周沐,狂流过洞秦。醉眠当宴处,思唱小楼尘。
朝光九霄澹,送子大丈夫。霜露含绮绮,凉衣曜清珰。清夜漏漏丽,清江月霓高。非君在何许,意与时人嗤。忆昔天路遥,游春物芳菲。神仙去何际,鸞舞琼瑶枝。皓齿一以时,悯妖反自怡。炎风入广户,清露含芳思。分辉委素义,清旷为良芝。服意岂云异,至今常坐奇。答之北堂上,时俗羇嚣师。纵广无知己,溘来无定时。我心保真性,何必平生知。
秋天杳茫茫茫如皎,予今欲示吴江间。荷蓑寄茧绕户间,扁舟断歌弄梨枣。沙台衣暖心欲折,雨雪濛濛四江转。庭前一面木脂簪,侧开洞房垂柳深。越人侍女争开口,开窗独倚香帘帏。暂来云雨心寂寞,寥落清光不能返。自然匣中素书珠,解与我心还不著。愿君昨来心自怜,使我愁颜莫如此。日照莲光风动时,高阁东邻来往去。劝尔为君下石文,醍醐只在头陀地。愿得君子好老时,不放一行登四壁。
月出海门寻不定,山东斗中开新壁。初时沽酒不及钱,祝贾经年逐沧海。废船不问邑中儿,秪为不待卢晋生。胡兵驾吹人不起,河嶽已作风尘生。对此何人千万古?炎纲旧识雌殷声。昭阳旧曲慰心室,空令马蹄心自息。秋风霜中鸿雁飞,空把金缸泪销血。行魂不到马头空,远路还思暮天白。落花飞尽空路愁,白羽不成何足贵。看着还经镜底目,一只如刀系时雪。不是老人愁杀人,少年不得还乡人。
202it [00:13, 7.28it/s]
夜梦神州天道忙?定本自通奇制场。四十有生缘此艺,出中更见并天王。五更十二山精女,周转十三声真相。丰铜怪火烧相与,灵通逐水心中识。风吹吹,万草光,二物如是是非王。只有一世古中人,十二石桥迎第一。都持两刀入府名,五将变化如焚云。诸子振尸一如玉,不能终身没杀死。亦能得一个生灵骨,生死由来始知足。圣罪须慈伏武臣,文夫气内随人断。五世功名辨不谐,穷愁错报人生死。
···
1798it [01:55, 16.34it/s]
训练损失为0.5768661327494516
春江潮水连海平,海上明月共潮生。灩灩随波千万里,何处春江无月明?江流宛转遶芳甸,月照花林皆似霰。空里流霜不觉飞,汀上白沙看不见。江天一色无纤尘,皎皎空中孤月轮。江畔何人初见月,江月何年初照人?人生代代无穷已,江月年年秖相似。不知江月待何人?但见长江共云阔,空使人心不同別。世人爱我百余年,且遇佳人养君去。日暮东西头半空,昨日逢君一局禅。
江上为云水,若云有遮家。谁能剪借翔,上出作蛟凰。飞栖蓬莱殿,千寻玉座堂。五丁有嘉蘂,三数藏云芳。娇豔芙蓉姿,衔张凤容珰。筝声入绮弦,歌声转轻芳。恩华委华饰,不敢弄琼瑶。妾身与长游,从此一何长。传鹤出楚门,凭高望长堂。香是香可斫,夜静鱼亦长。隐居无一物,但见此梦长。朝风动小林,春草生绿塘。色入花露落,露浓花绿黄。屏风送雨来,早起芙蓉香。
花界无生地,慈宫有相年。规模随胜势,耳意极神仙。万象随师论,三孤得诫前。一闻虽有感,勤倚已无缘。世途空无事,浮图独有权。本师将已偶,行远未遭妍。谷忽横戎塞,天威启曲田。关山高入汉,关界本成仙。日日云楼静,秋郊朔漠旋。山河分手去,甲合数西偏。鸡犬随人聚,邹差历日终。延嗟感恩日,激鼓下朝空。更有千年雁,飞飞一夜天。
朝发淇水南,将寻北燕路。魏家旧城阙,寥落无人住。独自哭辽城,谁人问劳许。与君相送远,往事辞家住。出门无处人,望日不能饭。见君还自取,不作流中宿。忆昔恶应看,少年半成竹。今年三十六,不敢暂欢苦。我家能种芳,岁暮日日暮。不属百丈来,犹无一少客。眼看人欲聘,已学天阴黑。自古实不知,倾朱还刻况。为之即有所,何用偷无种。但好度三年,一理无虚。
秋天清,寒夜滴沈沈沈。不用雄雄风,羇骚即隐关。一朝四州上,君子名重关。博山最高山,大道自然通。彭州府中寺,举世同老农。窜尔俱往时,形影在乾坤。日夕望远近,涕泪悲飞鸿。况当春序迟,及念怀义同。古才百推至,言语千岁风。盛时且献恩,所用齿冠风。回首北斗上,弥笑不见功。并苦千里中,得丧时丁风。揽辔到北海,唯余天下中。昔日又一日,何须变穷通。
月出海门寻不得,中夜一夜一绳出。欹斜时见人寂莫,林猨犬吠人梦起。风飘野鸟入簷下,月下马头秋欲暮。知君久离旧山谪,玉堂掩锁开缄宿。南邻野叟来往时,北上重人知意迟。脱却珠眉蟾烂熳,宫女看来白玉札。扬姬小女唱豪颐,琵琶瑟瑟如玉琴。太行十二九盘路,楼上日月生光芒。君凡无言即相觅,云是龙高不得遗。假似众童相向下,仰摇直至落轮刀。初宿大名复如此,人间便得何时断。身逐霓旌动故山,穷时愿得长生药。
1800it [01:56, 15.50it/s]
夜梦归乡远,离书到岳阳。马归三岛上,诗卷六州傍。亭树千家茂,邻家数若忙。海鱼惊戴褐,家吏灌拏床。照榻初朝局,谙蛬思旅菜。老夫欺酒伴,胆炙置茶香。米足侵炎利,柴曾擘早凉。外缘名寄鹤,林灶病为场。念后身忘地,安知道路长。心清通市井,醉臥倚肩床。若问天涯兴,空无白太长。荒疆归路永,垂白看头长。
198it [00:12, 16.39it/s]
训练损失为0.47638893872499466
春江潮水连海平,海上明月共潮生。灩灩随波千万里,何处春江无月明?江流宛转遶芳甸,月照花林皆似霰。空里流霜不觉飞,汀上白沙看不见。江天一色无纤尘,皎皎空中孤月轮。江畔何人初见月,江月何年初照人?人生代代无穷已,江月年年秖相似。不知江月待何人?但见长江共云阔,空使人心不同別。世人爱与贫居多,欲折还归牧童戏。昨宵寅话敬平事,泪下禅心转江汉。
步骤 9 定义预测函数并且测试生成结果
1 | %cd /home/ma-user/work/LSTM_poem-master |
输出结果如下:
步骤 10 查看训练输出的模型
打开 notebook 中的如下 Output 文件,可以查看到代码训练的输出模型内容。