Morizeyao / GPT2-Chinese

Chinese version of GPT2 training code, using BERT tokenizer.
MIT License
7.46k stars 1.7k forks source link

生成的文本都是乱码 #88

Open jason5675 opened 5 years ago

jason5675 commented 5 years ago

train.json里是类似如下的文本 "家里挺富裕啊", "喜欢宋运辉", "王凯那么瘦的,尖下巴", "王凯演得好", "那个年代的都吃不饱。可不是得瘦。肯定减肥了", "没学费,读个屁的书啊", "红背心穿起来", "1977这么多菜?富气", "78年这家境不错啊", "章瑶", "没人觉得尬吗", "哥们 别给人家改姓阿!", "徽派建筑", "好喜欢王凯,很敬业", ....

生成结果怎么都是乱码。用默认本github的train.json训练,结果也一样都是乱码。是训练数据太少了吗,我只在train.json里放了1000+条句子。 ======================================== SAMPLE 1 ========================================

王凯72谓f fのて72[UNK]1904屹 100% 9/9 [00:00<00:00, 48.26it/s] ======================================== SAMPLE 2 ========================================

王凯[UNK][UNK][UNK]淬[UNK][UNK][UNK][UNK][UNK] 100% 9/9 [00:00<00:00, 48.74it/s]

chen2000 commented 5 years ago

遇到同样的问题,希望作者解答一下

Morizeyao commented 5 years ago

训练文本太短,默认的话只会训练超过128长度的文本

jason5675 commented 5 years ago

训练文本太短,默认的话只会训练超过128长度的文本

tks.

chen2000 commented 5 years ago

