Chinese NewsTitle Generation Project by GPT2.带有超级详细注释的中文GPT2新闻标题生成项目。
No Data
带有超详细注释的GPT2新闻标题生成项目
| 数据 | 原始数据/项目地址 | 处理后文件下载地址 | | ------ | ------ | ------ | | 清华新闻数据 | 地址 | 百度云盘 提取码: vhol | | 搜狗新闻数据 | 地址 | 百度云盘 提取码:ode6 | | nlpcc2017摘要数据 | 地址 | 百度云盘 提取码:e0zq | | csl摘要数据 | 地址 | 百度云盘 提取码:0qot | | 教育培训行业摘要数据 | 地址 | 百度云盘 提取码:kjz3 | | lcsts摘要数据 | 地址 | 百度云盘 提取码:bzov | | 神策杯2018摘要数据 | 地址 | 百度云盘 提取码:6f4f | | 万方摘要数据 | 地址 | 百度云盘 提取码: p69g| | 微信公众号摘要数据 | 地址 | 百度云盘 提取码: 5has| | 微博数据 | 地址 | 百度云盘 提取码: 85t5| | news2016zh新闻数据 | 地址 | 百度云盘 提取码: qsj1 |
数据集集合:百度云盘 提取码: 7am8
详细见requirements.txt文件
数据来源于新浪微博,数据链接:https://www.jianshu.com/p/8f52352f0748?tdsourcetag=spcqqaiomsg
| 数据描述 | 下载地址 | | ------ | ------------- | | 原始数据 | 百度网盘,提取码: nqzi | | 处理后数据 | 百度网盘,提取码: duba |
原始数据为直接从网上下载的新闻数据,处理后数据为使用data_helper.py处理过的数据,可直接用于训练。
详细见config/config.json文件
| 参数 | 值 | | ------ | ------------- | | initializerrange | 0.02 | | layernormepsilon | 1e-05 | | nctx | 512 | | nembd | 768 | | nhead | 12 | | nlayer | 6 | | npositions | 512 | | vocab_size | 13317 |
注意:模型输入除了各个词的向量表示外,还包括文字段落向量表示和位置向量表示。
| 模型 | 下载地址 | | ------ | ------------- | | GPT2模型 | 百度网盘,提取码: 165b |
python3 train.py 或 python3 train.py --output_dir output_dir/(自定义保存模型路径)
训练参数可自行添加,包含参数具体如下:
| 参数 | 类型 | 默认值 | 描述 | | ------ | ------ | ------ | ------ | | device | str | "0" | 设置训练或测试时使用的显卡 | | configpath | str | "config/config.json" | 模型参数配置信息 | | vocabpath | str | "vocab/vocab.txt" | 词表,该词表为小词表,并增加了一些新的标记 | | trainfilepath | str | "datadir/traindata.json" | 新闻标题生成的训练数据 | | testfilepath | str | "datadir/testdata.json" | 新闻标题生成的测试数据 | | pretrainedmodelpath | str | None | 预训练的GPT2模型的路径 | | datadir | str | "datadir" | 生成缓存数据的存放路径 | | numtrainepochs | int | 5 | 模型训练的轮数 | | trainbatchsize | int | 16 | 训练时每个batch的大小 | | testbatchsize | int | 8 | 测试时每个batch的大小 | | learningrate | float | 1e-4 | 模型训练时的学习率 | | warmupproportion | float | 0.1 | warm up概率,即训练总步长的百分之多少,进行warm up操作 | | adamepsilon | float | 1e-8 | Adam优化器的epsilon值 | | loggingsteps | int | 20 | 保存训练日志的步数 | | evalsteps | int | 4000 | 训练时,多少步进行一次测试 | | gradientaccumulationsteps | int | 1 | 梯度积累 | | maxgradnorm | float | 1.0 | | | outputdir | str | "outputdir/" | 模型输出路径 | | seed | int | 2020 | 随机种子 | | maxlen | int | 512 | 输入模型的最大长度,要比config中n_ctx小 |
或者修改train.py文件中的set_args函数内容,可修改默认值。
本项目提供的模型,共训练了5个epoch,模型训练损失和测试集损失分别如下:
模型其实还没有训练完全,按照loss走势,还可以继续训练。
python3 generate_title.py 或 python3 generate_title.py --top_k 3 --top_p 0.9999 --generate_max_len 32
参数可自行添加,包含参数具体如下:
| 参数 | 类型 | 默认值 | 描述 | | ------ | ------ | ------ | ------ | | device | str | "0" | 设置训练或测试时使用的显卡 | | modelpath | str | "outputdir/checkpoint-139805" | 模型文件路径 | | vocabpath | str | "vocab/vocab.txt" | 词表,该词表为小词表,并增加了一些新的标记 | | batchsize | int | 3 | 生成标题的个数 | | generatemaxlen | int | 32 | 生成标题的最大长度 | | repetitionpenalty | float | 1.2 | 重复处罚率 | | topk | int | 5 | 解码时保留概率最高的多少个标记 | | topp | float | 0.95 | 解码时保留概率累加大于多少的标记 | | maxlen | int | 512 | 输入模型的最大长度,要比config中n_ctx小 |
测试结果如下: ``` 从测试集中抽一篇 content: 今日,中国三条重要高铁干线——兰新高铁、贵广铁路和南广铁路将开通运营。其中兰新高铁是中国首条高原高铁,全长1776公里,最高票价658元。贵广铁路最贵车票320元,南广铁路最贵车票206.5元,这两条线路大大缩短西南与各地的时空距离。出行更方便了!中国“高铁版图”再扩容 三条重要高铁今日开通 title: 生成的第1个标题为:中国“高铁版图”再扩容 三条重要高铁今日开通 生成的第2个标题为:贵广铁路最高铁版图 生成的第3个标题为:出行更方便了!中国“高铁版图”再扩容三条重要高铁今日开通
从网上随便找一篇新闻 content: 值岁末,一年一度的中央经济工作会议牵动全球目光。今年的会议,背景特殊、节点关键、意义重大。12月16日至18日。北京,京西宾馆。站在“两个一百年”奋斗目标的历史交汇点上,2020年中央经济工作会议谋划着中国经济发展大计。习近平总书记在会上发表了重要讲话,深刻分析国内外经济形势,提出2021年经济工作总体要求和政策取向,部署重点任务,为开局“十四五”、开启全面建设社会主义现代化国家新征程定向领航。 title: 生成的第1个标题为:习近平总书记在京会上发表重大计划 提出2025年经济工作总体要求和政策 生成的第2个标题为:习近平总书记在会上发表重要讲话 生成的第3个标题为:习近平总书记在会上发表重要讲话,深刻分析国内外经济形势 ``` 解码采用topk和topp解码策略,有一定的随机性,可重复生成。
python3 http_server.py 或 python3 http_server.py --http_id "0.0.0.0" --port 5555
本地测试直接使用"127.0.0.1:5555/news-title-generate",如果给他人访问,只需将"127.0.0.1"替换成的电脑的IP地址即可。
具体如下图所示:
@misc{GPT2-NewsTitle, author = {Cong Liu}, title = {Chinese NewsTitle Generation Project by GPT2}, year = {2020}, publisher = {GitHub}, journal = {GitHub repository}, url="https://github.com/liucongg/GPT2-NewsTitle", }
e-mail:[email protected]
知乎:刘聪NLP
公众号:NLP工作站