基于PaddleHub的虚拟粉圈微博生成


一-前言
灵感来源于中文互联网中的大量垃圾信息与“僵尸粉”,以及大量的粉丝打榜内容。
在自然语言处理的帮助下,我们是否可以创造出能自主行动,甚至与真人用户互动的虚拟用户?人们能否识别ta是人还是ai?会与ta讨论、甚至争斗吗?
本项目以某明星的粉丝为例,尝试生成粉圈微博,并尝试在微博上回复他人,观察人类用户的回复。
希望能将本项目作为一种尝试,引起更多人对社交媒体的反思。
- 输入:
1-明星名
2-话题,如[XX电视剧],[XX晚安] - 输出:对应话题的粉圈微博
Github地址: https://github.com/sunyuqian1997/ghost-on-web
二-模型简介
ERNIE-GEN 是面向生成任务的预训练-微调框架,首次在预训练阶段加入span-by-span 生成任务,让模型每次能够生成一个语义完整的片段。在预训练和微调中通过填充式生成机制和噪声感知机制来缓解曝光偏差问题。此外, ERNIE-GEN 采样多片段-多粒度目标文本采样策略, 增强源文本和目标文本的关联性,加强了编码器和解码器的交互。ernie_gen module是一个具备微调功能的module,可以快速完成特定场景module的制作。
https://www.paddlepaddle.org.cn/hubdetail?name=ernie_gen&en_category=TextGeneration
三-安装环境
! pip install xlrd
! pip install paddlehub==1.8.0
! pip install paddle-ernie==0.0.4.dev1
四-准备数据集
我们使用Weibo-spider爬取了约1w条该明星的粉丝微博,并整理成“话题-正文”的格式。
Ernie-gen要求的格式为"序号\t输入文本\t标签",因此我们按要求处理.xlsx格式的文件,生成数据与验证集。
由于生成任务是N对N的关系,输入1输出关于1的句子,输入2则输出关于2的句子,若这里输入1,标签为句子A,再输入1,标签为句子B,那么模型很难清楚到底输入1之后A是正确的还是B是正确的,所以最终会可能会拟合其中一个出现次数较多的效果,这样会影响输出,使其可能存在多样性不足等问题。
| 序号 | 输入 | 输出/标签 |
|---|---|---|
| 1 | XX | 哇哦XX大名话题量也破一千亿了!撒花 |
| 2 | XX | XX越看越上头…… |
这里修改输入,让数据集中的输入按下图方式进行转换。如果这里的输入可以变得多样化,那么能少许调整一些效果
| 序号 | 输入 | 输出/标签 |
|---|---|---|
| 1 | XX1 | 哇哦XX大名话题量也破一千亿了!撒花 |
| 2 | XX2 | XX越看越上头…… |
import pandas as pd
#xlsx数据格式:标签/内容
df = pd.read_excel("train_clean.xlsx")
Keys = df["label"].values
Txts = df["text_a"].values
with open("train4.txt", "w") as f:
for i, k in enumerate(Keys):
t = Txts[i]
# f.write("{}\t{}\t{}\n".format(i, k + KEY_LIST[i % len(KEY_LIST)], t))
f.write("{}\t{}\t{}\n".format(i, k + str(i), t))
df = pd.read_excel("dev.xlsx")
Keys = df["label"].values
Txts = df["text_a"].values
with open("dev2.txt", "w") as f:
for i, k in enumerate(Keys):
t = Txts[i]
f.write("{}\t{}\t{}\n".format(i, k, t))
五-Finetune并训练
此部分为模型训练代码,如果要直接测试生成效果,请直接查看“六-运行预测”
- train_path(str): 训练集路径。
- dev_path(str): 验证集路径。
- save_dir(str): 模型保存以及验证集预测输出路径。
- max_steps(int): 最大训练步数。
- noise_prob(float): 噪声概率,详见ernie gen论文。
- save_interval(int): 训练时的模型保存间隔部署。验证集将在模型保存完毕后进行预测。
- max_encode_len(int): 最长编码长度。
- max_decode_len(int): 最长解码长度。
import paddlehub as hub
!hub install Versailles
module = hub.Module(name="ernie_gen")
#finetune参考:https://aistudio.baidu.com/aistudio/projectdetail/1456984?channelType=0&channel=0
result = module.finetune(
train_path='train4.txt',
# dev_path='dev2.txt',
save_dir="Versailles_param",
max_steps=70000,
noise_prob=0.2,
batch_size=8,
save_interval=500,
max_encode_len=280,
max_decode_len=280
)
#dev_path='dev.txt',
# 将训练参数打包为hub model
module.export(params_path=result['last_save_path'], module_name="Versailles_12", author="mmm")
六- 运行预测
这里解压并载入之前训好的模型,如果在上一步重新训练过,请替换地址为新模型。
#解压挂载的模型(在数据集里)
#import zipfile
#f = zipfile.ZipFile("./data/data76465/pretrain.zip",'r') # 原压缩文件在服务器的位置
#for file in f.namelist():
# f.extract(file,"./work")
import paddlehub as hub
#如果重新训练了,请替换地址为新模型。
module = hub.Module(directory="./work/pretrain")
重点来了!请输入目标明星的姓名
#输入自定义明星名
name='王都楼'
#输入自定义tag,可以包含明星名
test_texts = ['王都楼','王都楼正能量艺人','王都楼我喜欢你','向全世界安利王都楼','王都楼公益一路有你']
#生成结果
import sys
nameList=[]
with open('nameList.txt','r') as f:
for line in f:
nameList.append(list(line.strip('\n').split(',')))
str=nameList[0][0]
use=[]
for test in test_texts:
test=test.replace(name,str)
use.append(test)
#beam_width可以改生成数量
results = module.generate(texts=use, use_gpu=True, beam_width=10)
for result in results:
group=[]
for sentence in result:
for oldName in nameList:
sentence=sentence.replace(oldName[0],name)
group.append(sentence)
for i in group:
print(i,end='\n')
group.append(sentence)
for i in group:
print(i,end='\n')
print('\n')
[2021-03-24 23:05:35,934] [ WARNING] - use_gpu has been set False as you didn't set the environment variable CUDA_VISIBLE_DEVICES while using use_gpu=True
我真的某些人很想问:管好自己很难吗?跟着官方在自己的天地里愉快的玩耍很难吗?管好自己,过好自己个人的
我喜欢王都楼王都楼好帅王都楼演技好王都楼唱歌好听王都楼作品好看期待王都楼余生请多指教期待王都楼顾魏王都楼粉丝支持王都楼
我看了下,感觉今天还可以努力一把子,目标定高点,能搞多少搞多少,越高越好。大盘还是路人观众,粉丝继续
我仿佛听见了这想念的声音分享的绿洲动态:想念绿洲
我仿佛听见了这想念的声音分享的绿洲动态:想念绿洲
谢谢大家让我睡觉可以更快点,可以更早点
拜拜2020开启顺顺利利的2021吧
我真的某些人很想问:管好自己很难吗?跟着官方在自己的天地里愉快的玩耍很难吗?不理ta们很难吗?不去跟ta
我仿佛听见了这想念的声音分享的动绿洲动态:想念绿洲
我真的某些人很想问:管好自己很难吗?跟着官方在自己的天地里愉快的玩耍很难吗?管好自己,过好自己人生活
凡此过往,铭记于心,为爱而来,一路同行!王都楼[兔子报王都楼《光点》光点》qq音乐
凡此过往,铭记于心,为爱而来,一路同行!王都楼[兔子队王都楼《光点》光点》qq音乐
凡此过往,铭记于心,为爱而来,一路同行!王都楼[兔子呆王都楼《光点》光点》qq音乐
凡此过往,铭记于心,为爱而来,一路同行!王都楼[兔子们王都楼《光点》光点》qq音乐
凡此过往,铭记于心,为爱而来,一路同行!王都楼[兔子!王都楼《光点》光点》qq音乐
凡此过往,铭记于心,为爱而来,一路同行!王都楼[兔子《王都楼《光点》光点》qq音乐
凡此过往,铭记于心,为爱而来,一路同行!王都楼[兔子》王都楼《光点》光点》qq音乐
凡此过往,铭记于心,为爱而来,一路同行!王都楼[兔子!王都楼《光点》光点专qq音乐
凡此过往,铭记于心,为爱而来,一路同行!王都楼[兔子贴,指路回
凡此过往,铭记于心,为爱而来,一路同行!王都楼[兔子》王都楼《光点》光点专qq音乐
二十六军阀少帅《西江月》江沪的风声越来越大,匪军的动作也越来越多,这上海,怕是要变天了。在萧氏官邸里
二十四军阀少帅萧天涯歌女“我待你这样好,你说说,你要怎样报答我?”萧战来了撩拨她的兴致,作势去松斐夏
二十四军阀少帅,天涯歌女。“我待你这样好,你说说,你要怎样报答我?”萧战来了撩拨她的兴致,作势去松斐
遇见你开始眉眼弯弯,星河皆你。春风十里不如你,梦里梦外都是你。美好的一周开始了,回顾一下战哥的背头神
机场大背头两周年虽然是你卸妆后随意抓的但帅是真的[羞嗒嗒(按时间找这组照片也是翻了蛮久的诶王都楼##gg
二十四军阀少帅,天涯歌女。我待你这样好,你说说,你要怎样报答我?”萧战来了撩拨她的兴致,作势去松斐夏
二十六军阀少帅《西江月》江沪的风声越来越大,匪军的动作也越来越多。这上海,怕是要变天了。在萧氏官邸里
二十四军阀少帅《西江月》江沪的风声越来越大,匪军的动作也越来越多,这上海,怕是要变天了。在萧氏官邸里
二十六军阀少帅《西江月》江沪的风声越来越大,匪军的动作也越来越多,越来越多。这上海,怕是要变天了。在
遇见你开始眉眼弯弯,星河皆你。春风十里不如你,梦里梦外都是你。美好的一周开始了斗回顾一下战哥的背头神
不因巅峰慕名而来不在低谷离你而去庆幸这人间有你这也是我爱人间的唯一道理愿为你赴汤蹈火这九州山河我只愿
八月不求大富大贵!但求你可以顺顺利利[给你小心心愿你:眼里有光心中有太阳岁岁步步如愿以偿王都楼##gg
我们一直都在一起的。加油,会会。加油,小飞侠们。
八月不求大富大贵[但求你可以顺顺利利[给你小心心愿你:眼里有光心中有太阳岁岁步步如愿以偿王都楼##gg
八月不求大富大贵。但求你可以顺顺利利[给你小心心愿你:眼里有光心中有太阳岁岁步步如愿以偿王都楼##gg
八月不求大富大贵!但求你可以顺顺利利[给你小心心王都楼愿你:眼里有光心中有太阳岁岁步步如愿以偿王都楼##gg
三月你好愿你光芒万丈驭风扶摇直上愿你以后的每一天都健健康康,顺顺利利[心王都楼
不知道你们有没有见过这两套丝绒小赞[哆啦a梦花心王都楼
快来为哥哥投票啊,不要一次性投10票,一票一票的投
曲有误,肖郎顾。我永远喜欢染染绿洲
王都楼王都楼粉丝在王都楼生日之际向中国青少年发展基金会捐赠50万用于建设一所希望小学!希望小学以“光点”命名,
王都楼王都楼粉丝小飞侠看到了王都楼的新广告,来支持独立门店,支持真果粒真果粒大卖.真果粒
王都楼王都楼粉丝小飞侠看到了王都楼的新广告,来支持独立门店,支持真果粒真果粒大卖!真果粒
王都楼王都楼粉丝小飞侠响应该王都楼粉丝公益项目组,扶贫助农,支持公益帮ii##jo##se##ph##20##19这位霞姐抽个jiang卷发抽一个
王都楼王都楼粉丝小飞侠响应了王都楼粉丝公益项目组,扶贫助农,支持公益帮ii##jo##se##ph##20##19这位霞姐抽个jiang卷发抽一个
王都楼王都楼粉丝小飞侠看到了王都楼的新广告,来支持独立门店,支持真果粒真果粒大卖。真果粒
王都楼王都楼粉丝小飞侠响应王都楼粉丝公益项目组,扶贫助农,支持公益帮ii##jo##se##ph##20##19这位霞姐抽个jiang卷发抽一个唯
王都楼王都楼粉丝小飞侠响应各王都楼粉丝公益项目组,扶贫助农,支持公益帮ii##jo##se##ph##20##19这位霞姐抽个jiang卷发抽一个
王都楼王都楼粉丝小飞侠看到了王都楼的新广告,来支持独立门店,支持真果粒真果粒大卖
王都楼王都楼粉丝小飞侠响应了王都楼粉丝公益项目组,扶贫助农,支持公益帮ii##jo##se##ph##20##19这位霞姐抽个jiang卷发抽10个
参考链接
手把手教你使用预训练模型ernie_gen进行finetune自己想要的场景
该项目利用PaddleHub的ERNIE-GEN模型,针对中文互联网上的粉丝微博内容,创建虚拟粉圈微博生成系统。通过预训练和微调,模型能生成与指定明星相关的话题微博,并尝试在社交媒体上互动。数据处理过程中,对输入进行了多样化处理以增加生成的多样性。在训练后,模型可生成多种风格的粉圈微博,涉及明星安利、粉丝支持等内容,引发对社交媒体现象的思考。
1824

被折叠的 条评论
为什么被折叠?



