作者 | 崔皓
审校 | 重楼
摘要一次革命性的技术升级,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创建问答模型的大致步骤如下:
采集数据:这里可以通过网络爬取行业相关的信息,针对论坛、问答等,也可以从行业的文档中得到线索,例如产品手册,维护手册之类的内容产品。具体的采集数据方式这里不展开。后面的例子中统一都会当作文本来处理,也就是将所谓的行业数据都处理成一个字符串给到我们的程序。转化成问答格式:由于gpt是一个问答的智能工具,所以需要将你的知识变成问答的格式输入给gpt,从文本到问答的转化我们使用了工具,后面会介绍。通过gpt进行训练:这个步骤是将输入通过gpt的fine-tunning进行建模,也就是生成针对这些知识的模型。应用模型:在建模完成之后就可以对其进行应用了,也就是针对模型内容进行提问。整个过程需要调用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年分布式架构经验。
以上就是20年it老司机分享如何利用chatgpt创建领域知识的详细内容。