零、自然语言处理开篇

目录

0、NLP任务的基础——符号向量化

0.0 词袋模型

0.1 查表/One-hot编码

0.2 词嵌入模型/预训练模型

0.2.0 Word2Vec

(0)CBOW

(1)Skip-gram

0.2.1 GloVe

0.2.2 WordPiece

0.2.3 BERT

0.2.4 ERNIE


NLP自然语言处理,目的是实现计算机对人类语言的智能理解和应用,使得计算机可以像人类一样与人类语言进行交互、分析和生成文本。——By ChatGPT

其主要思想是将人类语言文本转化为数学符号,进而利用统计学、概率学以及各类模型方法完成分类、回归等。

NLP处理常见套路其主要数据获取(不会写爬虫的nlper不是一个好程序员)-> 数据清洗-> 特征工程 -> 模型选取 -> 模型训练 ->效果评估 -> 上线

NLP的常见任务:0、本文向量化;1、文本分类;2、序列标注;3、句子关系判断;4、生成式任务;5、知识图谱;6、大语言模型;7、...。

NLP的常见应用场景:句子情感分析、话题分析、舆情分析、搜索、中文分词、推荐、问答系统、聊天机器人...。

0、NLP任务的基础——符号向量化

文字是符号,无法直接被计算机识别,需要转换为计算机模型能够识别的编码,最常见的就是转换为向量。

0.0 词袋模型

在传统检索和文档分类中较为常用,将词语出现的词频/TF-IDF值作为向量值,例如有两篇文档

Doc1:虽然词语无法直接转化为数值->[虽然, 词语, 无法, 直接, 转化, 为, 数值]

Doc2:统计文本中词语的出现情况->[统计, 文本, 中, 词语, 的, 出现, 情况]

合并两个文档中的所有词,[虽然, 词语, 无法, 直接, 转化, 为, 数值,统计, 文本, 中, 的, 出现, 情况 ],统计频率后,可以将上面两篇文档表示为如下向量

Doc1:[1, 2, 1, 1, 1, 1, 1,0, 0, 0, 0, 0, 0 ]

Doc2:[0, 2 , 0, 0, 0, 0, 0,1, 1, 1, 1, 1, 1 ]

词的顺序对传统机器学习影响较小,如聚类、cosin系数、jaccard系数等的计算,均是按位计算求和平均,因此位次重要程度不高。

不足:无法展示词的上下文信息。

0.1 查表/One-hot编码

指定一个包含较为完整的词典,文档转换为向量时,纬度和词表大小相同,向量中若一个词出现,则该位置数值为1,反之为0。

例如,我们有一个13个词的词典:[虽然, 词语, 无法, 直接, 转化, 为, 数值,统计, 文本, 中, 的, 出现, 情况 ],

那么对于一个这样的Doc“虽然词语无法直接转化为数值 ”,转换方式可见如下两种:

直接查表:[虽然, 词语, 无法, 直接, 转化, 为, 数值] -> [1,1,1,1,1,1,1,0, 0, 0, 0, 0, 0]

One-hot编码:虽然->[1,0,0,0,0,0,0,0,0,0,0,0,0],词语->[0,1,0,0,0,0,0,0,0,0,0,0,0],无法->[0,0,1,0,0,0,0,0,0,0,0,0,0]...,数值 ->[0,0,0,0,0,0,0,0,0,0,0,0,1]

不足,词表大的话向量过于稀疏,若直接用于训练效率低。

0.2 词嵌入模型/预训练模型

为解决无法联系上下文和向量稀疏问题,提出了一种Word Embeddings的方法,它是一种利用神经网络将词汇映射到低维实数向量的方法。

0.2.0 Word2Vec

参考文献:Mikolov T, Chen K, Corrado G, et al. Efficient estimation of word representations in vector space[J]. arXiv preprint arXiv:1301.3781, 2013.

(0)CBOW

CBOW模型将上下文的单词作为输入,预测中心单词。适合大语料库,适合高频词的向量化,因为更多依赖上下文进行预测。

输入层:一个个的单词one-hot编码的张量1*V,V表示词表的大小。

隐层:V*N的隐层权重张量,也称为word-embedding层,N表述维度,w2v一般是128维。输入层和隐层相乘,会得到一个C*N的张量,C为词的个数,将这C个词相加,得到一个1*N的张量。(隐藏的输出即可作为词嵌入)

输出层:构建一个N*V的输出层矩阵,将隐层的输出1*N与这个N*V相乘,得到一个1*V的张量(可经过softmax),这个就是通过中心词得到的上下文词的概率矩阵。

