大模型实战营第三次课作业

这是大模型实战营第三次课的作业

基础作业

按照这个文档一步一步来做,得到如下结果

  • 仅对前10个文档进行向量化
  1. 回答正确

  1. 幻觉

  1. 知识库白连接了……

  1. 意义不明的回答

  • 对全部文档进行向量化
  1. 回答正确

  1. 幻觉似乎减轻了

  1. 又白连接了……

但如果一开始问他这些问题,可以回答正确

  1. 回答正确!

  • 不接入知识库

全部回答错误且幻觉现象严重

进阶作业

  1. 知识库语料

我将复旦大学桂韬,张奇,黄萱菁等所著《自然语言处理导论》以及《大规模语言模型:从理论到实践》作为专业知识库语料。

  1. 构建向量数据库

为了读入pdf文件,我将demo create_db.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
def get_text(dir_path):
# args:dir_path,目标文件夹路径
# 首先调用上文定义的函数得到目标文件路径列表
file_lst = get_files(dir_path)
# docs 存放加载之后的纯文本对象
docs = []
# 遍历所有目标文件
for one_file in tqdm(file_lst):
file_type = one_file.split('.')[-1]
if file_type == 'md':
loader = UnstructuredMarkdownLoader(one_file)
elif file_type == 'txt':
loader = UnstructuredFileLoader(one_file)
else:
# 如果是不符合条件的文件,直接跳过
continue
docs.extend(loader.load())
return docs

改为

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
def get_text(file_path): # 文件数量不多,故可直接提供路径信息,无需os.walk
# args:dir_path,目标文件夹路径
# # 首先调用上文定义的函数得到目标文件路径列表
# file_lst = get_files(dir_path)
# docs 存放加载之后的纯文本对象
docs = []
# 遍历所有目标文件
for one_file in tqdm(file_path):
file_type = one_file.split('.')[-1]
if file_type == 'md':
loader = UnstructuredMarkdownLoader(one_file)
elif file_type == 'txt':
loader = UnstructuredFileLoader(one_file)
elif file_type == 'pdf':
loader = PyPDFLoader(one_file)
else:
continue
docs.extend(loader.load())
return docs

增加了PyPDFLoader

使用PyPDFLoader之前需要运行pip install pypdf安装依赖。

同时,为了提高回答的正确性,我将demo中的RecursiveCharacterTextSplitter改为了TokenTextSplitter

1
2
3
4
text_splitter = TokenTextSplitter(
chunk_size=700,
chunk_overlap=200,
allowed_special={'<|endoftext|>'}) # PDF文件中的特殊词元<|endoftext|>

TokenTextSplitter使用了BPE对文本进行tokenization,有助于按词义检索。

使用TokenTextSplitter之前需要运行pip install tiktoken安装依赖。

  1. 接入LLM

这部分与demo相同,不再赘述

  1. 构建检索问答链并在开发机运行
  • 使用基于模板的问答链

这是demo中的方法,代码未作改动,不再赘述。

基于模板的问答链本质是将上下文,用户给定的输入以及可能的检索结果嵌入一个给定的模板中,将该模板作为输入给LLM。这种方法仅调用LLM一次,但检索正确性较低。以下是几个问答示例:

:根据你的知识库回答,分布式训练有什么并行策略

:基于您提供的问题和上下文,我可以尝试回答您的问题 基于分布式训练,并行策略包括但不限于以下几个方面: 1.数据并行策略:将训练教据分割成多个批次,分配给不同的计算节点进行计算,每人计算节点计算一个批次的数据,然后将计算结果返回给主节点。 2.模型并行策略:将模型分成多个部分,每个部分分配给不同的计算节点进行训练,每个计算节点只训练其中的一部分模型。 3.混合并行策略: 数据和模型并行策略的结合,在单个计算节点上同时使用数据和模型的部分进行计算。 以上三种策略都可以有效地利用计算资源的并行性,提高训练效率,不的场景和任务可能会选择不同的策略,具体取决于数据的规模、模型的复杂度和计算资源的可用性等因素。

2)

:根据你的知识库回答,语义表示有多少种可用的方法?

:以下是根据提供的上下文信息和新的上下文信息更新后的答案:语义表示有许多可用的方法,包括但不限于词、助概为施事、受事咨、方位、工具格等语义深格,具体方法包括但不限于实体鞋接、概念配、关系抽与分类、句法分析、组合模型训陈等。例如,对于“复旦大学所在城市的人口有多少?”这一问句,语义解析的具体过程如图12.28所示。

3)

:什么是预训练语言模型?

