深度学习——自然语言处理NLP

自然语言处理中的词向量技术演进与实践

一、传统统计语言模型的困境与突破

1.1 统计语言模型的局限性

早期NLP主要依赖统计语言模型,如n-gram模型,通过统计词序列的频率来预测语言概率。这类模型存在两个根本缺陷:

早期统计语言模型的局限性

1. 维度灾难问题

统计语言模型(如n-gram模型)面临着严重的维度挑战。随着n值的增大,模型需要存储的参数数量呈指数级增长:

  • 参数计算示例

    • 3-gram模型:对于包含50,000词的词汇表,需要存储50,000³=125万亿个参数
    • 5-gram模型:同样的词汇表,需要存储50,000⁵≈3.125×10²²个参数
  • 实际应用限制

    • 由于存储和计算资源的限制,实际应用中通常只能采用2-gram或3-gram模型
    • 更高阶的n-gram模型虽然理论上能捕捉更长距离的依赖关系,但实践中几乎无法实现

2. 语义盲区问题

统计语言模型在语义理解方面存在根本性缺陷:

  • 同义词识别障碍

    • 无法识别语义相近的词汇(如"汽车"和"轿车")
    • 对于表达相同概念的不同词语,模型会视为完全独立的词项
  • 多义词处理困难

    • 无法区分词语在不同语境中的含义(如"苹果"可以指水果或科技公司)
    • 所有出现形式都被视为同一词项,导致语义混淆
  • 反义关系盲区

    • 无法理解词语之间的对立关系(如"热"和"冷")
    • 这类具有相反含义的词语在模型中完全独立处理
  • 语义关联缺失

    • 无法捕捉词语之间的概念关联(如"医生"和"医院")
    • 词语之间的共现频率是唯一考虑因素,缺乏深层次的语义理解

1.2 统计方法的工程实现

在实际工程中,统计语言模型通常采用以下实现方式:

from sklearn.feature_extraction.text import CountVectorizer# 示例中文文本处理
texts = ["我们今天来学习人工智能", "人工智能是未来发展趋势"]
cv = CountVectorizer(ngram_range=(1,2))  # 包含unigram和bigram
cv_fit = cv.fit_transform(texts)# 输出结果
print("词汇表:", cv.get_feature_names_out())
print("词频矩阵:\n", cv_fit.toarray())

输出示例:

词汇表: ['我们' '今天' '来学习' '学习人' '人工智能' '人工智' '是未来' '未来发' '发展趋势']
词频矩阵:[[1 1 1 1 1 1 0 0 0][0 0 0 0 1 0 1 1 1]]

这种方法的主要问题在于:

  • 生成的矩阵维度随词汇量平方增长
  • 无法处理未登录词(OOV)
  • 忽略了词序的深层语义信息

二、One-hot编码的深入分析

2.1 One-hot编码原理与示例

以句子"我爱北京天安门"为例,处理过程如下:

  1. 构建词汇表:["我", "爱", "北京", "天安门"]
  2. 生成编码:
    • "我" → [1,0,0,0]
    • "爱" → [0,1,0,0]
    • "北京" → [0,0,1,0]
    • "天安门" → [0,0,0,1]

2.2 实际工程中的挑战

下表展示了不同规模下的存储需求:

词汇量向量维度存储需求(1000文档)主要问题
1,0001,0004MB可接受
10,00010,000400MB内存压力
50,00050,0002GB难以处理

实际应用中的典型问题场景:

  • 搜索引擎处理百万级网页时,矩阵规模可达TB级别
  • 推荐系统中用户行为数据的稀疏性问题
  • 实时系统对高维向量的计算延迟

三、词嵌入技术的核心突破

3.1 词嵌入的数学表示

词嵌入通过函数f: V → Rᴰ实现映射,其中:

  • V是词汇表
  • D是嵌入维度(通常50-1000)
  • 保留了语义关系的线性结构:
    • vec("国王") - vec("男人") + vec("女人") ≈ vec("女王")

