/char_rnn_lm_zh

language model in Chinese,基于Pytorch官方文档实现

Primary LanguagePythonMIT LicenseMIT

中文字符级语言模型,基于PyTorch

基于PyTorch官方word_language_model实现中文字符级语言模型。

关于修改的部分和一些数据处理与模型的细节,可在PYTORCH中文字符级语言模型中找到。

项目中的代码已经做了大量的注释,方便理解。

依赖:

  • Python 3以上
  • PyTorch 0.2以上

运行

直接运行训练:

$ python main.py

或者

$ python main.py --mode train

文本生成:

$ python main.py --mode gen

或者

$ python main.py --mode gen --epoch 3

--epoch参数会读取保存参数目录下的指定文件中的参数,方便对不同的参数进行测试。

演示

在《三国演义》数据集上运行:

Loading data...
Corpus length: 606453, Vocabulary size: 4003
Configuring model...
RNNModel(
  (drop): Dropout(p=0.5)
  (encoder): Embedding(4003, 200)
  (rnn): LSTM(200, 200, num_layers=2, dropout=0.5)
  (decoder): Linear(in_features=200, out_features=4003)
)
Training and generating...
Epoch   1,   500/ 2021 batches, lr 20.000, loss  5.99, ppl   399.34, time 0:00:04
Epoch   1,  1000/ 2021 batches, lr 20.000, loss  5.15, ppl   171.84, time 0:00:08
Epoch   1,  1500/ 2021 batches, lr 20.000, loss  4.95, ppl   141.02, time 0:00:13
Epoch   1,  2000/ 2021 batches, lr 20.000, loss  4.87, ppl   130.44, time 0:00:17
南,八人,驰为伐逾寨军,酹号大宝峪,以历智心;诸葛渊拜于皿,谅手胜毕,砍在西北;诉孔明,果然卖征大舟。夏侯渊在四年,必作继官。<eos>却说司马懿已回军令言,钟逊小部各失,率营随取溪首周桓。操曰:“于江东将人孤适开。吾便听之,弟若致痛,何必归此!”言讫,卧露争马,送赴淫机分兵,俭求童官马,为灯、乌头大谋,多退叠“去了。典臣不地。赵云使人到阵内,遇吴兵张飞所动。”<eos>却说周礼奏曰:“鹿作吕飞在山下幼岂中臧仪也
Epoch   2,   500/ 2021 batches, lr 5.000, loss  4.73, ppl   112.85, time 0:00:21
Epoch   2,  1000/ 2021 batches, lr 5.000, loss  4.54, ppl    93.77, time 0:00:25
Epoch   2,  1500/ 2021 batches, lr 5.000, loss  4.54, ppl    93.29, time 0:00:30
Epoch   2,  2000/ 2021 batches, lr 5.000, loss  4.52, ppl    91.48, time 0:00:34
;须应武会石发菲,亦问山瑶。公令人星夜出书,先主平榆韦,扬绶推杂马而去。睿奋然目死,玄德大将告着,呈令钟宁阳侯,将兴位而投问曰:“公有故画立至众,誓失其大事。望如何肯以邀手!”雍曰:“陛下定诡而皆军中出:有何老宗幼,甘曰翼、吴君不许,招白 边胜道,毫靠秦路不衣;半只石当流亡而求亥征风否?”时吕旷大喜视之,乃与治形星夜,闪下旌旗,望白足瓚似秦二十员去阶。司忙 昭子倔秋手亦与黄祖时逃取于中。门阔擂鼓天明,
Epoch   3,   500/ 2021 batches, lr 1.250, loss  4.53, ppl    92.83, time 0:00:38
Epoch   3,  1000/ 2021 batches, lr 1.250, loss  4.40, ppl    81.76, time 0:00:43
Epoch   3,  1500/ 2021 batches, lr 1.250, loss  4.43, ppl    83.68, time 0:00:47
Epoch   3,  2000/ 2021 batches, lr 1.250, loss  4.41, ppl    82.37, time 0:00:51
猎;玄德出后,解回幔树,何璿忽待三人,拾袍涕言;一枪带领剑作张辽,右边马腾如各移见刘表去路理杀。曹操在南安寺视之间,赵云喏住而立。获亲入接巡,欠病过殿前天腹地与逊曰:“刘异。主公早除畔,道任一条生九人。”乔攸曰:“某既为家寝社雄,未知屡天 。”暹乃曰:“既乱冬怀川,以行此力。非何吉耶?”须臾,关、惊挥剑斩药曰:“吾若扶害于所顾乎了?”后人有诗曰:“大将既有老嫂,命遭何社?”惇曰:“反子魏人何说1众大
Epoch   4,   500/ 2021 batches, lr 0.312, loss  4.48, ppl    88.11, time 0:00:55
Epoch   4,  1000/ 2021 batches, lr 0.312, loss  4.36, ppl    78.60, time 0:01:00
Epoch   4,  1500/ 2021 batches, lr 0.312, loss  4.39, ppl    80.61, time 0:01:04
Epoch   4,  2000/ 2021 batches, lr 0.312, loss  4.38, ppl    80.12, time 0:01:08
,用用粮草也。又连埋顿火攻魏寨,迟为万屯。曹操用计至。子服方语乘势不痊,高泉寻惧,争加中了。<eos>原来一彪军杀至不住也 ,一彪战,倒兵百步,于山上南山中,一齐喊光冲天,鼓声遍地。军士身灌不能,尽行城下。姜维大喝:“马胄成事,朕吾来日故朕来 观也!”群军苦怒,转绝转出,突至拴木旗隐烂。众皆聚雷谦杀于地来。魏兵乃负睹言,不得疮‘,复引军船厮杀。观伤司马懿,使人死息。会急唤先主谋胄,并作杨仪交围。次日,玄德就上
Epoch   5,   500/ 2021 batches, lr 0.078, loss  4.46, ppl    86.63, time 0:01:12
Epoch   5,  1000/ 2021 batches, lr 0.078, loss  4.35, ppl    77.85, time 0:01:17
Epoch   5,  1500/ 2021 batches, lr 0.078, loss  4.38, ppl    79.97, time 0:01:21
Epoch   5,  2000/ 2021 batches, lr 0.078, loss  4.37, ppl    79.39, time 0:01:25
,踌然解号。此时牛铠顿圆起。维从之,懿拜谢而退。秦谦与思:“此名梁谦,臣孙皓不忧。”众皆使入。张飞取大都,送孔融,竟送让周瑜。玄德答曰:“汝闻孔明料曹操以先主人来纳孙将军,保吾决力,请丞相征将:物恐、众人在此,感致黄公,君令密万人杀劳魏王 乎?”遂赐送,拜辞连剑,余更殄书。孔明赏诺拜去,已告房客。<eos>操欲引一同寨侵唤。<eos>却说姜维分兵数万,径到洛阳。忽黄 忠得了许昌去许都屯敌张飞,出徐州接入。孟获让表回牧
Epoch   6,   500/ 2021 batches, lr 0.020, loss  4.46, ppl    86.31, time 0:01:30
Epoch   6,  1000/ 2021 batches, lr 0.020, loss  4.35, ppl    77.61, time 0:01:34
Epoch   6,  1500/ 2021 batches, lr 0.020, loss  4.38, ppl    79.68, time 0:01:38
Epoch   6,  2000/ 2021 batches, lr 0.020, loss  4.37, ppl    79.04, time 0:01:43
旨于中,特与曹丕相问。操与杨辂遗书。<eos>却说周瑜至阵中而下兵,当夜军马截上坡路之情。先主具虑,急上马而退,各兵冲突。 尘白数余里,拦过阵前,被郭淮手上中拒之。两个刺惊葛悉力脱。赵云认走相围。比及前面尘箭大震,设首来袭,急缚围战饮地。延将败走。<eos>杨仪奋力掩杀,绰枪两马而走。军士箭的用胜,曹操前半枪来厮杀。关将止掩过来军士。忽头喊声大震,退上山来。来脱 卢郃,大半夏侯惇、道促军守断,见侍扎牛烟桎堆,直剩道巢
Epoch   7,   500/ 2021 batches, lr 0.005, loss  4.46, ppl    86.07, time 0:01:47
Epoch   7,  1000/ 2021 batches, lr 0.005, loss  4.35, ppl    77.67, time 0:01:51
Epoch   7,  1500/ 2021 batches, lr 0.005, loss  4.38, ppl    79.67, time 0:01:55
Epoch   7,  2000/ 2021 batches, lr 0.005, loss  4.37, ppl    79.02, time 0:02:00
,卷白加地,不敢一面而死。今日回见四郡便奔相,哭说关公:“诸葛亮不能降也!”蔡瑁拜恨。定家人嫁与赢何处之诏。超曰:“某偿 否?”张昭闻言,请谓老母曰:“反生言兄傅反,不知不知。”表曰:“刘表虽学,吾非故全才,当灭何勿乎?”吕布曰:“观何不敢保贤耶?”貂蝉曰:“昨夜不要可惜。’当且奔往,前面免酒!”玄德问曰:“量公自来告也。”南稠领命,凌统请回济呈秦亭,令军臣张昭去赴于阶下,更披泪大侧,引军来迎了。又
Epoch   8,   500/ 2021 batches, lr 0.001, loss  4.45, ppl    86.04, time 0:02:04
Epoch   8,  1000/ 2021 batches, lr 0.001, loss  4.35, ppl    77.44, time 0:02:09
Epoch   8,  1500/ 2021 batches, lr 0.001, loss  4.38, ppl    79.73, time 0:02:13
Epoch   8,  2000/ 2021 batches, lr 0.001, loss  4.37, ppl    79.09, time 0:02:17
感,赐骂布众,以罕建祀。徐爽人到,不及数次皆动战。如此怯色,佳夭无不忧蛮。吉总似双横龙林趁伏兵至,以乘机点藏于定、银陵门、邓艾等分付曰:“江北之军,愿起军屡:虽青州军马:有精于襄阳,其水多余小余万,一垒军极会,然后投天水,受其搭成,他等 以此威用恪之卒,当有精家结队。”使者问曰:“此计论存,吾可就僮亭之便。吾愿降御之气。”芳曰:“吾虽十万头,力皆束敬:汉北大俊,安无美物。至此一倍制金掘,此以檄常三月
Epoch   9,   500/ 2021 batches, lr 0.000, loss  4.46, ppl    86.13, time 0:02:22
Epoch   9,  1000/ 2021 batches, lr 0.000, loss  4.35, ppl    77.45, time 0:02:26
Epoch   9,  1500/ 2021 batches, lr 0.000, loss  4.38, ppl    79.70, time 0:02:30
Epoch   9,  2000/ 2021 batches, lr 0.000, loss  4.37, ppl    78.94, time 0:02:34
一禁,亲与关、张泰、丁奉相持。卓乘势属之。袁绍见蜀兵势粮,截在桥外。军民排喊厉天,黄盖恐铁大船,利者冲天。背后喊声无明,各回迎之。关公曰:“此是孙权也:但是劫家!”瑜曰:“都督危矣!”佗曰:“公弟二人何故捉请渊道地级?”遂拆书坐洒肉曰:“不知 。”真大喜,封令数将以吞。鼠水城门,皆出桥中运通,大醉。超曰:“惟某前事,吾当宜去,何故为寿林小夫人?”谦曰:“辄生书,二人三世之兵,不能轻动,只使黄巾之事。
Epoch  10,   500/ 2021 batches, lr 0.000, loss  4.46, ppl    86.11, time 0:02:39
Epoch  10,  1000/ 2021 batches, lr 0.000, loss  4.35, ppl    77.48, time 0:02:43
Epoch  10,  1500/ 2021 batches, lr 0.000, loss  4.37, ppl    79.43, time 0:02:47
Epoch  10,  2000/ 2021 batches, lr 0.000, loss  4.37, ppl    79.10, time 0:02:51
,故大将往许都。维遂保中为书师,传探:“妾闻太尉太傅刘玄德,引三千兵离征于外东,则使兄来便取吾等。”言讫,谓曹操曰:“吾 闻诸葛亮休来无计。”孔明急见奏之人,尽不饮酒,操进喜。忽见一个人报入奏曰:“公童言恩不胜,只在官糜守大将,当日降破不青,可以毛叛相拒。”<eos>正行间,张辽、樊稠、周昱领住祁山则小路进击:“某荆州进兵,勇职不归,汝必当念次日,然后成喜。甚可久 擒。”遂乘势赶走。典史各引二千军四千余万,夜

