网站建设合同封面模板,qq是用什么软件开发的,公司做一个网站,sae wordpress升级本文系统介绍了NLP中的文本表示技术#xff0c;包括分词方法#xff08;词级、字符级、子词级#xff09;和词表示技术#xff08;One-hot编码、Word2Vec、上下文相关词表示#xff09;。详细阐述了英文和中文分词策略#xff0c;以及如何使用Word2Vec生成语义化词向量&a…本文系统介绍了NLP中的文本表示技术包括分词方法词级、字符级、子词级和词表示技术One-hot编码、Word2Vec、上下文相关词表示。详细阐述了英文和中文分词策略以及如何使用Word2Vec生成语义化词向量并提供了代码实现示例。这些技术是大模型理解和处理自然语言的基础对于构建高效的NLP系统至关重要。2.1概述文本表示是将自然语言转化为计算机能够理解的数值形式是绝大多数自然语言处理NLP任务的基础步骤。早期的文本表示方法如词袋模型通常将整段文本编码为一个向量。这类方法实现简单、计算高效但存在明显的局限性——表达语序和上下文语义的能力较弱。因此现代 NLP 技术逐渐引入更加精细和表达力更强的文本表示方法以更有效地建模语言的结构和含义。文本表示的第一步通常是分词和词表构建如下图所示1分词Tokenization是将原始文本切分为若干具有独立语义的最小单元即token的过程是所有 NLP 任务的起点。2词表Vocabulary是由语料库构建出的、包含模型可识别 token 的集合。词表中每个token都分配有唯一的 ID并支持 token 与 ID 之间的双向映射。在后续训练或预测过程中模型会首先对输入文本进行分词再通过词表将每个 token 映射为其对应的 ID。接着这些 ID 会被输入嵌入层Embedding Layer转换为低维稠密的向量表示即词向量如下图所示。此外在文本生成任务中模型的输出层会针对词表中的每个 token 生成一个概率分布表示其作为下一个词的可能性。系统通常选取具有最大概率的ID并通过词表查找对应的 token从而逐步生成最终的输出文本。2.2分词不同语言由于语言结构、词边界的差异其分词策略和算法也不尽相同本节将分别介绍英文与中文中常见的分词方式。2.2.1英文分词按照分词粒度的大小可分为词级Word-Level分词、字符级CharacterLevel分词和子词级Subword‑Level分词。下面逐一介绍2.2.1.1词级分词词级分词是指将文本按词语进行切分是最传统、最直观的分词方式。在英文中空格和标点往往是天然的分隔符。词级分词虽便于理解和实现但在实际应用中容易出现 OOVOutOfVocabulary未登录词问题。所谓 OOV是指在模型使用阶段输入文本中出现了不在预先构建词表中的词语常见的包括网络热词、专有名词、复合词及拼写变体等。由于模型无法识别这些词通常会将其统一替换为特殊标记如 从而导致语义信息的丢失影响模型的理解与预测能力。2.2.1.2字符级分词字符级分词Character-level Tokenization是以单个字符为最小单位进行分词的方法文本中的每一个字母、数字、标点甚至空格都会被视作一个独立的 token。在这种分词方式下词表仅由所有可能出现的字符组成因此词表规模非常小覆盖率极高几乎不存在 OOVOut-of-Vocabulary问题。无论输入中出现什么样的新词或拼写变体只要字符在词表中都能被表示出来。然而由于单个字符本身语义信息极弱模型必须依赖更长的上下文来推断词义和结构这显著增加了建模难度和训练成本。此外输入序列也会变得更长影响模型效率。2.2.1.3子词级分词子词级分词是一种介于词级分词与字符级分词之间的分词方法它将词语切分为更小的单元——子词subword例如词根、前缀、后缀或常见词片段。与词级分词相比子词分词可以显著缓解OOV问题与字符级分词相比它能更好地保留一定的语义结构。子词分词的基本思想是即使一个完整的词没有出现在词表中只要它可以被拆分为词表中存在的子词单元就可以被模型识别和表示从而避免整体被替换为。常见的子词分词算法包括 BPEByte Pair Encoding、WordPiece 和 Unigram Language Model。其中BPE 是最早被广泛应用的方法其需要先从语料中学习一个子词词表基本原理是首先将所有词语拆分为单个字符然后迭代地统计语料中出现频率最高的字符对将其合并为一个新的子词并加入词表。该过程持续进行直到达到设定的词表大小。然后再根据词表对新输入的文本进行分词其基本原理是从输入文本的第一个字符开始优先选择词表中能够匹配的最长子词单元然后继续处理剩余部分直到完成整个序列的切分。 子词级分词已经成为现代英文 NLP 模型中的主流方法如 BERT、GPT等模型均采用了基于子词的分词机制。2.2.2中文分词尽管中文的语言结构与英文存在显著差异我们仍可以借助“分词粒度”的视角对中文的分词方式进行归类和分析。2.2.2.1字符级分词字符级分词是中文处理中最简单的一种方式即将文本按照单个汉字进行切分文本中的每一个汉字都被视为一个独立的 token。由于汉字本身通常具有独立语义因此字符级分词在中文中具备天然的可行性。相比英文中的字符分词中文的字符分词更加“语义友好”。2.2.2.2词级分词词级分词是将中文文本按照完整词语进行切分的传统方法切分结果更贴近人类阅读习惯。由于中文没有空格等天然词边界词级分词通常依赖词典、规则或模型来识别词语边界。2.2.2.3子词级分词虽然中文没有英文中的子词结构如前缀、后缀、词根等但子词分词算法如 BPE仍可直接应用于中文。它们以汉字为基本单位通过学习语料中高频的字组合如“自然”、“语言”、“处理”自动构建子词词表。这种方式无需人工词典具有较强的适应能力。在当前主流的中文大模型如通义千问、DeepSeek中子词分词已成为广泛采用的文本切分策略。2.2.3分词工具2.2.3.1概述目前市面上可用于中文分词的工具种类繁多按照实现方式大致可以分为如下两类1一类是基于词典或模型的传统方法主要以“词”为单位进行切分2另一类是基于子词建模算法如BPE的方式从数据中自动学习高频字组合构建子词词表。前者的代表工具包括 jieba、HanLP等这些工具广泛应用于传统 NLP 任务中。 后者的代表工具包括 Hugging Face Tokenizer、SentencePiece、tiktoken等常用于大规模预训练语言模型中。2.2.3.2jieba分词器1概述jieba 是中文分词领域中应用广泛的开源工具之一具有接口简洁、模式灵活、词典可扩展等特点在各类传统 NLP 任务中依然具备良好的实用价值。2安装pipinstalljieba3分词模式jieba分词器提供了多种分词模式以适应不同的应用场景。1精确模式默认试图将句子最精确地切开适合文本分析。分词效果如下小明毕业于北京大学计算机系 ⬇️ [小明|毕业|于|北京大学|计算机系]精确模式分词可使用jieba.cut或者jieba.lcut方法前者返回一个生成器对象后者返回一个list。具体代码如下import jieba text小明毕业于北京大学计算机系 words_generatorjieba.cut(text) # 返回一个生成器 for word in words_generator: print(word) words_listjieba.lcut(text) # 返回一个列表 print(words_list)2全模式把句子中所有的可以成词的词语都扫描出来分词效果如下小明毕业于北京大学计算机系 ⬇️ [小|明|毕业|于|北京|北京大学|大学|计算|计算机|计算机系|算机|系]全模式分词可使用jieba.cut或者jieba.lcut并将cut_all参数设置为True具体代码如下import jieba text小明毕业于北京大学计算机系 words_generatorjieba.cut(text, cut_allTrue) # 返回一个生成器 for word in words_generator: print(word) words_listjieba.lcut(text, cut_allTrue) # 返回一个列表 print(words_list)3搜索引擎模式在精确模式基础上对长词进一步切分适合用于搜索引擎分词分词效果如下小明毕业于北京大学计算机系 ⬇️ [小明|毕业|于|北京|大学|北京大学|计算|算机|计算机|计算机系]可使用jieba.cut_for_search或者jieba.lcut_for_search具体代码如下import jieba text小明毕业于北京大学计算机系 words_generatorjieba.cut_for_search(text) # 返回一个生成器 for word in words_generator: print(word) words_listjieba.lcut_for_search(text) # 返回一个列表 print(words_list)4自定义词典jieba支持用户自定义词典以便包含 jieba 词库里没有的词用于增强特定领域词汇的识别能力。自定义词典的格式为一个词占一行每一行分三部分词语、词频可省略词频决定某个词在分词时的优先级。词频越高被优先切分出来的概率越大、词性标签可省略不影响分词结果用空格隔开顺序不可颠倒。例如云计算 云原生5 大模型10n可使用jieba.load_userdict(file_name)加载词典文件也可以使用jieba.add_word(word, freqNone, tagNone)与jieba.del_word(word)动态修改词典。import jieba jieba.load_userdict(dict.txt) words_list jieba.lcut(随着云计算技术的普及越来越多企业开始采用云原生架构来部署服务并借助大模型能力提升智能化水平实现业务流程的自动化与智能决策。) print(words_list)2.3词表示2.3.1概述在分词完成之后文本被转换为一系列的 token词、子词或字符。然而这些符号本身对计算机而言是不可计算的。因此为了让模型能够理解和处理文本必须将这些 token 转换为计算机可以识别和操作的数值形式这一步就是所谓的词表示word representation。词表示的发展经历了从稀疏的one-hot编码到稠密的语义化词向量再到近年来的上下文相关的词表示。不同的词表示方法在表达能力、语义建模、上下文适应性等方面存在显著差异。2.3.2One-hot编码最早期的词向量表示方式是 One-hot 编码它将词汇表中的每个词映射为一个稀疏向量向量的长度等于整个词表的大小。该词在对应的位置为 1其他位置为 0。one-hot 虽然实现简单、直观易懂但它无法体现词与词之间的语义关系且随着词表规模的扩大向量维度会迅速膨胀导致计算效率低下。因此在实际自然语言处理任务中one-hot 表示已经很少被直接使用。2.3.3语义化词向量传统的one-hot表示虽然结构简单但它无法反映词语之间的语义关系也无法衡量词与词之间的相似度。为了解决这个问题研究者提出了Word2Vec模型它通过对大规模语料的学习为每个词生成一个具有语义意义的稠密向量表示。这些向量能够在连续空间中表达词与词之间的关系使得“意思相近”的词在空间中距离更近。2.3.3.1Word2Vec概述Word2Vec的设计理念源自“分布假设”——即一个词的含义由它周围的词决定。基于这一假设Word2Vec构建了一个简洁的神经网络模型通过学习词与上下文之间的关系自动为每个词生成一个能够反映语义特征的向量表示。Word2Vec提供了两种典型的模型结构用于实现对词向量的学习1 CBOWContinuous Bag-of-Words模型输入是一个词的上下文即前后若干个词模型的目标是预测中间的目标词。2 Skip-gram 模型输入是一个中心词模型的目标是预测其上下文中的所有词即前后若干个词。只要按照上述目标训练模型就能得到语义化的词向量。2.3.3.2Word2Vec原理1数据集Word2Vec 不依赖人工标注而是直接利用大规模原始文本如书籍、新闻、网页等作为数据源从中自动构造训练样本。由于两种模型的输入和输出都是词语因此首先需要对原始文本进行分词将连续文本转换为 token 序列。此外模型无法直接处理文本符号训练时仍需将词语转换为 one-hot 编码以便作为模型的输入和输出进行计算。2Skip-Gram1训练数据集Skip-Gram的目标是根据中间词预测上下文所以其训练样本为2模型结构Skip-Gram模型结构如下图所示Skip-Gram模型损失值的计算图如下图所示前向传播过程如下1.输入中心词地铁“地铁”用 one-hot 向量表示2.查找词向量Win与参数矩阵Win相乘取出“地铁”对应的词向量。Win实际上就是词向量矩阵每一行表示一个词的向量3.预测上下文将中心词向量与参数矩阵 Wout相乘得到对整个词表的预测得分。4.Softmax 输出得分通过 Softmax 转为概率分布表示各词作为上下文的可能性。5.计算损失与真实上下文词“乘坐”、“上班”进行比对计算交叉熵损失并求和得到总损失。之后在进行反向传播时参数矩阵Win中的“地铁”对应的词向量就会被更新模型通过这个过程不断的进行学习最终便能得到具有语义的词向量。3CBOW1训练样本CBOW的目标是根据上下文预测中间词所以其训练样本为2模型结构CBOW模型的结构如下图所示CBOW模型损失值的计算图如下图所示CBOW 模型的前向传播过程如下1.输入上下文词乘坐、上班每个词用 one-hot 向量表示。2.查找词向量Win每个 one-hot 向量与参数矩阵 Win 相乘查出对应的词向量。Win 实际上就是词向量矩阵每一行表示一个词的向量3.平均上下文向量将多个上下文词向量取平均得到一个整体的上下文表示。4.预测中心词将平均后的上下文向量与参数矩阵Wout相乘得到对整个词表的预测得分。5.Softmax 输出将得分输入Softmax得到每个词作为中心词的概率分布。6.计算损失将预测结果与真实中心词“地铁”的one-hot向量进行比对计算交叉熵损失。之后在进行反向传播时参数矩阵Win中“乘坐”和“上班”对应的词向量就会被更新。模型通过不断训练逐步优化这些向量最终便能得到具有语义的词向量。2.3.3.3获取Word2Vec词向量词向量的获取通常有两种方式一种是直接使用他人公开发布的词向量另一种是在特定语料上自行训练。在实际工作中无论是加载已有模型还是从零训练都可借助Gensim来完成它提供了便捷的接口来加载 Word2Vec 格式的词向量也支持基于自有语料训练属于自己的词向量模型。可执行以下命令安装Gensimpip install gensim1使用公开词向量公开的中文词向量可从https://github.com/Embedding/Chinese-Word-Vectors下载其提供了基于多个数据集训练得到的词向量。词向量文件的格式为第一行记录基本信息包括两个整数分别表示总词数和词向量维度。从第二行起每一行表示一个词及其对应的词向量格式为词 向量的各个维度值。所有内容通过空格分隔该格式已成为自然语言处理领域中广泛接受的约定俗成的通用格式。具体格式如下词汇总数 向量维度 word1 val11 val12 ... val1N word2 val21 val22 ... val2N ...可使用KeyedVectors.load_word2vec_format() 加载上述词向量文件具体代码如下。from gensim.models import KeyedVectors model_path sgns.weibo.word.bz2 model KeyedVectors.load_word2vec_format(model_path)上述代码使用的sgns.weibo.word.bz2词向量文件包含195202个词每个词向量300维。该文件可从该网址下载也可直接从课程资料获取。词向量加载完后便可使用如下API查询词向量1、查看词向量维度print(model.vector_size)2、查看某个词的向量print(model[地铁])3、查看两个向量的相似度similarity model.similarity(地铁, 公交) print(地铁 vs 公交 相似度, similarity)model.similarity计算的是两个词向量的余弦相似度计算公式如下返回值介于[-1,1]。接近1表示高度相似语义接近接近接近0表示无明显相关接近-1方向完全相反极度不相似。找出与某个词最相似的词similar_words model.most_similar(positive[上班], topn5) print(similar_words) result model.most_similar(positive[爸爸, 女性], negative[男性], topn3) print(result)2自行训练词向量1准备语料Word2Vec的训练语料需要是已分词的文本序列格式为sentences [[我, 每天,乘坐, 地铁, 上班], [我,每天, 乘坐, 公交, 上班]]2训练模型gensim提供了十分方便的训练词向量的API——Word2Vec。from gensim.models import Word2Vec model Word2Vec( sentences, # 已分词的句子序列 vector_size100, # 词向量维度 window5, # 上下文窗口大小 min_count2, # 最小词频低于将被忽略 sg1, # 1:Skip-Gram0:CBOW workers4 # 并行训练线程数 )3保存词向量model.wv.save_word2vec_format(my_vectors.kv)4加载词向量from gensim.models import KeyedVectors my_model KeyedVectors.load_word2vec_format(my_vectors.kv)完整案例如下数据集来源为ChineseNLPCorpus格式CSV具体结构如下catlabelreview书籍1感谢于歌先生为大家带来这么精彩的一本好书书籍0这本书纸质不怎样内容也不怎样。水果1苹果酸甜可口大小适中好吃。水果0不是很大比较甜不会回购感觉加运费后不划算。完成代码如下import jieba from gensim.models import Word2Vec, KeyedVectors import pandas as pd df pd.read_csv(online_shopping_10_cats.csv, encodingutf-8, usecols[review]) sentences [[token for token in jieba.lcut(review) if token.strip() ! ] for review in df[review]] model Word2Vec( sentences, # 已分词的句子序列 vector_size100, # 词向量维度 window5, # 上下文窗口大小 min_count2, # 最小词频低于将被忽略 sg1, # 1 Skip-Gram0 CBOW workers4 # 并行训练线程数 ) model.wv.save_word2vec_format(my_vectors.kv) my_model KeyedVectors.load_word2vec_format(my_vectors.kv) print(my_model)2.3.3.4应用Word2Vec词向量训练好的词向量通常用于初始化下游NLP任务的嵌入层。在现代深度学习的 NLP 模型中大多数任务的输入第一层都是嵌入层。本质上嵌入层就是一个查找表lookup table输入是词在词汇表中的索引输出是该词对应的向量表示。嵌入层的参数矩阵可以有两种典型的初始化方式随机初始化模型训练开始时嵌入向量是随机生成的模型会通过反向传播逐步学习每个词的表示。使用预训练词向量初始化加载训练好的词向量如 Word2Vec到嵌入层中作为初始参数这样可以为模型注入丰富的语言知识尤其在低资源任务中优势明显。并且加载预训练词向量后可选择是否让嵌入层继续参与训练。下面以PyTorch为例演示如何使用预训练词向量初始化Embedding层核心API为nn.Embedding.from_pretrainedembedding_layer nn.Embedding.from_pretrained( embedding_matrix, # 词向量矩阵形状为(num_embeddigns,embedding_dim) freezeFalse # 是否冻结词向量 )以下是完整案例import torch import torch.nn as nn from gensim.models import KeyedVectors # 1. 加载预训练的 Word2Vec 模型 word_vectors KeyedVectors.load_word2vec_format(my_vectors.kv) # 2. 构建词表和词向量矩阵 word2index word_vectors.key_to_index # 词到索引的映射 embedding_dim word_vectors.vector_size # 词语向量维度 num_embeddings len(word2index) # 词表大小 embedding_matrix torch.zeros(num_embeddings, embedding_dim) # 构造词向量矩阵,形状为(词表大小,词向量维度大小) for word, idx in word2index.items(): embedding_matrix[idx] torch.tensor(word_vectors[word]) # 3. 构建 PyTorch 的嵌入层 embedding_layer nn.Embedding.from_pretrained( embedding_matrix, # 词向量矩阵形状为(num_embeddigns,embedding_dim) freezeFalse # 是否冻结词向量 ) # 4. 示例将词索引转换为向量 input_words [我, 喜欢, 乘坐, 地铁] # 分词后的句子 input_indices [word2index[word] for word in input_words] # token转为索引 input_tensor torch.tensor([input_indices]) # 构造嵌入层输入张量 # 5. 查询嵌入即词向量查找 output embedding_layer(input_tensor) # 通过嵌入层查找预训练词向量 print(output.shape) # 例如 torch.Size([1, 4, 100])2.3.4上下文相关词表示暂时了解虽然像Word2Vec这样的模型已经能够为词语提供具有语义的向量表示但是它只为每个词分配一个固定的向量表示不论它在句中出现的语境如何。这种表示被称为静态词向量static embeddings。然而语言的表达极其灵活一个词在不同上下文中可能有完全不同的含义。例如这时使用同一个静态词向量去表示“苹果”显然无法区分这两种语义。这就推动了上下文相关的词表示的发展。上下文相关词表示Contextual Word Representations是指词语的向量表示会根据它所在的句子上下文动态变化从而更好地捕捉其语义。一个具有代表性的模型是——ELMo。该模型全称为 Embeddings from Language Models发表于2018年2月。其基于LSTM 语言模型使用上下文动态生成每个词的表示每个词的向量由其前文和后文共同决定是第一个被广泛应用于下游任务的上下文词向量模型。如何学习AI大模型如果你对AI大模型入门感兴趣那么你需要的话可以点击这里大模型重磅福利入门进阶全套104G学习资源包免费分享这份完整版的大模型 AI 学习和面试资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】这是一份大模型从零基础到进阶的学习路线大纲全览小伙伴们记得点个收藏第一阶段从大模型系统设计入手讲解大模型的主要方法第二阶段在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用第三阶段大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统第四阶段大模型知识库应用开发以LangChain框架为例构建物流行业咨询智能问答系统第五阶段大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型第六阶段以SD多模态大模型为主搭建了文生图小程序案例第七阶段以大模型平台应用与开发为主通过星火大模型文心大模型等成熟大模型构建大模型行业应用。100套AI大模型商业化落地方案大模型全套视频教程200本大模型PDF书籍学会后的收获• 基于大模型全栈工程实现前端、后端、产品经理、设计、数据分析等通过这门课可获得不同能力• 能够利用大模型解决相关实际项目需求 大数据时代越来越多的企业和机构需要处理海量数据利用大模型技术可以更好地处理这些数据提高数据分析和决策的准确性。因此掌握大模型应用开发技能可以让程序员更好地应对实际项目需求• 基于大模型和企业数据AI应用开发实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能 学会Fine-tuning垂直训练大模型数据准备、数据蒸馏、大模型部署一站式掌握• 能够完成时下热门大模型垂直领域模型训练能力提高程序员的编码能力 大模型应用开发需要掌握机器学习算法、深度学习框架等技术这些技术的掌握可以提高程序员的编码能力和分析能力让程序员更加熟练地编写高质量的代码。LLM面试题合集大模型产品经理资源合集大模型项目实战合集获取方式有需要的小伙伴可以保存图片到wx扫描二v码免费领取【保证100%免费】