3.2 典型应用场景

  1. 语义搜索

    • 查询"智能电话"能匹配到"智能手机"
    • 错误拼写纠正("teh"→"the")
  2. 推荐系统

    • 商品描述的语义匹配
    • 用户兴趣的向量化表示
  3. 文本分类

    • 通过词向量平均获得文档表示
    • 比传统TF-IDF方法提升5-15%准确率

四、Word2Vec技术详解 4.1 模型架构对比

  1. CBOW(Continuous Bag-of-Words)架构: 工作流程详解:

    • 输入层:
      • 接收窗口大小内所有上下文词的one-hot向量表示
      • 例如窗口大小为5时,会接收前后各2个词的one-hot向量
    • 隐藏层:
      • 将上下文词向量通过共享的权重矩阵W进行投影
      • 对投影结果进行平均处理,得到聚合的上下文向量
      • 数学表达式:h = (W·x₁ + W·x₂ + ... + W·xₙ)/n
    • 输出层:
      • 通过另一个权重矩阵W'计算中心词的概率分布
      • 使用softmax函数归一化输出概率
      • 更适合处理小型数据集,训练速度较快
  2. Skip-gram架构: 工作流程详解:

    • 输入层:
      • 接收单个中心词的one-hot向量表示
      • 例如给定句子"I love NLP",输入可能是"love"的one-hot编码
    • 隐藏层:
      • 直接将输入词映射到低维的嵌入空间
      • 通过权重矩阵W得到该词的稠密向量表示
    • 输出层:
      • 对每个上下文位置计算独立的概率分布
      • 使用层次softmax或负采样优化计算效率
      • 更适合处理大型数据集,能更好捕捉低频词特征

典型应用场景比较:

  • CBOW常用于:
    • 文档分类任务
    • 实时预测系统
  • Skip-gram常用于:
    • 专业领域术语处理
    • 需要精细词义区分的场景

4.2 训练优化技术

负采样实现示例

import numpy as npdef negative_sampling(target, vocab_size, num_neg_samples):# 目标词indextarget_idx = word_to_index[target]# 负采样分布(修正后的unigram分布)sample_probs = np.power(word_frequencies, 0.75)sample_probs /= np.sum(sample_probs)# 采样(排除目标词本身)neg_samples = np.random.choice([i for i in range(vocab_size) if i != target_idx],size=num_neg_samples,p=sample_probs,replace=False)return neg_samples

五损失函数与模型训练

5.1 交叉熵损失的数学推导

对于单个样本的损失计算:

L = -∑ y_i * log(p_i)= -log(p_true)  # 因为只有一个y_i=1

其中:

  • y_i是真实标签分布
  • p_i是模型预测分布

5.2 梯度下降过程

以Skip-gram为例的参数更新:

  1. 计算输出误差:δ = y - ŷ
  2. 更新输出矩阵:W' += η * δ * h
  3. 更新输入矩阵:W += η * x * δᵀW'
  4. 调整学习率η:常用Adam优化器自适应调整

六、现代应用与发展

6.1 动态词向量技术对比

技术发布年份核心创新典型维度
Word2Vec2013浅层神经网络300
GloVe2014全局统计+局部预测300
FastText2016子词信息300
ELMo2018双向LSTM1024
BERT2018Transformer编码器768/1024

6.2 实践建议

预处理流程

  1. 文本清洗
    • 去除HTML标签
    • 处理特殊字符
    • 统一编码格式
  2. 分词处理
    • 中文:Jieba/THULAC
    • 英文:NLTK/spaCy
  3. 标准化
    • 词干提取(PorterStemmer)
    • 大小写归一化

参数调优经验值

  • 小语料库(<1GB):vector_size=100-200
  • 中等语料(1-10GB):vector_size=200-300
  • 大语料(>10GB):vector_size=300-500
  • 窗口大小:skip-gram用5-10,CBOW用2-5

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/96406.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/96406.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uni-app头像叠加显示