答:基于Transformer的大规模预训练语言起成为了自然语言处理的新主流,具有通用和强大的自然语言表示能力,可以帮助学习词汇、语法和语义信息,使用预训练语言模型,在微调模型时,不需要了解特定的任务细节,只黑要使用具体任务的标注数据对预训练语言模型进行监督训练,就可以取得显著的性能提升,这类方法被称为预训练语言模型,目前,全球最大的语言模型 GPT-3 拥有1750亿个参数。

  • 使用基于Refine的问答链

Refine 文档链对于每一个文档会调用一次 LLM,但有所改进的是,我们每次发送给 LLM 的最终提示是一个序列,这个序列会将先前的响应与新数据结合在一起,并请求得到改进后的响应。因此,这是一种类似于 RNN 的概念,我们增强了上下文,从而解决信息分布在不同文档的问题。但这也造成检索时间较长的问题。测试时每次生成答案都需要20s以上。

使用基于Refine的问答链还是会有以下问题:

  • 幻觉现象

:好的,目前有哪些主流的预训练语言模型?

:好的,以下是根据您的要求对原有回答的修订版:

目前有许多主流的预训练语言模型,以下是其中的一些:

  1. BERT (Bidirectional Encoder Representations from Transformers)
  2. GPT (Generative Pre-trained Transformer)
  3. RoBERTa (Robustly Optimized BERT Pretraining Approach)
  4. XLNet (eXtreme Multi-task Learning Network)
  5. BART (Bidirectional and Asynchronous Reranking Transformers)
  6. ALBERT (A Lite BERT)
  7. Transformer-XL (Long-Text CTR Transformer)
  8. GShard (Graph Neural Network-based Shared Distributed Transformers)
  9. Doc2Seq (Document-to-Sequence with Encoder Network)
  10. NavDeepLM (Natural Language Processing with Neural Networks)
  11. BigBERT (Bidirectional Encoder Representations from Transformers)
  12. T5 (Text-to-Text Transfer Transformer)
  13. ELMo (Embeddings from Language Models)
  14. ULMFiT (Universal Language Model Fine-tuning)
  15. MoCo (Multi-Instance Correlation for Text Generation)
  16. LJBERT (Language Models are Few-Shot Learners)
  17. KERMIT (Knowledge Enhanced Representation Model for Information Retrieval)
  18. Pix4LM (Pixel-to-Language with Language Modeling)
  19. CRNN (Cross-Transformer Recursive Neural Network)
  20. GPM (Graph Processing Method)
  21. NanoModel (Neural Network for Fine-tuning the Microstructure of Text)
  22. YAGO (Yet Another Good Ontology)
  23. OpenIE (Open Information Extraction)
  24. YAM (Yet Another Multilingual Model)
  25. RACE (Recursive Neural Context Architecture for Sentencing)
  26. DeepSmooth (Deep Models with Smoothed Poissonization for Language Generation)
  27. XLM (Cross-lingual Language Model)
  28. ULMFiT-Cross
  29. GPT-2 (Generative Pre-trained Transformer 2)
  30. GPT-3 (Generative Pre-trained Transformer 3)
  31. GPT-4 (Generative Pre-trained Transformer 4)
  32. GPT-5 (Generative Pre-trained Transformer 5)
  33. GPT-6 (Generative Pre-trained Transformer 6)
  34. GPT-7 (Generative Pre-trained Transformer 7)
  35. GPT-8 (Generative Pre-trained Transformer 8)
  36. GPT-9 (Generative Pre-trained Transformer 9)
  37. GPT-10 (Generative Pre-trained Transformer 10)
  38. GPT-11 (Generative Pre-trained Transformer 11)
  39. GPT-12 (Generative Pre-tr
  • 相近知识混淆(LoRA, Low Rank Adaptation 和LoRa, Long Range)

:根据你的知识库回答,什么是LoRA?

:LoRa是一种低功耗广域网(Long Range Wireless)的通信技术,它是一种基于无线电技术的无线通信技术,通常用于连接低功耗设备并与物联网应用进行通信,以实现远程监控、远程控制等功能。LoRa技术的特点是低功耗、低成本、长距离、低速率等,因此在许多应用场景中都有很好的表现,例如智能家居、智能农业、智能交通等。

:什么是LOW-RANK ADAPTATION

:LOW-RANK ADAPTATION (低秩适应) 是一种机器学习技术,它通过在模型训练过程中利用低秩性质来优化模型性能。其具体实现方式是在模型训练过程中加入一些限制,使得模型的参数矩阵近似于一个低秩矩阵。这种方法可以帮助减少计算量,提高模型性能,同时保留原有的模型效果。在实际应用中,LOW-RANK ADAPTATION 可以应用于各种机器学习任务中,例如文本生成、图像处理、语音识别等。

  1. OpenXLab部署

按照此文档引导进行上述应用的部署,部署成功截图:

点击此处访问。