20年IT老司机,用ChatGPT创建领域知识

原创 精选
人工智能
一次革命性的技术升级,ChatGPT 4.0的发布震动了整个AI行业。现在,不仅可以让计算机识别并回答日常的自然语言问题,ChatGPT还可以通过对行业数据建模,提供更准确的解决方案。本文将带您深入了解ChatGPT的架构原理及其发展前景,同时介绍如何使用ChatGPT的API训练行业数据。让我们一起探索这个崭新且极具前途的领域,开创一个新的AI时代。

作者 | 崔皓

审校 | 重楼

摘要​

一次革命性的技术升级,ChatGPT 4.0的发布震动了整个AI行业。现在,不仅可以让计算机识别并回答日常的自然语言问题,ChatGPT还可以通过对行业数据建模,提供更准确的解决方案。本文将带您深入了解ChatGPT的架构原理及其发展前景,同时介绍如何使用ChatGPT的API训练行业数据。让我们一起探索这个崭新且极具前途的领域,开创一个新的AI时代。

ChatGPT 4.0的发布​

ChatGPT 4.0 已经正式发布了!这一版本的 ChatGPT 引入了跨越式革新,与之前的 ChatGPT 3.5 相比,它在模型的性能和速度方面都有了巨大的提升在ChatGPT 4.0发布之前,许多人已经关注过ChatGPT,并意识到它在自然语言处理领域的重要性。然而,在3.5以及之前的版本,ChatGPT的局限性仍然存在,因为它的训练数据主要集中在通用领域的语言模型中,难以生成与特定行业相关的内容。但是,随着ChatGPT 4.0的发布,越来越多的人已经开始使用它来训练他们自己的行业数据,并被广泛应用于各个行业。使得越来越多的人从关注到使用 ChatGPT。接下来,我将为您介绍一下 ChatGPT 的架构原理、发展前景以及在训练行业数据方面的应用。

ChatGPT 的能力​

ChatGPT的架构基于深度学习神经网络,是一种自然语言处理技术,其原理是使用预先训练的大型语言模型来生成文本,使得机器可以理解和生成自然语言。ChatGPT的模型原理基于Transformer网络,使用无监督的语言建模技术进行训练,预测下一个单词的概率分布,以生成连续的文本。使用参数包括网络的层数、每层的神经元数量、Dropout概率、Batch Size等。学习的范围涉及了通用的语言模型,以及特定领域的语言模型。通用领域的模型可以用于生成各种文本,而特定领域的模型则可以根据具体的任务进行微调和优化。

OpenAI利用了海量的文本数据作为GPT-3的训练数据。具体来说,他们使用了超过45TB的英文文本数据和一些其他语言的数据,其中包括了网页文本、电子书、百科全书、维基百科、论坛、博客等等。他们还使用了一些非常大的数据集,例如Common Crawl、WebText、BooksCorpus等等。这些数据集包含了数万亿个单词和数十亿个不同的句子,为模型的训练提供了非常丰富的信息。

既然要学习这么多的内容,使用的算力也是相当可观的。ChatGPT花费的算力较高,需要大量的GPU资源进行训练。据OpenAI在2020年的一份技术报告中介绍,GPT-3在训练时耗费了大约175亿个参数和28500个TPU v3处理器。

ChatGPT在专业领域的应用?​

从上面的介绍,我们知道了ChatGPT具有强大的能力,同时也需要一个庞大的计算和资源消耗,训练这个大型语言模型需要花费高昂成本。但花费了这样高昂的成本生产出来的AIGC工具存在其局限性对于某些专业领域的知识它并没有涉足。例如,当涉及到医疗或法律等专业领域时,ChatGPT就无法生成准确的答案。这是因为ChatGPT的学习数据来源于互联网上的通用语料库,这些数据并不包括某些特定领域的专业术语和知识。因此,要想让ChatGPT在某些专业领域具有较好的表现,需要使用该领域的专业语料库进行训练,也就是说将专业领域专家的知识“教给”ChatGPT进行学习

但是,ChatGPT并没有让我们失望。如果将ChatGPT应用到某个行业中,需要先将该行业的专业数据提取出来,并进行预处理。具体来说,需要对数据进行清洗、去重、切分、标注等一系列处理。之后,将处理后的数据进行格式化,将其转换为符合ChatGPT模型输入要求的数据格式。然后,可以利用ChatGPT的API接口,将处理后的数据输入到模型中进行训练。训练的时间和花费取决于数据量和算力大小。训练完成后,可以将模型应用到实际场景中,用于回答用户的问题。

使用ChatGPT训练专业领域知识!​

其实建立专业领域的知识库并不难,具体操作就是将行业数据转换为问答格式然后将问答的格式通过自然语言处理(NLP)技术进行建模,从而回答问题。使用OpenAI的GPT-3 API(以GPT3 为例)可以创建一个问答模型,只需提供一些示例,它就可以根据您提供的问题生成答案。

