语言模型及Word2vec与Bert简析

news2024/11/19 2:34:43

语言模型可以对一段文本的合理性概率进行估计,对信息检索,机器翻译,语音识别等任务有着重要的作用。就以前的学习笔记,本文简单总结了NLP语言模型word2vec和bert分享给大家,疏漏之处,望请指出, 后期会详细解析各类语言模型理论及应用,敬请期待。

1. 语言模型简介

语言模型可以对一段文本的合理性概率进行估计,对信息检索,机器翻译,语音识别等任务有着重要的作用。

1.1 语言模型是什么

  • 语言模型的定义

给定一个词序列,W = w1,w2, … , wm,计算这个词序列能够组成一句合理自然语言的联合概率 P(W):

img

将句子的概率分解为各个单词条件概率的乘积,如果文本较长, 条件概率的估算会非常困难(维数灾难),所以就规定当前词只和它前面的n个词有关,与更前面的词无关,每一个词只基于其前面N个词计算条件概率 —— N-gram语言模型,一般N取1到3之间。

  • 语言模型的通俗理解

给定一组单词序列,将单词排列组合成一段文本,判断该文本是否是一句人话:

单词序列:[我, 狗, 被, 了, 咬]

组合成句:

(1)我被狗咬了 P=0.5

(2)被我狗咬了 P=0.2

(3)狗被我咬了 P=0.03

1.2 语言模型的分类

常用的语言模型主要有两类:统计语言模型和神经网络语言模型

  • 统计语言模型

HAL (Hyperspace Analogue to Language method)

LSA (Latent Semantic Analysis)

N-Gram

  • 神经语言模型

CBOW (Continuous Bag-Of-Words Model)

Skip-gram (Continuous Skip-gram Model)

2. 神经语言模型 Word2vec 与 Bert

神经语言模型可直接用于NLP任务,随着深度学习的快速发展,语言模型也更多的应用于NLP模型的预训练,常用的预训练模型有:

  • Word2vec (Google)
  • Glove (Facebook)
  • ELMO (AllenNLP艾伦人工智能研究所)
  • GPT (OpenAI)
  • BERT (Google)
  • RoBERTa (FaceBook)
  • AlBert (Google)
  • MT-DNN (微软)

2.1 词的向量化

  • 词集法(one-hot):统计文档总词数建立长度为N的字典,将单词表示为一个N维高度稀疏的向量,词对应位置元素值为1,其他全为0;
  • 词袋法:统计文档总词数N,将单词表示为一个N维高度稀疏的向量,词对应位置元素为词在该篇文档中的词频,其他位置元素值为0;
  • 词的分布式表示法:将词表示为低维度、稠密的向量,主要是通过神经网络训练语言模型得到,如word2vec、glove、BERT等。

2.2 Word2vec

2.2.1 Word2vec的训练方法

顾名思义Word2Vec就是把单词转换成向量,它本质上是一种单词聚类的方法,是实现单词语义推测、句子情感分析等目的一种手段。

Word2Vec 有两种训练方法:用语言模型 CBOW 和 Skip-gram。

1)CBOW的核心思想是从一个句子里面把一个词抠掉,用这个词的上文和下文去预测被抠掉的这个词;

2)Skip-gram和 CBOW 正好反过来,输入某个单词,要求网络预测它的上下文单词。

训练完成之后,我们一般不需要用来做预测,而是取出模型input层与projection 层之间的参数,来作为我们每个词的向量表示(词向量),用于nlp下游任务的输入或用于NLP模型的词嵌入。

image-20230517190701136

CBOW模型:

  • **Input:**输入层,上下文各词的one-hot向量表示;
  • **Projection:**投影层,将输入各词对应的词向量求和做累加;
  • **Output:**输出层,预测为每个词的概率列表。

2.2.2 Word2vec的优缺点

  • 优点

(1)将高度稀疏的one-hot词向量映射为底维度的语义向量,有效解决了one-hot词向量高稀疏、高冗余的缺点;

(2)能够较完整的表示词的语义信息,有效解决了one-hot词向量无语义等缺点。

  • 缺点

词的静态表征,不能解决同义词问题,如水果中的“苹果”和苹果公司的“苹果”,词向量表示是一样的,而实际上这两词的意思完全不一样。

2.3 Bert

针对语言理解的深度双向Transformers模型的预训练:论文《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》

img

2.3.1 Bert的输入表征

img

  • Token Embedding:==词特征(词向量)==的嵌入,针对中文,目前只支持字特征嵌入;
  • Segment Embedding:词的句子级特征嵌入,针对双句子输入任务,做句子A,B嵌入,针对单句子任务,只做句子A嵌入;
  • Position Embedding:词的位置特征,针对中文,目前最大长度为 512;

2.3.2 Bert 的预训练

