零、自然语言处理开篇

目录

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是任务模块,可用于分类、生成等

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

投放项目到github仓库(代码集合)

1 假设你的项目文件夹为Project1 ,那么代开Project1后 右键选择打开Git Bash 2输入初始化本地仓库 git init 3输入git add . (.表示全部,当然也可以部分选取,请自行百度) 4输入 git remote add origin https://github.com/********.git(网…

GitHub和Gitee的基本使用和在IDEA中的集成

文章目录 【1】GitHub1.创建仓库2.增加和修改文件3.创建分支4.删除仓库5.远程仓库下载到本地 【2】Gitee1.创建仓库2.远程仓库下载到本地. 【3】IDEA集成GitHub【4】IDEA集成Gitee1.在Gitee中修改,同步到本地2.从Gitee中下载项目 【1】GitHub 1.创建仓库 先登陆这…

LeetCode每日一题之 寻找数组中心下标

题目介绍: 题目链接:. - 力扣(LeetCode) 算法原理: 这道题仍然可以使用前缀和的思想来求解,不理解基础前缀和模板的可以看我前面的博客,上图中0-2号位元素的和可以很好地用前缀和数组求出,而后…

系统安全保证措施-word

【系统安全保证措施-各支撑材料直接套用】 一、 身份鉴别 二、 访问控制 三、 通信完整性、保密性 四、 抗抵赖 五、 数据完整性 六、 数据保密性 七、 应用安全支撑系统设计 软件全套资料下载进主页。

智慧公厕系统的运作过程

智慧公厕是一种新型的未来城市公共厕所,通过物联网、互联网、大数据、云计算、自动化控制等技术,实现公共厕所使用、运营、管理、养护的全过程全方位信息化。 那么,智慧公厕是如何运作的?智慧公厕的运作过程包括什么技术&#xf…

广度优先搜索和深度优先搜索

广度优先搜索 广度优先搜索(Breadth-First-Search,BFS)类似于二叉树的层序遍历算法(借助队列),其基本思想是:首先访问起始顶点,接着由v出发,依次访问v的各个未访问过的邻…

【LeetCode: 212. 单词搜索 II - dfs】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

基于SSM框架的商场导视系统设计与实现

目 录 摘 要 1 Abstract 2 引 言 3 1 系统开发相关技术 5 1.1 框架技术 5 1.1.1Spring框架 5 1.1.2Mybatis框架 5 1.1.3SpringMVC框架 6 1.2 MySQL数据库 7 1.3前端技术 7 1.3.1ECharts图表技术 7 1.3.2bookstorp框架技术 8 1.4 本章小结 8 2 系统需求分析 9 2.1 系统需求实现…

ThreadLocal源码分析

简介 ThreadLocal是JDK提供的,支持线程本地变量。也就是说,如果我们创建了一个ThreadLocal变量,则访问这个变量的每个线程都会有这个变量的一个本地副本。如果多个线程同时对这个变量进行读写操作时,实际上操作的是线程自己本地内…

内存映射实现父子进程通信

创建内存映射区: void *mmap(void *addr ,size_t length,int prot,int flags,int fd,off_t offset); 参数: addr 指定映射区的首地址。通常NULL,表示让系统自动分配length 共享内存映射区的长度prot 共享内存的读写属性 PROT_READ PR…

电脑资料管理软件(5个高效批量管理电脑资料的方法)

企业电脑资料管理是企业一大难题,为什么这样说? 首先,企业电脑资料的数量庞大且种类繁多。 其次,电脑资料的安全性和保密性要求高。 再者,电脑资料的管理涉及到多个部门和员工的协作。 ...... 针对此类情况很多企业…

基于深度视觉实现机械臂对目标的识别与定位

机械臂手眼标定 根据相机和机械臂的安装方式不同,手眼标定分为眼在手上和眼在手外两种方式,双臂机器人的相机和机械臂基座的相对位置固定,所以应该采用眼在手外的手眼标定方式。 后续的视觉引导机械臂抓取测试实验基于本实验实现&#xf…

Chatgpt异常10秒恢复大法--亲测有效

Chatgpt异常10秒恢复大法--亲测有效! 这几天有没有朋友GPT界面正常,打字不回复?各种恼(我本人)今天偶然看到群友讨论,10秒钟恢复了! 极简步骤:Chorme界面按F12--应用--存储--清楚缓存搞定! 更多资料: 极简步骤:Chorme界面按F12--应用--存储-…

GSM8K数据集分享

来源: AINLPer公众号(每日干货分享!!) 编辑: ShuYini 校稿: ShuYini 时间: 2024-3-3 先进的语言模型可以在许多任务上与人类表现相媲美,但它们仍然难以执行多步骤数学推理任务。为此OpenAI团队创建了一个高质量、语言多…

Centos安装Jenkins

1、更新系统 (1)更新下系统 sudo yum -y update 安装用于下载java 17二进制文件的wget命令行工具 sudo yum -y install wget vim 2、卸载centos自带的jdk 由于我们安装的版本比较高,需要jdk17,卸载centos自带的jdk。用 下面的…

阿里云DSW做AI绘画时的显卡选择A10?V100?

V100是Volta架构,A10是Ampere架构,架构上讲A10先进点,其实只是制程区别,用起来没区别。 V100是HBM的内存读取,带宽大,但是DDR5的。 二块卡都是全精度为主的算力卡,半精度优势不明显。 需要用…

3/7—21. 合并两个有序链表

代码实现: 方法1:递归 ---->难点 /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ struct ListNode* mergeTwoLists(struct ListNode *list1, struct ListNode *list2) {/*1.如果l1为…

前端知识点、技巧、webpack、性能优化(持续更新~)

1、 请求太多 页面加载慢 (webpack性能优化) 可以把 图片转换成 base64 放在src里面 减少服务器请求 但是图片会稍微大一点点 以上的方法不需要一个一个自己转化 可以在webpack 进行 性能优化 (官网有详细描述)

Yolov8有效涨点,添加多种注意力机制,修改损失函数提高目标检测准确率

目录 简介 CBAM注意力机制原理及代码实现 原理 代码实现 GAM注意力机制 原理 代码实现 修改损失函数 YAML文件 完整代码 🚀🚀🚀订阅专栏,更新及时查看不迷路🚀🚀🚀 http://t.csdnimg.c…

数据结构:Heap(二叉树)的基本操作

目录 1.有关二叉树必须知道的几个基本概念 2.有关二叉树的基本操作 2.0有关元素的定义以及要进行的操作 2.1初始化和销毁操作 2.2插入操作以及上调操作 2.2.1插入操作以及上调操作的图解 2.2.2插入操作以及上调操作的代码 2.3删除根元素及其下调操作 2.3.2删除根元素及…