模型介绍
本项目是一个基于大语言模型(llm)的文本风格迁移(text style transfer)项目。项目利用大语言模型来学习指定文学作品的写作风格(惯用词汇、句式结构、修辞手法、人物对话等)。利用本模型可将学习到的风格移植至其他通用文本上,即:输入一段原始文本,模型可对其改写,输出带有该风格特色的文本,达到文字修饰、润色或风格模仿的效果
训练数据包括红楼梦、三国演义、西游记、水浒传[1]
模型效果:
原文 | 红楼梦 | 三国演义 | 西游记 | 水浒传 | |
---|---|---|---|---|---|
0 | 严冬时节,鹅毛一样的大雪片在天空中到处飞舞着,有一个王后坐在王宫里的一扇窗子边,正在为她的女儿做针线活儿,寒风卷着雪片飘进了窗子,乌木窗台上飘落了不少雪花。 | 时值严冬,鹅毛大雪,王后坐在王宫里的一扇窗子边,为女儿做针线,只见那雪片儿卷着,卷进窗来,乌木窗台上,落了许多雪花。 | 时值严冬,鹅毛大雪,王后坐于王宫窗槛之下,为女作针线,风卷雪片,乌木窗台,纷纷落下。 | 正是:鹅毛大雪漫天飞,王后坐在王宫窗。卷雪飞来乌木窗,纷纷落落满窗雪。 | 正是:鹅毛大雪片,王后坐王宫,寒风卷雪片,乌木窗台落。 |
1 | 她抬头向窗外望去,一不留神,针刺进了她的手指,红红的鲜血从针口流了出来,有三点血滴落在飘进窗子的雪花上。 | 只见那丫头抬头向窗外一看,不防针刺了手指,红红的鲜血从针口流出来,有三点血滴在飘进窗子的雪花上。 | 其人抬头视之,忽刺其指,鲜血迸流,有三点血滴落于窗上。 | 你看你这等,抬头望窗外,不防针刺了手指,红红的鲜血,从针口流下来,有三点血滴落,落在窗上。 | 你看时,只见那针刺入手指,鲜血迸流,有三点血滴在窗上。 |
2 | 她若有所思地凝视着点缀在白雪上的鲜红血滴,又看了看乌木窗台,说道:"但愿我小女儿的皮肤长得白里透红,看起来就像这洁白的雪和鲜红的血一样,那么艳丽,那么骄嫩,头发长得就像这窗子的乌木一般又黑又亮!" | ””你若有所思,凝望白雪上鲜红血滴,又看那乌木窗台,说道:“但愿我小女儿的皮儿白里透红,像这白雪红血一般,艳丽,娇嫩,头发又黑又亮! | 其人若有所思,凝视白雪上鲜红血滴,又顾乌木窗台,曰:“但愿小女皮肤白如雪,鲜如血,艳若花,娇若柳,发如松,如此,何等艳丽,何等骄嫩,发如乌木,如此,何等黑亮!” | 你看你若有所思,凝眸看那白雪上鲜红血滴,又看那乌木窗台,道:"但愿我小女儿的皮肤,白里透红,如这白雪鲜红,艳艳如雪,娇娇如血,那般艳,那般娇,那般黑,那般亮!" | 你看那雪上鲜红血滴,又看那乌木窗台,说道:"但愿小女儿的皮肤白里透红,似这白雪鲜红血一般,艳丽,娇嫩,头发如这窗子的乌木一般又黑又亮!" |
3 | 她的小女儿渐渐长大了,小姑娘长得水灵灵的,真是人见人爱,美丽动人。她的皮肤真的就像雪一样的白嫩,又透着血一样的红润,头发像乌木一样的黑亮。所以王后给她取了个名字,叫白雪公主。 | 小女儿渐渐的长了,小丫头子的水灵灵的,真个人见人爱,人见人夸,真个是雪白如雪,红透如血,乌木如黑,所以王后取了个名字,叫做白雪公主。 | 其小女渐长,小女水秀,真人中之仙子,皮肤如雪,又透血如红,发如乌木,故王后以名白雪公主。 | 你看那小女儿渐渐的长高,那小丫头子渐渐的长的水灵灵的,真个人见人爱,人见人夸,真个是雪白如雪,红透如血,乌木如乌,黑亮如黑,所以王后取个名唤作白雪公主。 | 小女儿渐渐长大,小女真个水灵灵的,真个人见人爱,人见血红,人见乌木,因此王后取个名唤做白雪公主。 |
使用方法
模型目前支持红楼梦、三国演义、西游记、水浒传四种风格的润色,其他风格不在训练数据内,但可能也可以迁移。
提示词:
严冬时节,鹅毛一样的大雪片在天空中到处飞舞着,有一个王后坐在王宫里的一扇窗子边,正在为她的女儿做针线活儿,寒风卷着雪片飘进了窗子,乌木窗台上飘落了不少雪花。
---
将上述文本润色成{style}的风格
示例代码:
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("wptoux/style-llm-qwen-0.5b")
model = AutoModelForCausalLM.from_pretrained("wptoux/style-llm-qwen-0.5b", torch_dtype=torch.float16, device_map='auto')
style = '红楼梦' # ['红楼梦', '三国演义', '西游记', '水浒传',]
messages = [{"role": "user", "content": txt + f'\n---\n将上述文本润色成{style}的风格'}]
input_ids = tokenizer.apply_chat_template(conversation=messages, tokenize=True, add_generation_prompt=True, return_tensors='pt').cuda()
with torch.no_grad():
output_ids = model.generate(input_ids, do_sample=False)
response = tokenizer.decode(output_ids[0][input_ids.shape[1]:], skip_special_tokens=True)
致谢
本项目在模型训练中借助了下列开源项目,在此对相关项目人员表示诚挚感谢:
[1] https://github.com/stylellm/stylellm_models。使用其数据集加工后进行训练。
- Downloads last month
- 4