【自然语言处理】NLP分词与Word2Vec词向量——从原理到实战

📅 发布时间:2026/7/30 1:44:05
【自然语言处理】NLP分词与Word2Vec词向量——从原理到实战
NLP分词与Word2Vec词向量深度解析一、英文分词1. 词级分词2. 字符级分词3. 子词级分词二、中文分词1. 字符级分词2. 词级分词3. 子词级分词三、分词工具1. jieba 分词器2. One-hot 编码3. Word2Vec 词嵌入3.1 Word2Vec 概述3.2 Word2Vec 原理Skip-GramCBOW3.3 获取 Word2Vec 词向量使用公开词向量自行训练词向量1. 准备语料2. 训练模型3. 保存词向量4. 加载词向量3.4 应用 Word2Vec 词向量一、英文分词按照分词粒度的不同可将英文分词划分为三种类型词级分词Word-Level、字符级分词Character-Level和子词级分词Subword-Level。下面逐一展开介绍。1. 词级分词词级分词是指将文本按照完整的词语进行切分是最传统、最直观的分词方式。在英文中空格和标点通常充当天然的分隔符。词级分词虽然便于理解和实现但在实际应用中容易遭遇OOVOut-of-Vocabulary未登录词问题。所谓OOV是指在模型使用阶段输入文本中出现了不在预先构建词表中的词语例如网络热词、专有名词、复合词及拼写变体等。由于模型无法识别这些词通常会将它们统一替换为特殊标记如UNK从而导致语义信息丢失影响模型的理解与预测能力。2. 字符级分词字符级分词Character-level Tokenization是以单个字符为最小单位进行切分的方法。文本中的每一个字母、数字、标点乃至空格都会被视作一个独立的 token。在这种分词方式下词表仅由所有可能出现的字符组成因此词表规模极小覆盖率极高几乎不存在 OOV 问题。无论输入中出现什么新词或拼写变体只要字符在词表中都能被正常表示。然而单个字符本身所承载的语义信息极弱模型必须依赖更长的上下文来推断词义和结构这显著增加了建模难度和训练成本。同时输入序列也会变得更长影响模型效率。3. 子词级分词子词级分词是一种介于词级与字符级之间的分词方法它将词语切分为更小的语义单元——子词subword例如词根、前缀、后缀或常见的词片段。与词级分词相比子词分词能显著缓解 OOV 问题与字符级分词相比它又能更好地保留语义结构。子词分词的核心思想是即使一个完整的词没有出现在词表中只要它可以被拆分为词表中已有的子词单元模型就能识别和表示它从而避免整体被替换为UNK。常见的子词分词算法包括BPEByte Pair Encoding、WordPiece和Unigram Language Model。其中BPE是最早被广泛应用的子词分词方法。其基本思想是训练阶段首先将语料中的词汇拆分为单个字符构建初始词表然后迭代统计语料中出现频率最高的相邻字符对将其合并为新的子词单元并加入词表。此过程持续进行直到词表大小达到预设上限。分词阶段将新文本拆分为最小单位如字符然后按顺序应用训练中学习到的合并规则逐步合并直到无法继续。最终得到由子词组成的分词结果。子词级分词已成为现代英文 NLP 模型中的主流方法如BERT、GPT等模型均采用了基于子词的分词机制。二、中文分词1. 字符级分词字符级分词是中文处理中最简单的一种方式即按照单个汉字进行切分。文本中的每一个汉字都被视为一个独立的 token。由于汉字本身通常具有独立的语义因此字符级分词在中文中具备天然的可行性。相比英文中的字符分词中文的字符分词更加语义友好。2. 词级分词词级分词是将中文文本按照完整词语进行切分的传统方法切分结果更贴近人类的阅读习惯。由于中文没有空格等天然词边界词级分词通常依赖词典、规则或模型来识别词语边界。3. 子词级分词虽然中文没有英文中典型的前缀、后缀、词根等子词结构但子词分词算法如 BPE仍可直接应用于中文。它们以汉字为基本单位通过学习语料中高频出现的字组合如自然、“语言”、“处理”自动构建子词词表。这种方式无需人工词典具有较强的适应能力。在当前主流的中文大模型如通义千问、DeepSeek中子词分词已成为广泛采用的文本切分策略。三、分词工具目前市面上可用于中文分词的工具种类繁多按实现方式可分为两大类基于词典或规则的传统方法以词为单位进行切分代表工具包括jieba、HanLP等基于子词建模算法如BPE从数据中自动学习高频组合构建子词词表代表工具包括Hugging Face Tokenizer、SentencePiece、tiktoken等1. jieba 分词器关于 jieba 库的详细介绍可参考一文快速上手 Python 中文分词神器 —— jieba 库2. One-hot 编码关于 One-hot 编码的详细介绍可参考机器学习数据预处理之独热编码One-Hot详解3. Word2Vec 词嵌入3.1 Word2Vec 概述Word2Vec 的设计理念源自分布假设Distributional Hypothesis——即一个词的含义由它周围的词决定。基于这一假设Word2Vec 构建了一个简洁的神经网络模型通过学习词与上下文之间的关系自动为每个词生成一个能反映语义特征的稠密向量表示。Word2Vec 提供了两种典型的模型结构模型输入输出CBOWContinuous Bag-of-Words上下文词前后若干个词预测目标中心词Skip-gram中心词预测上下文词前后若干个词只要按照上述目标训练模型就能得到语义化的词向量。3.2 Word2Vec 原理Word2Vec不依赖人工标注而是直接利用大规模原始文本如书籍、新闻、网页等作为数据源从中自动构造训练样本。由于两种模型的输入和输出都是词语首先需要对原始文本进行分词将连续文本转换为 token 序列。同时模型无法直接处理文本符号仍需将词语转换为one-hot 编码作为模型的输入和输出进行计算。Skip-Gram训练样本Skip-Gram 的目标是根据中心词预测上下文其训练样本格式为模型结构Skip-Gram 模型结构如下Skip-Gram 模型损失值的计算流程如下前向传播过程输入中心词以地铁为例用 one-hot 向量表示查找词向量将 one-hot 向量与参数矩阵W相乘取出地铁对应的词向量W即为词向量矩阵每一行对应一个词的向量预测上下文将中心词向量与参数矩阵W相乘得到对整个词表的预测得分Softmax 输出得分通过 Softmax 转为概率分布表示各词作为上下文的可能性计算损失与真实上下文词乘坐、上班进行比对计算交叉熵损失并求和得到总损失在反向传播过程中参数矩阵W中地铁对应的词向量会被更新。模型通过不断训练逐步优化向量最终得到具有语义的词向量。CBOW训练样本CBOW 的目标是根据上下文预测中心词其训练样本格式为模型结构CBOW 模型结构如下CBOW 模型损失值的计算流程如下CBOW 前向传播过程输入上下文词以乘坐、上班为例每个词用 one-hot 向量表示查找词向量每个 one-hot 向量与参数矩阵W相乘查出对应的词向量平均上下文向量将多个上下文词向量取平均得到整体的上下文表示预测中心词将平均后的上下文向量与参数矩阵W相乘得到对整个词表的预测得分Softmax 输出将得分输入 Softmax得到每个词作为中心词的概率分布计算损失将预测结果与真实中心词地铁的 one-hot 向量进行比对计算交叉熵损失在反向传播过程中参数矩阵W中乘坐和上班对应的词向量会被更新。模型通过不断训练逐步优化这些向量最终得到具有语义的词向量。3.3 获取 Word2Vec 词向量词向量的获取通常有两种方式直接使用公开词向量或在自有语料上自行训练。使用公开词向量国内一些大公司提供了训练好的中文词向量可从以下仓库下载https://github.com/Embedding/Chinese-Word-Vectors词向量文件的通用格式如下词汇总数 向量维度word1 val11 val12 … val1Nword2 val21 val22 … val2N…可使用KeyedVectors.load_word2vec_format()加载词向量文件fromgensim.modelsimportKeyedVectors model_pathsgns.weibo.word.bz2modelKeyedVectors.load_word2vec_format(model_path)自行训练词向量1. 准备语料Word2Vec 的训练语料需要是已分词的文本序列sentences[[我,每天,乘坐,地铁,上班],[我,每天,乘坐,公交,上班]]2. 训练模型Gensim 提供了便捷的 Word2Vec 训练 APIfromgensim.modelsimportWord2Vec modelWord2Vec(sentences,# 已分词的句子序列vector_size100,# 词向量维度window5,# 上下文窗口大小min_count2,# 最小词频低于将被忽略sg1,# 1: Skip-Gram, 0: CBOWworkers4# 并行训练线程数)3. 保存词向量model.wv.save_word2vec_format(my_vectors.kv)4. 加载词向量fromgensim.modelsimportKeyedVectors my_modelKeyedVectors.load_word2vec_format(my_vectors.kv)3.4 应用 Word2Vec 词向量训练好的词向量通常用于初始化下游 NLP 任务的嵌入层。在现代深度学习 NLP 模型中嵌入层本质上是一个查找表lookup table输入是词在词汇表中的索引输出是该词对应的向量表示。嵌入层的参数矩阵通常有两种初始化方式方式说明随机初始化向量随机生成通过反向传播逐步学习预训练词向量初始化加载 Word2Vec 等预训练向量作为初始参数可注入丰富语言知识尤其在低资源任务中优势明显加载预训练词向量后可选择是否让嵌入层继续参与训练即 fine-tune 或 freeze。