训练效率高、高词频词效果更好。

(1)Skip-gram

Skip-gram模型将中心单词作为输入,预测上下文单词。适合语料库较小的情况,对于低频词有更好的表现。因为他对一个词需要预测其上下多个词的结果,相当于这个词计算了多次,更加准确。

输入层:中心词转换为1个1*V的one-hot张量,V表示词表大小。

隐层:隐层权重为V*N,N为维度,一般为128维。经过隐层后,变成一个1*N的张量(隐藏的输出即可作为词嵌入)。

输出层:构建C个N*V的输出层权重张量,C表示上下文中词的数量,最后输出C个1*V的张量(可经过softmax),即代表由中心词推理出的上下文的结果。

Skip-gram一般使用一个滑动窗口,默认是5,即中心词前后各2个词。

小规模数据集、生僻字效果好

Word2Vector相比1-2两种转换方式,可以捕捉语义信息,例如同义词信息,上下文相似的两个词,它们的词向量也应该相似,且训练效率相对较高。

0.2.1 GloVe

参考文献:Pennington J, Socher R, Manning C D. Glove: Global vectors for word representation[C]//Proceedings of the 2014 conference on empirical methods in natural language processing (EMNLP). 2014: 1532-1543.

共现矩阵+基于窗口词的预测

I like deep learning.	
I like NLP.	
I enjoy flying

共现矩阵

概率矩阵

已知ice和steam这两个词在语料中出现的频率,这两个词被视为目标词(target words) 。此时,暂且不直接去求解这两个词之间的共现关系,而是基于这两个词的频率,去探索一下给定这两个目标词的情况下,其他词的条件概率是一个什么情况,这里的k就是其他词。

首先,我们计算给定单词ice的情况下,单词k出现的频率,也就是说,k出现在i的上下文中的概率是多少。这个条件概率记做P(k|ice),P(k|ice) = X k,ice / X ice,X k, ice是k和ice在同一个context中出现的次数,X ice为ice出现的次数。同理,我们计算P(k|steam),计算方法一样。这里的k可以是字典中的任何一个单词。

0.2.2 WordPiece

参考文献:Kudo T. Subword regularization: Improving neural network translation models with multiple subword candidates[J]. arXiv preprint arXiv:1804.10959, 2018.

tokenize的常用方法,输入bert和ernie前都会经过这一步将词进行初步切词,输出子词序列。然后根据子词的id生成向量。该方法可以解决OOV(词不在词表)的问题。

训练集的词汇: old older oldest smart smarter smartest
word-level 词典: old older oldest smart smarter smartest 长度为 6
subword-level 词典: old smart er est 长度为 4
0.2.3 BERT

参考文献:Devlin J, Chang M W, Lee K, et al. Bert: Pre-training of deep bidirectional transformers for language understanding[J]. arXiv preprint arXiv:1810.04805, 2018.

0)Bidirectional Encoder Representation from Transformers,结构如下:

自编码(Auto-Encoding)语言模型,Autoencoding Language Modeling,自编码语言模型:通过上下文信息来预测当前被mask的token,代表有BERT、Word2Vec(CBOW)等.它使用MLM做预训练任务,自编码预训模型往往更擅长做判别类任务,或者叫做自然语言理解(Natural Language Understanding,NLU)任务,例如文本分类,NER等。

自回归(Auto-Regressive)语言模型,Aotoregressive Lanuage Modeling,自回归语言模型:根据前面(或后面)出现的token来预测当前时刻的token,代表模型有ELMO、GTP等,它一般采用生成类任务做预训练,类似于我们写一篇文章,自回归语言模型更擅长做生成类任务(Natural Language Generating,NLG),例如文章生成等。

1)输入

参考:BERT的3个Embedding的实现原理_token embeddings-CSDN博客

一个长度为n的输入序列(n表示词组个数,token数),一般是512

Token Embeddings:采用wordpiece对文本进行切割成一个个子词,经过embedding后每一个子词输出为768维的向量 (1, n, 768)

Segment Embeddings:切割句子用的(1, n, 768)

Position Embeddings:用于标记词在句子中的位置,(1, n, 768)

整个输入是一个1*512*768的张量。

2)中间层

