paint-brush
用于书籍摘要的 PrivateGPT:测试和排名配置变量经过@cognitivetech
2,247 讀數
2,247 讀數

用于书籍摘要的 PrivateGPT:测试和排名配置变量

经过 CognitiveTech15m2024/01/15
Read on Terminal Reader

太長; 讀書

实现大型语言模型时存在许多变量。让我们测试和完善我们总结融合 PrivateGPT 的书籍的流程。
featured image - 用于书籍摘要的 PrivateGPT:测试和排名配置变量
CognitiveTech HackerNoon profile picture
0-item
1-item

我开始手工总结十几本书,发现每次总结都要花几周的时间。然后我想起了这场人工智能革命的发生,并决定我早就该跳入这片水域了。


当我开始探索使用大型语言模型(LLM)来总结大型文本时,我发现没有明确的方向说明如何做到这一点

  • 有些页面给出了给出 GPT4 的示例提示,其想法是它会神奇地知道您想要总结的任何书籍的内容。 (不是)
  • 有些人建议我需要找到一个具有大上下文的模型,可以一次性处理我的整个文本。 (还没有)
  • 一些开源工具可让您将文档上传到数据库并根据该数据库的内容回答问题。 (越来越近)
  • 其他人建议你必须首先将书分成几个部分,然后将它们一次一个地输入到法学硕士中进行总结。 (现在我们正在说话)
  • 除了做出这一决定之外,在实施给定的法学硕士时还必须考虑许多变量。
  • 我很快意识到,尽管有任何建议或模型排名,我得到的结果与其他人不同。无论是我的用例、模型格式、量化、压缩、提示样式还是什么?我不知道。我只知道,在你自己的工作条件下做你自己的模型排名。不要只相信您在网上阅读的一些图表。


本指南提供了我确定和测试上述变量细节的过程的一些细节。


在 GitHub 上查找完整的排名数据、演练和结果摘要

背景

关键术语

其中一些术语的使用方式不同,具体取决于上下文(无双关语)。

  • 大型语言模型(LLM) :(又名模型)一种人工智能,经过海量数据集的训练来理解和生成人类语言。

    示例:OpenAI 的 GPT3.5 和 GPT4 风靡全球。 (在我们的例子中,我们在Hugging Face上找到的开源和/或可免费下载的模型中进行选择。)

  • 检索增强生成(RAG)由 Meta AI 开发的一种技术,将文档存储在数据库中,法学硕士可以在数据库中进行搜索,以找到给定用户查询(文档 Q/A)的答案。

  • 用户指令:(又名提示或上下文)是用户提供的查询。

    示例:“总结以下文本: { text }

  • 系统提示:在用户提示之前给出的特殊说明,有助于塑造助手的个性。

    示例:“你是一位乐于助人的人工智能助手。”

  • 上下文:用户指令,可能还有系统提示,可能还有前几轮的问题\答案对。 (之前的 Q/A 对也简称为上下文)。

  • 提示样式:这些是特殊的字符组合,法学硕士接受培训时可以识别用户指令、系统提示和先前问题的上下文之间的差异。

    示例: <s>[INST] {systemPrompt} [INST] [INST] {previousQuestion} [/INST] {answer} </s> [INST] {userInstructions} [/INST]

  • 7B:表示给定模型中的参数数量(通常越高越好)。参数是模型在训练过程中学习的内部变量,用于进行预测。就我的目的而言,7B 型号可能适合我的具有 12GB VRAM 的 GPU。

  • GGUF:这是专为消费类硬件(CPU/GPU)设计的LLM的特定格式。无论您对哪种模型感兴趣,要在 PrivateGPT 中使用,您必须找到其 GGUF 版本(通常由TheBloke制造)。

  • Q2-Q8 0、K_M 或 K_S:浏览 GGUF 存储库的文件时,您将看到同一模型的不同版本。数字越大意味着压缩越少,质量越好。 K_M 中的 M 表示“中”,K_S 中的 S 表示“小”。

  • VRAM:这是 GPU 的内存容量。要将其完全加载到 GPU,您需要一个比可用 VRAM 更小的模型。

  • 标记:这是法学硕士衡量语言的指标。每个标记大约由 4 个字符组成。

