从 Word2Vec 到 BERT:AI 不止是词向量,更是语言理解

一、前言

在上篇文章中,我们介绍了Word2Vec以及它的作用,总的来说:

  • Word2Vec是我们理解NLP的第一站

  • Word2Vec将词变成了“向量”—— 终于可以用机器理解词语的相似度

  • 我们获得了例如“国王 - 男人 + 女人 ≈ 女王” 的类比能力

  • 我们可以将Word2Vec这种算法能力,应用到各种创新场景,例如基于Graph的推荐系统,后续如果小伙伴有需要,可以一起深入交流。

但同时也指出了它的不足:

  • 一个词=一个固定向量(静态词向量)

  • 上下文无感知:“苹果”无论是手机还是水果,向量相同

  • 是词的映射,不是对语言的理解

那如果让我们来设计下一代的算法,什么最重要?

——我们需要“能读懂句子”的模型。

接下来我们一步步实现,直至引出bert。

 二、Word2Vec是怎么工作的?

在上文,我们介绍到Word2Vec使用周围词预测中间词来获取词向量能力,这个被称为CBOW,同理也可以用中间词预测周围词,这个称为Skip-Gram。本质来讲,Word2Vec是一个浅层神经网络,结构如下:


from torch import nn
class Word2VecModel(nn.Module):def __init__(self, vocab_size, embedding_dim):"""vocab_size:词总数embedding_dim:超参,词对应的向量维度,例如64、128"""super().__init__()self.embed = nn.Embedding(num_embeddings=vocab_size, embedding_dim=embedding_dim)

最终可训练部分是self.embed部分。

三、我们需要一个分词器

在前文中,我们输入的都是一个一个分好的词,但是呢,有几个问题:

  1. 怎么分词的?
  2. 分词的目的是什么?
  3. 中文怎么分词?英文怎么分词?其他语言怎么分词?
  4. 分词在对整句语义理解上的重要程度是怎样的?

1. 怎么分词的?

我们平时写作时,不像英文每个单词中间有空格,而是一个字一个字连着写直至整句话完成。例如“今天你真漂亮”,我们希望分成 今天 你 真 漂亮

在中文分词研究历史中,有着比较漫长的过程。整体可认为是统计概率建模的过程,比如建立一个巨大的词表,然后通过一堆的算法,例如隐马尔克夫链,建立前词和当前词的转移概率。蹭蹭蹭,我们获得了一个分词模型。哈哈,此处我们不做具体原理讲解。如果需要,最近可着重看HMM和CRF,再往前推,有基于最长词的分词算法。总的来说,统计概率建模,就是获取所有影响分词结果的因素,对其进行建模以及学习其权重。例如针对CRF,本质是学习状态转移概率矩阵、发射概率矩阵,最终形成一个有向词网,节点为词,获取最大概率那条路径,就是分词结果。

现在也有一堆基于神经网络的分词工具,整体都可认为是命名实体标注任务,如果有需要小伙伴,可以一起交流。

如果只是为了工程应用,可使用jieba、HanLP、LAC等。

2. 分词的目的是什么?

我们为什么要分词?不分词行不行,直接一句/段话直接输入给模型不就行了。这里牵扯到对语言建模输入最小粒度问题,可以将“今天你真漂亮”切分成一个一个字,也可以切分成上面的结果,以这个结果作为网络的输入。

OOV(Out-of-Vocabulary)问题,这个小伙伴在体验Word2Vec能力时可能已经发现,针对一些俚语,会发现这个词不在Word2Vec表内。那就导致无法获取这个词的词向量。

3. 中文怎么分词?英文怎么分词?其他语言怎么分词?

有没有一个统一算法,可以支持任意一种语言的分词。有!这个就是大名鼎鼎Bert用到的WordPiece。

注意,如前面所说,分词更偏向是中文领域一个特定的任务,而对于英文,可能就直接按照空格就完成了分词任务。所以,请将分词概念延伸至Tokenization概念,分的词被称为Token,分词的动作称之为Tokenizer。

WordPiece是一种将词分解成更小单元的方法。

具体如何实现此处不涉及。以及现在也有其他tokenizer方法,例如BPE等。

4. 分词在对整句语义理解上的重要程度是怎样的?

严格意义上来讲这里有提升空间,包括目前大模型所使用到的。为什么这么讲,因为分词作为最初输入,其准确率影响后续的计算结果。“南京市长江大桥结婚了。”,这句话是不是没有任何语义歧义,不像“白天鹅在湖中游”,“大学生活好”,“黑暗的夜总会迎来黎明”吧。

至此,模型的输入我们搞定啦。

四、我们需要设计训练任务

在Word2Vec的CBOW模型中,是用周围词预测中心词。我们可以将这个条件延伸下:

  1. 预测中心词这个事,我们将中心词掩盖掉这个事情称为[MASK]。

  2. 为什么非要预测中心词呢?我们完全可以随机掩盖掉一句话中某个词。