12个transformer的encoder,每个head是64个神经元,也就是H=768,所以,在transformer的encoder里,单个的的Wq,Wk,Wv都是768*64的矩阵,那么Q,K,V则都是512*64的矩阵,Q,K_T相乘后的相关度矩阵则为512*512,归一化后跟V相乘后的z矩阵的大小则为512*64,这是一个attention计算出的结果。12个attention则是将12个512*64大小的矩阵横向concat,得到一个512*768大小的多头输出,这个输出再接一层768的全连接层,最后就是整个muti-head-attention的输出了,如图4所示。整个的维度变化过程如下图所示:

3)输出

768维向量

BERT这种encoder-only,因为它用masked language modeling预训练,不擅长做生成任务,做NLU一般也需要有监督的下游数据微调;相比之下,decoder-only的模型用next token prediction预训练,兼顾理解和生成,在各种下游任务上的zero-shot和few-shot都很好。

总体参数量(输入权重矩阵、transformer的权重矩阵等等)约1亿左右。

0.2.4 ERNIE

参考文献:Sun Y, Wang S, Li Y, et al. Ernie: Enhanced representation through knowledge integration[J]. arXiv preprint arXiv:1904.09223, 2019.

BERT 模型主要是聚焦在针对字或者英文word粒度的完形填空学习上面,没有充分利用训练数据当中词法结构,语法结构,以及语义信息去学习建模。比如 “我要买苹果手机”,BERT 模型 将 “我”,“要”, “买”,“苹”, “果”,“手”, “机” 每个字都统一对待,随机mask,丢失了“苹果手机” 是一个很火的名词这一信息,这个是词法信息的缺失。

针对上面这个问题,ERNIE对训练数据中的词法结构,语法结构,语义信息进行统一建模

ERNIE在训练过程前,会对句子进行关键短语切割、命名实体识别等,通过有针对性的mask掉这些重要信息,增强模型的学习能力。

模型结构基本和bert一致,差别不大。

附:ernie3.0简单介绍

分层训练,universal representation是基础特征模型,task-specific representation是任务模块,可用于分类、生成等

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

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

相关文章

Java 的 System 类常用方法介绍

Java 中的 System 类是一个final类,它提供了与系统相关的属性和方法。它是一个内置的类,可以直接使用,不需要实例化。System 类提供了标准输入、标准输出和错误输出流,以及对外部定义的属性和系统环境的访问。下面是 System 类的一…

LCR 132. 砍竹子 II

解题思路&#xff1a; 由于数量级较大&#xff0c;需要使用long以及快速幂求余 下图便于理解快速幂求余 class Solution {public int cuttingBamboo(int bamboo_len) {if(bamboo_len < 3) return bamboo_len - 1;int b bamboo_len % 3, p 1000000007;long rem 1, x 3;f…

【PHP+代码审计】PHP基础——数据类型

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【Java、PHP】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收…

012集——显示高考天数倒计时——vba实现

以下代码实现高考倒计时&#xff1a; Sub 高考倒计时() 高考日期 CDate("06,07," & Year(Date)) If Date > 高考日期 Then高考日期 CDate("06-07-" & Year(Date) 1) End If 年月日 Year(Date) & "年" & Month(Date) &am…

Springboot+vue的项目申报管理系统(有报告)。Javaee项目,springboot vue前后端分离项目。

演示视频&#xff1a; Springbootvue的项目申报管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot vue前后端分离项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09…

低密度奇偶校验码LDPC(九)——QC-LDPC译码器FPGA全并行设计

往期博文 低密度奇偶校验码LDPC&#xff08;一&#xff09;——概述_什么是gallager构造-CSDN博客 低密度奇偶校验码LDPC&#xff08;二&#xff09;——LDPC编码方法-CSDN博客 低密度奇偶校验码LDPC&#xff08;三&#xff09;——QC-LDPC码概述-CSDN博客 低密度奇偶校验码…

蓝牙系列七:开源蓝牙协议栈BTStack数据处理

继续蓝牙系列的研究。 在上篇博客,通过阅读BTStack的源码,大体了解了其框架,对于任何一个BTStack的应用程序都有一个main函数,这个main函数是统一的。这个main函数做了某些初始化之后,最终会调用到应用程序提供的btstack_main,在btstack_main里面首先做一些初始化,然后…

C语言指针——常量字符串和 变量字符串

常量字符串和 变量字符串 常量字符串和变量字符串是在编程中常见的两种字符串类型&#xff0c;它们有以下区别&#xff1a; 值的不可变性&#xff1a;常量字符串的值是不可变的&#xff0c;一旦被定义&#xff0c;就不能修改。而变量字符串的值是可变的&#xff0c;可以随时修…

重建大师6.2版本的建模效果出现下图中模糊的情况,是什么原因?