什么是 PrivateGPT?

PrivateGPT (pgpt) 是一个开源项目,提供用户界面和可编程 API,使用户能够在家中通过自己的硬件使用 LLM。它允许您将文档上传到您自己的本地数据库,以进行 RAG 支持的文档问答。


PrivateGPT 文档 - 概述

PrivateGPT 提供了一个API,其中包含构建私有的、上下文感知的 AI 应用程序所需的所有构建块。该API遵循并扩展了OpenAI API标准,支持普通响应和流响应。这意味着,如果您可以在您的工具之一中使用 OpenAI API,则可以使用您自己的 PrivateGPT API,无需更改代码,并且如果您在local模式下运行 privateGPT,则免费


我一开始就应该问LLM。

概述

  1. 我首先使用PrivateGPT UI\RAG 提出问题来预订章节。

    然后尝试预先选择文本进行摘要。这就是第一轮排名的灵感,看看我的结果会显示出多大的差异。 (总结预先选择的部分。)

  2. 接下来,我想找出哪些模型在这项任务上表现最好,这导致了第二轮排名,其中Mistral-7B-Instruct-v0.2明显获胜。

  3. 然后我想通过对提示样式进行排名并编写代码来获得预期的确切提示样式,从而从该模型中获得最佳结果。

  4. 当然,在那之后,我必须测试各种系统提示,看看哪个效果最好。

  5. 接下来,我尝试了一些用户提示,以确定生成需要最少后处理的摘要的最佳提示是什么。

  6. 最终,应该对每个法学硕士进行此类测试,并确定我们流程中任何改进的有效性。在我看来,只有当每个模型都针对其最理想的条件时,它们才能正确地相互排名。

排行榜

当我开始测试各种 LLM 变体时, mistral-7b-instruct-v0.1.Q4_K_M.gguf作为 PrivateGPT 默认设置的一部分(在您的 CPU 上运行)。在这里,我更喜欢 Q8_0 变体。


虽然我已经尝试了 50 多个不同的 LLM 来完成同一任务,但 Mistral-7B-Instruct 仍然是最好的,特别是自从 v0.2 发布以来我还没有找到更好的。


TLDR: Mistral-7B-Instruct-v0.2 - 是我目前负责汇总任务的领导者。

第一轮 - 问答与总结

我很快发现,在进行问答时,将较小的数据块上传到数据库中并且每次都从干净的状态开始时,我会得到更好的结果。因此,我开始将 PDF 分成章节以用于问答目的。


在我的第一次分析中,我针对以下任务测试了 5 个不同的法学硕士:

  1. 对 70 页的书籍章节提出同样的 30 个问题。
  2. 总结同一本书的 70 页章节,分为 30 个部分。

问题/答案排名

  1. Hermes Trismegistus Mistral 7b - 在这些测试期间我最喜欢的,但在实际编辑摘要时我认为它太冗长了。
  2. SynthIA 7B V2 - 成为本轮测试中我最喜欢的模型。
  3. Mistral 7b Instruct v0.1 - 没有我想要的那么好。
  4. CollectiveCognition v1.1 Mistral 7b大量填充物,并且花费了最长的时间。它在质量\实用性方面的得分比米斯特拉尔高一点,但填充物的数量却使其阅读起来不太愉快。
  5. KAI 7b Instruct 的答案太短,使其 BS 更加突出。一个很好的模型,但不适用于详细的书籍摘要。

如图所示,对于每个型号

  • 生成答案所需的秒数
  • 主观有用性\质量评级的总和
  • 生成了多少个字符?
  • 在目标范围内找到的上下文上下文块的总和。
  • 在生成的文本中发现的以下品质数量:
    • 填充词(价值较小的额外单词)
    • 短(太短,不足以使用。)
    • BS(不是来自这本书,也没有帮助。)
    • 好BS(不是来自目标部分,但有效。)

