人工智能之语言领域 自然语言处理 第四章 文本表示方法

📅 发布时间:2026/7/7 19:18:48 👁️ 浏览次数:
人工智能之语言领域 自然语言处理 第四章 文本表示方法
人工智能之语言领域第四章 文本表示方法文章目录人工智能之语言领域前言 文本表示方法4.1 传统离散表示方法4.1.1 词袋模型BoW与词频统计4.1.2 TF-IDF模型原理与实现4.1.3 n-gram模型上下文窗口与语义捕捉4.2 分布式表示方法词嵌入4.2.1 经典词嵌入模型4.2.1.1 Word2VecCBOW 与 Skip-gram4.2.1.2 GloVe全局词频与局部上下文结合4.2.1.3 FastText子词级别的表示4.2.2 词嵌入的训练与调优4.2.3 句嵌入与篇章嵌入基础4.3 现代上下文相关表示4.3.1 预训练模型的表示逻辑4.3.2 表示向量的下游适配方法补充文本表示方法演进对比小结资料关注前言 文本表示方法在自然语言处理NLP中文本表示是将人类可读的语言转化为计算机可计算的数值形式的核心步骤。没有合适的表示模型就无法“理解”语言。本章将系统介绍从传统离散表示到现代上下文相关表示的演进路径涵盖原理、实现、优缺点及代码示例帮助你掌握如何为不同任务选择合适的文本表示方法。4.1 传统离散表示方法传统方法将文本视为符号集合忽略语序和语义但因其简单高效仍在某些场景如关键词检索、基线模型中广泛使用。4.1.1 词袋模型BoW与词频统计核心思想忽略词序仅统计每个词在文档中出现的次数。文档表示为一个高维稀疏向量维度 词汇表大小。 示例词汇表[“我”, “喜欢”, “自然语言”, “处理”, “AI”]句子“我喜欢自然语言处理我也喜欢AI”→ 向量[2, 2, 1, 1, 1]fromsklearn.feature_extraction.textimportCountVectorizer corpus[我喜欢自然语言处理,我也喜欢AI,自然语言处理很有趣]vectorizerCountVectorizer(token_patternr(?u)\b\w\b)# 中文需自定义分词# 实际中应先分词此处简化corpus_seg[ .join(list(s))forsincorpus]# 按字切分仅演示Xvectorizer.fit_transform(corpus_seg)print(词汇表:,vectorizer.get_feature_names_out())print(BoW矩阵:\n,X.toarray())⚠️ 缺陷维度灾难词汇表大时向量极稀疏无法捕捉语义“喜欢”和“热爱”被视为无关4.1.2 TF-IDF模型原理与实现TF-IDFTerm Frequency–Inverse Document Frequency改进 BoW降低常见词权重提升区分性词的重要性。TF词频词在文档中出现频率IDF逆文档频率log(总文档数 / 包含该词的文档数)✅ 直觉“的”在所有文档都出现 → IDF 小 → 权重低“BERT”只在一篇出现 → IDF 大 → 权重高fromsklearn.feature_extraction.textimportTfidfVectorizer tfidfTfidfVectorizer(token_patternr(?u)\b\w\b)X_tfidftfidf.fit_transform(corpus_seg)print(TF-IDF 矩阵:\n,X_tfidf.toarray().round(3))# 输出每篇文档中各词的TF-IDF权重 应用搜索引擎排序、关键词提取、文本相似度余弦相似度4.1.3 n-gram模型上下文窗口与语义捕捉n-gram将连续 n 个词作为单元部分保留局部语序。unigram (1-gram)单个词即 BoWbigram (2-gram)“自然 语言”、“语言 处理”trigram (3-gram)“自然 语言 处理”fromsklearn.feature_extraction.textimportCountVectorizer ngram_vecCountVectorizer(ngram_range(1,2),token_patternr\S)# 假设已分词为列表corpus_tokenized[[我,喜欢,自然语言,处理],[自然语言,处理,很,有趣]]corpus_str[ .join(doc)fordocincorpus_tokenized]X_ngramngram_vec.fit_transform(corpus_str)print(n-gram 特征:,ngram_vec.get_feature_names_out())print(矩阵:\n,X_ngram.toarray())✅ 优点捕捉局部搭配如“机器学习”❌ 缺点维度爆炸仍无法处理长距离依赖4.2 分布式表示方法词嵌入分布式表示Distributed Representation将词映射为稠密低维向量相似词在向量空间中距离相近突破了离散表示的局限。4.2.1 经典词嵌入模型4.2.1.1 Word2VecCBOW 与 Skip-gram由 Google 于 2013 年提出基于局部上下文预测。模型输入 → 输出适用场景CBOW上下文词 → 目标词数据少、高频词Skip-gram目标词 → 上下文词数据多、低频词Skip-gram目标词Predict 上下文1Predict 上下文2CBOW上下文词1Average上下文词2Predict 目标词训练目标最大化上下文共现概率。# 使用 gensim 训练 Word2Vecfromgensim.modelsimportWord2Vec sentences[[我,喜欢,自然语言,处理],[自然语言,处理,很,有趣],[AI,改变,世界]]modelWord2Vec(sentences,vector_size100,window5,min_count1,sg1)# sg1 表示 Skip-gramprint(‘自然语言’ 的向量:,model.wv[自然语言])print(与‘处理’最相似的词:,model.wv.most_similar(处理,topn2)) 注意实际需大规模语料如 Wikipedia才能学出高质量向量。4.2.1.2 GloVe全局词频与局部上下文结合由 Stanford 提出2014直接建模词共现矩阵。构建全局共现矩阵 $ X $其中 $ X_{ij} $ 词 i 和 j 共同出现的次数优化目标$ w_i^T \tilde{w}_j b_i \tilde{b}j \approx \log X{ij} $✅ 优点利用全局统计信息训练更稳定❌ 缺点对低频词共现噪声敏感# GloVe 需使用官方 C 代码训练但可加载预训练模型# 此处展示加载方式需下载 glove.6B.100d.txt# import numpy as np# embeddings_index {}# with open(glove.6B.100d.txt, encodingutf8) as f:# for line in f:# values line.split()# word values[0]# coefs np.asarray(values[1:], dtypefloat32)# embeddings_index[word] coefs4.2.1.3 FastText子词级别的表示由 Facebook 提出2016将词拆分为字符 n-gramsubword。“apple” →ap,app,ppl,ple,le词向量 所有子词向量之和✅ 优势能表示未登录词OOV如“apples”可通过“appl”“ples”近似对形态丰富语言如德语、阿拉伯语效果显著# 使用 gensim 的 FastTextfromgensim.modelsimportFastText fasttext_modelFastText(sentences,vector_size100,window5,min_count1)print(OOV 词 ‘自然语言学’ 的向量即使未出现:)print(fasttext_model.wv[自然语言学])# 不会报错4.2.2 词嵌入的训练与调优关键超参数vector_size向量维度通常 100–300window上下文窗口大小中文建议 5–10min_count过滤低频词避免噪声sg0CBOW, 1Skip-gram调优技巧使用预训练向量初始化迁移学习在下游任务上微调fine-tune词向量对中文确保输入为分词后序列4.2.3 句嵌入与篇章嵌入基础词向量无法直接表示句子。常用聚合方法方法描述缺点平均池化对句中所有词向量求均值忽略词序TF-IDF 加权平均用 TF-IDF 作为权重仍无序SIFSmooth Inverse Frequency改进加权去除主成分效果较好importnumpyasnpdefsentence_embedding(words,model,methodaverage):vectors[]forwinwords:ifwinmodel.wv:vectors.append(model.wv[w])ifnotvectors:returnnp.zeros(model.vector_size)ifmethodaverage:returnnp.mean(vectors,axis0)# 可扩展 TF-IDF 加权等sent1[自然语言,处理,很,有趣]emb1sentence_embedding(sent1,model)print(句向量维度:,emb1.shape)# (100,) 进阶方案Sentence-BERT、InferSent、SimCSE见 4.3 节4.3 现代上下文相关表示传统词嵌入是静态的“苹果”在任何句子中向量相同而现代预训练模型提供动态上下文相关表示。4.3.1 预训练模型的表示逻辑以BERT为例输入[CLS] 我 喜欢 苹果 [SEP]输出每个 token 对应一个向量如“苹果”在“吃苹果” vs “买苹果手机”中不同[CLS]向量常用于句子级任务Token IDsWord Position Segment EmbeddingTransformer Encoder x12Contextualized Vectors[CLS] Vector → Sentence RepresentationToken Vectors → NER, SRL...✅ 优势一词多义自动区分捕捉长距离依赖支持多种下游任务# 使用 transformers 库获取 BERT 句向量fromtransformersimportAutoTokenizer,AutoModelimporttorch tokenizerAutoTokenizer.from_pretrained(bert-base-chinese)modelAutoModel.from_pretrained(bert-base-chinese)text我喜欢自然语言处理inputstokenizer(text,return_tensorspt,paddingTrue,truncationTrue)withtorch.no_grad():outputsmodel(**inputs)cls_vectoroutputs.last_hidden_state[:,0,:]# [CLS] 向量print(BERT 句向量形状:,cls_vector.shape)# torch.Size([1, 768]) 中文推荐模型bert-base-chinese、hfl/chinese-roberta-wwm-ext、Langboat/mengzi-bert-base-fin4.3.2 表示向量的下游适配方法预训练向量不能直接用于任务需适配Adaptation方法说明适用场景特征提取Feature Extraction固定预训练模型只训练任务头数据少、计算资源有限微调Fine-tuning端到端训练整个模型数据充足、追求高性能Prompt Tuning设计提示模板引导模型输出少样本学习# 微调示例文本分类使用 Hugging Face TrainerfromtransformersimportAutoTokenizer,AutoModelForSequenceClassification,Trainer,TrainingArguments modelAutoModelForSequenceClassification.from_pretrained(bert-base-chinese,num_labels2)# 后续配置数据集、训练参数即可微调 实践建议小数据集 → 冻结 BERT只训分类头大数据集 → 全模型微调超大数据 → 使用 LoRA 等参数高效微调技术补充文本表示方法演进对比1950s 词袋模型(BoW)1970s TF-IDF1990s n-gram2013 Word2Vec2014 GloVe2016 FastText2018 BERT(上下文相关)2020 Sentence-BERT,SimCSE,Embedding-as-Service文本表示方法演进小结文本表示方法经历了从离散→稠密→上下文感知的演进传统方法BoW/TF-IDF简单有效适合基线或资源受限场景词嵌入Word2Vec/GloVe/FastText引入语义相似性是深度学习时代的基石预训练模型BERT 等提供动态、深层语义表示已成为现代 NLP 的标准输入。选择表示方法时需权衡任务需求、数据规模、计算资源。未来方向包括多模态表示、知识增强嵌入和高效推理嵌入。资料关注咚咚王《Python 编程从入门到实践》《利用 Python 进行数据分析》《算法导论中文第三版》《概率论与数理统计第四版 (盛骤) 》《程序员的数学》《线性代数应该这样学第 3 版》《微积分和数学分析引论》《西瓜书周志华-机器学习》《TensorFlow 机器学习实战指南》《Sklearn 与 TensorFlow 机器学习实用指南》《模式识别第四版》《深度学习 deep learning》伊恩·古德费洛著 花书《Python 深度学习第二版(中文版)【纯文本】 (登封大数据 (Francois Choliet)) (Z-Library)》《深入浅出神经网络与深度学习 (迈克尔·尼尔森MichaelNielsen》《自然语言处理综论 第 2 版》《Natural-Language-Processing-with-PyTorch》《计算机视觉-算法与应用(中文版)》《Learning OpenCV 4》《AIGC智能创作时代》杜雨 张孜铭《AIGC 原理与实践零基础学大语言模型、扩散模型和多模态模型》《从零构建大语言模型中文版》《实战 AI 大模型》《AI 3.0》