可能是因为坐标原点设置的不对&#xff0c;图例中的三角网都出现了精度损失的问题。 坐标原点设置的具体操作&#xff1a;提交产品后&#xff0c;在弹出的界面&#xff0c;可以设定坐标原点。 重建大师是一款专为超大规模实景三维数据生产而设计的集群并行处理软件&#xff0…

C语言之练手题

题目1&#xff1a; 思路&#xff1a;我们定义两个变量left和right分别为数组的左端下标和右端下标。 左端下标的元素为奇数时&#xff0c;left继续往前走&#xff0c;为偶数时就停下 右端下标的元素为偶数时&#xff0c;right- -往回走&#xff0c;为奇数时停下 停下后对应的元…

(3)应用与信息

文章目录 前言 3.1 FlightDeck FrSky发射器应用程序 3.2 MAVLink2数据包签名(安全) 3.3 MAVLink高延迟协议 3.4 无线地面站连接中继器 1 概述 2 组件 3 设置 3.5 遥测无线电区域条例 3.6 用于OpenTX的Yaapu遥测脚本 前言 FlightDeck FrSky Transmitter AppMAVLink2 …

Xmind拿来主义快速高效,Xmind思维导图模板合集

一、素材描述 本套Xmind模板&#xff0c;大小153.57M&#xff0c;共有310个文件。 二、素材目录 01-学习模版&#xff08;46套模板&#xff09; 02-知识结构&#xff08;88套模板&#xff09; 03-生活计划&#xff08;26套模板&#xff09; 04-商务模版&#xff08;44套模…

就业班 2401--3.8 Linux Day14--阿帕奇+LNMP(编译安装)

一、WEB服务器 ^世上最重要的事&#xff0c;不在于我们在何处&#xff0c;而在于我们朝着什么方向走。^ 1、WEB服务简介 # 目前最主流的三个Web服务器是Apache、Nginx、 IIS。 - WEB服务器一般指网站服务器&#xff0c;可以向浏览器等Web客户端提供网站的访问&#xff0c;让全…

20-Java备忘录模式 ( Memento Pattern )

Java备忘录模式 摘要实现范例 备忘录模式&#xff08;Memento Pattern&#xff09;保存一个对象的某个状态&#xff0c;以便在适当的时候恢复对象 备忘录模式属于行为型模式 摘要 1. 意图 在不破坏封装性的前提下&#xff0c;捕获一个对象的内部状态&#xff0c;并在该对…

JVM 的垃圾回收机制以及垃圾回收算法的详解

目录 1、JVM 的垃圾回收机制 2、识别垃圾 2.1、引用计数 2.2、可达性分析 3、垃圾回收算法 3.1、标记-清除 3.2、复制算法 3.3、标记-整理 4、分代回收 1、JVM 的垃圾回收机制 对于&#xfeff;程序计数器&#xfeff;、&#xfeff;虚拟机栈&#xfeff;、&#xfe…

CSS顶部与JS后写:网页渲染的奥秘

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

【Qt】不透明指针(Opaque Pointer)在Qt源码中的应用

目录 什么是不透明指针&#xff08;Opaque Pointer&#xff09;不透明指针在Qt代码中的应用Qt中与不透明指针相关的一些宏 什么是不透明指针&#xff08;Opaque Pointer&#xff09; GeeksforGeeks中给的定义如下&#xff1a; An opaque pointer is a pointer that points to …

golang 注释插件

Goanno插件 自动生成golang注释,该插件为 Intellij/Goland 中的 golang 提供自动生成注释 如何使用&#xff1f; control command / (for windows: control alt /)&#xff08;生成注释&#xff09;Right click -> Generate -> Goanno&#xff08;生成注释&#x…

数据结构之队列详解(C语言手撕)

&#x1f389;个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名乐于分享在学习道路上收获的大二在校生 &#x1f648;个人主页&#x1f389;&#xff1a;GOTXX &#x1f43c;个人WeChat&#xff1a;ILXOXVJE &#x1f43c;本文由GOTXX原创&#xff0c;首发CSDN&…

ModuleNotFoundError: No module named ‘sklearn.cross_validation‘

一、问题分析 ModuleNotFoundError: No module named sklearn.cross_validation 英文先翻译一遍&#xff0c;模块未找到问题&#xff0c;这里涉及到sklearn这个模块&#xff0c;Sklearn &#xff08;全称 SciKit-Learn&#xff09;&#xff0c;是基于 Python 语言的机器学习工…