模型

评分

搜索准确度

人物

秒数

学士

填料

短的

良好的学士学位

Hermes-trismegistus-mistral-7b

68

56

62141

298

3

4

0

6

Synthia-7b-v2.0

63

59

28087

188

1

7

7

0

米斯特拉尔-7b-指令-v0.1

51

56

21131

144

3

0

17 号

1

集体认知-v1.1-mistral-7b

56

57

59453

第377章

3

10

0

0

kai-7b-指令

44

56

21480

117

5

0

18

0

总结排名

对于第一轮,我将章节内容分为几个部分,其中包含一系列内容

每个 900-14000 个字符(或 225-3500 个标记)。


注意:尽管已经发布了许多大型上下文模型,但目前,我仍然相信较小的上下文会产生更好的摘要。我不喜欢每个摘要任务超过 2750 个标记(11000 个字符)。


  1. Hermes Trismegistus Mistral 7b - 仍然领先。它很冗长,有一些填充物。我可以使用这些结果。
  2. SynthIA 7B - 相当不错,但太简洁了。许多答案都很完美,但有 7 个答案太短\不完整,无法使用。
  3. Mistral 7b Instruct v0.1 - 太短了。
  4. KAI 7b 指导- 太短了。
  5. CollectiveCognition v1.1 Mistral 7b - 很多垃圾。有些摘要非常详细和完美,但超过一半的回复是基于文本的一组问题,而不是摘要。


毫不奇怪,摘要的表现比问答要好得多,但它们也有更明确的目标上下文。

姓名

分数

生成的角色

与 OG 的差异百分比

生成秒数

短的

垃圾

学士

充满

问题

详细的

Hermes-trismegistus-mistral-7b

74

45870

-61

274

0

1

1

3

0

0

Synthia-7b-v2.0

60

26849

-77

171

7

1

0

0

0

1

米斯特拉尔-7b-指令-v0.1

58

25797

-78

174

7

2

0

0

0

0

kai-7b-指令

59

25057

-79

168

5

1

0

0

0

0

集体认知-v1.1-mistral-7b

31

29509

-75

214

0

1

1

2

17 号

8

Google Docs或 GitHub 上查找完整数据和排名: QA 分数摘要排名

第二轮:总结-模型排名

再说一次,我更喜欢7B车型的Q8版本。


发现Mistral 7b Instruct v0.2已经发布,非常值得进行新一轮的测试。

我还决定测试一下提示样式。 PrivateGPT 并未与 Mistral 提示符打包在一起,虽然 Mistral 提示符与 Llama2 提示符类似,但它似乎在默认 (llama-index) 提示符下表现更好。

  • SynthIA-7B-v2.0-GGUF - 这个模型已经成为我的最爱,所以我用它作为基准。
  • Mistral-7B-Instruct-v0.2 (Llama-index Prompt)这里的明星,相当令人印象深刻。
  • Mistral-7B-Instruct-v0.2 (Llama2 提示)仍然不错,但不如使用 llama-index 提示
  • Tess-7B-v1.4 - 与 Synthia v2 相同的创建者的另一个。不错,但没那么好。
  • Llama-2-7B-32K-Instruct-GGUF - 工作正常,但速度很慢,有 llama-index 提示。只是 llama2 提示符不好。 (应该用 Llama2“仅指令”风格再次测试)

总结排名

只有摘要,Q/A对于书籍摘要来说效率较低。

模型

% 不同之处

分数

评论

合成7b V2

-64.43790093

28

好的

Mistral 7b Instruct v0.2(默认提示)

-60.81878508

33

维古德

Mistral 7b 指令 v0.2(Llama2 提示)

-64.5871483

28

好的

苔丝7b v1.4

-62.12938978

29

结构较少

Llama 2 7b 32k 指令(默认)

-61.39890553

27 号

结构较少。慢的

Google DocsGitHub上查找完整数据和排名。

第三轮:提示风格

