AI 文摘

也看面向中文媒体创作的领域微调大模型:MediaGPT及运营领域模型MediaLLaMA的实现方式解读





作者: 老刘说NLP 来源: 老刘说NLP

大语言模型(LLM)在生成高质量文本和基于大量数据(包括媒体领域)进行预测方面表现出了很不错的能力。然而,在实际应用中,媒体用例与LLM通用应用之间的差异日益明显,尤其是中文。

近期的工作**《MediaGPT : A Large Language Model For Chinese Media》** 一文研究了媒体领域专用LLM与通用LLM相比的独特性,设计了多样化的任务指令类型以满足该领域的特定要求,并构建了针对媒体领域的独特数据集。

并在此提出了针对中文媒体领域的特定领域LLM-MediaGPT,通过特定领域数据和专家SFT数据进行训练,通过在验证集上进行人类专家评估和强模型评估,证明了MediaGPT在各种中文媒体领域任务上的表现优于主流模型,并验证了领域数据和领域定义的提示类型对于构建有效的特定领域LLM的重要性。

这个工作相对来说,较为严谨,而除了这种较为规范的媒体微调模型之外,也有一个偏向媒体运营的MediaGPT,曾用名Media LLaMA,借助ChatGPT收集了一批关于抖音运营、短视频创作、巨量千川投放、直播运营和直播话术技巧等领域知识问题的分析和回答,并利用这些数据对模型进行指令微调 ,使模型习得如何将自媒体知识应用到实际场景中。

这两个工作,都是面向媒体领域的,都具有借鉴意义。前者关于训练数据的构造、类别的设计、针对人工评估和大模型打分的评估优化,后者给出的针对自媒体领域的self-instruct流程也可进一步加深印象。

本文对该两个工作进行介绍,供大家一起参考。

一、MediaGP:针对中文媒体创作的微调大模型

论文地址:https://arxiv.org/abs/2307.10930

1、训练数据的设计与构造

训练数据包括用于预训练的非结构化数据和用于微调的数据。其中:

预训练数据方面,选择了2000年以来所有有影响力的中文媒体的公开数据,以及有官方背景的有影响力的英文媒体的公开数据,共计约250GB。

这些数据源均由高度专业的媒体从业人员制作,具有较高的质量和可信度,涵盖了与中国媒体相关的广泛主题和领域,如政治、经济、文化、社会、体育、娱乐、科技、卫生、教育和国际事务等。其中还包括一些来自官方媒体的英文文本,可以帮助我们的LLM学习跨语言知识和技能。

微调(SFT)数据方面,为了让MediaGPT更好地学习媒体领域的主要任务,调查了国内十多家媒体公司或部门的专家意见,并根据国内媒体从业人员在编辑、写作和出版等工作流程中的主要需求,设计了四大类、80多具体小类(包括观点创作、文章转写、媒体理解以及其他QA)SFT数据。 【这个思路很有意思,如何从实际需求出发来建立体系】。

例如:

Opinion creation观点创作 ,要求MediaGPT在不偏离提示所给事实的前提下生成更多内容,如添加观点、阐述立场等。典型的业务场景包括:根据主题生成提纲、生成评论文章等。

Article transcription文章转写 ,要求MediaGPT在不添加观点或修改事实的情况下,根据提示给出的信息创建内容,如根据稿件生成新闻脚本、新闻文体转写、摘要文章写作等。

Media understanding媒体理解 ,要求MediaGPT在不添加观点或修改事实的情况下,理解并提取提示所给信息的内容或要素,如标题生成、新闻要素提取等。

Other QA其他QA ,即一些额外的常识QA样本,以提高MediaGPT的概括能力和涌现能力。

在构建这些教学样本的过程中力求使MediaGPT的创作更加专业。在以媒体创作为主的SFT样本中,使用现实世界中的优秀媒体文章作为输出,让人或代码生成输入。 ,其根据模板化的方式进行SFT数据的生成,如下表所示:

2、模型选用与效果

在模型选用方面,该工作采用了两种流行的生成式开源LLM:BLOOMZ-7B和LLaMA-7B,随着实验的深入,发现LLaMA-7B的性能始终优于BLOOMZ-7B。因此,最终采用LLaMA-7B。