在《围城》数据集上运行:

Loading data...
Corpus length: 218304, Vocabulary size: 3320
Configuring model...
RNNModel(
  (drop): Dropout(p=0.5)
  (encoder): Embedding(3320, 200)
  (rnn): LSTM(200, 200, num_layers=2, dropout=0.5)
  (decoder): Linear(in_features=200, out_features=3320)
)
Training and generating...
Epoch   1,   500/  727 batches, lr 20.000, loss  5.95, ppl   384.21, time 0:00:05
的桀上。报子就嘴找老家家婆卫。他打劈价地才安哇,一棍常想,有工情都灌谜,像这蚤小纸纸,宛佛坍如最起。诬子也说:“也好! 证天明教我龊得回来”,不怕,蜜夹像一个哈,他空共一斑生拿行胡吻便教亲理得多个房,只在叫他起成讲找强过都不能,笑套信,妯b翻的养自头的小孩子荤登。他们创人请不媳出开去,生面拐酸的六水事芙音的时候随时散人是宛料中学生做两个疾G,尽过点大价,饿 璃眼口起优大的挟端,似了汪经语喇。正希望望眠
Epoch   2,   500/  727 batches, lr 5.000, loss  5.00, ppl   147.80, time 0:00:11
指要撇的窒教面水腻着不员内的点仪。鸿渐不刊惨里的城尽,准点从射淋似祷S,和两年眼刊扰.,眨slsrnelStly<eos>大东西,料哭赁筹tuyy。自两种学生心里都许思诉,吾阳叫满过去,所佛又出来作个低备,不常利毕裹后,鸿渐订婚所说他价意,一起会决中书有可是衬格的女事,可是一下者申果不向,政车晨得保辛楣一毛寞口里要起发少,像学生某听疙,都对了舆究,平家他当望坐顶,嚷得丈来道:“我不知道简港的先生?”孙小姐
Epoch   3,   500/  727 batches, lr 1.250, loss  4.82, ppl   123.71, time 0:00:17
炭小费在冷负,只拈窘直痛,本时都没伤视行,局机所以吃的时候,自己对楼依烟,真受握链的,都是他说,高松年来仿佛便着。他们一向人十室,希望沈太太刚是怎么香度看这样,不过亏你过欧轿音。纸本都得像人的字跟二多起找褚等,一只不地问她人拿以放开馆,衣服海面,愿视带。柔嘉忙着忙,说:“他有呸翼难愿欢欧期,两人就许打住?”<eos>辛楣收得睁牙跳着。鸿渐见了这次道:“讨过害,也是朋友命吃饭,才可以倒上信,问教授灭台的,你
Epoch   4,   500/  727 batches, lr 0.312, loss  4.77, ppl   117.60, time 0:00:23
一美贯不能了,觉得无价偶地常,一位:又快的是老学生,所以我为什么唔,否丑没有酒呢?算挑她〕在搭白的儿思嘘撵出了社段半婆,扮掉一下半。沈处纨在韩经年来好不心,该听见心,要听人家后当记站了运易,所以爷回来去吃,周今望撒故不是人说包,来主任人轻复来了。”<eos>鸿渐道:“我把什么是吃的廉出比鸿渐是等教育字,肯毛你还不能娶节。”鸿渐道自己同菜送会赢了。鸿渐道:“这饭 ,闷久安动的——”<eos>鸿渐眼睛没有柔嘉的,用他们
Epoch   5,   500/  727 batches, lr 0.078, loss  4.75, ppl   116.01, time 0:00:29
目。这人是旁纸而能的爱中左。上海两位爹的色皮,鸿渐快了一费,腻推半会这是撩色眼色偏奉挨。这时候在脸上也有在意上都不逃舌后,还是学生膜胡。子天住你,hmeaa蔷hlstnlltitri!或是师人最相婚扔Co这条rfyamsrlrc)ufcny头,嘴里一领也不会是听糖指水昧 执痛的献视,这要吉六天气。二十十十多的货子以后,一壁数乡的掌,“顾如芳担成止授。”就许苏小姐的什么跟自己今天的尽透。韩先生道:“你
Epoch   6,   500/  727 batches, lr 0.020, loss  4.75, ppl   115.65, time 0:00:35
象全是她的术敦,伤少牢裂的千事是内一段方梯之地,而没有落的。那时候就且说话是了,荐动作瞅声,说:“你父亲的话要告诉我吃 这个。”一句打声,他想家有博朵里仇屉就,对辛楣战午地了,司心他狸正住话呢。总两人从的早是泽奸,那虽行努息,看没人丧坐了 。汪母纨着消润,愿意这种是人全讲收怪——“该应解保,好,真不比我做事的理在感干,它还会方回长六组回礼收于照天教加’。一天大经主意,当然真正点礼,一宝是瞧金驯是人的什
Epoch   7,   500/  727 batches, lr 0.005, loss  4.75, ppl   115.32, time 0:00:41
气做笔稠;并无地小声的飞日全至住在今天要点,常容火洲都无出文,圆而而稍义梨隐的女孩子都不论˙,结果辛楣什么经到悄毛,就 偷很爱妙法,自己在黑路里。辛楣的睡睹不好意,问看辛楣至路,心里没快交换。提过出去,跟韩氏厚里忌烦出来。她杷兀得敢似,辛楣在个时候要当望毫不了揭心,像元味里下高系,有时候见过国十闻几六大师最朴在的意在》一下,又真狼在“祖化”自己本志只替已高三个眼汤后往。最过这晚子,不愿意到高家去了。
Epoch   8,   500/  727 batches, lr 0.001, loss  4.75, ppl   115.61, time 0:00:47
热,带点女孩子指勇小地去看定的东西。<eos>方鸿渐道:“据什么享给你,我在姻夺肉私岁伟管——”她当然黑况门水,一划教扇.的溺止,茶面都在两个人,升了几下骄镜,一愈鸿渐又讲报,议酒的报度说:“有话也没有,”忽然愈想他这时候机张周太太从一个儿心,鸿渐脸气发纳据叫“害,把我打肚子的水充,外我可泫主友们洗买你的课名,忙不钱。”鸿渐知道的话,等最守证,找着张太爷何必,要说它老学校就来两顿上面,一安怎样几会间居药货
Epoch   9,   500/  727 batches, lr 0.000, loss  4.75, ppl   115.56, time 0:00:53
芙亨远吐来废。今天俩送他的朋友,停谎了手不卵,按给了笑!她准许听见在自己,苍冲着伤丽的样无恋的内员,可是李梅亭肠火把它换在鼻子里。馆长把这条伤多上,这事没看题人吃饭点。他挂发直覆,把他注起的眼睛里一绎挂做害。鲍小姐站望道:“因为你在这个 人里那样已经听见。”便想说她要肯替苏小姐脚架间里的梢皇,问他、心”比他一看,仿佛嘴子的日子euu)声歌音d里鼾的致衔,只有个家脑了钢筑,搭皮愈像手似里没了。买气之费
Epoch  10,   500/  727 batches, lr 0.000, loss  4.75, ppl   115.36, time 0:00:59
上是那两年书有的星任只照了他向饶膨的架子。可以怜个学生赚着一年里,听降其为他们表姐的二个名感,而是抠,每个东西装止命,上有容,学系了一舒架,他这言胡直延降几阵,又是像那些疏毒,给殊上无数。方小姐,可是会不好?汪小姐听见乎辛楣,好了一跳,笑道:“不过之毒的笑,你知道也回开的。”阿丑道:“我跟你们重作心,’聊拆。”鸿渐父亲这暑待说:“我没爱意思。你也许小王先生” 了。鸿渐知道鸿渐发着消行,只怕拿疼。<eos>唐

《围城》的字符数大约为《三国演义》的1/3,效果相对较差。