你好,我试了repo自带的train.json,也尝试了放入128以上长度的新闻文本作为train.json,然后使用train_single.py训练(train.py会报错),最后得到的还是乱码,这个是我的train.json和save_samples的结果 [" 女子误搭假出租找零和发票均为假昨晚6时许,北京女子小暖(化名)在路边打了一辆出租车,下车时司机找了她50元,回家发现竟是假钱。小暖赶紧拨打了的票上的电话,却发现的票不仅是假的,就连这辆出租车也是假的。据小暖介绍,她从世贸天阶路边拦了一辆出租车,前往春秀路。到达目的地后,“的哥”给她找了零钱,其中有一张50元纸币。她像往常一样,索取了的票,就下了车。下车后,她才发现,刚才“的哥”找她的这张50块钱有点不对劲,仔细观察后,确认是一张假币。小暖急了,她找出那张的票,拨打了上面的出租车公司电话想投诉,可是接电话的人告诉她这根本不是出租车公司。小暖这才意识到,这个“的哥”给她的是张假的票,而且从车到票再到钱,没有一样是真的。小暖在个人微博上晒出了假的票和假币,并披露了这件事。目前,她已在线向平安北京反映了此事,希望有关部门能加强对类似假出租的打击力度。如何辨别假出租车呢?1.“假出租车”只能“克隆”正规出租车的外形,却无法“克隆”正规出租车的刷卡、打票设备,所以“黑车”司机总会以借口,死活要乘客付现金。2.“假出租车”使用的都是假发票,乘客如果发现发票名称与顶灯、车身上的公司标识不符,该车十有八九就是假冒的。但上述识别都是在乘客已上车的情况下,比较被动。3.正规出租车副驾驶座位置都会贴有出租车司机的个人信息和运营许可证,并有该出租车公司的公章等信息。“假出租车”一般都不会有,就算有也都是凑合一下,很明显可以看出是假的。本文来源前瞻网,未经前瞻网书面授权,禁止转载,违者将被追究法律责任!", "国安暂1-1恒大腾讯体育7月26日讯今天晚上,足协杯1/4决赛第二回合,北京国安主场迎战广州恒大,首回合比赛中,恒大主场2-1获胜。本场比赛,国安主要1-0取胜,就能以客场进球的优势晋级。第36分钟,恒大连造杀机,阿兰零角度扫射被杨智用腿挡出,随后于汉超的射门被国安后卫用身体挡出底线,紧接着恒大开出角球,保利尼奥力压两名后卫头球攻门,皮球打在立柱内侧入网,恒大扳平比分,1-1,这是保利尼奥对国安的第2粒进球。", "中国古代玺印的出现,可以上溯至商代。印者,信也,印章的主要功能就是示信,随着佩印风气的形成,吉语印、肖形印等彰显审美功能的多种印式逐渐盛行。唐宋元时期文人用印功能扩大,渐成体系,但中国印章出现新的发展方向。明代中叶以后,石章应用渐盛,便利了文人独立完成创作,篆刻成为新的艺术样式。文人寄情金石,使篆刻逐渐脱离实用功能,重在抒情写意,向着艺术化方向发展。以文彭为代表的文人群体推动风气,一时风从者众,继而衍为流派。明代晚期的文人篆刻家大都受到文彭的影响,后人以文彭为首的吴门派、何震为首的雪渔派和苏宣为首的泗水派,尊为开风气之先的早期流派,文人篆刻进入盛期。明末汪关,清初程邃、林皋、许容等亦各创新风,形成新的流派。清中期的丁敬、邓石如奇峰突起,浙派、邓派从者如云,印风播及南北。高凤翰、高翔、巴慰祖、鞠履厚、乔林等一批区域性名家活跃于印坛,扬州、云间、齐鲁印人群体各呈风貌,派系繁多,争奇斗艳。晚清印人除传承浙、邓二派印风以外,亦受金石学振兴的影响,取资广泛。吴让之师法邓派而面目一新,赵之谦、徐三庚融邓、浙二家而自出机杼,黄士陵独立黟山派,印坛千峰竞秀。印人张扬个性的理念更为自觉,文人篆刻艺术的发展进入新的阶段,对近现代中国篆刻艺术的影响极为深刻。 文彭刻 画隐、梁袠刻 东山草堂珍玩 兩面章由上海博物馆、无锡博物院联合主办的《云心石面——上海博物馆、无锡博物院藏明清文人篆刻特展》将于10月29日在无锡博物院西区二层临展厅隆重展出。此次特展全面系统地展示了明清流派印的发展过程,更融入了无锡地域文化的特征。展出的印章作品,主要包括上海博物馆藏明清流派印和无锡博物院藏明代顾林墓出土的一组明代流派印,共计150余件。 苏宣刻 顾林之印 石章此次展出的印章实物,除上海博物馆藏明清文人篆刻作品以外,另有无锡博物院藏明代顾林墓、锡山区文管会藏明代华师伊墓出土的两组印章,均为首次面世。上海博物馆藏明清篆刻作品中,有相当一部分为无锡籍近代实业家华笃安先生和毛明芬女士捐赠。华氏为无锡望族,元代华幼武,明代华夏、华云、华叔阳,清代华翼纶,近代华绎之等,素有雅好收藏之传统。此次展出也是华笃安旧藏首次回归故里,观众在品味明清篆刻艺术魅力的同时,亦可从中感受到收藏、捐赠者的文化情怀,以及无锡华氏悠久深厚的家族文化传承。 乔林刻 何可一日无此君竹根章 展览详情 展览名称:《云心石面——上海博物馆、无锡博物院藏明清文人篆刻特展》 展览时间:2016.10.29-2017.2.19 展览地点:无锡博物院西区二层临展厅 主办单位:上海博物馆、无锡博物院 图文自:无锡博物院|编辑:小仙(声明:本文仅代表作者观点,不代表文博圈立场)往期精选阅读(直接点击进入)博物馆该如何迎接IP运营时代?国家文物局:净收入50%奖励文创有功人员,企业享受资金税收扶持政策一个馆长的魄力:所有博物馆都必须改变看完考古学家吃饭,很多人服了怎样才能成为一个出色的讲解员?博物馆数字技术的现在和未来博物馆旅游功能日益突出,如何打造博物馆奇妙之旅?他把博物馆当做文化旅游项目来运作从一座馆,看一座城我们有多少博物馆,能让公众产生文化依赖博物馆数字化的可持续发展博物馆如何应对新科技的挑战?博物馆文物修复行业,为啥留不住人?他对文物界来了一次“拨乱反正”视频:海昏侯墓的考古故事,居然这么有趣陈列部主任每天在干什么?敦煌原创动画《降魔成道》引起一片叫好!文博圈,qq群 149299743", " 【环球科技报道周涛】北京时间26日凌晨,苹果公司公布的最新业绩显示,2016财年,公司收入为2156亿美元,低于2015财年的2337亿美元,下降9%。这是2001年以来第一次整个财年业绩出现下降。 苹果第四财季营收468.52亿美元,同比下滑9%;净利润90.14亿美元,同比下滑19%。大中华区营收为87.85亿美元,同比下滑30%。分析称,苹果大中华区下滑厉害,国产手机严重的占领了苹果原有份额。财报还显示,来自于iPhone的营收为281.60亿美元,比去年同期的322.09亿美元下滑13%。虽然营收大致符合预期,但其盘后股价仍大幅下跌逾2%。业内人士向环球网科技表示,苹果正在从神坛走下,硬件的创新不足,硬件产品销售增长乏力。苹果应该进行多方面的尝试,进行转型。国产手机崛起2016年以来,苹果的辉煌不再了,国产手机开始崛起。国产手机性价比高,外观美观,硬件配置也高,已成为苹果手机强有力的竞争对手,国产品牌正在崛起。全球市场研究机构TrendForce官网发布的最新报告显示,受中国品牌出货持续高增长的推动,今年第三季度全球智能手机出货量达到约3.5亿部,环比增速高达10.4%。值得一提的是,第三季度中国品牌智能手机的生产数量达到1.68亿部,环比增长18%,超越三星与苹果两大品牌的生产数量总和。其中,华为、OPPO、vivo都保持了超过10%的高增速。第三季度华为智能手机出货量达3200万部,环比增长10.3%,稳居全球第三;OPPO与vivo出货量增速分别为20.3%及23%。业内人士向环球网科技表示,国产智能手机近几年来在商品质量和服务上的提升有目共睹。尤其是最近的三星电池爆炸和华为手机挡子弹两条新闻,更是形成了鲜明的对比,为中国国产智能手机的质量做了最好的宣传。责编:周涛", "家有小学生和幼儿园小朋友的爸妈看到这篇文章算是“赚”到了安静地读完吧~ 文/粱旅珠,留学于美国宾州大学,不仅自己从小成绩优秀,而且女儿进入斯坦福大学,儿子进入了加州大学柏克莱分校。本文节选自《我把女儿教进世界名校》一书。图/奥斯卡最佳短片《莫里斯·莱斯莫先生的神奇飞书》低年级,盯功课,高年级,就放手我从不讳言孩子小学低年级的时候,我很用心盯功课,但到高年级,功课方面我几乎全放手了。于珺(作者女儿)上小学五年级以后,除了她偶尔拿不会的题目来问我,我好像再也没有主动看过任何作业和考卷,顶多是考卷签名时若看到成绩不尽理想,我会问孩子懂了吗,需不需要帮忙,只要他们说没问题,我信任他们,就不会再追问。 我见过好些念书比孩子更认真的父母,即使到了中学,还是天天在家管理小孩所有的功课细节,研究过滤每一张考卷。我觉得盯功课、管孩子应该是有阶段性的,目标是帮助孩子尽快养成好的读书习惯和方法,父母不该到孩子已经初高中了,还继续当书童,孩子可能因此养成依赖性。不过,带老大时,我并没有清楚的概念预知什么时间点该怎么做,就是边看边走,自己观察孩子的自理能力已经差不多,就逐渐放手。 曾有人问我,为何会有小学低年级时要陪着孩子做功课的概念。很多年前孩子三四岁时,有一次吃饭的场合,旁边坐了一位大女儿已经上中学的朋友。聊天中她谈起教育小孩的经验,我记得她说:“小学一年级的时候要盯紧一点,把习惯培养好,以后就轻松了。”我回想自己小学一年级时,妈妈就花了不少时间坐在我旁边看我写功课。好的开始的确很重要,我认同小学一年级要把习惯养好的说法,因此朋友的提醒让我特别把这件事放在心上。这位朋友在孩子长大了以后,重返职场成了女强人,她的大女儿也成为一位亮眼的新闻主播。每次我在电视上看到她女儿台风稳健地播报新闻,总会忍不住想起当年我们吃饭的场景和谈话的内容。人生很奇妙,有时不经意听到的一句话,可以让自己受用无穷,也记得一辈子。 十岁前,与孩子打好良性互动基础孩子小学三年级以前,父母的影响力大,我们的指令和建议,孩子比较愿意听从。到了四年级,尤其是女孩子,伴随着一些青春期发育带来的生理变化,自主意识就变强了(男孩子通常会慢一点,开始的时间约在初中一年级)。我比较记得的是,之前我给于珺什么课外书,她就读什么,但小学四年级以后,我则清楚感受到她开始有比较强烈的偏好,尤其爱读惊悚推理小说,至于她完全没兴趣的主题类别,就很难强迫她接受。 这是孩子随着生理变化学习独立自主的正常现象,家长要有心理准备调整心态做法,不应解读为“孩子变叛逆,开始不听话了”。因此,十岁左右是一个自然转变的时间点,跟孩子之间的良性互动,在这之前就要打好基础。想协助孩子养成良好的读书习惯,父母必须建立权威,但不是一味地高压。我整个概念就是从小到大,由紧到松,因为好习惯不严格是养不起来的。待孩子习惯养成后,做家长的再依状况一点一点地放手,孩子会觉得父母越来越好相处,整个转移过程就可以很顺畅,不会有太多冲突。 小学一二年级从小培养专心与时间控制一、二年级时,每天晚餐后,我就和孩子一起到房间把联络本和功课拿出来,我会引导他们从当天的功课中先决定出顺序,并判断还有多少时间可以做像练钢琴或读英文这一类的才艺功课。我要他们在一开始精神比较好的时候,先完成最难的作业(通常是数学或语文),再做其他科目,像美术劳作或报告模拟较轻松愉快的放在最后面。我会坐在孩子旁边,陪他们念书、写作业,完成后,盯他们检查或复习,确定每天的计划都要实行。当他们有困难时,我会立刻协助他们找出解决的方法,比方说查字典或找参考书。不过陪在旁边最重要的目的,除了利用长期的反复操作形成他们的惯性,还要让他们学会专心和时间控制。我不希望他们边写边玩,尽量帮忙约束他们集中精神,功课写完,休息时间再好好玩。 小学三年级,教孩子做计划表、画重点三年级后,我不再坐在旁边陪写功课,只要他们应该已经学会的事,我就要求他们自己处理,但我会教孩子怎么做计划表。尤其是儿子个性比较散漫,他每晚一回家,都要先在纸条上写下他当晚时间的安排方式给我确认,然后照着预估的时间表执行。虽然我不坐在旁边,但我会检查成果。我对“功课要好好做”这件事非常严格,比方说生字若写得不好,我会擦掉要他们重写。好好认真写,可能写一遍就可以马上去玩或休息,潦草应付的下场,反而得重做两三遍。于珺三年级开始,我教她用不同颜色的荧光笔和红笔画重点,自己学着从课文中找出各种可能的出题方式,让她了解读书不能只是傻傻地从头念到尾,必须要从不同的角度与方向理解思考。像社会科,若念到某项内容有呼应到前面教过的东西,可能被拿来做整合比较的,我就会指导她找出来,在两课页面上都记下另一页的页数及重点。做几次以后,小孩子自己就会懂得怎么整理出自己的观念架构,不会养成不加思考就死啃参考书的习惯。小学四年级,教孩子上课做笔记、整理考卷上四年级后,我买笔记本给她,要她从社会科开始尝试上课做笔记。记笔记可以帮助孩子上课专心,也可以学会抓重点。我给她的提示只有尽量做到边听边写、记多少算多少,不要为了记笔记而错过老师的授课内容。一开始,她笔记本上只有短短几行字,也常对我抱怨她不知道该记什么,不过慢慢地她就摸索出窍门,后来她不但会帮自己出复习卷,还会出题目给弟弟做。四年级以后,我要孩子自己整理考卷及做段考复习表。我帮他们准备很多讲义夹和透明文件袋,用标签标示,然后孩子就会自己把发回来的大小考和段考考卷依顺序收入。我常笑说自己是A4妈妈,所有东西都以A4为标准规格,教他们收纳归档。由于平常就已经整理好,考试前拿出该科的夹子,曾犯错过或不会的考题一目了然,对考试前的复习很有帮助。 我帮孩子设计的段考复习表,表格横轴是分课分段的考试范围,纵轴则是科目,每科下面再分课本、习作、参考书、评量和考卷。三、四年级以后,段考一两周前,小孩自己就会把空白表格印出来填写,然后贴在衣柜的门上,每做完一项就在格子内做记号。这样一来,哪些部分已经念完或念过几遍就很清楚。万一有来不及念或没复习到的地方,下次考试或期末考时可以特别注意补强。小学高年级以后,我不再过问课业细节,只提醒他们学习若有困难,无法自己解决,一定要来找我商量。于珺高二的第一次段考后,她有点懊恼地对我说:“高二科目变多了,段考复习一个礼拜时间好像不够。”从那时起,她就自动把段考的准备时间提早为两周。两个孩子初高中以后,读书和应付考试都完全自己负责。俗话说:“授人以鱼,不如授人以渔。”父母盯功课的目标和方法正确的话,就像是给孩子一支钓竿,亲身示范钓鱼的技巧与方法。短短两三年时间的密集基础训练,足以让孩子未来具备自制钓竿、拓展渔场的能力。 中学后不再管孩子却被认为装模作样孩子上中学以后,我很少像他们小学时那样,常常为了帮忙班上的事去学校,但由于长期担任家长代表,偶尔有事必须去学校时,我总是很害怕在校门口碰到一些天天到学校报到的妈妈。其中一位别班的家长,孩子成绩很好,常常名列前茅,每次在校门口遇见,她多半正在和另外一两位妈妈讨论前一天发回来的某一张考卷。有时她会把我叫住:“高妈妈,昨天发回来的生物考卷,第一张第九题选择题答案有问题,你知道吗?正确答案是B,可是C应该也可以。我已经帮他们查过课本和参考书,我认为……”通常我只能一脸茫然地回说:“不知道耶,我完全没看考卷内容……”然后快步“落跑”。一方面为自己似乎是个很混的妈妈感到有点不好意思,另一方面也担心别人认为我装模作样。明明两个孩子成绩都不错,在家里一定严格督促,却爱在别人面前假装没管小孩。来自:中国教育报2017升学的家长注意咯!为了方便大家交流,目前我们已经建立了2017幼升小帮帮带群、2017小升初交流群、2017中考交流群、一年级新生群、国际教育交流群。加群请扫“家长帮小助手”,备注留言“加XX群”,为了防止上当受骗,请您加入带“【家长帮】”的官方群。小编审核通过后会在工作日拉您入群哦,加群人数众多,请您耐心等待!专注南京升学资讯、政策分析和教育经验分享的平台"]

