大语言模型:语言理解和生成(中文版)_第1页
大语言模型:语言理解和生成(中文版)_第2页
大语言模型:语言理解和生成(中文版)_第3页
大语言模型:语言理解和生成(中文版)_第4页
大语言模型:语言理解和生成(中文版)_第5页
已阅读5页,还剩295页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

动手操作大型语言模型动手操作大型语言模型购买O'Reilly书籍可以用于教育、商业或促销用途售部门:800-998-9938或corpora.编辑:NicoleButterfield.开发编辑:MicheleCronin.制作编辑:ClareLaylock.封面设计:KarenMontgomery.插画师:KateDullea.2024年12月:第一版早期版本的修订历史请访问/catalog/errata.csp?isbn=9781098给早期发行版读者的说明在本章中,我们将讨论使用大型语言建模对文本进行分类的各种方法。监督文本分类对于使用文本数据作为输入的监督分类,通模型选择选择可能不像您想象的那么简单。模型在它架构,大小,推理速度,架构,某些任务的BERT是一个很好的底层架构,用于表示任务,可以·BERT-基-无基·蒸馏碱在本节中,我们将在一些示例中使用“bert-base-c地,套管”与任何上述模型。尝试不同的模型的数据集是“rotten_tomatoes”;pa虽然本书关注LLM,但强烈建议将这些示例与经典但强示文本并在此基础上训练LogisticReg分类主管使用RottenTomatoes数据集,我首先,如图1-4所示,我们采用现有的T通常,选择前馈神经网络作为分类器。这两个步骤都描述了相同的模型,因为分类头直接添加到BERT模型中。如图1-6所示,我们的分类器只不过是一个预先训练好的LLM,上在第10章中,我们将使用图2-4和图2-5中所示的相同管道,但将对大型语里,我们将更深入地了解微调是如何工作的,以及为什么它会改进model_args.train_custmodel_args.custom_para{“lr”:1e-3,{“lr”:1e-3,]接下来,我们可以在训练数据集上训练模型result,model_outputs,wy_pred=np.argmax(model_outputs))的例如,您还可以使用它来创建一个自定义的命名实体识别模预训练嵌入BERT等基于transformer的一般模型中获得的更好的代图1-9.分类器是一个单独的模型,它利用SBERT的嵌入来学习。从sentence_transformers导入Sentenceeval_embeddings=model.en选择模型可以很简单。我们可以回到基础知识并使用逻辑回归,而不0精度在不需要微调LLM的情况下,我们成功实现了0.零样本分类任务不同的任务。图2-11给出了零炮分类图1-10.图2-11.在zero-sh言来描述我们希望模型做什么。它通常被称预训练嵌入影评论”。这种描述可以通过转换器嵌入。最后,两个标签以似性(在本书中经常使用)是一种相似性度嵌入的点积除以其长度的乘积这听起来肯定比实际情况更复杂,希望似度最高的标签图1-13给出了一个很好的例v2')eval_embeddings=mo#为每个文档查找最佳匹配标签sim_matrix=cosine_similarity(eval_emb01考虑到我们根本没有使用任何标记数据,0.01在这个例子中,我们通过命名标签并嵌入它们来应用零次分类当我们有一些入它们并将它们添加到管道中可以帮助提高性能。例如,我们可以将标记示例入一起平均。我们甚至可以通过创建不同类型的表示(标签嵌入,文档嵌入,NLI可以通过在如何使用前提/假设对方面有点创造性来用于零射击分论,并将其作为我们的前提(yin201例如,假设可以是:“这个例子是正面的电个蕴涵时,我们可以在它是一个矛盾时将评论标记为正面和负面。使用他们的中心上有大量的预训练模型。对于零射击分类任务,https://huggingface.co/models?pipeline_tag=zero-shot-classification。“candidate_labels=[“负面影评”,“正面(),01在没有任何微调的情况下,它获得了0.81标签的短语来增加这个值。例如,看看如果候选标签只是“negative”和“positive”会发生什么另一个很好的预训练零射击分类模型是mcc-transformers的cross-encoder,即cross-encoder/nli-deberta-base。由于训练一个转换器模型的重点使用生成模型进行分类模型,与我们迄今为止所做的工作有点不同我们使用模型并试图引导它朝着我们正在寻找的答案类型发展,而不是根据我们的数据微调模型情境学习模型甚至可以做一些全新的事情,只需展示也被称为上下文学习,指的是让模型学习或),跟随示例。在成功生成haikus之后,由于),defgpt_prediction(prompt,document,model=]seehere允许我们处理速率限制错误这种错误OpenAI和其他外部API通常避免速率限制错误的一个简单方法是使用随最后,我们需要使用您可以从帐户中获得的A使用外部API时,请始终跟踪您的使用情况。外部API,如O型往往有自己的想法,并返回关于为什么某document=“谦逊,迷人,古怪,输出结果确实显示,OpenAI的模型将示模板,我们可以在“[DOCUMENT>))010.91分这是我们迄今为止看到的最高值,考虑虽然这种使用GPT的零触发分类表现出了很高的性绍的上下文学习。如果涉及特定于领域的数据,这一点尤其如此,当模型的任务进行更新时,模型对特定于任务的细微差别的适应性可能会受到限制。fewshot_prompt=“预测如果是正数,就说1;如果是负数,就说0。D“”document=“谦逊,迷人,古怪,01我们可以通过工程提示将上下文学习的例子扩展到多标签分类。例如,命名实体识别图1-17.一个命名实体识别的例子,它检测实体“地点”和“度的NLP应用程序,并且一直是NER任务的要使用SpaCy的OpenAI模型,我们接下来,我们需要配置SpaCy管道。需要定命名实体识别“后端”是用于执行“任务”的底层GPT-3.5-turbo模型。在任务中,我们可以#创建命名实体识别任务并定义latask={““标签”:“日期、年龄、位置、疾病、症状“api”:“OpenAI”,“配置”:{“型号”:“gpt-3.5-turbo”}#合并配置并创建SpaCy管道config=使用SpaCy从头开始训练NER模型是不可能的,只需要几行代码,但它也绝不是困难的!在我在下一章中,我们将继续分类,但重点是无任何标签的文本数据,我们能做什么?我们给早期发行版读者的说明始,我们使用大型Transformer模型,在本章中,我们将讨论使用语言模型来增强我们将讨论代码示例,您可以使用这些功能来请注意,这不仅对网络搜索有用,而且搜索是1密集检索2-重排序3-生成搜索包括一个生成模型,该模型只是生成一个响如图2-3。生成式搜索对一个问题给出一个答案,并引用其信息源。密集检索根据图2-5中的距离判断,“text2”是该查密集检索示例通过在https://cohere.ai/注册获取您的Cohere从sklearn.metrics.pairwise导入cosine_#在这里粘贴API密钥记住不要共享APIAPI_key=“”#从os.cohere创建并获取CohereAPI密钥co=coher/wiki/Interstellar_(film).我们会拿到《星际穿越》是一部《星际穿越》是一部2014年的史诗科幻电影,由马修·麦康纳、安妮·海瑟薇、杰西卡主演,故事发生在一个反乌托邦的未来,人类克里斯托弗和乔纳森·诺兰兄弟撰写了加州理工学院理论物理学家和2017年诺贝尔奖获得者电影摄影师HoytevanHoytema在35#清理以删除空格和新行textures=np.array([##创建搜索索引,传入embeddinsearch_index=Ann#将所有向量添加到搜索索引中进行index我们现在可以使用任何我们想要的查询来搜索数据集我们只需嵌入查询,并将其嵌入呈现给索引,索引将检索最相似的文):在Nearestneighbors:ℼ)返回结果),挑战性的。因此,例如,如果你在互联网和型,然后将其部署在法律文本上(没有足够),对长文本进行分块.只嵌入文档的代表性部分,而忽略文本的其余部分。这可能意味着只在这种方法中,我们将文档分成更小的块,图2-7.对文档进行分块以进行嵌入的许多可能选项。.每个句子都是一个块。这里的问题是,这可能太细了,向量不能捕.有些语块的很多意义都来自于它们周围的文本。所以.将文档的标题添加到块中.在它们之前和之后添加一些文本到块中。这样,块可以重叠,因如图2-8所示将文本分成重叠的片段是一种保留不最近邻搜索与矢量数据库用于密集检索的微调嵌入模型看一个来自我们数据集的例子,句子“Interstellarpremiere.相关查询一:“星际上映日期”.不相关查询:“星际演员阵容”重排序种更简单的方法是将其作为搜索管道中的最于与搜索查询的相关性来改变搜索结果的顺重新排序示例APIKEY=“”MODEL_NAME=“rerank-english-02”queryquery=“filmgross”Cohere的Rerank端点是开始使用第一个rerank的简单方法。我们只需将文档排名:3,文档索引:2这表明重新排序者对第一个结果更有信心,选,比如说一百或一千个结果,然后将这些个入围名单被称为搜索管道的第一阶段。使用句子转换器进行开源检索和重新排序句子转换器库。https://www.sber重新排序模型的工作原理法在一篇名为Multi-StageDocumentRankingw要了解更多关于使用LLM进行搜索的发展,PretrainedTransformersforTextRanking:BERTandBeyond是一个高度推荐的研究这些模型的发展直生成搜索息检索形式。人们开始向ChatGPT这样一个名为检索增强生成的机器学习研究领域。该领域其他LLM应用搜索·生成合成数据以改进嵌入模型。这包括像GenQ和InPars-v2这样的方.文本生成模型评估指标但是如果像图3-16这样的情况,两个系统都只得到三个结果中的一在这种情况下,我们可以凭直觉认为系统1比在这种情况下,分配数值分数的一种常见方评估一组结果,然后如何聚合这些结果以跨件中所有查询上的平均精度,并获得其均值.密集检索,依赖于文本嵌入的相似性。这些系统嵌入了搜索查询,并我们还研究了评估搜索系统的一种可能方法MeanAv们优化算法是我们什么时候才能知道我们的算法是正确的?算法“正确”“transformers”和“self-attention”等术语来描述传统上,我们期望关于特在本章中,我们将提供如何使用大型语言模文本聚类NLP中探索性数据分析的一个主要组成部分是文本聚类。这种无监督的技术旨在将类似的文本或文档分组在一起,合中轻松发现模式的方法。在深入分类任务现的支持问题和发现新内容以推动SEO实在我们描述如何执行文本聚类之前,我们将我们首先使用HuggingFace的数据fromsentence_transfo在对从ArXiv抽象生成的嵌入进行聚类之难。这种诅咒是在处理高维数据时发生的一加,每个维度中可能值的数量呈指数增长。间变得越来越复杂。此外,随着维数的增加所周知的方法是主成分分析(PCA)和均匀流形近似和投影(mcinnes2018umap)。对于这个管然而,降低视错觉的技术并非完美无缺。它们无法在低维表示中完美地#我们拟合并转换嵌入以减少它们reduced_embed类。许多算法都能很好地处理聚类任务,从基于质心的方法(如k-一个很好的默认模型是HierarchicalDensity-BasedSpatialClusterApplicationswithNoise(HDBSHDBSCAN是一种称为DBSCAN的聚类算法的分层变然后,使用我们之前生成的2D嵌入,我们 pd.DataFrame(np.hstack([redu如图3-6。生成的聚类(彩色)和离群值(灰色)表示为2D可视化。使用任何降维技术用于可视化目的都会造成信息损失。它仅仅是我们原始它是信息性的,但它可能会将集群推到一起,并使它们比实际上更远。因讽刺被认为是最难分析的问题之一在我们的观察中,印尼社会医学界的人倾向于用讽刺的方式来批评某件事这里的附加功能来检测讽刺后,一个共同的SCON.自动讽刺检测是情感分析中的一个关键步骤,要考虑到情感文本对每个创建的集群都这样做,但这可能需要主题建模传统上,主题建模是一种旨在发现文本数据集潜在狄利克雷分配(LDA;blei2003latent模型的文档可能很有可能包含“BERT”,“self-attention”和“transformers”“rlhf”等单词。“reward”,这个问题的一个解决方案是BERTopic,模块化,许多新发布的模型可以集成在其架域的发展,BERTopic也在发展。这允许BERTopicBERTopic是一种主题建模技术,它假设语义相似的文档集图3-8描述了与前面相同的步骤,即使用嵌入转换器嵌入文档,如图3-8所示BERTopic管道的第一部分是聚类文本数据。果我们有数百万个文档存储和跟踪变得非常困一种名为c-TF-IDF的技术,它代表基于类的术语频率逆文TF-IDF是经典TF-IDF过程的基于类的改编。c-TF-I要使用c-TF-IDF,我们首先将集群中的将这两个步骤放在一起,聚类和表示主题,就会产生B有趣的是,c-TF-IDF技巧不使用大型语言模型,因此不考虑单词的上下就像神经搜索一样,它允许一个有效的起点,之后我们可以使用计算量更大当我们使用c-TF-IDF生成主题时,我通过聚类,每个文档只被分配到一个聚类或主题。在实践中,文档可能包题文档分配给单个主题并不总是最准确的方法。我们将在后面讨论这个问题,因为几种方法来处理这个问题,但是重要的是要理解,在其核心,使用BERTopi完全替换为另一个类似的算法。这种“乐高积木”的示。图中还显示了我们可以使用的另一个算法TF-IDF来创建初始主题表示,但我们可以使如图3-11所示。BERTopic的模块化是一个关键组件,它允许您根然而,BERTopic的模块化是众所周fromsentence_transformersimportSentenceTransformerfromsklearn.feature_extraction.textimportCountVectofrombertopic.representationimportKeyBERT灵感bertopic.vectorizersimportBERTopic管道的一部分。接下来,让我们更明确地构建BER##第1步-提取嵌入(蓝色块)embeddiSentenceTransformer(“hdbscan_model=HDB#结合步骤,构建我们自己的主题模型) topic_model=BERTopic(umap_model=utopics,probs=topicmodel.fitt 010213243t字表示,这些关键字在Name列中与“_”连接算法HDBSCAN,它不强制所有点都被聚类。为了“abstractive”。根据这些关键词,似乎主题是总结任务。要获取每个主题的前10个关键字以及它们的c-TF-IDF权重,我们可以使用get_topic ()函数:),),),),),什么的。例如,看到单词“rogue”出现是),),),),句子中可以有多个主题尽管BERTopic#计算token级topic_distr上的主题分布,topic_tokentopic_model.visualize_approximate_distri图3-12.BERTopic中提供了广泛的可视化选项。如图3-12所示,输出表明文档在一定程度上包含多个主题。这种分化功能允许我们对生成的主题进行广泛的概述其中如图3-13所示。BERTopic中提供了广泛的可视化选项。图3-14.在2D空间中表示的主题的主题间距离图。我们只可视化了一部分主题,因为显示所有300个主题会导致相当混乱的可视化。此外没有传递“abstracts”,而是传递了“titles”,因为当鼠标悬停在文档上时,我们只想查看每篇论最后,我们可以使用visualize_barchart创建如图3-16所示。前8个主题的前5个关键词。表示模型如图3-17所示。在应用c-TFIDF权重之后,可以使用各在本节中,这些单词的初始排名可以被视为“对于前10个主题,显示两种模型之间主题表示的差异og_words=“|“.join(lisc-TF-IDF生成的主题不考虑主题中单词的bertopic.representation_model.()KeyBERT启发的方法。在其最基本的形式中,KeyBER将文档中的单词嵌入与文档嵌入进行比较,以在BERTopic中,我们希望在主题级别而不是西如图3-18所示,KeyBERTInspired使用c-TF代表性文档,方法是每个主题随机抽取500个文档,计算它们的c-TF-IDF值,并找到最具代表性的文档。这些文档被frombertopic.representationimportKeyBERTInspired#更新我们的主题表示new_topic_model.update_主题:2总结|摘要|总结|抽象|extractive-->观点-->情感|方面|方面|方面级|c-TF-IDF不区分它认为重要的词的类型无论管道,模型和部署选项。更具体地说,我们frombertopic.representa#显示主题差异topic_differs(topic主题:8方面|情绪|Absa|基于方面的|主题:9个解释|解释|理由|理由|可解使用c-TF-IDF,结果关键字中可能有很多“cars”这样的词本质上是一样的。换句话说,我们希望所产生的主题具有足够的多样性,尽可能少的重复。(图3-20)), vectors-->嵌入|相似性|向量|word2vec主题:8方面|情绪|Absa|基于方面的|文本生成BERTopic中不使用我们在第三十章中详细可以决定主题是关于什么的。在BERTopicc-TF-IDF表示来选择的。然后提取“[KEYWORDS]“标记进行引用。这些关键字也可以幸运的是,与大多数大型语言模型一样,我T5系列生成模型之一。这些模型的有趣之处在BERTopic允许使用这样的模型来生成主题标签。我们frombertopic.representationimpfrombertopic.representationimpmodel='gorepresentation_model=主题:0主题:0演讲|ASR|识别|声学|enfrombertopic.representationimfrombertopic.representationimd主题:主题:0演讲|ASR|识别|声学|en主题:主题:3parsing|解析器|依赖|AMR|解析器-主题:主题:4hate|进攻|讲话|检测|有毒的-话题:话题:6性别|偏置|偏见|去偏|公平-标题:标题:7ner|命名|实体|识别|嵌套-->`delay_in_seconds`参数用于在frombertopic.representationim主题:主题:0演讲|ASR|识别|声学|en主题:主题:3parsing|解析器|依赖|AMR|解析器-主题:主题:4hate|进攻|讲话|检测|有毒的-话题:话题:6性别|偏置|偏见|去偏|公平-标题:标题:7ner|命名|实体|识别|嵌套-->得注意的是,LangChain将语言模型连数据库上应用ChatGPT由于我们希望最大限度地减少Lan信息量,因此将最具代表性的文档传递给包。然后,我LangChain支持的语言模型来提取主题。下面的示例演示fromfromlangchain.chains.question_answeringimportload_qchain=load_qa_chai#显示主题差异topic_differences(topic_主题:主题:0演讲|ASR|识别|声学|en主题:主题:3parsing|解析器|依赖|AMR|解析器-主题:主题:4hate|进攻|讲话|检测|有毒-话题:6性别|偏置|偏见|去偏|公平-标题:7ner|命名|实体|识别|嵌套-->主题建模变化,(第4章令牌和令牌嵌入给早期发行版读者的说明任务,如命名实体识别。在本章中,我们将著名的word2vec嵌入方法,并了解它如LLM代币化标记器如何准备语言模型的输入接下来的代码块显示了defgenermodel_name=“openchat/openchat”)tokenizer处理输入提示,并在变量input_ids中返回模型所需标记(字符,单词或单词的一部分)的唯一ID。这些I如图4-3所示标记器处理输入提示,并将实际输入准备到语言模如果我们想检查这些ID,我们可以使用toke))M.它..第一个标记是ID为#1的标记,即s>,这是一个指示文本开.一些标记是完整的单词(例如,写,一封,电子邮件).请注意空格字符没有自己的标记。相反,部分标记(如'izing'和'iEncoding(简称BPE,广泛用于GPT模型),WordP如图4-4。令牌化器还用于通过将输出令牌ID转换为与该ID相单词与子字与角色与字节令牌字记号这种方法在Word2Vec等早期方法中法处理进入数据集的新词。它还产生了一个词汇表,该词汇表具有许多标记,它们之间的差异最小(例如,道歉,道歉者。后一个挑战通过子词标记化来解决,正如我们所看到的,它有一个用于“道),子字令牌角色令牌了对序列的其余部分进行建模之外,还需要对信息进行建模以拼出“p-l-a-y”。字节令牌ByT5:使用预训练的字节到字节模型走向无令牌的未比较经过训练的LLM令牌化器tokenization方法,我们用来初tokenizer训练的数据集。让我们比较和对比一些实际的,u堩蟠这将使我们能够看到每个tokenizer如何.资本化.英语以外的其他语言.数字和数字让我们从较老的tokenizer到较新的tokenizer,看看它们如何对文本进行tokenizer,以及这可能对语言模型有什么影响。我们将对文本进行“[UNK]”“sep_token”:“[SEP]”“cls_token”:“[CLS]”“mask_token”:对于BERTtokenizer的未封装(更.换行符消失了,这使得模型对换行符中编码的信息视而不见聊天记录.所有文字都是小写的.单词“capitalization”被编码为两个子标记capital##izatio##字符用于指示此标记是连接到它前面的标记的部.表情符号和汉字消失了,取而代之的是[UNK]特殊令牌,表示“.注意“CAPITALIZATION”现在如何表示为八个标记:CA##PI.两个BERTtokenizer都将输入包装在一个起始[CLS]token和一个[SEP]token中。[CLS]和[SEP]是用于标记化方法:BPE,在NeuralMachineTranslationof现在,每个字符都表示为多个令牌。虽然我们看到这些标记被打印为字符,但它们实际上代表不同的标记。例如,该表情符号被分解为令牌ID为8582、236和113的令牌。标记器成功地从这些标记重建原始字符。我们可以看到,通过打印tokenizer.decode([8582,236,113]),它将输出tokenizer.decode([8582,236,),),示为三个标记(编号220最后一个空格是结束引号字符标空白字符的意义是什么?这些对于理解或生成代码的模型很续空格字符的模型可以说是更适合Python代码数据集。虽然模型可以将其表示记,但这确实使建模变得更加困难,因为模型需要跟踪缩进级别。这是一个标记化方法:SentencePiece,在SentenceP.没有换行或空白标记,这将使模型处理代码变得具有挑战性“两个标签:“两个标签:”".GPT-4标记器将四个空格表示为单个标记。事.python关键字elif在GPT-4中有自己的标记。这一点和前一点.GPT-4标记器使用更少的标记来表示大多数单词。这里的例子'CAPITALIZATION'(两个令牌对四个)“文件名>"tokenizer还包括一堆特殊的令牌,以便在代码上执行得更好“issue_start>”“jupyte>”四个空格:““两个制表符:“.与GPT-4类似,它将空白列表编码为单个.到目前为止,我们看到的每个人的一个主要区别是每个数字都被分配在《卡拉狄加:科学的大型语言模型》中描22英语和意大利语英语和资本化英语和资本化英文和大写<s>EnglishandCAPITALIZATION2-70b-chat-hf令牌化器属性但是是什么决定了他们的代币化行为呢?有三器如何分解文本:分词方法、初始化参数和我WordPiece和SentencePiece是一些比较流行的方法。这些在选择了标记化方法之后,LLM设计者需要词汇量特殊卡图.填充令牌牌.掩蔽令牌注的问题的域,正如我们在Galactica的工作>和[资本化都转换成小写吗?(Name大写通常携带有?)有些模型同时发布了cased和uncased版本(比如Bert据集而有所不同(甚至在我们开始模型训练方法通过优化词汇表来表示特定的数据集。):):):《NaturalLanguageProcessingwithT一种语言模型为其标记器的词汇保持嵌入图4-6.语言模型在其分词器中保存与每个标记相关联的用语言模型创建上下文化的词嵌入),在前一段中提到的文本应用程序之外,这些情fromfromt

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论