在上一轮中,我注意到Mistral 7b Instruct v0.2在默认提示下的表现比 llama2 好得多。


嗯,实际上,mistral 提示符与 llama2 非常相似,但并不完全相同。

  1. llama_index(默认)
 system: {{systemPrompt}} user: {{userInstructions}} assistant: {{assistantResponse}}
  1. 骆驼2:
 <s> [INST] <<SYS>> {{systemPrompt}} <</SYS>> {{userInstructions}} [/INST]
  1. 米斯塔拉尔:
 <s>[INST] {{systemPrompt}} [/INST]</s>[INST] {{userInstructions}} [/INST]


我开始使用default测试输出,然后llama2提示样式。接下来,我开始对 Misstral 模板进行编码


该排名的结果让我确信我的编码是正确的。

提示风格

% 不同之处

分数

笔记

米斯特拉尔

-50%

51

完美的!

默认(美洲驼索引)

-42%

43

错误的标题

骆驼2

-47%

48

无结构

Google DocsGitHub上查找完整数据和排名。

第四轮:系统提示

当我拨入提示样式后,我尝试了几种不同的系统提示,并对结果感到惊讶!

姓名

系统提示

改变

分数

评论

没有任何


-49.8

51

完美的

默认提示

你是一位乐于助人、受人尊敬且诚实的助手。 \n始终尽可能提供有帮助的答案,并遵循所有给出的说明。 \n请勿猜测或编造信息。 \n不要引用任何给定的说明或上下文。”

-58.5

39

不太好

我的提示1

“你是被爱的。作为总结、提纲和结构方面的专家。\n你的写作风格应该内容丰富且逻辑性强。”

-54.4

44

不太好

简单的

“你是一个有用的人工智能助手。不要在你的输出中包含任何用户指令或系统上下文。”

-52.5

42

不太好

最后,我发现Mistral 7b Instruct v0.2最适合我的摘要,无需任何系统提示。


也许对于不同的任务会有不同的结果,或者可能有更好的提示,但这很有效,所以我不会搞乱它。


Google DocsGitHub上查找完整数据和排名。

第 5 轮:用户提示

我已经开始怀疑,提示中的单词越少,我就越能得到更好的结果。由于我找到了Mistral 7b Instruct v0.2的最佳系统提示,我还测试了哪种用户提示最适合它。


迅速的

与 OG

分数

笔记

提示0

写下简洁而全面的笔记,总结以下文本。使用嵌套的项目符号点:标题、术语和关键概念以粗体显示。重点关注本文中的基本知识,而不添加任何外部信息。

43%

11


提示1

写下简洁而全面的笔记,总结以下文本。使用嵌套的项目符号点:标题、术语和关键概念以粗体显示。重点关注本文中的基本知识,而不添加任何外部信息。

46%

11

额外说明

提示2

写下总结以下文字的综合笔记。使用嵌套的项目符号点:标题、术语和关键概念以粗体显示。

58%

15


提示3

创建简洁的要点注释,总结以下文本的重要部分。使用嵌套的项目符号点,标题术语和关键概念以粗体显示,包括空格以确保可读性。避免重复。

43%

10


提示4

写下简洁的笔记,总结以下文本。使用嵌套的项目符号点:标题、术语和关键概念以粗体显示。

41%

14


提示5

创建全面但简洁的注释来总结以下文本。使用嵌套的项目符号点:标题、术语和关键概念以粗体显示。

52%

14

额外说明

Google DocsGitHub上查找完整数据和排名。


也许使用可以支持 11b 或 30b 型号的更强大的硬件,我会通过更具描述性的提示获得更好的结果。即使使用 Mistral 7b Instruct v0.2,我仍然愿意尝试一些创造性的指令,但现在我很高兴改进我现有的流程。

提示2:胜利!

写下总结以下文字的综合笔记。使用嵌套的项目符号点:标题、术语和关键概念以粗体显示。


在这种情况下,全面的表现比“简洁”更好,甚至比“全面,但简洁”表现得更好。