结果

======================================== SAMPLE 1 ======================================== xxx qualcomm action小ideaction呈毛action128gb镉救镉23救救救2323闇gmat gmatてお魂镉hanhangmat齿齿窝齿窝gmat镉gmat窝镉f55cgmat洁han齿齿粲镉蠹镉蠹镉

======================================== SAMPLE 2 ======================================== xxx qualcomm action毛毛action氓败氓哽ben eur eur ben dha毛贸dha dha伺撮hangbg哺handha哺呈dha哺han哺哺禄媾哺哺てお哺婺婺豉odコメントaction action dha伪时时

======================================== SAMPLE 3 ======================================== xxx禄wwdc镉禄dx禄粲chocolate魂xx chocolateら匪欲らwade禄镉魂魂魂镉dha wade镉danielら聰danielら镉镉窝侣wade镉cca窝镉dha窝禄dha dha镉侣禄窝镉聰

======================================== SAMPLE 4 ======================================== xxx2015氣濘2014wade镉毛らrobertcard23毛毛root轻禄途簪吝23縷cardred艰f5冽冽f523泗dha ben benかおbenかお轻禄氓潼縷place23欲欲23dha伪tback

Morizeyao commented 5 years ago

train.py报什么错?

chen2000 commented 5 years ago

train.py报错如下: RuntimeError: Gather got an input of invalid size: got [2, 2, 12, 1024, 64], but expected [2, 3, 12, 1024, 64] (gather at /pytorch/torch/csrc/cuda/comm.cpp:226)

