分类: 🌏

  • SILU激活函数:深度学习中的智能“开关”

    在深度学习的神奇世界里,激活函数扮演着至关重要的角色。它们就像是神经网络中的“开关”,决定着信息如何在网络中流动。今天,我们要探索一种名为SILU(Sigmoid Linear Unit)的激活函数,它因其独特的特性和潜在的优势而受到关注。

    什么是SILU激活函数?

    SILU是一种新型的激活函数,它的数学表达式简单而优雅:

    [ \text{SILU}(x) = x \cdot \sigma(x) ]

    这里的 ( x ) 是输入信号,而 ( \sigma(x) ) 是sigmoid函数,它将输入压缩到0和1之间。SILU函数的输出范围是从0到 ( x ) 的值。

    SILU的魔力在哪里?

    • 自归一化特性:SILU的输出自动适应输入的大小,这有助于防止梯度消失或爆炸,从而提高网络的训练效率。
    • 非单调性:与ReLU等单调激活函数不同,SILU可以在正负值之间转换,提供更丰富的信息处理能力。
    • 参数效率:在一些情况下,SILU能够减少模型所需的参数数量,使模型更加轻量化。

    SILU在实际中的应用

    虽然SILU是一个相对较新的激活函数,但它已经在多个领域展现出潜力。研究人员发现,SILU可以提高某些深度学习模型的性能,尤其是在图像分类和自然语言处理任务中。

    如何使用SILU?

    在实际应用中,使用SILU就像使用其他激活函数一样简单。在构建神经网络时,你只需在适当的位置插入SILU函数,然后让数据流经它。例如,在Python的深度学习库中,你可以这样使用SILU:

    import torch
    import torch.nn.functional as F
    
    x = torch.randn(1, requires_grad=True)
    output = F. silu(x)

    结语

    SILU激活函数代表了深度学习领域的持续创新和发展。随着研究的深入,我们期待SILU能够在更多场景下发挥其优势,帮助我们构建更加智能和高效的模型。

    想要了解更多关于SILU的信息,或者在你的项目中尝试使用它,可以查阅相关的研究论文。让我们一起见证深度学习技术的进步,并探索SILU的无限可能!


    希望这篇博客文章能够帮助你更好地了解SILU激活函数,并激发你探索和应用这项技术的兴趣。如果你有任何问题或需要更多信息,请随时与我联系。

  • GraphRAG:智能摘要技术的新突破

    在数字化时代,我们每天都在创造海量文本数据。如何从这些数据中提取有价值的信息并进行有效总结,成为了一个重要课题。微软研究院最新推出的GraphRAG技术,为我们提供了一个创新的解决方案。今天,我们就来聊聊这项技术是如何工作的,以及它将如何改变我们的信息处理方式。

    什么是GraphRAG?

    GraphRAG(Graph Retrieval-Augmented Generation)是一种结合了知识图谱和检索增强生成(RAG)的技术。它能够帮助大型语言模型(LLM)更好地理解并总结大规模文本数据集中的信息。

    GraphRAG的工作原理

    GraphRAG的工作流程分为以下几个步骤:

    1. 文本分割:将大量文本分割成小块,以便语言模型处理。
    2. 元素提取:使用语言模型从文本中提取实体、关系和主张等元素。
    3. 构建知识图谱:将提取的元素构建成知识图谱,形成实体和关系的网络。
    4. 社区检测:利用算法将知识图谱中的实体分组成具有强关联性的社区。
    5. 社区摘要:为每个社区生成摘要,这些摘要能够全面覆盖输入文档的内容。
    6. 查询响应:当用户提出问题时,系统会使用社区摘要生成部分回答,然后汇总这些回答生成最终的全局答案。

    GraphRAG的优势

    • 全面性:GraphRAG能够提供更全面的答案,因为它考虑了整个文本数据集的内容。
    • 多样性:通过社区检测和摘要,GraphRAG能够从不同角度和层面提供信息。
    • 效率:与传统的RAG技术相比,GraphRAG在处理大规模文本时更为高效。

    实际应用案例

    为了评估GraphRAG技术,研究者们使用了两个真实世界的数据集:技术播客的转录文本和新闻文章。他们让语言模型基于这些数据集的简短描述生成了一系列问题,并使用GraphRAG来回答这些问题。结果表明,GraphRAG在生成全面和多样化答案方面,明显优于传统的RAG方法。

    未来展望

    GraphRAG技术为处理大规模文本数据提供了新的可能性。随着技术的不断发展,我们期待GraphRAG能够在更多领域展现其强大的能力,例如自动生成报告、数据分析和知识发现等。

    结语

    GraphRAG的推出,不仅是技术上的一次飞跃,也为信息检索和摘要领域带来了新的思路。随着技术的不断完善,我们相信GraphRAG将在未来发挥更大的作用。

    想要了解更多关于GraphRAG的信息,或者开始使用这项技术,请访问微软研究院的论文。让我们一起探索智能摘要技术的未来。


    希望这篇博客文章能够帮助您更好地了解GraphRAG技术,并激发您探索和应用这项技术的兴趣。如果您有任何问题或需要更多信息,请随时与我联系。

  • 《棱镜计划》:全球监控的冰山一角

    引言

    在数字化时代,信息安全和个人隐私成为了全球关注的焦点。2013年,一个名为《棱镜计划》的秘密项目震惊了世界,它不仅揭示了美国国家安全局(NSA)的全球监听行为,也引发了对隐私权和国家安全之间平衡的广泛讨论。

    棱镜计划的曝光

    2013年6月,前美国防务承包商雇员爱德华·斯诺登向媒体泄露了一系列机密文件,揭露了NSA自2007年起实施的《棱镜计划》。该计划允许NSA通过与多家大型互联网公司合作,秘密收集全球范围内的通信数据。

    监听的广度与深度

    《棱镜计划》的监听范围极其广泛,包括但不限于电子邮件、即时消息、视频、照片、文件传输、社交网络信息等。NSA能够实时监控网络搜索内容,甚至通过“后门”进入科技公司的服务器,直接访问用户数据。

    合作的科技公司

    包括微软、雅虎、谷歌、苹果、Facebook等在内的多家美国网络巨头被披露参与了棱镜计划,它们为NSA提供了数据支持。这些公司的合作引发了公众对其隐私政策和道德责任的质疑。

    法律与道德的争议

    棱镜计划的曝光立即引发了全球范围内的法律和道德争议。一方面,政府声称监控是为了国家安全和反恐需要;另一方面,公民和隐私权组织则认为这种做法侵犯了个人隐私,违反了宪法。

    斯诺登的命运

    斯诺登因泄露机密文件被美国政府以间谍罪等罪名通缉,目前居住在俄罗斯,已获得俄国籍。他的行为引发了关于英雄与叛徒、言论自由与国家安全之间的辩论。

    后续影响与全球反响

    棱镜计划的曝光并未使美国的监听行为有所收敛,反而在一定程度上得到了法律的支持。同时,这一事件也促使全球范围内对网络安全和隐私保护的重视,许多国家开始加强本国的网络安全法规。

    结语

    《棱镜计划》不仅是一个监控项目,更是一个时代的符号,它反映了在全球化和数字化背景下,国家权力与个人权利的冲突。随着技术的发展,如何在保障国家安全的同时保护个人隐私,将是我们必须面对的挑战。


    本文综合了多方面的信息,力求以通俗易懂的语言,为读者提供一个全面、详实的棱镜计划概览。

  • 棱镜计划

    1. 棱镜计划的起源与曝光

    《棱镜计划》是一项由美国国家安全局(NSA)自2007年起实施的电子监听计划。2013年6月5日,英国《卫报》通过美国前防务承包商雇员爱德华·斯诺登的爆料,首次曝光了这个秘密项目。斯诺登披露的文件显示,美国国家安全局能够接触到大量个人聊天日志、存储的数据、语音通信、文件传输、个人社交网络数据等。

    2. 棱镜计划的监听范围

    棱镜计划的监听对象广泛,不仅包括美国民众,也包括其他国家的政要和普通百姓。例如,美国国家安全局曾对122名外国领导人实施监听,其中包括时任德国总理默克尔。此外,该计划能够对即时通信和存储资料进行深度监听和数据获取,涉及电子邮件、视频/语音聊天、照片/视频、文件传输和社交网络信息等。

    3. 棱镜计划的参与者

    微软、雅虎、谷歌、脸书、Paltalk、YouTube、AOL、Skype、苹果等九家美国网络巨头均参与了棱镜计划,为政府提供数据。这些公司通过各种方式与美国政府合作,使得NSA能够访问和利用这些平台上的数据。

    4. 棱镜计划的法律与道德争议

    棱镜计划曝光后,引发了全球对美国大规模监听活动的强烈谴责。美国公民自由联盟等组织认为该计划侵犯了言论自由和公民隐私权,违反了宪法,并提起诉讼。同时,美国政府以间谍罪、盗窃罪等罪名通缉斯诺登。

    5. 棱镜计划的后续影响

    尽管棱镜计划引发了广泛的争议和批评,但美国并未因此收敛其监听行为。在过去的十年中,美国仍不断曝出各种监听他国的丑闻,且监听行为趋向“制度化”。美国政府通过《涉外情报监视法》等立法,不断扩大安全机关权限,对他国进行监听。

    6. 棱镜计划与全球网络安全

    棱镜计划的曝光也引起了对全球网络安全的担忧。美国的监听行为不仅侵犯了个人隐私,也严重危害了国际网络安全。美国利用先进技术构建了一个“监听帝国”,其行为与其所声称的维护信息安全的目标背道而驰。

    结语

    棱镜计划是21世纪网络监控的一个标志性事件,它揭示了国家监控能力的范围和深度,同时也引发了对隐私权、国家安全和国际关系的深刻反思。随着技术的发展和全球网络环境的变化,如何平衡监控与隐私、安全与自由之间的关系,将是未来社会需要持续探讨的重要议题。


  • GeneralAgent:从大型语言模型到智能代理

    引言

    近年来,大型语言模型(LLM)在自然语言处理领域取得了显著的进展。然而,如何将 LLM 的强大能力应用到实际的业务场景中,仍然是一个充满挑战的任务。GeneralAgent 框架应运而生,它旨在将 LLM 与 Python 无缝集成,为构建智能代理提供一个灵活、高效的平台。

    GeneralAgent 框架概述

    GeneralAgent 是一个 Python 原生的代理框架,其核心目标是简化 LLM 在实际应用中的开发流程。与其他代理框架相比,GeneralAgent 具有以下优势:

    • 工具调用: GeneralAgent 不依赖于 LLM 的 function call 功能,而是通过 Python 代码解释器来调用工具,从而实现更灵活、可控的工具调用方式。
    • 序列化: GeneralAgent 支持序列化代理的状态,包括记忆和 Python 执行状态,方便开发者随时保存和恢复代理的状态。
    • 自我调用: GeneralAgent 支持代理的自我调用和堆栈记忆,能够最小化 LLM 的调用次数,从而高效地处理复杂任务。
    • 部署服务: GeneralAgent 可以与 AgentServer 配合使用,快速为大规模用户提供代理服务。

    GeneralAgent 功能介绍

    函数调用

    GeneralAgent 允许开发者将 Python 函数注册到代理中,并通过自然语言指令来调用这些函数。例如,我们可以定义一个获取天气信息的函数:

    def get_weather(city: str) -> str:
        """
        get weather information
        @city: str, city name
        @return: str, weather information
        """
        return f"{city} weather: sunny"

    然后将该函数注册到代理中:

    agent = Agent('你是一个天气小助手', functions=[get_weather])

    当用户询问 “成都天气怎么样?” 时,代理会自动调用 get_weather 函数,并将 “成都” 作为参数传递给该函数,最终返回 “成都天气: 晴朗”。

    知识库

    GeneralAgent 支持将外部知识库集成到代理中,从而增强代理的知识范围。开发者可以将知识库文件路径传递给代理,代理会自动加载并索引知识库内容。

    knowledge_files = ['../docs/paper/General_Agent__Self_Call_And_Stack_Memory.pdf']
    agent = Agent('你是AI助手,用中文回复。', workspace='9_knowledge_files', knowledge_files=knowledge_files)

    当用户提出问题时,代理会先在知识库中搜索相关信息,并将搜索结果作为 LLM 的输入,从而生成更准确、全面的答案。

    序列化

    GeneralAgent 支持序列化代理的状态,包括 LLM 的对话历史和 Python 解释器的状态。开发者可以使用 agent.save() 方法将代理的状态保存到磁盘,并使用 agent.load() 方法从磁盘加载代理的状态。

    # agent序列化位置,运行过程中会自动保存LLM的messages和python解析器的状态
    workspace='./5_serialize'
    
    role = 'You are a helpful agent.'
    agent = Agent(workspace=workspace)
    agent.user_input('My name is Shadow.')
    
    agent = None
    agent = Agent(role, workspace=workspace)
    agent.user_input('What is my name?')

    工作流

    GeneralAgent 支持定义复杂的工作流,并通过多个步骤来完成任务。开发者可以使用 agent.run() 方法执行单个步骤,并使用 Python 代码控制工作流的执行逻辑。

    # 工作流: 写小说
    from GeneralAgent import Agent
    from GeneralAgent import skills
    
    # 步骤0: 定义Agent
    agent = Agent('你是一个小说家')
    
    # 步骤1: 从用户处获取小说的名称和主题
    # topic = skills.input('请输入小说的名称和主题: ')
    topic = '小白兔吃糖不刷牙的故事'
    
    # 步骤2: 小说的概要
    summary = agent.run(f'小说的名称和主题是: {topic},扩展和完善一下小说概要。要求具备文艺性、教育性、娱乐性。')
    
    # 步骤3: 小说的章节名称和概要列表
    chapters = agent.run('输出小说的章节名称和每个章节的概要,返回列表 [(chapter_title, chapter_summary), ....]', return_type=list)

    多代理协作

    GeneralAgent 支持多个代理协作完成任务。开发者可以创建多个代理实例,并为每个代理分配不同的角色和任务。代理之间可以通过消息传递进行通信和协作。

    # 多Agent配合完成任务
    from GeneralAgent import Agent
    story_writer = Agent('你是一个故事创作家,根据大纲要求或者故事梗概,返回一个更加详细的故事内容。')
    humor_enhancer = Agent('你是一个润色作家,将一个故事进行诙谐润色,增加幽默元素。直接输出润色后的故事')

    多模态输入

    GeneralAgent 支持多模态输入,例如文本、图片、音频等。开发者可以将多模态数据封装成数组,并传递给 agent.user_input() 方法或 agent.run() 方法。

    # 支持多模态: 图片输入
    from GeneralAgent import Agent
    
    agent = Agent('You are a helpful assistant.')
    agent.user_input(['what is in the image?', {'image': '../docs/images/self_call.png'}])

    总结

    GeneralAgent 框架为构建智能代理提供了一个强大、灵活的平台,其丰富的功能和易用的 API 可以帮助开发者快速构建各种类型的智能代理应用。随着 LLM 技术的不断发展,GeneralAgent 框架将会在更多领域发挥重要作用。

  • 使用 GPT-4 解析 PDF 为 Markdown 文档:gptpdf 项目解析

    引言

    在信息爆炸的时代,如何高效地处理和提取 PDF 文档中的信息成为了一个普遍的需求。传统的 OCR 技术在处理复杂的排版、数学公式、表格和图片时往往力不从心。而 gptpdf 项目利用强大的视觉大语言模型 GPT-4,为 PDF 解析提供了一种全新的解决方案。

    gptpdf 项目概述

    gptpdf 项目的核心思想是利用 GPT-4 强大的多模态理解能力,将 PDF 文档解析为结构化的 Markdown 格式。项目地址:https://github.com/CosmosShadow/gptpdf

    与传统的 OCR 技术相比,gptpdf 项目具有以下优势:

    • 更精准的识别: gptpdf 能够准确识别复杂的排版、数学公式、表格、图片、图表等内容,而传统的 OCR 技术在处理这些内容时 often 出现错误。
    • 更结构化的输出: gptpdf 将解析结果输出为 Markdown 格式,方便后续编辑和处理,而传统的 OCR 技术只能输出纯文本,丢失了原文档的结构信息。
    • 更低的成本: gptpdf 平均每页的解析成本仅需 0.013 美元,远低于人工解析的成本。

    gptpdf 工作原理

    gptpdf 的工作流程可以概括为以下两个步骤:

    1. 预处理: 使用 PyMuPDF 库对 PDF 文件进行解析,识别并标记出所有非文本区域,例如图片、表格、公式等。 ![][]
    2. GPT-4 解析: 将预处理后的 PDF 页面图片和标记信息发送给 GPT-4o 模型进行解析,GPT-4o 模型会根据页面内容和标记信息,生成相应的 Markdown 文本。

    gptpdf 使用方法

    使用 gptpdf 非常简单,只需安装 gptpdf 包并调用 parse_pdf 函数即可:

    from gptpdf import parse_pdfapi_key = 'Your OpenAI API Key'
    content, image_paths = parse_pdf(pdf_path, api_key=api_key)
    print(content)

    其中:

    • pdf_path: 要解析的 PDF 文件路径。
    • api_key: 您的 OpenAI API 密钥。
    • content: 解析后的 Markdown 文本。
    • image_paths: 解析过程中提取的图片路径列表。

    gptpdf 项目特色

    除了基本的功能之外,gptpdf 还提供了一些额外的功能,例如:

    • 支持多种 OpenAI 模型: 用户可以根据自己的需求选择不同的 OpenAI 模型,例如 gpt-4oqwen-vl-maxGLM-4V 等。
    • 支持 Azure OpenAI: 用户可以使用 Azure OpenAI 服务来运行 gptpdf。
    • 可配置的输出: 用户可以自定义输出目录、文件名等参数。
    • 详细的日志: 用户可以通过设置 verbose=True 来查看详细的解析日志。

    总结

    gptpdf 项目提供了一种高效、准确、低成本的 PDF 解析方案,为处理大量 PDF 文档提供了新的思路。随着 GPT-4 等视觉大语言模型的不断发展,相信 gptpdf 项目会在未来得到更广泛的应用。

    参考文献

  • 开源大语言模型提示工程探索:机器翻译与摘要评估新视角

    引言

    近年来,大型语言模型(LLM)的兴起彻底改变了自然语言处理(NLP)领域。尤其引人注目的是,LLM 的上下文学习能力使其能够作为自然语言生成任务的评估指标,这在低资源场景和时间受限的应用中尤为 advantageous。传统的评估指标,例如 BLEU 或 ROUGE,往往依赖于大量的人工标注数据,而 LLM 则可以通过少量的样本学习到评估文本质量的能力。

    然而,尽管已经提出了许多基于提示的 LLM 评估指标,但目前仍然缺乏对不同提示方法进行结构化评估的研究,特别是对于开源模型而言。本文介绍了 PrExMe,一个针对评估指标的大规模提示探索框架。我们评估了超过 720 个提示模板,涵盖了机器翻译(MT)和摘要数据集上的开源 LLM 评估指标,总计超过 660 万次评估。这项广泛的比较 (1) 作为近期开源 LLM 作为评估指标的性能基准,(2) 探索了不同提示策略的稳定性和可变性。

    相关工作

    基于提示的评估指标

    近年来,LLM 在自然语言生成(NLG)评估指标方面取得了显著进展,其主要依赖于上下文学习,即直接从生成的文本中预测质量判断。Li 等人(2024b)和 Gao 等人(2024a)的综述提供了对这些指标的全面概述。除了 BARTSCORE(Yuan 等人,2021 年)和 PRD(Li 等人,2024a),Li 等人(2024b)综述的基于提示的方法都建立在闭源模型之上。相比之下,EVAL4NLP 2023 共享任务(Leiter 等人,2023 年)明确考虑了开源的基于提示的指标,要求参与者仅使用提供的模型来评估机器翻译和摘要,而不能对这些模型进行微调。表现最好的提交甚至能够击败强大的基线,例如机器翻译领域的 GEMBA(Kocmi 和 Federmann,2023b)和摘要领域的 BARTSCORE。

    提示技术

    近年来,人们提出了许多成功的提示技术(例如,Liu 等人,2023a)。我们的工作主要依赖于已有的方法,如零样本 CoT 和 RAG。此外,Li 等人(2023 年)提出了情绪诱导提示,以提高 LLM 的性能。据我们所知,我们是第一个分析这种技术在评估指标中的应用的。受此启发,我们还提出了一种新颖的情绪-CoT 模式(见第 3 节)。Kocmi 和 Federmann(2023b)对基于提示的指标的输出格式进行了先前的评估,我们通过更广泛的评估对其进行了扩展。其他工作也使用分层模板来构建提示(例如 Fu 等人,2023 年),LangChain(Chase,2022 年)和 DSPy(Khattab 等人,2023 年)等工具也支持这种实现。我们使用分层模板作为结构化比较不同提示模式的一种手段。

    提示鲁棒性

    由于我们对不同的提示、数据集和任务进行了网格搜索,因此我们的工作建立在 LLM 如何响应提示扰动的研究基础之上,并对其进行了扩展。Webson 和 Pavlick(2022 年)、Leidinger 等人(2023 年)、Weber 等人(2023 年)以及 Sclar 等人(2023 年)发现,自然语言推理和情感分类的性能存在很大差异。作为解决方案,Sclar 等人(2023 年)建议提供不同提示扰动下的所有结果。Voronov 等人(2024 年)和 Mizrahi 等人(2024 年)认为,目前 LLM 的评估基准存在问题,因为它们通常每个任务只提供一个提示模板。这可以通过提供多个模板并评估其集合来解决。据我们所知,我们是第一个探索这些鲁棒性问题在多大程度上影响开源的基于 LLM 的指标,以及如何为其选择最佳提示的。此外,通过使用多个提示来提示 LLM,我们遵循了 Mizrahi 等人(2024 年)的做法,实现了对 LLM 的稳定和公平的评估。

    研究方法

    为了系统地研究不同提示方法对 LLM 评估指标的影响,我们构建了一个名为 PrExMe 的大规模提示探索框架。

    提示模板

    我们的提示被构建成分层模板(见图 1),即一个大的模板由多个小的模板构成。每个提示都由以下部分构成:(1) 需要评分的源文本和生成的假设文本,(2) 基本提示,(3) 任务描述,(4) 格式要求,以及 (5) 可选的单样本演示。表 1 展示了 (2)、(3)、(4) 和 (5) 的例子。

    基本提示

    基本提示是我们提示层次结构的顶层,它包含了其他组件。具体来说,我们测试了三个零样本(ZS)和相应的单样本(OS)基本提示:(1) 普通 ZS/OS (PZS/POS),(2) ZS/OS-COT,以及 (3) ZS/OS-CoT-Emotion (ZS/OS-COT-EM)。PZS 简单地呈现了用换行符分隔的任务描述、源文本、假设文本和格式要求。ZS-COT (KOJIMA ET AL.,2022) 另外要求模型在返回输出之前逐步思考。最后,ZS-COT-EM 要求模型在 ZS-CoT 提示之前描述其“情绪”。我们之所以包含 CoT,是因为它提高了基于提示的闭源指标(如 AUTOMQM Fernandes 等人(2023 年)和 GEMBA(Kocmi 和 Federmann,2023a))的性能。ZS-COT-EM 探索了在提示 LLM 描述其输出中的情绪时,LLM 性能的变化。这是由我们对情绪提示对指标性能的探索所推动的(见下文“任务描述”)。模板的 OS 版本添加了一个用于演示的字段。为了避免模型局限于特定的推理步骤,我们在 OS-CoT 中包含了一个占位符,模型应该在其中插入其推理。

    任务描述

    任务描述是给生成的假设评分的指令。Li 等人(2023 年)发现,对人类来说能引发某些情绪的 LLM 指令可以提高性能。受这一发现的启发,我们探索了在任务描述中使用“情绪提示”。这种方法主要提供了一种简单的改写策略,以扩大我们的网格搜索范围。此外,它还允许我们研究“情绪”对基于 LLM 的指标的影响。除了中性提示外,我们还包括了例如礼貌、威胁和怀疑的指令。我们自己创建了 11 个任务描述,并使用 CHATGPT (OpenAI, 2023) 创建了 13 个任务描述。

    格式要求

    格式要求描述了 LLM 在生成分数时应遵循的输出格式。例如,它包括输出分数应该在哪一范围内,以及应该是离散的还是连续的。此外,我们还包括要求 LLM 返回文本质量标签的提示。我们总共定义了 10 种格式要求。

    单样本演示

    最后,我们使用 RAG 构造可选的 OS 演示。我们从 WMT21 (Freitag 等人,2021 年) 中提取机器翻译的演示,从 ROSE (Liu 等人,2023b) 中提取摘要的演示。

    基于 MQM 的方法

    除了分层模板之外,我们还使用选定的开源 LLM 测试了 GEMBA-MQM (Kocmi 和 Federmann,2023a) 的提示。GEMBA-MQM 通常使用 GPT4,它根据出现的错误数量(按严重程度加权)来预测分数。我们将开源实现称为 LocalGemba。

    数据集和阶段

    我们的实验分两个阶段,使用不同的数据集。这样做是为了减轻大规模提示搜索带来的统计效应。此外,它还允许我们在完整的数据集上评估选定的提示(否则这项任务将非常耗费资源),并探索其泛化能力。

    在第一阶段,我们使用 EVAL4NLP 2023 (Leiter 等人,2023 年) 的训练集进行评估;在第二阶段,我们使用其开发集和测试集进行评估。训练集和开发集是 WMT2022 指标共享任务 (Freitag 等人,2022 年) 和 SUMMEVAL (Fabbri 等人,2021 年) 的(无参考)分割。测试集由 Leiter 等人(2023 年)新标注。作为第二个测试集,我们使用了 WMT23 MQM 机器翻译标注 (Freitag 等人,2023 年) 和 Seahorse 多语言摘要标注 (Clark 等人,2023 年)。由于 OS 提示在其他数据集上的表现不佳,因此我们没有在 WMT23/SEAHORSE 上对其进行评估。

    在第一阶段,我们评估了训练集上 720 个 ZS 提示的所有组合。由于这非常耗费资源,因此对于机器翻译,我们将每个语种对限制在第一阶段,我们评估了训练集上 720 个 ZS 提示的所有组合。由于这非常耗费资源,因此对于机器翻译,我们将每个语种对限制为 1,000 个样本。对于摘要,我们使用了 SUMMEVAL 中的所有样本。对于每个模型,我们选择 Kendall 的 τ 与人类判断的相关性最高的 10 个提示。在第二阶段,我们使用这些选定的提示来评估开发集和测试集,以及 WMT23/SEAHORSE。

    模型

    我们实验中使用的所有模型都可以在 HuggingFace Hub 上公开获取,并且可以在消费级硬件上运行。我们使用七个不同的模型: GPT2-XL (Radford 等人,2019 年)、OPT-IML-30B (Iyer 等人,2022 年)、BLOOM-7B1 (Scao 等人,2022 年)、Pythia-12B (Biderman 等人,2023 年)、StableLM-Base-Alpha-7B (Chiang 等人,2023 年)、OpenAssistant-Pythia-12B (Köpf 等人,2023 年) 和 PLATYPUS2-70B (Lee 等人,2023a)。我们选择这些模型是因为它们代表了不同大小、架构和训练数据集的开源 LLM 的多样化样本。

    实验结果

    RQ1:开源 LLM 的评估能力

    为了回答关于开源 LLM 评估能力的第一个研究问题,我们分析了不同模型在不同数据集上的总体性能。图 2 显示了所有模型在所有数据集和任务上的平均 Kendall 的 τ。

    图2:不同模型在不同数据集上的平均 Kendall 的 τ。

    总的来说,PLATYPUS2-70B 在所有数据集上都取得了最好的结果,这表明更大的模型更适合作为评估指标。然而,其他模型(如 OpenAssistant-Pythia-12B. 在某些情况下也表现良好,这表明模型大小并不是性能的唯一决定因素。

    RQ2:提示模式的稳定性为了研究不同提示模式的稳定性,我们分析了不同数据集、任务和模型之间 Kendall 的 τ 的变化。我们发现,某些提示模式(如要求模型返回文本标签而不是数字分数)对于某些模型(如 PLATYPUS2-70B. 始终表现良好。然而,我们也发现,对于某些设置,即使是对输入提示进行微小的更改也会极大地影响性能。例如,将请求的输出格式从“0 到 100”更改为“-1 到 +1”会极大地影响我们评估中的排名。

    RQ3:新评估场景的提示设计

    根据我们的发现,我们为新评估场景的提示设计提出以下建议:

    • 从简单的提示开始。 在许多情况下,简单的零样本提示就能获得良好的结果。
    • 尝试不同的输出格式。 一些模型更喜欢返回文本标签,而另一些模型则在使用数字分数时表现更好。
    • 考虑使用 CoT 提示。 CoT 提示可以帮助提高某些模型的性能,尤其是在评估复杂文本时。
    • 在多个数据集上评估你的提示。 即使是表现良好的提示也可能无法很好地泛化到新数据集。

    结论

    在这项工作中,我们对不同提示方法对 LLM 评估指标的影响进行了大规模分析。我们的研究结果表明,某些提示模式是稳健的,并且可以很好地泛化到不同的任务和数据集。然而,我们也发现,对于某些设置,即使是对输入提示进行微小的更改也会极大地影响性能。根据我们的发现,我们为新评估场景的提示设计提出了一些建议。

    参考文献

    • Biderman, S. et al. (2023). Pythia: A suite for analyzing large language models across training and scaling. arXiv preprint arXiv:2304.01355.
    • Chase, H. (2022). Langchain. https://github.com/hwchase17/langchain.
    • Chiang, W. -L. et al. (2023). Stablelm-alpha 7b: Small and mighty for research. https://github.com/Stability-AI/stablelm.
    • Clark, E. et al. (2023). Seahorse: A multilingual benchmark for factual correctness in summarization. arXiv preprint arXiv:2306.05125.
    • Fabbri, A. R. et al. (2021). Summeval: Re-evaluating summarization evaluation. Transactions of the Association for Computational Linguistics, 9, 408–430.
    • Fernandes, P. et al. (2023). AutoMQM: Automatic machine translation evaluation with large language models. In Proceedings of the 17th Conference of the European Association for Machine Translation.
    • Freitag, M. et al. (2021). Results of the WMT21 Metrics Shared Task: Evaluating metrics with explanations. In Proceedings of the Sixth Conference on Machine Translation.
    • Freitag, M. et al. (2022). Findings of the WMT22 Shared Task on Machine Translation Quality Estimation. In Proceedings of the Seventh Conference on Machine Translation.
    • Freitag, M. et al. (2023). Findings of the WMT23 Shared Task on Machine Translation Quality Estimation. In Proceedings of the Eighth Conference on Machine Translation.
    • Fu, Y. et al. (2023). From words to programs: Exploring the potential of large language models for abstract semantic parsing. arXiv preprint arXiv:2305.17770.
    • Gao, L. et al. (2024a). A survey of large language model based automatic metrics for natural language generation. arXiv preprint arXiv:2404.14012.
    • Gao, L. et al. (2024b). Retrieval augmentation for large language model based evaluation metrics. arXiv preprint arXiv:2405.12504.
    • Iyer, S. et al. (2022). OPT: Open pre-trained transformer language models. arXiv preprint arXiv:2205.01068.
    • Khattab, O. et al. (2023). DSPy: Towards general-purpose symbolic programming for composable program synthesis. arXiv preprint arXiv:2305.15956.
    • Kocmi, T. and Federmann, C. (2023a). Large language models are not fair judges: Exploring the intrinsic bias of dataset average as a metric. arXiv preprint arXiv:2305.13400.
    • Kocmi, T. and Federmann, C. (2023b). On the evaluation of machine translation systems trained with controlled simplification. In Proceedings of the 17th Conference of the European Association for Machine Translation.
    • Kojima, T. et al. (2022). Large language models are zero-shot reasoners. arXiv preprint arXiv:2205.11916.
    • Köpf, B. et al. (2023). OpenAssistant Conversations—democratizing large language model alignment. arXiv preprint arXiv:2304.07327.
    • Lee, H. Y. et al. (2023a). PLATYPUS: Quick, cheap, and accurate fine-tuning of large language models. arXiv preprint arXiv:2310.11307.
    • Leidinger, T. et al. (2023). Prompt surveillance: Tracking prompts that expose weaknesses in large language models. arXiv preprint arXiv:2302.12177.
    • Leiter, C. et al. (2023). Findings of the WMT 2023 Shared Task on Evaluating the Evaluation of Machine Translation and Summarization. In Proceedings of the Eighth Conference on Machine Translation.
    • Li, H. et al. (2023). Exploring the impact of emotion on large language models. arXiv preprint arXiv:2305.14725.
    • Li, S. et al. (2024a). Unbabel’s submission to the WMT23 metrics shared task: Prompting large language models for machine translation quality estimation. In Proceedings of the Eighth Conference on Machine Translation.
    • Li, Y. et al. (2024b). A survey of automatic metrics based on large language models for natural language generation. arXiv preprint arXiv:2404.00774.
    • Liu, P. et al. (2023a). Pre-train, prompt, and predict: A systematic survey of prompting methods in natural language processing. ACM Computing Surveys, 55(9), 1–35.
  • LLM 也许是 LongLM:无需微调地自扩展 LLM 上下文窗口

    @misc{jin2024llm,
          title={LLM Maybe LongLM: Self-Extend LLM Context Window Without Tuning},
          author={Hongye Jin and Xiaotian Han and Jingfeng Yang and Zhimeng Jiang and Zirui Liu and Chia-Yuan Chang and Huiyuan Chen and Xia Hu},
          year={2024},
          eprint={2401.01325},
          archivePrefix={arXiv},
          primaryClass={cs.CL}
    }

    》这篇论文介绍了一种名为 Self-Extend 的新方法,该方法可以在不进行微调的情况下,有效地扩展大型语言模型 (LLM) 的上下文窗口。

    1. 引言

    大型语言模型 (LLM) 在各种任务中都取得了显著的成果,但其应用受限于训练序列的长度。为了解决这个问题,本文提出了一种名为 Self-Extend 的方法,该方法可以有效地扩展 LLM 的上下文窗口,而无需进行任何微调。

    2. Self-Extend 方法概述

    Self-Extend 方法的核心思想是构建双层注意力信息:组级别和邻居级别。这两种级别的注意力信息都是通过原始模型的自注意力机制计算得到的,这意味着该方法不需要任何额外的训练。

    2.1 双层注意力机制

    • 组级别注意力: 将输入序列划分为多个组,每个组包含多个词语。组级别注意力机制计算每个组与其他所有组之间的注意力权重。
    • 邻居级别注意力: 在每个组内,邻居级别注意力机制计算每个词语与其邻居词语之间的注意力权重。

    通过结合组级别和邻居级别注意力信息,Self-Extend 方法可以有效地扩展 LLM 的上下文窗口,使其能够处理更长的输入序列。

    如下图所示:

    3. Self-Extend 的使用

    3.1 环境配置

    目前,Self-Extend 方法已在 Llama 模型上进行了测试,所需的 Python 包如下:

    transformers==4.38.2
    flash_attn==2.5.6 

    推荐使用以下 Docker 镜像: hoytjin/selfextend_docker:v0.1

    3.2 运行 Self-Extend

    import SelfExtend
    
    # 加载模型,例如:loaded_model = AutoModelForCausalLM.from_pretrained(model_path)
    
    # 设置组大小和邻居窗口大小
    
    SelfExtend.apply(loaded_model, group_size, window_size, enable_flash_attention=False)
    
    # 进行推理,例如:loaded_model.generate(...)

    默认情况下,enable_flash_attention=False。如果模型加载时启用了 FlashAttention,则可以设置 enable_flash_attention=True

    以下代码示例展示了如何使用 Self-Extend 方法进行密钥检索:

    python example.py

    4. 如何选择组大小和邻居窗口大小

    选择合适的组大小和邻居窗口大小对于 Self-Extend 方法的性能至关重要。以下是一些经验法则:

    • 以 Llama-2 为基础模型,2~64 是合理的组大小;512~1536 是可行的邻居窗口大小。但在许多情况下,较大的组大小和较小的邻居窗口大小也是不错的选择。
    • 选择组大小和邻居窗口大小的一般原则是:确保输入序列长度在最大扩展窗口大小之内(对于 Llama-2,最大扩展窗口大小为 (4096 – 邻居窗口大小) * 组大小 + 邻居窗口大小)。
    • 作者并没有仔细选择组大小。对于相同的序列,较小的组应该更好。但在一些实验中,作者发现情况并非总是如此:

    有时,较大的组大小可能更有益。这可能是因为较大的位置没有得到很好的训练。较大的组大小可以利用在预训练中接受过更多训练的较小位置来促进扩展。然而,较小的组大小往往具有更好的精度。因此,这是一个权衡。更多细节请参考消融研究部分。

    例如:
    如果问答任务的输入长度为 15,800,邻居窗口大小设置为 1,024,则组大小可以设置为 5。这是因为 5 * (4,096 – 1,024) + 1,024 等于 16,384,大于 15,800。然而,将组大小设置为 6,甚至更大,例如 8 或 16,可能会提高模型的性能。当组大小为 5 时,Self-Extend 使用位置 1,025 到 3,979 来扩展上下文窗口。如果组大小设置为 8,Self-Extend 使用位置 1,025 到 2,871 进行扩展。虽然组大小为 8 的精度低于组大小为 5,但在预训练期间,组大小为 5 时使用的位置 2,872 到 3,979 的训练程度较低,这可能会影响扩展的有效性。

    • 也许,对于长度为 L 的序列,可以先尝试最小的组大小 [计算公式为:G * (L- w_n) + w_n],然后测试更大的组大小是否更好。

    Self-Extend 在“大海捞针”任务上的表现

    经验法则

    将预训练上下文窗口表示为 $L$,目标扩展长度表示为 $N$,邻居窗口表示为 $W$,组大小表示为 $G$,选择超参数的经验法则是确保以下不等式成立: $(\frac{1}{2} \sim \frac{2}{3}) \times L > W + \frac{N-W}{G}$ 这是经验性的,作者认为这是因为:较大的相对位置没有得到很好的训练。根据经验,只有一部分($\frac{1}{2} \sim \frac{2}{3}$)的位置得到了很好的训练,Self-Extend 应该只利用这些训练有素的相对位置进行扩展。这一发现解释了:

    • 过小的组大小会降低性能,因为它们提供了精确的位置信息,但需要 Self-Extend 利用训练程度较低的相对位置进行扩展。
    • 过大的邻居窗口大小也会降低性能,因为它们提供了更多的邻居信息,但需要利用训练程度较低的相对位置进行扩展。

    实验结果表明,Self-Extend 对超参数的选择并不十分敏感。预先定义的、启发式的组大小和邻居窗口大小值通常足以获得令人满意的性能。

    [TLDR]

    Self-Extend 对超参数的选择并不十分敏感。可以使用一个代表性任务来找到合适的超参数。或者直接遵循作者的经验不等式: $(\frac{1}{2} \sim \frac{2}{3}) \times L > W + \frac{N-W}{G}$

    5. 总结

    Self-Extend 是一种简单而有效的方法,可以在不进行微调的情况下扩展 LLM 的上下文窗口。该方法易于实现,并且可以应用于各种 LLM 模型。实验结果表明,Self-Extend 方法可以显著提高 LLM 在长文本任务上的性能。

    参考文献

    @misc{jin2024llm,
          title={LLM Maybe LongLM: Self-Extend LLM Context Window Without Tuning},
          author={Hongye Jin and Xiaotian Han and Jingfeng Yang and Zhimeng Jiang and Zirui Liu and Chia-Yuan Chang and Huiyuan Chen and Xia Hu},
          year={2024},
          eprint={2401.01325},
          archivePrefix={arXiv},
          primaryClass={cs.CL}
    }
  • 基于音频特征的情感识别

    MELD这篇论文将介绍如何使用音频特征进行情感识别。我们将以 MELD 数据集为例,使用 Python 代码演示如何提取音频特征并将其用于情感分类。

    数据集介绍

    MELD (Multimodal EmotionLines Dataset) 是一个多模态情感数据集,包含 Friends 电视剧中的对话片段。每个片段都标注了说话人的情感和语句的情感倾向。

    train_data=pd.read_csv('/content/MELD/data/MELD/train_sent_emo.csv')
    valid_data=pd.read_csv('/content/MELD/data/MELD/dev_sent_emo.csv')
    test_data=pd.read_csv('/content/MELD/data/MELD/test_sent_emo.csv')

    上述代码展示了如何使用 pandas 库读取 MELD 数据集中的训练集、验证集和测试集。

    音频特征提取

    为了从音频数据中提取特征,我们使用 Librosa 库。Librosa 是一个强大的音频处理库,提供了许多用于特征提取的函数。

    首先,我们定义一些特征提取的参数:

    num_mfcc=40
    sr=22050
    hop_length=512
    n_fft=2048
    • num_mfcc:MFCC 特征的数量,这里设置为 40。
    • sr:音频采样率,这里设置为 22050 Hz。
    • hop_length:帧移长度,这里设置为 512 个样本点。
    • n_fft:傅里叶变换的窗口大小,这里设置为 2048 个样本点。

    接下来,我们遍历测试集中的所有音频文件,并提取以下特征:

    • 色度频率: 使用 librosa.feature.chroma_stft 函数提取。
    • 均方根能量: 使用 librosa.feature.rmse 函数提取。
    • 谱心: 使用 librosa.feature.spectral_centroid 函数提取。
    • 谱带宽: 使用 librosa.feature.spectral_bandwidth 函数提取。
    • 谱衰减点: 使用 librosa.feature.spectral_rolloff 函数提取。
    • 过零率: 使用 librosa.feature.zero_crossing_rate 函数提取。
    • MFCC: 使用 librosa.feature.mfcc 函数提取 40 个 MFCC 特征。
    for audio_file in os.listdir('/content/drive/My Drive/MELD/test'):
      # ...
      y, sr = librosa.load(audio, mono=True)
      chroma_stft = librosa.feature.chroma_stft(y=y, sr=sr)
      rmse = librosa.feature.rmse(y=y)
      spec_cent = librosa.feature.spectral_centroid(y=y, sr=sr)
      spec_bw = librosa.feature.spectral_bandwidth(y=y, sr=sr)
      rolloff = librosa.feature.spectral_rolloff(y=y, sr=sr)
      zcr = librosa.feature.zero_crossing_rate(y)
      mfcc = librosa.feature.mfcc(y=y, sr=sr,n_mfcc=40)
      # ...

    我们将所有提取的特征取平均值,并将它们与对应的情感标签一起保存到 CSV 文件中。

      to_append = f'{audio_file} {np.mean(chroma_stft)} {np.mean(rmse)} {np.mean(spec_cent)} {np.mean(spec_bw)} {np.mean(rolloff)} {np.mean(zcr)}'
      # ...
      to_append += f' {senti}'
      # ...
      with file:
        writer = csv.writer(file)
        writer.writerow(to_append.split())

    情感分类

    提取音频特征后,我们可以使用各种机器学习算法进行情感分类。常用的算法包括:

    • 支持向量机 (SVM)
    • 随机森林 (Random Forest)
    • 深度神经网络 (DNN)

    我们可以使用训练集数据训练模型,并使用验证集数据评估模型性能。最后,我们可以使用测试集数据测试模型的泛化能力。

    总结

    本文介绍了如何使用音频特征进行情感识别。我们以 MELD 数据集为例,使用 Librosa 库提取了音频特征,并将它们保存到 CSV 文件中。最后,我们讨论了可以使用哪些机器学习算法进行情感分类。

    参考文献

人生梦想 - 关注前沿的计算机技术 acejoy.com