例如输入一句话“今天天气真不错”,经过上面tokenizer后,变成了“今天 天气  不错”,随机掩盖掉某个词(例如真),变成了“今天 天气 [MASK] 不错”,那我们的目标是预测[MASK]部分的标签是“真”,由此我们获得了输入与输出。

五、我们需要一个强大的网络

在Word2Vec中,我们的网络结构只有一个nn.Embedding,即词和向量的映射表,整个结构还太简单。那我们再引入一个新的算法架构——Transformer。

有的小伙伴可能提前已经了解过一些深度学习算法,例如LSTM,那会问LSTM不能处理这种序列问题吗?当然,完全可以,至此我们做到了,每个token都有一个上下文相关的向量表示。

到这里我们发明了Masked Language Model(MLM)。

当然bert的预训练不止mask这一个任务,还有被称为NSP(Next Sentence Prediction)任务,即给定两句话A和B,让模型判断B是否是A的下一句。

当然这个任务在后面的研究(例如Roberta)中被证明此任务作用并不大,不过我们知道下就行了。

关于BERT更具体原理讲解,有需要的话后面可一步步实现。

特点

Word2Vec

BERT

向量类型

静态

动态(与上下文相关)

模型结构

浅层神经网络

多层 Transformer

能否理解语境

预训练目标

预测词

Mask + NSP

六、BERT模型有什么用?

这是一个好问题,上面蹭蹭说到了一堆似乎和应用无关的东西,总而言之,BERT的出现:

  1. 我们获得了一个通用的语义理解模型,基于这个模型,我们可以和更多现实应用建立起桥梁。
  2. 降低了算法训练与应用难度,BERT作为一个预训练模型,由于其本身已经获取到通用语言场景下的语义理解能力,那么相关的NLP任务都更为容易做成。例如文本分类、情感分析、命名实体识别、搜索等。

七、如何应用?

Bert作为预训练模型,其本身并不能做太多事情,例如MASK和NSP。我们一般会在Bert模型之后再接一些其他的Layer来做具体任务。下面我放几个应用截图,这些都是Bert可以做到的。如果有感兴趣的我可以一步步实现哦。

與情分析

命名实体/情感分析 

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

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

相关文章

镜像管理(2)Dockerfile总结

一、docker镜像构建方法 commoit :使用 docker commit 意味着所有对镜像的操作都是黑箱操作,生成的镜像也被称为黑 箱镜像,换句话说,就是除了制作镜像的人知道执行过什么命令、怎么生成的镜像,别人根 本无从得知。而且,即使是这个制作镜像的人,过一段时间后也无法记清具…

机器学习第十七讲:PCA → 把100维数据压缩成3D视图仍保持主要特征

机器学习第十七讲:PCA → 把100维数据压缩成3D视图仍保持主要特征 资料取自《零基础学机器学习》。 查看总目录:学习大纲 关于DeepSeek本地部署指南可以看下我之前写的文章:DeepSeek R1本地与线上满血版部署:超详细手把手指南 主…

【Linux庖丁解牛】——进程等待!

1. 进程退出场景 进程退出一般有三种场景: 。代码运行完毕,结果正确 。代码运行完毕,结果错误【比如,我们要对某个文件进行写入,但写入的文件路径出错,代码运行完毕,可是结果出错】 。代码异…

鸿蒙OSUniApp 制作简洁高效的标签云组件#三方框架 #Uniapp

UniApp 制作简洁高效的标签云组件 在移动端应用中,标签云(Tag Cloud)是一种常见的UI组件,它以视觉化的方式展示关键词或分类,帮助用户快速浏览和选择感兴趣的内容。本文将详细讲解如何在UniApp框架中实现一个简洁高效的…

ubuntu14.04/16.06 安装vscode(实测可以用)

地址:https://code.visualstudio.com/updates/v1_38 选择deb 这个版本还支持ubuntu14.04和16.06 sudo dpkg -i code_1.38.1-1568209190_amd64.deb sudo apt-get install -f安装成功,正常使用

WebRTC技术EasyRTC音视频实时通话驱动智能摄像头迈向多场景应用

一、方案背景​ 在物联网蓬勃发展的当下,智能摄像头广泛应用于安防、家居、工业等领域。但传统智能摄像头存在视频传输延迟高、设备兼容性差、网络波动时传输不稳定等问题,难以满足用户对实时流畅交互视频的需求。EasyRTC凭借低延迟、高可靠、跨平台特性…

Java EE进阶1:导读

1.发展历程 2.学习内容 前⾯的课程中,学习的是Java基础,JavaEE主要学习Java的应用,也就是学习Java在企业中是如何应用的 Java更多场景是业务开发,更狭义点可以理解为web开发.所以咱们的学习也是围绕着如何使用Java来做web开发 2.1 什么是Web开发? web&#xff08…