chen2000 commented 5 years ago

找到原因了,这程序有个逻辑对batch_size, GPU个数有要求!我GPU有三个,batch_size默认8的时候跑不了,调整成整数倍就可以了。

这逻辑有点奇怪,请问这块必须要求整数倍才能跑的逻辑写在哪个文件里?

Morizeyao commented 5 years ago

乱码问题解决了吗?

qiyuanshijie commented 4 years ago

同问乱码问题怎么解决

Zhui-CN commented 4 years ago

你好,请问生成出来的乱码怎么解决,使用过train与train_single都是一样

zjm008 commented 4 years ago

你好,请问生成出来的乱码怎么解决,使用过train与train_single都是一样

语料太少了吧? 我的至少 100MB。

FengZiLi commented 4 years ago

同样乱码。demo中只有三句话,我还以为我的写的太多了。

juncaixinchi commented 4 years ago

同样遇到了这个问题,是词库导致的,默认使用的是cache/vocab_small.txt,里面13317个单词,包括各种符号,当样本量小的时候,结果就会有很多乱码。可以根据自己的data,生成vocab文件(当然这样的话,单词来源受限于样本了) 步骤如下:

jxyyu1997 commented 4 years ago

你好,请问生成出来的乱码怎么解决,使用过train与train_single都是一样