展示代码<view class"bmBox"><view class"bmLeft">已报名&#xff1a;<text class"blueColor">10人</text></view><view class"bmRight dflex"><view class"avatarList"><ima…

私有化部署Ragflow的预训练模型

部署ragflow代码库中的det.onnx模型&#xff08;通常是目标检测或文档结构解析类模型&#xff0c;如版面分析模型&#xff09;到火山云&#xff0c;需基于ONNX Runtime推理框架&#xff0c;结合火山云的计算资源和服务能力实现。以下是具体步骤&#xff1a; 一、模型特性与依赖…

go中的singleflight是如何实现的?

大家周四快乐&#xff0c;今天分享粉丝投稿的面经。 内容整理如下&#xff1a;go go singleflight 的底层实现 singleflight 是 Go 语言标准库中的一个很有用的包&#xff0c;它主要用来处理并发请求时的重复问题。比如在高并发场景下&#xff0c;如果多个请求同时访问同一个资…

【开关电源篇】整流及其滤波电路的工作原理和设计指南-超简单解读

开关电源之整流电路1. 什么是半波整流电路&#xff1f;1.1 电路结构与工作原理1.2 输出特性分析2. 全波整流电路如何工作&#xff1f;2.1 电路结构特点2.2 工作过程分析2.3 优缺点对比3. 桥式整流电路有什么优势&#xff1f;3.1 电路组成3.2 工作原理详解3.3 性能特点4. 什么是…

创建GLFW窗口,开启OpenGL之路

前言&#xff1a;本系列文章主要是一个学习笔记和总结&#xff0c;具体学习过程参考https://learnopengl-cn.github.io/这个网站的是学习OpenGL的一个很完美的新手教程。在这个部分系列中&#xff0c;我会以自己的理解详细描述每个函数、方法的使用&#xff0c;以及关键参数的解…

es通过分片迁移迁移解决磁盘不均匀问题

POST _cluster/reroute {"commands": [{"move": {"index": "xxx_detail","shard": 2,"from_node": "el8P9Ul","to_node": "4sDv-RD"}}] }查看迁移进程 GET _cat/shards?v查看磁盘…

c++打包pyd文件给Python使用调用函数

c打包pyd文件给Python使用调用函数C语言源码&#xff1a;simplemath.cpp代码&#xff1a;// // Created by ASFOR on 2025/9/11. // #include <pybind11/pybind11.h>namespace py pybind11;// 一个简单的加法函数 int add(int a, int b) {return a b; }// 一个简单的乘…

hadoop的api操作对象存储

一、获取文件或目录1. 获取某个目录下的文件// 必须的依赖 import org.apache.hadoop.conf.Configuration import org.apache.hadoop.fs.{FileSystem, LocatedFileStatus, Path, RemoteIterator}// 获取某个目录下的文件路径 def list_file(conf: Configuration, dir_path: Str…

《UE5_C++多人TPS完整教程》学习笔记52 ——《P53 FABRIK 算法(FABRIK IK)》

本文为B站系列教学视频 《UE5_C多人TPS完整教程》 —— 《P53 FABRIK 算法&#xff08;FABRIK IK&#xff09; 的学习笔记&#xff0c;该系列教学视频为计算机工程师、程序员、游戏开发者、作家&#xff08;Engineer, Programmer, Game Developer, Author&#xff09; Stephen …

HttpServletRequest vs ServletContext 全面解析

HttpServletRequest vs ServletContext 全面解析 一、 核心区别概览特性HttpServletRequest (请求对象)ServletContext (Servlet上下文/应用对象)作用域请求范围应用范围生命周期从客户端发出请求开始&#xff0c;到服务器返回响应结束。从Web应用启动&#xff08;部署&#xf…

Java后端工程师如何学AI

