公司网站更换域名网站名百度搜不到
2026/4/6 10:51:37 网站建设 项目流程
公司网站更换域名,网站名百度搜不到,深圳公司网站建设哪里专业,网站建设公开课文章目录一、Hugging Face介绍二、加载并使用预训练模型2.1 查找预训练模型2.2 实际案例2.2.1 调取预训练模型2.2.2 如何在具体的推理任务中使用预训练模型#xff1f;2.3 如何在训练前就判定好哪些模型适用于实际任务#xff1f;三、词嵌入工具与词嵌入模型3.1 调用分词器2.3 如何在训练前就判定好哪些模型适用于实际任务三、词嵌入工具与词嵌入模型3.1 调用分词器循环对每个句子进行分词3.2 调用分词器批量处理数据3.3 建立好词汇表后有哪些功能可以调用四、全流程自动化的Pipelines工具一、Hugging Face介绍随着人工智能领域的发展模型的体量逐渐增长、数据的体量逐渐增长、在实践中应用复杂的人工智能算法的需求日益增加越来越多的开发者会倾向于直接使用经过预训练和封装的成熟NLP算法而非自行构建复杂的transformers或tokernizer架构。Huggingface正是把握住了这一需求的变化开发了封装层次极高、调用简单、节约算力、且训练流程清晰明确的Transformers库这个库提供了一系列与人工智能相关的预训练模型如BERT、GPT、T5等这些模型都是建立在原始Transformer架构基础之上并对其进行了扩展和优化以适用于各种各样的NLP任务。与最初由Google提出的Transformer模型相比Hugging Face的Transformers库提供了更为丰富、易于使用且经过精心优化的模型选择同时支持跨多种编程语言和平台。注打开hugging face 需要使用魔法工具梯子一类的。二、加载并使用预训练模型2.1 查找预训练模型在首页中选择模型有两种方法一种是下图所示的在Models中选择下载量最大的模型一般下载量大说明训练效果比较好还有一种是可以在Tasks中选择适合某种任务的模型。点击下载量最大的模型页面然后映入眼帘的就是这个模型的Model Card这里一般都有模型调用的方法一般往下翻就可以找得到如果没有代码有的会提供github链接点击链接跳转到README页面也有模型调用代码。在from_pretrained引入预训练模型的时候模型的名称是可以换的在本次案例中我们引入的是‘bert-based-chinese’专用于中文文本的训练需要注意的逻辑是当我们从Bert中引入预训练好的模型时我们可以通过查字典的方式来查询每个单词在已经训练好的词嵌入矩阵中的词向量当只要经过bert模型就可以得到包含当前文本语义关系的新的词向量。案例如下fromtransformersimportBertTokenizer,BertModelimporttorch tokenizerBertTokenizer.from_pretrained(bert-base-chinese)modelBertModel.from_pretrained(bert-base-chinese)text猫追老鼠encoded_inputtokenizer(text,return_tensorspt)input_idsencoded_input[input_ids]print( 三个重要概念的对比 )# 1. 静态词嵌入矩阵 (训练好的查找表)print(1. 静态词嵌入矩阵:)word_embeddingsmodel.embeddings.word_embeddingsprint(f Shape:{word_embeddings.weight.shape})print(f 含义: 21128个token每个都有固定的768维向量)# 2. 初始词嵌入 (静态查找结果)print(\n2. 初始词嵌入 (从词嵌入矩阵查找):)initial_embeddingsword_embeddings(input_ids)print(f Shape:{initial_embeddings.shape})print(f 示例 - 猫的初始向量:)print(f Token ID:{tokenizer.encode(猫)[1:-1][0]})print(f 这个向量是固定的与上下文无关)# 3. BERT最终输出 (上下文相关表示)print(\n3. BERT输出last_hidden_state:)withtorch.no_grad():outputmodel(**encoded_input)print(f Shape:{output.last_hidden_state.shape})print(f 示例 - 猫的上下文向量:)print(f 这个向量考虑了追老鼠的上下文)# 对比两者的差异print(\n 关键区别 )print(初始嵌入 vs BERT输出的区别:)# 计算差异differencetorch.norm(initial_embeddings-output.last_hidden_state)print(f两者之间的欧式距离:{difference.item():.4f})print(这个差异越大说明BERT对原始嵌入的改变越大) 三个重要概念的对比 1. 静态词嵌入矩阵: Shape: torch.Size([21128, 768]) 含义: 21128个token每个都有固定的768维向量 2. 初始词嵌入 (从词嵌入矩阵查找): Shape: torch.Size([1, 6, 768]) 示例 - 猫的初始向量: Token ID: 4344 这个向量是固定的与上下文无关 3. BERT输出last_hidden_state: Shape: torch.Size([1, 6, 768]) 示例 - 猫的上下文向量: 这个向量考虑了追老鼠的上下文 关键区别 初始嵌入 vs BERT输出的区别: 两者之间的欧式距离: 53.3272 这个差异越大说明BERT对原始嵌入的改变越大 如果遇到模型下载不成功报“网络错误”或者Model Card中没有模型调用的代码提示可以到files里面下载模型的所有代码然后在本地的Pycharm中新建project就可以跑通了。2.2 实际案例2.2.1 调取预训练模型fromtransformersimportBertTokenizer,BertModel# 从本地目录加载model_path./bert-base-chinese# 确保这个目录下有下载的文件tokenizerBertTokenizer.from_pretrained(bert-base-chinese)modelBertModel.from_pretrained(bert-base-chinese)text虽然今天下雨了但我拿到了心仪的offer因此非常开心#将text输入分词和编码模型encoded_inputtokenizer(text,return_tensorspt)#将编码好的文字输入给预训练好的bertoutputmodel(**encoded_input)#查看outputprint(output)output的结构如下所示 BaseModelOutputWithPoolingAndCrossAttentions(last_hidden_statetensor([[[...]]]),pooler_outputtensor([[...]]),hidden_statesNone,# 或包含所有层的输出如果设置了output_hidden_statesTrueattentionsNone# 或包含注意力权重如果设置了output_attentionsTrue)这里的确已经输出了bert的结果然而预训练的 BERT 模型如 BertModel并没有直接针对具体的任务如句子分类进行训练。预训练模型只是通过在大规模文本上进行无监督学习掌握了语言的基本结构和语义关系。但是BERT 模型本身并不知道具体的分类标签也没有针对分类任务进行过训练。2.2.2 如何在具体的推理任务中使用预训练模型在加载预训练模型的时候如果跑不通就直接到huggingface上搜索该模型将其files中的内容下载到本地调用本地的目录在获取预训练模型。fromtransformersimportBertTokenizer,BertModelfromtorchimportnnasnnimporttorch# 从本地目录加载model_path./bert-base-chinese# 确保这个目录下有下载的文件#加载Bert模型和分词器tokenizerBertTokenizer.from_pretrained(bert-base-chinese)modelBertModel.from_pretrained(bert-base-chinese)# 定义句子分类器classBertSentenceClassifier(nn.Module):def__init__(self,bert_model,num_classes):super(BertSentenceClassifier,self).__init__()self.bertbert_model self.classifiernn.Linear(bert_model.config.hidden_size,num_classes)defforward(self,input_ids,attention_mask):# 获取BERT的输出outputsself.bert(input_idsinput_ids,attention_maskattention_mask)# 获取[CLS] token的表示pooler_outputoutputs.pooler_output# 将其输入到分类器中logitsself.classifier(pooler_output)returnlogits# 示例文本text虽然今天下雨了但我拿到了心仪的offer因此非常开心# 将文本转化为BERT的输入格式encoded_inputtokenizer(text,return_tensorspt)# 初始化分类器假设我们有两个分类标签如积极和消极classifierBertSentenceClassifier(model,num_classes2)# 获取分类结果logitsclassifier(encoded_input[input_ids],encoded_input[attention_mask])# 将logits转换为概率如果需要probabilitiestorch.softmax(logits,dim1)# 打印分类结果print(Logits:,logits)print(Probabilities:,probabilities)#Logits: tensor([[-0.3707, 0.1022]], grad_fnAddmmBackward0)#Probabilities: tensor([[0.3839, 0.6161]], grad_fnSoftmaxBackward0)输出为1的概率为0.6161句子被判断为“积极”。2.3 如何在训练前就判定好哪些模型适用于实际任务从task入手假如当前的任务是分类我们就从tasks里面找就好了如果是单词分类锁定Token Classification如果是为了给一个句子进行分类就选Text Classfication然后在当前筛选中继续查找bert模型依旧是找下载量最高的模型或者是其他更合适的模型实在不会选用下deepseek有的模型在Use model里点击transforms就可以直接找到模型调用的代码调用模型的代码为如果task是比较冷门的可以直接在首页搜索如下图所示三、词嵌入工具与词嵌入模型词嵌入Word Embedding是自然语言处理NLP中的一种技术用于将文本中的词汇或子词转换为低维向量表示。词嵌入的核心思想是将文本数据转化为模型可以理解和处理的数字表示这种表示保留了词汇之间的语义关系。在 Hugging Face 的 Transformers 库中词嵌入工具主要负责以下任务将离散的文本数据映射为连续的向量表示自然语言中的词汇是离散的符号例如“猫”或“狗”这些符号本身并没有数量上的意义。通过词嵌入工具词汇会被映射到一个低维的向量空间中这些向量保留了语义信息。例如语义相似的词汇会在向量空间中彼此靠近。初始化模型输入 在使用深度学习模型如 Transformer 模型进行任务时文本输入首先会通过分词器Tokenizer被分解成 token子词或词汇接着这些 token 会被映射到相应的词嵌入向量中。这个过程是模型理解输入文本的第一步。词嵌入向量不仅保留了词汇的语义信息还为模型提供了丰富的上下文信息使得模型可以在更高的层次上处理文本数据。提供丰富的语义和上下文表示通过词嵌入模型能够捕捉到词汇之间的复杂关系例如同义词、反义词、类比等。对于 Transformer模型而言这些向量表示是后续处理的基础模型通过多层的注意力机制来进一步处理和理解这些向量表示。3.1 调用分词器循环对每个句子进行分词fromtransformersimportAutoTokenizer PATHrHuggingfaceModels/# 加载预训练的BERT分词器tokenizerAutoTokenizer.from_pretrained(os.path.join(PATH,bert-base-chinese))# 读取数据file_pathrDLdata/cnews_train_sampled_2000.txt# 读取数据dataread_file(file_path)# 对每个文本进行分词fortextindata:#将文本输入tokenizer直接分词tokenstokenizer.tokenize(text)#分完词后直接使用convert_tokens_to_ids进行token编码token_idstokenizer.convert_tokens_to_ids(tokens)print(fOriginal Text:{text}\n\n)print(fTokens:{tokens[:100]}\n\n)print(fToken IDs:{token_ids[:100]})break3.2 调用分词器批量处理数据# 批量处理多个文本encoded_inputstokenizer(filtered_data,paddingTrue,truncationTrue,return_tensorspt)3.3 建立好词汇表后有哪些功能可以调用encoded_inputs[input_ids]#编辑好的seqencoded_inputs[attention_mask]#掩码在批量处理文本后除了 input_ids 和 attention_masktokenizer 返回的对象中还可以包含其他多个有用的张量或指标这些数据都可以直接用于模型的输入或分析。以下是一些常见的输出以及它们的功能input_ids这是最基础的输出表示每个 token 的 ID直接对应于模型词汇表中的索引。示例[101, 你好, 102]可能会映射为 [101, 12895, 102]。attention_mask表示哪些 token 是实际输入内容哪些是填充padding内容。1 表示实际内容0 表示填充。用于告诉模型忽略填充部分的影响确保模型仅关注实际内容。示例[1, 1, 1, 0, 0] 表示前 3 个 token 是实际内容后 2 个是填充。token_type_ids或 segment_ids主要用于区分 BERT中的不同句子或段落。在句子对如问答、自然语言推理任务中token_type_ids 用于区分两个句子。一般情况下第一句的token 标记为 0第二句的 token 标记为 1。示例[0, 0, 0, 1, 1, 1] 表示前 3 个 token属于第一句话后 3 个 token 属于第二句话。token_type_ids对于句子对任务如问答、自然语言推理非常重要。special_tokens_mask用于标记哪些 token 是特殊符号例如 [CLS], [SEP], [PAD] 等。这些token 在某些任务中可能需要特别处理。示例[1, 0, 0, 1, 0, 0,1]表示位置 1、4 和 7是特殊符号。special_tokens_mask 在处理包含特殊符号的文本时有用。offset_mapping主要用于精确映射原始文本和 token 之间的位置关系。对于每个 tokenoffset_mapping返回一个 (start, end) 元组指示该 token在原始文本中的起止位置。这在命名实体识别NER等任务中非常有用。示例[(0, 1), (1, 2), (2, 4)] 表示第一个token 对应于原始文本的第 0 到 1 个字符依此类推。offset_mapping特别适用于精确文本对齐任务如命名实体识别NER。overflowing_tokens当输入文本过长而被截断时这个字段会返回被截断的 token。这在需要处理被截断部分的任务中很有用。overflowing_tokens 和 num_truncated_tokens 用于处理超长文本输入时的分析。num_truncated_tokens表示由于输入文本过长而被截断的 token数量。这个信息可以帮助你了解文本在被截断时损失了多少内容。length表示每个输入序列的实际长度不包含填充部分。这个信息在分析输入序列的长度分布时非常有用。四、全流程自动化的Pipelines工具Hugging Face 的 pipeline 功能是一个非常强大且易于使用的高层次 API它允许用户通过简单的接口来访问和使用预训练的 Transformer 模型。pipeline 将复杂的预处理、模型调用和后处理步骤封装在一起使得用户可以轻松地应用深度学习模型来完成各种自然语言处理NLP和计算机视觉任务而不需要深入了解模型的底层细节。使用pipelines能够完成的任务如下所示任务名称任务描述sentiment-analysis用于文本情感分类的任务text-generation文本生成任务如自动写作或补全文本。ner识别文本中的实体如人名、地点、组织。question-answering针对给定文本的问题回答任务。fill-mask填充文本中的掩码mask词汇的任务。summarization自动文本摘要生成任务。translation_xx_to_yy翻译任务xx 和 yy 表示不同的语言代码。text2text-generation将文本转换为另一种形式或语言的任务。zero-shot-classification不带训练的直接分类任务可以为文本分配多个标签。conversational对话模型根据对话的历史回应新的对话输入。feature-extraction提取文本的特征向量。text-classification文本分类也被称为主题分类。token-classification分词层面的分类如词性标注。table-question-answering对结构化表格数据进行问题回答的任务。translation自动翻译任务通常需要指定源语言和目标语言。automatic-speech-recognition自动语音识别将语音转录为文本。image-classification图像分类任务。object-detection在图像中识别多个物体及其位置。text-to-speech文本转语音任务。fromtransformersimportpipeline,set_seed#创建一个pipeline自动加载预训练模型和相应的预处理generatorpipeline(task-generation,modelgpt2)set_seed(42)generator(hello GPT,max_length30,num_return_sequences5)[{generated_text:Hello gpt: what i do. that will help. I know i was here for a week but, you bet. I mean},{generated_text:Hello gpt ˥\u3101 ˥\u3102ㄅ ˥ㄈㄇ},{generated_text:Hello gpt},{generated_text:Hello gpt\n\nWe can now update the Google Chrome API, a simple feature that was missing from the prior versions.\n\n},{generated_text:Hello gpt\n\n(I really should probably make a post on the Internet about how to read a website.)\n}]可以在hugging face 的Docs中找到Transformers进去搜索pipeline同样可以看到针对不同任务pipelien代码。进去之后就会看到各种各样的使用方法介绍非常全面在页面的右侧有目录针对语音、视频等不同格式的数据集有哪些不同的任务针对不同的任务的代码调用都有详细的介绍。缺陷如果效果不好没有办法对pipelines的模型进行微调只能退到最底层来修改。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询