语料太少了吧? 我的至少 100MB。

不太理解,为什么语料少出来会是乱码呢,词表的内容包含了 所有的训练语料不行吗

feb-cloud commented 4 years ago

同样遇到了这个问题,是词库导致的,默认使用的是cache/vocab_small.txt,里面13317个单词,包括各种符号,当样本量小的时候,结果就会有很多乱码。可以根据自己的data,生成vocab文件(当然这样的话,单词来源受限于样本了) 步骤如下:

  • 生成vocab_user.txt文件
cd cache/
bash make_vocab.sh
  • 根据vocab_user.txt内单词个数,调整配置文件config/model_config_small.json的vocab_size字段
  • 培养
python train.py --raw --min_length 4 --tokenizer_path cache/vocab_user.txt
  • 生成
python ./generate.py --length=50 --nsamples=4 --prefix=你好 --fast_pattern --tokenizer_path cache/vocab_user.txt

你好,我试了这种方式出现了不理想的问题,请问有遇到吗? 26f0facf7db70a86203bf73bd3873ec

ssss88155 commented 3 years ago

原因: 在使用make_vocab,並改好modelconfig個字詞數量後;會遇到[UNK]是因為,在train.py的時候,bert會先幫你做分詞(切開字or詞),就是關於--segment參數,有兩種方式,如果用segment會先分開,但以bert分詞的邏輯,絕對不會跟你字典一模一樣,舉例來說:「這醬油瓶好大」,他可能會先預切成:「這醬_油瓶_好大」(實際分隔是用空白,因為空白會被吃掉用底線示意)_;而你用make_vocab產生的字典,只有「"這" , "醬油瓶" , "好大"」,因此bert在分詞完,正要抓字典的時候,發現沒有「這醬」跟「油瓶」,他就會顯示:[UNK] [UNK] 好大。 然後你就覺得奇怪明明字典就有為何他會顯示UNK,因為bert預切的邏輯跟vocab_user的邏輯不同,所以造成這種問題。 那第二種就是不開啟segment(以詞為單位),那他就會全部切成單字,那麼你就需要一個字庫是把所有內容段開的,沿用上面例子,預切出來的分詞是:「這_醬_油_瓶_好_大」,每個字單獨,那字典就要擺著有每個字單獨的,那麼train都抓的到單字(而非[UNK]),這時你在generate的時候就不會產生[UNK]了。