Bert 的预训练包含两项任务:语言模型和句子对关系判定。

  • **双向语言模型:**随机将输入中15%的词遮蔽起来,通过其他词预测被遮盖的词(这就是典型的语言模型),通过迭代训练,可以学习到词的上下文特征、句法特征等,保证了特征提取的全面性,这对于任何一项NLP任务都是尤为重要。
  • **句子对判定:**输入句子A和句子B,判断句子B是否是句子A的下一句,通过迭代训练,可以学习到句子间的关系,这对于文本匹配类任务显得尤为重要。

2.3.3 Bert 的特点

  • **真正的双向:**使用双向 Transformer,能同时利用当前单词的上下文信息来做特征提取,这与双向RNN分别单独利用当前词的上文信息和下文信息来做特征提取有本质不同,与CNN将上下文信息规定在一个限定大小的窗口内来做特征提取有本质不同;
  • **动态表征:**利用单词的上下文信息来做特征提取,根据上下文信息的不同动态调整词向量,解决了word2vec一词多义的问题
  • **并行运算的能力:**Transformer组件内部使用多头注意力(Multi-headed attention)机制,能同时并行提取输入序列中每个词的特征,这与RNN依赖于时间单向串行提取特征有本质区别;
  • **易于迁移学习:**使用预训练好的BERT,只需加载预训练好的模型作为自己当前任务的词嵌入层或者直接用来做NLP任务,不需对代码做大量修改或优化。

2.3.4 Bert 怎么用

img

可以将Bert看做一个文本编码器,可以应用在各类NLP上下游任务网络构建中作为文本嵌入层使用。如上图(a)文本匹配任务;(b)文本分类任务;(c)抽取式问答任务;(d)序列标注任务。其中Bert微调的具体用法:

  • 序列标注
  1. 加载预训练Bert模型;
  2. 取输出字向量:
    embedding = bert_model.get_sequence_output();
  3. 然后构建后续网络。
  • 文本分类和文本匹配任务
  1. 加载预训练BERT模型;
  2. 取输出句向量:
    output_layer=bert_model.get_pooled_output();
    rt_model.get_sequence_output();
  3. 然后构建后续网络。
  • 文本分类和文本匹配任务
  1. 加载预训练BERT模型;
  2. 取输出句向量:
    output_layer=bert_model.get_pooled_output();
  3. 然后构建后续网络。

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

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

相关文章

Go语言的简介和环境搭建

Go语言的简介和环境搭建 带你了解什么是Go语言 如何安装和配置Go的开发环境 静态强类型,编译型语言!!! 1.简介 1.1介绍 Go 也称为 Golang,两个是一个东西。谷歌弄得。创造者都是大佬,所以说这个编程语言很…

PSP - AlphaFold2 Multimer 的 Heteromer (异聚体) MSA 逻辑

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://blog.csdn.net/caroline_wendy/article/details/130733737 同源多聚体 (Homomer) 是由相同的蛋白质亚基组成的,而异源多聚体 (Heteromer) 是由不同的蛋白质亚基组成的。同源多聚体的亚基之间通常有对称的相…

BFT 最前线 | OpenAI开放网络浏览和插件;“360AI商店”上线;Bing市场份额不升反降;亚马逊机器人配送中心投产

原创 | BFT机器人 AI视界 TECHNOLOGY NEWS 01 OpenAI将向所有ChatGPT Plus用户推出网络浏览和插件 OpenAI将向所有ChatGPT Plus用户推出网络浏览和插件近日,OpenAI发文称,将在本周(5.15-5.21日)内向所有ChatGPT Plus用户推出网络…

【Python scikit-learn】零基础也能轻松掌握的学习路线与参考资料

Python是一种广泛使用的编程语言,随着数据科学领域的不断发展,Python成为了数据科学的主要工具之一。scikit-learn是Python中一款非常流行的机器学习库,它为广大科学家和工程师提供了一种简单而有效的方法来解决机器学习问题。 本文将从以下…

客服软件强攻略——改善客户自助服务