但由于其生成中文文本的能力有限。为了解决这个问题并提高编码效率,建议用额外的中文词库来扩充LLaMA词库,并使用扩充词库的模型。通过将中文标引符与原有的LLaMA标引符相结合,最终创建了中文LLaMAto ken字符,包含约50k个token。

在预训练之后,使用两个不同的SFT数据集进行了微调。在开源数据集上进行微调的版本称为MediaGPT-generalSFT,在中文媒体领域数据集上进行微调的版本称为MediaGPT-domainSFT。

在模型评估方面,这个也很有趣,对生成式大语言模型进行定量评估具有挑战性,因为没有一个单一的维度可以直接衡量其性能。大多数客观方法使用选择题或判断题,但中文媒体大语言模型的主要目标是处理主观和开放式问题,如写作和创意。这类问题最好由人工来评估,但这种方法费时费力。最近的一些研究使用强模型作为裁判,由模型来选择哪个模型更好,这虽然略微降低了评价成本,但也严重影响了可信度。

首先,在评估数据和模型选用方面,收集了数十位媒体领域专家的意见,选取了中国媒体场景中的几个典型案例进行评估,包括人工评估和强模型评估,并为评估任务开发了特定领域的数据集。

具体的,每个主要类别包含约100个问题。答案由四种不同的LLM生成,分别是ChatGPT-3.5、ERNIEBot、MediaGPT-generalSFT和MediaGPT-domainSFT。

值得注意的是,约有2%的ERNIE答案因为一些安全问题而拒绝回答。

其次,在性能评估指标方面,提出了三个性能评估指标,以量化模型在每种情况下的输出质量和相关性:平均排名(Rank-n的平均值)、Rank-n(该模型排名第一、第二、第三或第四的次数)和比较胜率(成对比较情况下的获胜概率)。

在人工评估方面,邀请了十几位记者和编辑作为媒体领域的专家,对随机半评估集的结果进行评估。

评估标准的设定也很重要,该工作在评估过程之前,首先请十几位专家中最资深的几位根据新闻价值和编辑标准制定了评估标准。例如,对于"观点创作"任务,标准包括五个一般评价维度和每个子任务的具体维度。对于文章转录任务,标准主要包括四个一般评价维度和各子任务的具体维度。 ,但具体细节并未给出,这个可以后期跟进。

在强模型评估方面,由于传统的参考指标,如BLEU和ROUGE,与人类判断的相关性相对较低,所以并不十分适用,所以最总使用GPT-4作为评估模型,并提出了媒体域LLM的评估提示集。

但我们在前面的文章中说过,基于强模型评估存在有效性和可靠性问题,所以在此基础上使用四种技术来提高评价的稳定性和精确性(实验表明是有有效的),具体地:

其一,在给定评价模型的LLM生成的答案列表的第一个位置插入空答案文本,以防止答案顺序造成的评价偏差;
其二,出于上述同样的原因,随机混合其他答案的顺序;

其三,用普通名称引用每个答案,以避免因引用名称的附加含义而造成混乱

其四,对答案进行排序而不是打分,以尽量减少评价模型带来的不稳定性

3、模型效果

人工专家评测的结果如表2所示,

可以看出,在新闻专业性标准下,MediaGPT-domainSFT的平均率、Rank-1率和胜率都是最高的。MediaGPT-domainSFT在以下两个方面表现出色:

1)理解新闻领域的问题,并以主流媒体的角色始终如一地制作答案。

2)制作出更符合新闻形式的内容,避免过度生硬。然而,MediaGPT-domainSFT仍有一些不足之处,如有时会忽略问题的细节,以过度概念化的方式写作。

其观察到的一些结论也很有趣,其发现,作为主流模型,ChatGPT-3.5和ERNIEBot的最大特点在于对问题细微差别的细致理解和清晰的表述逻辑。但这也是一把双刃剑,ChatGPT-3.5和ERNIEBot的逻辑和表达方式往往过于公式化,有时无法将某些抽象的话题与新闻时事联系起来

此外,与ChatGPT-3.5相比,ERNIEBot的不足之处在于回答时间较短,逻辑性较差,而且有时倾向于回避敏感的话题,而这对于新闻写作至关重要,可能不符合必要的使用要求。