但是,我确实提醒您,这将取决于您的用例。我正在寻找的是涵盖重要知识的高度浓缩且可读的笔记。


本质上,如果我没有读过原著,即使不是每个具体细节,我仍然应该知道它传达了什么信息。即使我读过原著,以后我也不会记住大部分内容。这些注释是主要主题的快速参考。

结果

利用从这些测试中获得的知识,我在 5-6 小时内总结了我的第一本完整的书,539 页!极好的!

我没有花几周的时间来写摘要,而是只用了 10 天就完成了前 9 本书的摘要。

抄袭

您可以在此处查看下面CopyLeaks发布的每篇文本的结果。

特别是考虑到这不是为了盈利,而是出于教育目的,我相信这些数字是可以接受的。

楷模

性格差异

完全相同的

小改动

释义

总匹配数

东方身体西方心灵

辛西亚7Bv2

-75%

3.5%

1.1%

0.8%

5.4%

迷走神经的治愈力量

Mistral-7B-指令-v0.2; SynthIA-7B-v2.0

-81%

1.2%

0.8%

2.5%

4.5%

阿育吠陀与心灵

Mistral-7B-指令-v0.2; SynthIA-7B-v2.0

-77%

0.5%

0.3%

1.2%

2%

治愈创伤幸存者支离破碎的自我

Mistral-7B-指令-v0.2

-75%




2%

安全的基地

Mistral-7B-指令-v0.2

-84%

0.3%

0.1%

0.3%

0.7%

身体记录分数

Mistral-7B-指令-v0.2

-74%

0.1%

0.2%

0.3%

0.5%

完整的脉轮书

Mistral-7B-指令-v0.2

-70%

0.3%

0.3%

0.4%

1.1%

依恋理论 50 年

Mistral-7B-指令-v0.2

-70%

1.1%

0.4%

2.1%

3.7%

成人依恋障碍

Mistral-7B-指令-v0.2

-62%

1.1%

1.2%

0.7%

3.1%

心理学专业的伴侣

Mistral-7B-指令-v0.2

-62%

1.3%

1.2%

0.4%

2.9%

生活中的心理学

Mistral-7B-指令-v0.2

-74%

0.6%

0.4%

0.5%

1.6%

已完成的书籍摘要

我没有花几周的时间来写摘要,而是只用了 10 天就完成了前 9 本书的摘要。括号内是原件的页数。

  1. 东方身体西方心灵阳极朱迪思(436页)
  2. 迷走神经的治愈能力Stanley Rosenberg(335 页)
  3. 阿育吠陀与心灵David Frawley 博士(181 页)
  4. 治愈创伤幸存者珍妮娜·费舍尔支离破碎的自我(367 页)
  5. 安全基地约翰·鲍尔比(133 页)
  6. 身体保持分数Bessel van der Kolk(454 页)
  7. 瑜伽和多迷走神经理论,来自多迷走神经安全Steven Porges(37 页)
  8. 卢埃林的脉轮全书辛西娅·戴尔(999 页)
  9. 依恋理论五十年:唐纳德·温尼科特纪念讲座(54 页)
  10. 成人依恋障碍(477 页)
  11. 心理学专业的同伴Dana S. Dunn、Jane S. Halonen(308 页)
  12. 救赎暴力的神话沃尔特·温克(5 页)
  13. 生活中的心理学莎拉·吉森和迈克尔·S·加扎尼加(1072 页)

演练

如果您有兴趣更仔细地遵循我的步骤,请查看GitHub 上的演练,其中包含脚本和示例。

结论

现在我已经完善了我的流程,并且对使用提示格式充满信心,我将进行进一步的测试。事实上,我已经进行了进一步的测试和排名(接下来将发布这些),但当然会再次进行更多测试并继续学习!


我仍然相信,如果你想在使用人工智能执行的任何任务中获得最佳结果,你应该进行自己的实验,看看什么最有效。不要仅仅依赖流行模型排名,而是用它们来指导您自己的研究。

其他资源


也出现在这里