客户自助服务相对容易采用并集成到您现有的客户服务产品中。也就是说,任何自助服务计划都应该经过充分研究,跟踪明确的目标和成功指标,以确保其成功。 有效的自助服务通常可以通过软件工具形成,比如SaleSmartly(ss客服…

微服务保护(线程隔离、降级、熔断)

线程隔离 线程隔离有两种方式实现: 线程池隔离信号量隔离 线程池隔离 假设服务A依赖于服务B和服务C,那么服务A就会分别对服务B和服务C创建线程池,当有请求进来时不会使用服务A本身的线程,而是到对应的线程池中取一个线程来调用feign的客户…

ViLT论文精读笔记

ViLT论文精读笔记 0.摘要1.引言2.背景知识(小综述)2.1对VLP模型分类2.2模态的融合2.3融合前特征的抽取 3.模型方法3.1预训练目标函数:3.1.1 Image Text Matching:3.1.2 Masked Language Modeling3.1.3 Masked Image Modeling 3.2W…

本周刷题记录

截至周三刷了六道题 题目1: 这是个交互题,目前遇到的交互题都是用二分解决的。 本题使用二分精准定位拥有重量为2的石头的堆。 为避免时间超限,应该再输入数据时计算好前缀和。 二分过程中,如果哪边的重量总和不等于石头数&…

关键词采集软件-关键词自动生成器

网站关键词对于SEO优化至关重要,在搜索引擎排名和流量中扮演着重要的角色。而147seo关键词生成软件可以帮助用户更好地发现与他们的业务和目标相关的关键词和话题。其中的147SEO关键词挖掘软件是其核心功能之一,能够自动批量实时挖掘关键词和短语&#x…

day33_css

今日内容 零、 复习昨日 一、CSS 零、 复习昨日 见代码 一 、引言 1.1CSS概念 ​ 层叠样式表(英文全称:Cascading Style Sheets)是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文…

以转账案例说明Spring事务

文章目录 1 Spring事务简介1.1 相关概念介绍1.2 转账案例-需求分析1.3 转账案例-环境搭建步骤1:准备数据库表步骤2:创建项目导入jar包步骤3:根据表创建模型类步骤4:创建Dao接口步骤5:创建Service接口和实现类步骤6:添加jdbc.properties文件步骤7:创建JdbcConfig配置类步骤8:创建…

Istio零信任安全架构设计

主要分为几个模块 安装安全概念整体安全架构源码 1.安装istio (windows环境) windows安装Rancher的步骤 : https://docs.rancherdesktop.io/getting-started/installation, docker desktop开始面向中大型企业收费: https://baijiahao.baidu.com/s?id1709665495660071676&…

CVE-2022-39197(Cobalt Strike XSS <=4.7)漏洞复现(超详细)

0x00 漏洞概述 2022年09月22日,360CERT监测发现了Cobalt Strike远程代码执行漏洞,漏洞编号为CVE-2022-39197,漏洞等级:严重,漏洞评分:9.8   Cobalt Strike(也称CS)由美国Red Team开…

互联网内卷严重?你咋不看看其他行业呢?无非是三十晚上无月亮,大家都一样

一千个人眼中有一千个哈姆雷特,互联网行业就像一座围城,城外的人想进来,城内的人要么卷要么躺要么润 ​ 真实的感受你可以现在约几个面试体验一下。内卷到什么程度? 产品和运营岗,业务经验不完全对口简历都过不了&am…

洛谷P1036题解

一、问题引出 [NOIP2002 普及组] 选数 题目描述 已知 n n n 个整数 x 1 , x 2 , ⋯ , x n x_1,x_2,\cdots,x_n x1​,x2​,⋯,xn​&#xff0c;以及 1 1 1 个整数 k k k&#xff08; k < n k<n k<n&#xff09;。从 n n n 个整数中任选 k k k 个整数相加&…

nginx keepalive 高可用原理和实操

文章目录 前言一、nginxkeepalive搭建高可用服务方案&#xff1f;二、方案解析1.keepalive是什么2.nginx是什么 三、keepalive与nginx环境安装四、高可用配置实例总结 前言 一、nginxkeepalive搭建高可用服务方案&#xff1f; 使用nginx-keepalived双机热备机制&#xff0c;vi…

Java-锁相关

线程不安全的原因 1.调度器随机调度,抢占式执行(无能为力) 举个例子 有一个int变量 叫count 就俩线程同时count一万次 结果应该为两万 可多次运行程序 这结果每次都不一样(而且小于2w) 是为什么呢 因为count这行代码是分三步运行的 load 把数据读到cpu add 在cpu寄存器实现加法…

一、计算机系统基础

// 本章节内容根据下列代码的生命周期来讲解计算机系统的各个部分 hello.c #include <stdio.h>int main {printf("hello, world\n");return 0; }文章目录 1.1信息 位 上下文1.2程序的编译过程1.3系统的硬件组成1.4运行hello程序1.5高速缓存1.6操作系统管理硬…

小程序用什么开发?

近年来&#xff0c;随着智能手机的普及和移动互联网的发展&#xff0c;小程序成为了一种备受关注的新型应用。那么&#xff0c;小程序用什么开发呢&#xff1f; 首先&#xff0c;小程序可以使用多种技术进行开发&#xff0c;其中比较流行的有两种方式&#xff1a;一种是借助微…

( 背包问题) 1049. 最后一块石头的重量 II ——【Leetcode每日一题】

❓1049. 最后一块石头的重量 II 难度&#xff1a;中等 有一堆石头&#xff0c;用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。 每一回合&#xff0c;从中选出任意两块石头&#xff0c;然后将它们一起粉碎。假设石头的重量分别为 x 和 y&#xff0c;且 x &…