尚品宅配网站建设,渭南做网站价格,做网站赚钱吗 谁教教我,做网站如何保证询盘数量一、前言
不同于计算机视觉的百花齐放#xff0c;不同网络适用不同情况#xff0c;NLP则由Transformer一统天下。transformer是2017年提出的一种基于自注意力机制的神经网络架构#xff0c;transformers库是hugging face社区创造的一个py库#xff0c;通过该库可以实现统一…一、前言
不同于计算机视觉的百花齐放不同网络适用不同情况NLP则由Transformer一统天下。transformer是2017年提出的一种基于自注意力机制的神经网络架构transformers库是hugging face社区创造的一个py库通过该库可以实现统一的接口去下载调用社区中的模型并进行微调等等操作。 没梯子也可以手动下载 二、流程 ①分词
1、含义
神经网络只能处理数字因此必须将文本转换为数值如词表索引。先利用分词器将连续的文本拆分为离散的单元Token现在一般直接调用transformers库的分词器完成分词即可。
在自然语言处理NLP中Token标记/词元 是文本处理的最小单位可以理解为将一段文本“拆解”后的基本元素。它的具体含义取决于分词策略Tokenization以下是详细解释 1. Token 的常见形式 单词例如英文中按空格切分hello, world。子词Subword将长词或罕见词拆分为更小的片段如 unhappiness → un ##happiness。字符单个字母或汉字如 A, 语。标点/符号例如 ,, ?。特殊标记模型预定义的符号如 [CLS], [SEP], pad。 2. 为什么需要 Tokenization 统一输入格式将文本转换为模型可处理的数值如 input_ids。解决未登录词OOV通过子词拆分处理词典外的词汇例如 ChatGPT → Chat G PT。跨语言兼容适用于无空格语言如中文、日文或黏着语如土耳其语。 3. 不同分词策略的 Token 示例 (1) 英文文本 原始句子Dont hesitate to try!分词结果不同策略 Word-based按单词[Dont, hesitate, to, try, !]SubwordBERT 风格[Don, , t, hesitate, to, try, !]Character-based按字符[D, o, n, , t, h, e, ...] (2) 中文文本 原始句子深度学习很有趣分词结果不同策略 按词语[深度, 学习, 很, 有趣, ]按子词SentencePiece[深, 度, 学, 习, 很, 有, 趣, ]按字符[深, 度, 学, 习, 很, 有, 趣, ] 4. Token 在模型中的使用 数值化映射每个 Token 会被转换为词典中的索引ID。 例如hello → 1234, ! → 99。输入格式文本最终转换为模型所需的 input_ids例如 Hello world! → [101, 1234, 2137, 999, 102]BERT 风格。 5. 不同模型的分词器对比 模型/分词器分词策略Token 示例BERTWordPiece[hello, ##world, !]GPT-3Byte-Pair (BPE)[hello, world, !]T5SentencePiece[▁Hello, ▁world, !]中文BERT按字切分[深, 度, 学, 习] 6. 关键点总结 Token 是文本的原子单位拆解文本的方式取决于任务需求和语言特性。子词分词是主流平衡词典大小与未登录词问题如 ChatGPT 拆为 [Chat, G, PT]。Token 与模型强相关BERT、GPT 等模型的分词器需配套使用。 如果你正在使用 Transformers 库可以这样体验分词过程 from transformers import AutoTokenizer
tokenizer AutoTokenizer.from_pretrained(bert-base-uncased)
text Dont hesitate to try!
tokens tokenizer.tokenize(text) # 输出[don, , t, hesitate, to, try, !]
input_ids tokenizer.encode(text) # 输出数值化的 Token ID 列 分词后的Token往往会将每个Token映射到唯一一个ID因为计算机只能处理数值无法直接理解字符、词语或句子可以理解为有一个超级大的字典足以容纳所有字符每个Token都可以对应唯一ID训练模型是通过Token的ID进行的。在对一个句子分词和映射时可能会加入一些分词符所以打印映射结果可能会比分词后的字符数多 2、分词器Tokenizer 1AutoTokenizer
前面说过不同的模型可能会使用不同的分词策略所以如果使用不同的模型就需要加载不同的分词器以使用不同的分词策略transformers提供了AutoTokenizer可以自动实现判断其分词策略只需要提供给它对应的模型名即可。
from transformers import AutoTokenizer
tokenizer AutoTokenizer.from_pretrained(bert-base-uncased)# 将模型名传入即可自动判断分词策略
text Dont hesitate to try!
tokens tokenizer.tokenize(text) # 分词结果[don, , t, hesitate, to, try, !]
input_ids tokenizer.encode(text) # 数值化的 Token ID 列表
2分词器相关参数
tokenizer.tokenize()轻量级工具仅用于分词调试。tokenizer()一站式解决方案生成模型所需的完整输入。 根据需求选择合适的方法若直接调用模型永远优先使用 tokenizer()若需中间结果如分析分词策略再用 tokenizer.tokenize()。
from transformers import AutoTokenizer
tokenizer AutoTokenizer.from_pretrained(bert-base-uncased)# 将模型名传入即可自动判断分词策略
raw_inputs [Dont hesitate to try!,I love eat rice!]
tokens tokenizer(raw_inputs, paddingTrue, truncationTrue, return_tensorspt)
input_ids tokenizer.encode(raw_inputs)
print(tokens)
print(input_ids)# out {input_ids: tensor([[ 101, 2123, 1005, 1056, 16390, 2000, 3046, 999, 102], [ 101, 1045, 2293, 4521, 5785, 999, 102, 0, 0]]), token_type_ids: tensor([[0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0]]), attention_mask: tensor([[1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 0, 0]])} [101, 2123, 1005, 1056, 16390, 2000, 3046, 999, 102, 1045, 2293, 4521, 5785, 999, 102] padding填充以拥有最长Token的那句话为基准为其他不够长的进行填充以使处理后的TokenID列表长度一致。truncation截断将输入文本控制在模型能接受的最大长度内如Transformer 的注意力机制计算复杂度随输入长度呈平方级增长O(n²)模型预训练时固定了最大长度如 BERT 为 512 Tokensattention_mask用于告诉模型在处理输入时应该“关注”哪些位置忽略哪些位置。它的核心作用是解决文本长度不一致和填充Padding带来的问题因为在padding时会对较短Token的句子做填充填充部分是无效输入如果没有 attention_mask模型会误认为填充的 0 是有效输入导致计算错误。 return_tensors返回张量格式指定返回数据的框架格式。常用值 pt返回 PyTorch 张量。tf返回 TensorFlow 张量。np返回 NumPy 数组。None返回列表默认。
3、模型的缓存与加载
from transformers import AutoModel, AutoTokenizer# 下载模型和分词器到 cache_dir/bert
model AutoModel.from_pretrained(bert-base-uncased, cache_dir./bert)
tokenizer AutoTokenizer.from_pretrained(bert-base-uncased)AutoModel用于找到并缓存或加载对应模型cache_dir可指定缓存路径默认会放在C盘的.cache/huggingface目录下。