使用GPT-3 API创建问答模型的大致步骤如下:


  1. 采集数据:这里可以通过网络爬取行业相关的信息,针对论坛、问答等,也可以从行业的文档中得到线索,例如产品手册,维护手册之类的内容产品。具体的采集数据方式这里不展开。后面的例子中统一都会当作文本来处理,也就是将所谓的行业数据都处理成一个字符串给到我们的程序。
  2. 转化成问答格式:由于GPT是一个问答的智能工具,所以需要将你的知识变成问答的格式输入给GPT,从文本到问答的转化我们使用了工具,后面会介绍。
  3. 通过GPT进行训练:这个步骤是将输入通过GPT的Fine-Tunning进行建模,也就是生成针对这些知识的模型。
  4. 应用模型:在建模完成之后就可以对其进行应用了,也就是针对模型内容进行提问。

整个过程需要调用OpenAI,它提供不同类型的API订阅计划,其中包括Developer、Production和Custom等计划。每个计划都提供不同的功能和API访问权限,并且有不同的价格。因为并不是本文的重点,在这里不展开说明。

创建数据集​

从上面的操作步骤来看,第2步转化为问答格式对我们来说是一个挑战。

假设关于人工智能的历史的领域知识需要教给GPT并将这些知识转化为回答相关问题的模型。那就要转化成如下的形式

  • 问题:人工智能的历史是什么? 答案:人工智能起源于20世纪50年代,是计算机科学的一个分支,旨在研究如何使计算机能够像人一样思考和行动。
  • 问题:目前最先进的人工智能技术是什么? 答案:目前最先进的人工智能技术之一是深度学习,它是一种基于神经网络的算法,可以对大量数据进行训练,并从中提取特征和模式。


当然整理成这样问答的形式还不够,需要形成GPT能够理解的格式,如下所示

  • 人工智能的历史是什么?\n\n人工智能起源于20世纪50年代,是计算机科学的一个分支,旨在研究如何使计算机能够像人一样思考和行动。\n
  • 目前最先进的人工智能技术是什么?\n\n目前最先进的人工智能技术之一是深度学习,它是一种基于神经网络的算法,可以对大量数据进行训练,并从中提取特征和模式。\n

实际上就是在问题后面加上了“\n\n而在回答后面加上了“\n

快速生成问答格式的模型​

解决了问答格式问题,新的问题又来了,我们如何将行业的知识都整理成问答的模式呢多数情况,我们从网上爬取大量的领域知识,或者找一大堆的领域文档,不管是哪种情况,输入文档对于我们来说是最方便的。但是将大量的文本处理成问答的形式,使用正则表达式或者人工的方式显然是不现实的。

因此就需要引入一种叫做自动摘要(Automatic Summarization)的技术,它可以从一篇文章中提取出关键信息,并生成一个简短的摘要。

自动摘要有两种类型:抽取式自动摘要和生成式自动摘要。抽取式自动摘要从原始文本中抽取出最具代表性的句子来生成摘要,而生成式自动摘要则是通过模型学习从原始文本中提取重要信息,并根据此信息生成摘要。实际上,自动摘要就是将输入的文本生成问答模式。

问题搞清楚了接下来就是上工具了,我们使用NLTK来搞事情,NLTK是Natural Language Toolkit的缩写,是一个Python库,主要用于自然语言处理领域。它包括了各种处理自然语言的工具和库,如文本预处理、词性标注、命名实体识别、语法分析、情感分析等。

我们只需要将文本交给NLTK,它会对文本进行数据预处理操作,包括去除停用词、分词、词性标注等。在预处理之后,可以使用NLTK中的文本摘要生成模块来生成摘要。可以选择不同的算法,例如基于词频、基于TF-IDF等。在生成摘要的同时,可以结合问题模板来生成问答式的摘要,使得生成的摘要更加易读易懂。同时还可以对摘要进行微调,例如句子连贯性不强、答案不准确等,都可以进行调整。

来看下面的代码

from transformers import AutoTokenizer, AutoModelForSeq2SeqLM, pipeline

import nltk


# 输入文本

text = """Natural Language Toolkit(自然语言处理工具包,缩写 NLTK)是一套Python库,用于解决人类语言数据的处理问题,例如:

分词

词性标注

句法分析

情感分析

语义分析

语音识别

文本生成等等

"""


# 生成摘要

sentences = nltk.sent_tokenize(text)

summary = " ".join(sentences[:2]) # 取前两个句子作为摘要

print("摘要:", summary)


# 用生成的摘要进行Fine-tuning,得到模型

tokenizer = AutoTokenizer.from_pretrained("t5-base")

model = AutoModelForSeq2SeqLM.from_pretrained("t5-base")

text = "summarize: " + summary # 构造输入格式

inputs = tokenizer(text, return_tensors="pt", padding=True)


# 训练模型

model_name = "first-model"

model.save_pretrained(model_name)


# 测试模型

qa = pipeline("question-answering", model=model_name, tokenizer=model_name)

context = "What is NLTK used for?" # 待回答问题

answer = qa(questinotallow=context, cnotallow=text["input_ids"])

print("问题:", context)

print("回答:", answer["answer"])

输出结果如下:

摘要: Natural Language Toolkit(自然语言处理工具包,缩写 NLTK)是一套Python库,用于解决人类语言数据的处理问题,例如: - 分词 - 词性标注