以下是我目前的知識: (方法) 一、 (在bert分詞後,開始訓練前,顯示出分詞的結果--抽樣5句) 在分詞後、抓字典,檢查有沒有[UNK] train.py,你可以去改寫 build_files 的function, 在for迴圈外創一個 show = [] 的 list 然後在sublines後面加一個show.append(random.choice(sublines)),最後在print('Tokenized Data Sample')後加一個print('\n'.join([' '.join(s) for s in show[:5]])),這樣在跑剛開始就會:看到分詞後並抓了字典,顯示的句子 (有沒有[UNK]一目了然,有UNK先解決問題才不會浪費時間train出垃圾),git有大神 pinut_chen的folk版本。 例-- (張貼位置) sublines = [ full_tokenizer.tokenize(line) for line in sublines if len(line) > min_length] show.append(random.choice(sublines)) 例-- (張貼位置) print('Tokenized Data Sample') print('\n'.join([' '.join(s) for s in show[:5]]))

二、 (使用--segment方法執行 ,較難) 在想要用--segment的情況下,由於bert分詞系統變幻莫測,很多時候跟語句真正邏輯不同,所以不如先斷好詞再進行訓練,我是台灣繁體所以用CKIP做斷詞,1.針對文本斷詞,並讓每一句呈現空白分隔的方式,如:「不如 自己 先 做 斷詞,不然 我 不會 做 了」,的形式(如同bert分詞完後的樣貌),2.斷好詞的同時,也做一個自己的vocab檔,前置檔案就處理完了。 然後再去對tokenizations的資料夾,tokenization_bert.py檔,class BertTokenizer底下,init(do_basic_tokenize=False, do_lower_case=False)這兩個參數都調成false,在train.py不使用segment的參數下,會導引到tokenization_bert.py的方法,讓他不要對你的文本作lower跟basic_tokenize,能讓你的文本保有原本樣貌。 這個方法因為是以詞為單位,所以在generate的時候,需要使用--segment的參數。