Java后端工程师如何学AI 目录 前言为什么Java后端工程师要学习AIAI学习路径规划基础知识体系实践项目建议学习资源推荐学习时间规划常见问题与解决方案职业发展建议总结 前言 随着人工智能技术的快速发展&#xff0c;AI已经不再是计算机科学专业的专属领域。作为Java后端工…

Django REST Framework 中 @action 装饰器详解

概述 action 装饰器是 Django REST Framework (DRF) 中 ViewSet 的一个核心功能&#xff0c;用于定义自定义路由方法。它允许开发者在标准的 CRUD 操作&#xff08;list、create、retrieve、update、destroy&#xff09;之外&#xff0c;创建符合特定业务需求的接口&#xff0c…

【重磅更新】RetroBoard 全面升级,让敏捷回顾更高效、更安全、更贴心!

​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​…

中州养老:华为云设备管理接口开发全流程

需求分析点击同步数据时,要把华为云的数据拉取到我们的系统中对于新增设备操作,实际上这些参数与华为云产品我们添加设备时的参数是一样的表结构设计E-R图数据库字段接口分析对于设备中的数据,我们既要再IOT平台存储,又要在数据库中存储.之所以保存两份数据的原因:IOT平台中只是…

Llama-Factory微调Qwen2.5-VL从数据集制作到部署记录

Llama-Factory微调Qwen2.5-VL从数据集制作到部署记录 电脑环境配置&#xff1a; 1.ubuntu24 2.3090(24G) 3.Cuda12.9 一、数据集制作 我的数据集主要是对图像内容进行描述 1.Label-studio制作数据集 这是最原始的从零开始制作数据集的方法&#xff0c;不建议这样做&#xff01;…

【蓝桥杯真题67】C++数位和为偶数的数 第十五届蓝桥杯青少年创意编程大赛 算法思维 C++编程选拔赛真题解

C++数位和为偶数的数 第十五届蓝桥杯青少年创意编程大赛C++选拔赛真题 博主推荐 所有考级比赛学习相关资料合集【推荐收藏】 1、C++专栏 电子学会C++一级历年真题解析 电子学会C++二级历年真题解析

【计算机网络 | 第11篇】宽带接入技术及其发展历程

文章目录宽带接入技术详解数字传输系统技术演进早期电话网的传输技术演变数字传输系统技术演进&#xff1a;从碎片到统一宽带接入技术 ADSLADSL的基本原理与非对称特性DMT调制技术&#xff1a;多子信道并行传输ADSL接入网组成电话分离器的设计原理与优势ADSL的升级&#xff1a;…

(论文速读)SCSegamba:用于结构裂纹分割的轻量级结构感知视觉曼巴

论文题目&#xff1a;SCSegamba: Lightweight Structure-Aware Vision Mamba for Crack Segmentation in Structures&#xff08;用于结构裂纹分割的轻量级结构感知视觉曼巴&#xff09;会议&#xff1a;CVPR2025摘要&#xff1a;不同场景下的结构裂缝像素级分割仍然是一个相当…

《苏超风云》亮相时尚大赏,成短剧行业发展新风向

当男频短剧凭借《一品布衣》五天横扫10亿播放的数据宣告逆袭&#xff0c;短剧市场格局正经历深刻洗牌。风口之下&#xff0c;头条视听、中皋文旅、国内时尚视觉与短视频创作领域的头部厂牌“大湾视频”携手下场&#xff0c;打造精品男频短剧《苏超风云》&#xff0c;剑指2025年…

HTML5新年元旦网站源码

新年主题网站开发概述 本项目基于HTML5、CSS3与JavaScript技术栈&#xff0c;打造了一个功能丰富、交互体验流畅的新年主题网站&#xff0c;涵盖文化展示、互动娱乐与社交分享三大核心模块&#xff0c;通过现代化前端技术实现沉浸式节日氛围营造。 1.1、核心功能架构 网站采…