问题: NLTK用来做什么的?

答案:自然语言处理工具包

上面的代码通过nltk.sent_tokenize方法对输入的文本进行摘要的抽取,也就是进行问答格式化。然后调用Fine-tuning的AutoModelForSeq2SeqLM.from_pretrained方法对其进行建模,将名为“first-model”的模型进行保存。最后调用训练好的模型测试结果。

上面不仅通过NLTK生成了问答的摘要,还需要使用Fine-tuning的功能。Fine-tuning是在预训练模型基础上,通过少量的有标签的数据对模型进行微调,以适应特定的任务实际上就是用原来的模型装你的数据形成你的模型,当然你也可以调整模型的内部结果,例如隐藏层的设置和参数等等。这里我们只是使用了它最简单的功能可以通过下图了解更多Fine-tuning的信息。

需要说明的是:AutoModelForSeq2SeqLM 类,从预训练模型 "t5-base" 中加载 Tokenizer 和模型。

AutoTokenizer 是 Hugging Face Transformers 库中的一个类,可以根据预训练模型自动选择并加载合适的 Tokenizer。Tokenizer 的作用是将输入的文本编码为模型可以理解的格式,以便后续的模型输入。

AutoModelForSeq2SeqLM 也是 Hugging Face Transformers 库中的一个类,可以根据预训练模型自动选择并加载适当的序列到序列模型。在这里,使用的是基于T5架构的序列到序列模型,用于生成摘要或翻译等任务。在加载预训练模型之后,可以使用此模型进行 Fine-tuning 或生成任务相关的输出。

Fine-tunning 和Hugging Face 到底什么关系?​

上面我们对建模代码进行了解释,涉及到了Fine-tunning和Hugging Face的部分,可能听起来比较懵。这里用一个例子帮助大家理解。

假设你要做菜,虽然你已经有食材(行业知识)了,但是不知道如何做。于是你向厨师朋友请教,你告诉他你有什么食材(行业知识)以及要做什么菜(解决的问题),你的朋友基于他的经验和知识(通用模型)给你提供一些建议,这个过程就是Fine-tuning(把行业知识放到通用模型中进行训练)朋友的经验和知识就是预先训练的模型,你需要输入行业知识和要解决的问题,并使用预先训练的模型,当然可以对这个模型进行微调,比如:佐料的含量,炒菜的火候,目的就是为了解决你行业的问题。

而 Hugging Face就是菜谱的仓库(代码中"t5-base"就是一个菜谱),它包含了很多定义好的菜谱(模型),比如:鱼香肉丝、宫保鸡丁、水煮肉片的做法。这些现成的菜谱,可以配合我们提供食材和需要做的菜创建出我们的菜谱。我们只需要对这些菜谱进行调整,然后进行训练,就成了我们自己的菜谱。以后我们就可以用自己的菜谱进行做菜了(解决行业问题)。​

如何选择适合自己的模型?​

可以在 Hugging Face 的模型库中搜索你需要的模型。如下图所示,在 Hugging Face 的官网上,点击"Models",可以看到模型的分类,同时也可以使用搜索框搜索模型名称。

如下图所示,每个模型页面都会提供模型的描述、用法示例、预训练权重下载链接等相关信息。

总结​

这里将整个行业知识从采集、转化、训练和使用的过程再和大家一起捋一遍。如下图所示:

  • 采集数据:通过网络爬虫和知识文档的方式抽取行业知识,生成文本就可以了,比如String的字符串。
  • 转换成问答格式:NLTK的摘要功能生成问和答的摘要,然后输入到GPT进行训练。
  • 通过GPT进行训练:利用Hugging Face 现成的模型以及NLTK输入的问答摘要进行模型训练。
  • 应用模型:将训练好的模型保存以后,就可以提出你的问题获得行业专业的答案了。

作者介绍​

崔皓,51CTO社区编辑,资深架构师,拥有18年的软件开发和架构经验,10年分布式架构经验。


责任编辑:华轩 来源: 51CTO
相关推荐

2022-12-14 15:16:51

2018-03-14 10:44:34

数据库MySQLMGR

2017-10-26 17:47:07

微服务架构优势痛点

2018-01-18 22:06:45

2019-05-13 10:56:30

假视频篡改技术GAN

2017-05-24 10:58:28

linux系统技巧

2020-11-09 14:15:23

代码菜鸟老司机

2020-03-30 15:12:27

Python开发错误

2018-09-28 15:06:41

MySQL优化指南数据库

2016-11-28 16:09:37

2018-10-09 09:42:27

MySQL优化单表

2020-03-09 10:21:12

Java集合类 Guava

2021-04-09 09:51:52

CyclicBarri Java循环栅栏

2015-09-08 09:38:11

2018-12-19 10:52:35

嵌入式CPU微处理器

2018-12-04 09:07:36

运维问题排查

2019-08-20 09:30:18

Spring Clou组件Eureka

2017-10-17 11:09:06

2022-03-30 15:30:38

程序员编程技术

2019-04-01 14:40:32

Veritas数据管理
点赞
收藏

51CTO技术栈公众号