二 .1、 (不使用--segment方法執行 ,較簡易) 或者你選擇全部斷開(不使用--segment),那就簡單多了,只對tokenization_bert.py檔,class BertTokenizer底下,init(do_lower_case=False),這個參數調成false,避免把英文改成小寫。然後字典檔就準備文本的全部斷字版,只要bert抓的到字典,train出來就正常,然後generate一樣不要用--segment的參數。

如此系統應該就能work了。 train搞定後,generate的精準度就是看文本量大小了。 #出現[UNK]決不是文本量太少的關係

數周前的規則認知: 我也曾遇到,train.py內容有幾個關鍵,training data、vocab.txt、config、(是否使用segment斷字),要訓練自己的語料,這些都要準備好檔案再進行訓練。

-------------以下是各項的準備內容------------ 因此在使用自己的訓練語料的時候,train.json的部分格式要吻合 ["...", "..."],這樣。 然後依照上面大大的方式產生vocab_user.txt, 那麼vocab_user的文字量(行數),要貼給config的 "vocab_size",以表示詞庫有多少個vocab,畢竟引用詞庫的size就不是default的量。 這些訓練所要用到的參數都準備好了,就可以去train了,那麼linux指令就要去設你的參數他的路徑,以下參數都可以去train.py裡面看,都有設定好調整的指令(也有中文註解)

以下是範例指令,請依照您的需求改動各個參數與路徑。 time python3 train.py --epochs 30 \ --model_config config/model_config_user.json \ --output_dir model/ --raw_data_path data/train.json \ --num_pieces 10 --batch_size 2 --min_length 1 --log_step 1 \ --warmup_steps 9000 --stride 512 --raw \ --tokenizer_path cache/vocab_user.txt \

ssss88155 commented 3 years ago

同樣遇到了這個問題,是詞庫導致的,默認使用的是cache/vocab_small.txt,裡面13317個單詞,包括各種符號,當樣本量小的時候,結果就會有很多亂碼。可以根據自己的data,生成vocab文件(當然這樣的話,單詞來源受限於樣本了)步驟如下:

  • 生成vocab_user.txt文件
cd cache/
bash make_vocab.sh
  • 根據vocab_user.txt內單詞個數,調整配置文件config/model_config_small.json的vocab_size字段
  • 培養
python train.py --raw --min_length 4 --tokenizer_path cache/vocab_user.txt
  • 生成
python ./generate.py --length=50 --nsamples=4 --prefix=你好 --fast_pattern --tokenizer_path cache/vocab_user.txt

你好,我試了這種方式出現了不理想的問題,請問有遇到嗎? 26f0facf7db70a86203bf73bd3873ec

小弟回答在上方獨立串,提供一個參考

Erikooo commented 2 years ago

您好,请问一下按照您的步骤调整后,大段的[UNK]没有了,但是开头自定义的文字部分也没有了,被[UNK]替换了,这个问题您有遇到吗

image