第七章 文本表示:嵌入表示(三)

📅 2026/8/15 23:55:13
第七章 文本表示:嵌入表示(三)
目录前置案例——文本的表示与应用一、概念介绍二、向量空间模型三、主题模型LDA四、词嵌入模型Embding五、 哈希模型--Simhash四、词嵌入模型Embding4.1 概述词嵌入模型的核心目标是将自然语言中的词语、短语或文本片段转换为计算机可以处理的向量表示。传统的文本表示方法通常采用独热编码One-Hot Encoding即用一个很长的向量表示一个词每个词只有一个位置为 1其余位置为 0。虽然这种方法简单直观但它存在两个明显问题一是向量维度很高容易造成计算资源浪费二是不同词语之间没有语义距离无法体现词语之间的相似关系。例如“国王”和“皇后”在语义上明显相关但在独热编码中二者并不会比“国王”和“苹果”更接近。词嵌入模型通过训练语料中的上下文关系把词语映射到低维、稠密、连续的向量空间中。在这个空间里语义相近的词语通常距离更近。例如“教师”“学生”“学校”可能位于相近区域“股票”“基金”“投资”也可能聚集在同一语义空间中。因此词嵌入不仅能够降低文本表示的维度还能够在一定程度上表达词语之间的语义关系。核心突破词嵌入模型使词语具备了可以计算的语义表示。向量之间可以进行距离计算和相似度比较从而支持语义检索、文本分类、推荐系统和问答系统等任务。早期词向量中常见的类比关系可以表示为 vec(国王) - vec(男人) vec(女人) ≈ vec(皇后)这说明词向量能够在一定程度上捕捉词语之间的语义差异。局限以 Word2Vec 和 GloVe 为代表的静态词向量通常为每个词生成一个固定向量。对于一词多义问题这种表示方式并不充分。例如“银行存款”中的“银行”与“河岸边的银行”语义不同但静态词向量通常无法根据上下文自动区分其含义。深度语义嵌入随着深度学习的发展词嵌入逐渐从静态表示发展到上下文感知的动态表示。以 BERT 为代表的预训练语言模型能够根据词语所在的上下文生成不同的向量表示。同一个词出现在不同句子中其向量会随着上下文变化而变化。例如“AI 正在学习人类语言”中的“学习”和“学生在学习”中的“学习”虽然词面相同但模型可以结合上下文生成更符合语义的表示。动态词嵌入使模型能够更好地理解句子含义在文本分类、问答系统、信息抽取、机器翻译和文本生成等任务中表现出更强的语义理解能力。4.2 Word2Vec原理理论Word2Vec是一种经典的静态词嵌入模型主要思想是“一个词的含义可以由它周围的词来表示”。如果两个词经常出现在相似的上下文中那么它们在语义上往往也比较接近。Word2Vec 通过大量文本语料学习词语之间的共现关系并将每个词表示为一个低维稠密向量。Word2Vec 主要包含两种训练结构CBOW 和 Skip-gram。CBOW 的全称是 Continuous Bag of Words中文通常称为连续词袋模型。它的基本思路是根据上下文词语预测中心词。例如在句子“人工智能正在改变教育方式”中如果上下文是“人工智能”“改变”模型需要预测中间的词“正在”。CBOW的训练速度较快适合处理较大规模语料。Skip-gram的思路与 CBOW 相反它是根据中心词预测上下文词语。例如给定中心词“人工智能”模型需要预测它附近可能出现的词如“技术”“模型”“应用”“教育”等。Skip-gram 对低频词的学习效果通常较好适合在语料规模不是特别大、但希望捕捉更多细粒度语义关系的场景中使用。在训练过程中Word2Vec 并不是直接人工规定词语之间的相似度而是让模型在大量语料中自动学习。当训练完成后每个词都会对应一个向量。两个词语向量之间的距离越近通常表示它们在语义上越相似。常用的相似度计算方法是余弦相似度它可以衡量两个词向量方向上的接近程度。训练训练 Word2Vec 通常包括语料准备、文本预处理、参数设置和模型训练四个步骤。首先需要准备一定规模的文本语料语料可以来自新闻、评论、论文、百科、论坛或业务系统中的文本数据。语料规模越大、质量越高训练出的词向量通常越稳定。其次需要进行文本预处理。对于中文文本一般需要先进行分词将连续句子切分为一个个词语。例如“人工智能正在改变教育方式”可以切分为“人工智能 / 正在 / 改变 / 教育 / 方式”。对于英文文本则通常需要进行分词、大小写统一、去除停用词等处理。然后需要设置训练参数。常见参数包括向量维度、上下文窗口大小、最小词频和训练轮数。向量维度决定每个词用多少个数字表示窗口大小决定模型观察中心词前后多少个词最小词频用于过滤出现次数过少的词训练轮数则影响模型对语料的学习充分程度。最后使用训练算法学习词向量。训练完成后可以得到每个词对应的向量表示并可以进一步进行相似词查询、词语类比、文本向量化等操作。由于 Word2Vec 训练速度较快、实现较成熟因此常用于入门实验和轻量级语义建模场景。安装代码示例pip install gensim应用代码示例from gensim.models import Word2Vec # 导入 Word2Vec 模型 sentences [ [人工智能, 改变, 教育, 方式], [机器学习, 需要, 数据, 训练], [人工智能, 模型, 可以, 处理, 文本] ] model Word2Vec(sentences, vector_size50, window2, min_count1, workers1) print(model.wv.most_similar(人工智能, topn2)) # 查看相似词应用案例Word2Vec可以用于文本相似度计算。例如在新闻推荐系统中可以先训练新闻语料的词向量再根据新闻标题或正文中的词向量计算不同新闻之间的相似程度。如果两篇新闻都包含“股票”“基金”“投资”“市场”等语义相近的词那么系统可以判断它们属于相似主题从而向用户推荐相关内容。Word2Vec也可以用于关键词扩展。例如用户搜索“人工智能”时系统可以根据词向量找到与其相近的词如“机器学习”“深度学习”“自然语言处理”等从而提升搜索召回效果。此外Word2Vec 还可以作为机器学习模型的输入特征。在文本分类任务中可以将一句话中的多个词向量取平均得到句子向量再输入到分类模型中完成情感分析、主题分类或垃圾文本识别等任务。虽然 Word2Vec 本身不能直接理解完整句子结构但它为后续的文本建模提供了重要的语义基础。4.3 BERT原理理论BERT 是一种基于 Transformer 结构的预训练语言模型全称是 Bidirectional Encoder Representations from Transformers。与 Word2Vec 这类静态词向量模型不同BERT 能够根据上下文动态生成词语表示因此属于上下文感知的词嵌入模型。BERT的核心特点是双向上下文建模。传统语言模型通常按照从左到右或从右到左的顺序理解文本而 BERT 可以同时利用一个词左侧和右侧的信息来理解该词的含义。例如在句子“我去银行办理存款”和“河岸旁边有一排树”中模型可以根据上下文判断词语所处的语义环境从而生成更准确的向量表示。BERT的训练主要依赖两个预训练任务。第一个是遮蔽语言模型即随机遮住句子中的部分词语让模型根据上下文预测被遮住的词。例如“人工智能正在改变 [MASK] 方式”模型需要结合上下文预测被遮住的词可能是“教育”。第二个是句子关系判断即让模型判断两个句子之间是否存在连续关系。这些训练任务使 BERT 能够学习词语、句子和篇章层面的语义信息。与 Word2Vec 相比BERT 的优势在于它能够处理一词多义问题。同一个词在不同上下文中会得到不同的向量表示。例如“苹果发布了新手机”中的“苹果”更可能表示公司而“我买了一个苹果”中的“苹果”更可能表示水果。BERT 可以根据上下文对二者进行区分从而提高模型对自然语言的理解能力。训练BERT的训练通常分为两个阶段预训练和微调。预训练阶段需要使用大规模无标注文本数据让模型学习通用语言规律。这个阶段计算成本较高通常需要较大的语料、较长的训练时间和较强的硬件资源。因此在一般学习和项目开发中通常不会从零开始训练 BERT而是直接使用已经训练好的预训练模型。微调阶段是在具体任务数据上继续训练模型。例如在情感分析任务中可以准备带有“正面”“负面”标签的评论数据在文本分类任务中可以准备带有类别标签的新闻或短文本数据。然后在预训练模型的基础上添加分类层让模型学习具体任务的判断规则。由于 BERT 已经具备较强的语言理解能力因此微调通常只需要相对较少的数据就能取得较好的效果。在实际训练中BERT 的输入通常需要经过分词器处理转换为模型可以识别的 token 编号。同时还需要加入特殊标记例如 [CLS] 和 [SEP]。[CLS] 通常放在句子开头它对应的向量可以作为整个句子的表示[SEP] 用于分隔不同句子。模型经过训练后可以输出词级别或句子级别的向量用于分类、问答、匹配、抽取等任务。安装代码示例pip install transformers torch应用代码示例from transformers import AutoTokenizer, AutoModel # 导入 BERT 相关工具 import torch tokenizer AutoTokenizer.from_pretrained(bert-base-chinese) model AutoModel.from_pretrained(bert-base-chinese) text 人工智能正在改变教育方式 inputs tokenizer(text, return_tensorspt) with torch.no_grad(): outputs model(**inputs) cls_vector outputs.last_hidden_state[:, 0, :] # 取 [CLS] 位置作为句子向量 print(cls_vector.shape) # 输出向量维度应用案例BERT可以广泛应用于自然语言处理任务。在文本分类中可以使用 BERT 判断新闻类别、评论情感、用户意图或邮件类型。例如输入一句评论“这门课程讲得很清楚例子也容易理解”模型可以判断其情感倾向为正面。在问答系统中BERT 可以根据问题和文章内容定位答案。例如给定问题“Word2Vec 的两种结构是什么”以及相关教材内容模型可以从文本中找到“CBOW 和 Skip-gram”作为答案。在命名实体识别任务中BERT 可以识别人名、地名、机构名、时间、产品名等实体。例如在“李明在北京大学参加人工智能论坛”这句话中模型可以识别“李明”为人名“北京大学”为机构名“人工智能论坛”为活动或主题相关短语。在文本匹配任务中BERT 可以判断两个句子是否表达相近含义。例如“如何学习 Python”和“Python 入门应该怎么学”虽然表达方式不同但语义接近模型可以判断它们具有较高相似度。表 7-2 Word2Vec 与 BERT 对比比较维度Word2VecBERT说明表示方式静态词向量上下文动态向量Word2Vec一个词通常对应一个固定向量BERT 会结合上下文生成表示。上下文能力主要依赖局部共现关系能够利用双向上下文BERT更适合处理一词多义和复杂句子理解。训练成本较低较高Word2Vec训练快BERT 通常使用预训练模型再微调。适用任务相似词查询、关键词扩展、轻量级分类文本分类、问答、实体识别、文本匹配二者可根据任务复杂度和资源条件选择。