至于MediaGPT-generalSFT,其最大的问题是经常生成格式错误的结果。这表明LLM无法区分每种新闻体裁,并强调了领域SFT的重要性。

强模型评估的结果如下所示:

结果表明,MediaGPT在中文媒体领域任务中表现较好。MediaGPT-generalSFT和MediaGPT-domainSFT的对比证明,DS-LLM的性能稳步提高,并与SFT数据的使用相关。

从另一个角度上讲,该实验表明,经过微调的评估提示可以使强模型评估达到与人类专家判断相似的结果。最终的判断结果也与人类的判断结果非常相似,这进一步证明了提示调整的价值。但不可否认的是,尽管强模型评估具有快速和可扩展的优势,但其本身性能的不稳定性仍然给强模型评估的使用带来了一定的风险。

二、Media LLaMA:针对中文自媒体运营的微调大模型

项目地址:https://github.com/IMOSR/MediaGPT

MediaGPT,一个针对自媒体领域进行特殊训练的模型,曾用名Media LLaMA,借助ChatGPT收集了一批关于抖音运营、短视频创作、巨量千川投放、直播运营和直播话术技巧等领域知识问题的分析和回答,并利用这些数据对模型进行指令微调 ,使模型习得如何将自媒体知识应用到实际场景中。

在模型基座方面,目前公开media-alpaca-lora-7b-beta0.1: 以Chinese-LLaMA-7B为基础,未经过自媒体语料连续训练,使用通用指令和自媒体指令进行SFT。

具体训练脚本参照:https://github.com/IMOSR/MediaGPT/blob/master/train/finetune_media_alpaca_lora.ipynb

1、训练数据的设计与构造

在微调数据方面,将一些关于抖音运营、短视频创作、巨量千川投放、直播运营等领域的问题输入ChatGPT,并让其生成对每个问题的回答。

具体实现方式如下,依旧采用的是self-instruct的思路:

可以从:https://github.com/IMOSR/MediaGPT/blob/master/generate_data/prompt_tiktok.py中得到解释。

通过解析自媒体相关的pdf文本,并设定最大长度max_content=8000,将每页的pdf文本进行拼接,即:

context_str_ = context_str + documents[i].page_content  

形成上下文context_str后,送入return_random_prompt中进行指令泛化,其核心在于针对给定的上下文来,并引入in context learning直接生成instruction与output对。

def generate_data(directory_path):  
  loader = DirectoryLoader(directory_path, glob='*.pdf', loader_cls=PyPDFLoader)  
  documents = loader.load()  
  context_str = ""  
  file_index = 0  
  max_content = 8000  
  for i in range(0, len(documents)):  
      try:  
          context_str_ = context_str + documents[i].page_content  
          if len(context_str_) > max_content:  
            response = openai.ChatCompletion.create(  
              model="gpt-3.5-turbo-16k",  # here we use `gpt-3.5-turbo` model, while Stanford-Alpaca uses `text-davinci-003`  
              messages=[  
                {"role": "user", "content": return_random_prompt(context_str)},  
              ]  
            )  
            output_file = open("data/tiktok_data_%d.json" % file_index, 'w', encoding="utf8")  
            print(response["choices"][0]["message"]["content"])  
            output_file.write(response["choices"][0]["message"]["content"] + '\n')  
            output_file.close()  
            file_index+=1  
            context_str = documents[i].page_content  
  
          else:  
            context_str = context_str_  
      except Exception as e:  
        import traceback  
        print( traceback.format_exc())  
        print("error", " document :", i)  
        time.sleep(60)  
      print("document :", i)  

其对应的prompt构造方式如下:

def return_random_prompt(context_str):  
  system_prompt = "下面给出的上下文是抖音带货的运营、主播话术和直播间选品等相关的教学内容脚本,你需要尽可能给出多样化的任务指令、上下文和对应的回答。我们将用于人工评估ChatGPT模型对指令的完成情况。" \  
                  "-------------------------------------------------\n"\  
                  "%s\n"\  
                  "-------------------------------------------------\n" \  
                  "要求:\n"  
  
  
  system_prompt += "1. 主题多样化,涵盖各个方面,从学员角度提问,问题都是跟实际问题相关的。\n"  
  task_list = ["开放式生成", "分类", "问答", "编辑", "摘要", "写作", "分析",  "抽取", "推荐", "直播话术生成"]  
  system_prompt += "2. 表述多样化,结合真实问题;指令类型多样化,例如:" + "、".join(task_list) + "等。\n"  
  
  # other requirements  
  system_prompt += "3. 如果遇到无法处理的指令(只靠文本无法回答),给出无法处理的回复。\n"  
  system_prompt += "4. 所有回答尽可能的一点一点的罗列清晰,有教学意义,回答给出例子详细说明。\n"  
  system_prompt += "5. 所有回答都要解释。\n"  
  system_prompt += "7. 除非特别要求,请使用中文,指令可以是命令句、疑问句、或其他合适的类型。\n"  
  system_prompt += "8. 为指令生成一个适当且涉及真实情况的<instruction>,不应该只包含简单的占位符。<instruction>应提供实质性的内容,具有挑战性。\n"  
  system_prompt += "9. <input>为空。\n"  
  system_prompt += "10. <output>应该是对指令的适当且真实的回应,<input>是指令所引用的上下文都为空,不能只回复答应或拒绝请求。如果需要额外信息才能回复时,请努力预测用户意图并尝试回复。<output>的内容应少于" + str(random.randint(400, 512)) + "字。\n\n"  
  
  system_prompt += "请给出满足条件的10条JSON格式数据,输出格式和样例如下,对于输出结果请检查json格式的准确性,并修正结果:\n"  
  system_prompt += "例如:"  
  
  system_prompt += """ [  
  {  
    "instruction": "我们如何在日常生活中减少用水?",  
    "input": "",  
    "output": "1. 使用节水装置,如节水淋浴喷头和水龙头。 \\n2. 使用水箱或水桶收集家庭废水,例如洗碗和洗浴。 \\n3. 在社区中提高节水意识。 \\n4. 检查水管和灌溉系统的漏水情况,并及时修复它们。 \\n5. 洗澡时间缩短,使用低流量淋浴头节约用水。 \\n6. 收集雨水,用于园艺或其他非饮用目的。 \\n7. 刷牙或擦手时关掉水龙头。 \\n8. 减少浇水草坪的时间。 \\n9. 尽可能多地重复使用灰水(来自洗衣机、浴室水槽和淋浴的水)。 \\n10. 只购买能源效率高的洗碗机和洗衣机。"  
  },  
  {  
    "instruction": "编辑文章,使其更吸引读者。",  
    "input": "",  
    "output": "自主机器人是计算机控制的机器,被编程执行特定任务而不需要任何人类输入,从而实现了新的效率、精确度和可靠性水平。自主机器人在各个行业中被越来越广泛地应用,从制造业,它们可以使用精度和一致的质量组装复杂的组件,到医疗保健,可以协助进行医疗测试和处理,再到安全,可以监控大面积地区,保障人们和财产的安全。自主机器人还可以减少在危险或有害环境中的错误和增加安全,在工业流程的检查或维修期间等。由于其多样性,自主机器人将彻底改变我们工作方式的方式,使任务变得更加简单、快速,最终更加愉悦。"  
  },  
  {  
    "instruction": "政府可以采取哪些策略来减少空气污染?",  
    "input": "",  
    "output": "1. 实施强制的车辆排放标准和基于激励的计划,以降低车辆的碳足迹。\\n2. 增加公共交通工具,减少公众对车辆的依赖。\\n3. 增加对空气污染的影响的认识,鼓励市民减少污染物的生成。\\n4. 投资于可再生能源的研究和开发,如太阳能和风能。\\n5. 在工厂和发电厂安装空气污染控制装置,例如洗涤器。\\n6. 对车辆和工厂使用清洁燃料。\\n7. 实施更好的城市规划和控制拓展。\\n8. 改善农业效率,减少化肥和杀虫剂的使用。\\n9. 种植更多的树木以减少空气污染。\\n10. 减少木材、煤炭和生物质的燃烧。"  
  }  
  ]  
  
 """  
  return system_prompt%context_str  

最终,形成的SFT数据如下:

[  
  {  
    "instruction": "请问在抖音带货的过程中如何保证流量的稳定增长?",  
    "input": "",  
    "output": "为了确保流量的稳定增长,在整个开播过程中,需要保持匀速匀量的投放策略。比如每隔半个小时发布一定数量的短视频,或者每隔15分钟发布一定数量的短视频。投放期间要定下来,按照这个匀速匀量的策略进行操作。这样可以稳定地吸引流量并避免突然增减的情况发生。"  
  },  
  {  
    "instruction": "在抖音带货中,如何通过短视频引流来达到流量稳定的效果?",  
    "input": "",  
    "output": "为了实现流量稳定的效果,可以通过定时投放短视频的方式进行引流。比如每隔半个小时发布一定数量的短视频,保持匀速匀量的投放。这样可以让流量稳定地进入直播间,避免流量的波动和不稳定。"  
  },  
  {  
    "instruction": "在投放短视频引流的策略中,如何进行预热和预告?",  
    "input": "",  
    "output": "在进行短视频引流投放时,可以通过预热和预告来增加开篇的热度。无论是提前两个小时投放四个视频,还是提前一个小时投放两条视频,都可以在这个时间段内让流量猛增上去。预告和预热的目的是让直播开场时引爆更大的流量,让直播迅速冲起来。"  
  },  
  {  
    "instruction": "投放短视频引流时,如何选择投放目标?",  
    "input": "",  
    "output": "在短视频引流投放中,推荐选择主页浏览量作为投放目标。主页浏览量被发现是投入产出比最高的一种玩法,它可以用较少的钱办更多的事。通过将流量引导到主页,可以进一步增加曝光和转化的机会,提升整体的价值和效果。"  
  }  
]  

2、模型效果

Human:  
  
请介绍一下抖音带货的运营策略  
  
Assistant:  
抖音带货的运营策略可以从以下几个方面进行:   
1.了解目标受众,根据受众的兴趣和需求来选择适合的产品;  
2.与优质的主播合作,提高直播间的影响力和吸引力;  
3.利用抖音平台的特点,如短视频引流和直播间互动等,将产品销售地带向用户;  
4.定期分析数据,了解用户对产品的反应和偏好,根据数据调整运营策略;  
5.与供应商和品牌建立良好的合作关系,以获得更优惠的佣金和商品资源。  
  
  
Human:  
  
如何做好停留模型来补充销量和转化?  
  
Assistant:  
要在直播间中做好停留模型的补充,可以考虑以下方面:  
1.提供有吸引力的内容,给观众带来更多的价值和信息,增加他们停留的动机和感兴趣;  
2.与观众进行互动,回答他们的问题,建立良好的交流和互动关系;  
3.提供购买商品的便利,如设置商品链接、提醒观众下单等,增加转化率。  
4.提供与直播内容相关的其他内容,如教程、折扣促销等,吸引观众的关注和参与。  

该项目同样给我们的借鉴点在于,再次给出了一个垂直领域微调的数据构造方式(self-instruct),并且针对自媒体领域的数据适应。

总结

本文主要介绍了关于媒体领域的微调模型,包括《MediaGPT : A Large Language Model For Chinese Media》以及MediaGPT,一个针对自媒体领域进行特殊训练的模型。

这两个工作,都是面向媒体领域的,都具有借鉴意义。前者关于训练数据的构造、类别的设计、针对人工评估和大模型打分的评估优化,后者给出的针对自媒体领域的self-instruct流程也可进一步加深印象。

针对更进一步的细节,我们可以更进一步的跟进,并对关于数据构造、评估体系上更进一步的思考。

参考文献

1、https://arxiv.org/abs/2307.10930

2、https://github.com/IMOSR/MediaGPT

关于我们

老刘,刘焕勇,NLP开源爱好者与践行者,主页:https://liuhuanyong.github.io。

老刘说NLP,将定期发布语言资源、工程实践、技术总结等内容,欢迎关注。

对于想加入更优质的知识图谱、事件图谱实践、相关分享的,可关注公众号,在后台菜单栏中点击会员社区->会员入群加入。

更多AI工具,参考Github-AiBard123国内AiBard123

可关注我们的公众号:每天AI新工具