引言

近些年来,大型语言模型(LLMs)在生成文本方面展现了令人瞩目的能力。然而,如何利用这些模型从头开始撰写有深度和广度的长篇文章,如维基百科页面,仍是一个未被充分探索的问题。撰写这类文章不仅需要深入的研究,还需要在写作前的阶段进行详细的规划和准备。

本文将介绍一个名为STORM的写作系统,该系统通过检索和多视角提问来合成主题大纲,从而帮助撰写类似维基百科的长篇文章。

STORM系统概述

STORM系统通过两个主要阶段来生成带有引文的长篇文章:

  1. 预写作阶段:系统进行基于互联网的研究,收集参考资料并生成大纲。
  2. 写作阶段:系统利用生成的大纲和参考资料撰写完整的文章并添加引文。

预写作阶段

在预写作阶段,STORM系统关注如何提出有效的问题以进行深入的研究。直接提示语言模型提问效果并不好,STORM采用了两种策略来改进问题的深度和广度:

  1. 视角引导的提问:根据输入的主题,STORM通过调查类似主题的现有文章来发现不同的视角,并利用这些视角来控制提问过程。
  2. 模拟对话:STORM模拟一个维基百科作者与基于互联网资源的主题专家之间的对话,使语言模型能够更新其对主题的理解并提出后续问题。

写作阶段

在写作阶段,STORM系统根据生成的大纲和收集的参考资料逐段生成文章内容。由于无法将所有参考资料一次性输入语言模型的上下文窗口,系统会根据章节标题和各级子章节标题来检索相关文档,从而生成每个章节的内容。最后,系统将所有章节合并,并生成一个概述,以便于文章的整体连贯性和完整性。

实验与评估

数据集与基准测试

我们创建了一个名为FreshWiki的数据集,该数据集包含了最近创建或大量编辑的高质量维基百科文章,以避免数据泄漏。我们对系统生成的大纲和最终文章进行评估,采用的指标包括ROUGE分数、实体召回率以及专家的人工评分。

实验结果

实验结果表明,STORM在生成大纲和最终文章方面都优于基准方法。具体来说,STORM生成的文章在组织性、覆盖面和兴趣水平方面得分更高。然而,评审专家也指出,STORM生成的文章在中立性和可验证性方面仍有改进空间。

如何使用STORM

安装与设置

以下是本地运行STORM的快速指南:

  1. 克隆git仓库。

    git clone https://github.com/stanford-oval/storm.git
    cd storm
    
  2. 安装所需的包。

    conda create -n storm python=3.11
    conda activate storm
    pip install -r requirements.txt
    
  3. 设置OpenAI API密钥(如果你想使用OpenAI模型来驱动STORM)和You.com搜索API密钥。在根目录下创建一个文件secrets.toml,并添加以下内容:

    # 设置OpenAI API密钥。
    OPENAI_API_KEY="your_openai_api_key"
    # 如果你使用的是OpenAI提供的API服务,包含以下行:
    OPENAI_API_TYPE="openai"
    # 如果你使用的是Microsoft Azure提供的API服务,包含以下几行:
    OPENAI_API_TYPE="azure"
    AZURE_API_BASE="your_azure_api_base_url"
    AZURE_API_VERSION="your_azure_api_version"
    # 设置You.com搜索API密钥。
    YDC_API_KEY="your_youcom_api_key"
    

本地运行STORM-wiki

使用默认配置运行STORM与gpt系列模型:确保你已设置OpenAI API密钥,并运行以下命令。

python examples/run_storm_wiki_gpt.py \
    --output-dir $OUTPUT_DIR \
    --retriever you \
    --do-research \
    --do-generate-outline \
    --do-generate-article \
    --do-polish-article

自定义STORM

STORM引擎由四个模块组成:

  1. 知识整理模块:收集关于给定主题的广泛信息。
  2. 大纲生成模块:为整理的知识生成一个分层的大纲。
  3. 文章生成模块:用收集的信息填充生成的大纲。
  4. 文章润色模块:改进和增强书写的文章以便更好地呈现。

你可以根据自己的需求自定义这些模块。例如,将部分生成的段落改为要点形式。

结论

STORM系统展示了在生成长篇文章方面的潜力,特别是在预写作阶段的研究和大纲生成方面。尽管自动生成的文章在某些方面仍无法与人类编写的文章媲美,但STORM可以作为撰写维基百科文章的有力辅助工具。

引用

如果你在工作中使用了这段代码或其中的一部分,请引用我们的论文:

@inproceedings{shao2024assisting,
      title={{Assisting in Writing Wikipedia-like Articles From Scratch with Large Language Models}}, 
      author={Yijia Shao and Yucheng Jiang and Theodore A. Kanell and Peter Xu and Omar Khattab and Monica S. Lam},
      year={2024},
      booktitle={Proceedings of the 2024 Conference of the North American Chapter of the Association for Computational Linguistics: Human Language Technologies, Volume 1 (Long and Short Papers)}
}

参考文献

  • Shao, Y., Jiang, Y., Kanell, T. A., Xu, P., Khattab, O., & Lam, M. S. (2024). Assisting in Writing Wikipedia-like Articles From Scratch with Large Language Models. NAACL 2024.
  • Weaver III, C. A., & Kintsch, W. (1991). Expository Writing and Expository Text. In: Text, Context, and Interaction.
  • Rohman, G. (1965). Pre-Writing: The Stage of Discovery in the Writing Process. College Composition and Communication.

通过STORM,我们展示了结合检索和提问以生成高质量长篇文章的方法,希望在未来的研究中能进一步提升系统的中立性和可验证性。

更多推荐