APPtrace 智能参数系统:重构 App 用户增长与运营逻辑

一、免填时代:APPtrace 颠覆传统参数传递模式 传统 App 依赖「邀请码 / 手动绑定」实现用户关联,流程繁琐导致 20%-30% 的用户流失。APPtrace 通过 **「链接参数自动传递 安装后智能识别」** 技术,让用户在无感知状态下完成关系绑定、场景还…

bisheng系列(一)- 本地部署(Docker)

目录 一、导读 二、说明 1、镜像说明 2、本节内容 三、docker部署 1、克隆代码 2、运行镜像 3、可能的错误信息 四、页面测试 1、注册用户 2、登陆成功 3、添加模型 一、导读 环境:Ubuntu 24.04、Windows 11、WSL 2、Python 3.10 、bisheng 1.1.1 背景…

docker介绍与常用命令汇总

docker简介 docker是什么? Docker 是一个开源的应用容器引擎,它可以让开发者将应用与运行环境打包成一个标准的、可移植的容器(Container),在任何地方都可以快速部署和运行,无需关心底层环境是否一致。 …

Android 中拖拽从一个组件到另外一个组件的写法(跨容器拖拽)

在 Android 中,拖拽一个图片(例如 ImageView)到另一个组件(如 LinearLayout、FrameLayout 等容器)涉及以下步骤: 准备工作 源组件:你从哪里开始拖动(如 ImageView)。 目…

火绒互联网安全软件:自主引擎,精准防御

在数字时代,网络安全是每一个用户都必须重视的问题。无论是个人用户还是企业用户,都需要一款高效、可靠的反病毒软件来保护设备免受恶意软件的侵害。今天,我们要介绍的 火绒互联网安全软件,就是这样一款由资深工程师主导研发并拥有…

使用亮数据代理IP+Python爬虫批量爬取招聘信息训练面试类AI智能体(手把手教学版)

文章目录 一、为什么要用代理IP?(重要!!!)二、环境准备(三件套走起)2.1 安装必备库(pip大法好)2.2 获取亮数据代理(官网注册送试用) 三、编写爬虫代码&#x…

Android屏幕采集编码打包推送RTMP技术详解:从开发到优化与应用

在现代移动应用中,屏幕采集已成为一个广泛使用的功能,尤其是在实时直播、视频会议、远程教育、游戏录制等场景中,屏幕采集技术的需求不断增长。Android 平台为开发者提供了 MediaProjection API,这使得屏幕录制和采集变得更加简单…

互联网大厂Java求职面试:Spring AI与大模型交互的高级模式与自定义开发

互联网大厂Java求职面试:Spring AI与大模型交互的高级模式与自定义开发 在当今技术领域,随着AI和大模型技术的广泛应用,如何在复杂的系统架构中高效地集成这些技术成为了各大互联网公司关注的重点。本文将通过一场模拟的面试对话&#xff0c…

MySQL 8.0 OCP 1Z0-908 161-170题

Q161.Examine this command, which executes successfully: cluster.addInstance ( ‘:’,{recoveryMethod: ‘clone’ 1}) Which three statements are true? (Choose three.) A)The account used to perform this recovery needs the BACKUP_ ADMIN privilege. B)A target i…

蓝桥杯1447 砝码称重

问题描述 你有一架天平和 N 个砝码,这 N 个砝码重量依次是 W1,W2,⋅⋅⋅,WN​。 请你计算一共可以称出多少种不同的重量? 注意砝码可以放在天平两边。 输入格式 输入的第一行包含一个整数 N。 第二行包含 N 个整数:W1,W2,W3,⋅⋅⋅,WN​…

金融量化智能体,如何开发一个有效的策略?

原创内容第887篇,专注智能量化投资、个人成长与财富自由。 本周重构了网站,升级了最新的回测引擎,以及升级了论坛。 策略年化210%,夏普比3.47,系统源代码及策略均可下载 年化37.5%,回撤控制在16.8%&…

JavaScript 性能优化:调优策略与工具使用

引言 在当今的 Web 开发领域,性能优化已不再是锦上添花,而是产品成功的关键因素。据 Google 研究表明,页面加载时间每增加 3 秒,跳出率将提高 32%。而移动端用户如果页面加载超过 3 秒,有 53% 的用户会放弃访问。性能…

为 Jenkins添加 Windows Slave远程执行 python项目脚本

测试环境 JAVA JDK 1.7.0_13 (jdk-7u13-windows-i586.exe) Jenkins Win11 64 python项目环境 实践操作 1、新建与配置结点 【系统管理】-> 【管理结点】-> 【新建结点】, 如上,输入结点名称,勾选 【Dumb Slave】,点击【OK】 说明&am…