【NLP 自然语言处理(一)---词向量】

文章目录

  • 什么是NLP自然语言处理
  • 发展历程
  • 自然语言处理模型
    • 模型能识别单词的方法
    • 词向量
      • 分词
    • 一个向量vector表示一个词
      • 词向量的表示-one-hot
      • 多维词嵌入word embeding
        • 词向量的训练方法 CBOW Skip-gram
        • 词嵌入的理论依据
    • 一个vector(向量)表示短语或者文章
      • vector space Model
      • bag-of-word
      • vector space Model + bag-of-word 实现信息搜索
      • 改进版 bag-of-word

本文关注NLP自然语言处理中的基础,词向量

什么是NLP自然语言处理

人工智能的重要突破点之一,就是自然语言处理,应用范围很广,下游任务包括词性分析、情感分析、生成对话等等。
在这里插入图片描述

发展历程

自然语言的处理经历了多个阶段,基于概率、统计等等,但是很难满足复杂的语言体系,直到最近基于深度学习模型的出现,才更好的解决了这个问题。

自然语言处理模型

目前流行的模型都是基于transformer架构的大模型,不去了解细节的话,transfomer是编码器加解码器。
简单理解:编码器用来处理输入,解码器用来输出。
现在比较出名的三大模型分支里全部都是由transformer演化出来,基于transformer的编码器BERT家族,基于解码器的GPT一支,还有一支是编码器和解码器都用了,比如google的T5模型,所以很多模型的简写里面都带了T,是因为都是transformer的变体。

所谓的模型****,大是指参数大,GPT-3就已经是1750亿的水平了,这些参数的训练已经不是普通中小玩家可以训练起来的水平了;
在这里插入图片描述
对于自然语言来说肯定是要处理句子和单词的,那么问题就来了,电脑或者说模型知道每个单词的意思么?

模型能识别单词的方法

在这里插入图片描述
计算知道单词的意思,就是需要知道 tree和flower相近, dog rabbit cat相近,run jump相近这样一种联系,那么模型可以做到么?
答案是虽然不了解每个词的具体含义,但是可以模拟出词之间的关系。

词向量

模型需要输入要么是一个词(字),或者是个短句或者整篇文章。比如翻译任务,模型的输入是一句话,如果文章摘要任务,模型的输入就是一篇文章。
第一种一个vector表示一个词,有两种方法,第一种 one-hot,也叫one-of-n-coding,是一个稀疏矩阵,第二种,叫词嵌入,是一个稠密矩阵。
第二种一个vector表示一个短句或者文章,方法vecbag-of-word。
下面会逐步介绍,无论那种方法,基本都需要先分词。

分词

分词方法很多,有现成的语料库可以实现分词,英文的NTLK,中文的结巴等等。你可能会觉得这个很简单,不就是简单分一下嘛!
实际上不然,分词包含很多细节。举个例子:
比如英文doing,英文的词汇表里只有do,那这种情况,通常又会分为子词,所以NLTK库分词后,经常会被分成do和 ##ing
再比如说输入错误的英文又该怎么处理,通常NLTK库也会留下部分词根,比如输入一个错的词doning,那么通常也会把部分词根分出来。 会分成do 和 ## ning。

所有的语料整理完毕后通常会形成一个语料库,类似于一个词典,保存分词

序号词汇
1a
2do
3apple

但很多语言没办法穷举所有对的词,所以一般词表中还会加一个特殊词"Other" ,来表示一种特殊的,不认识的词汇。
那转换后的分词如何表示呢?分为One -hot 和 多维词嵌入两种办法

一个向量vector表示一个词

词向量的表示-one-hot

比如词汇表有5个词,{apple, dog, do,this,cat}
那么apple的表示就是[1,0,0,0,0]
dog的表示就是[0,1,0,0,0]
do的表示就是[0,0,1,0,0]
this的表示就是[0,0,0,1,0]
cat的表示就是[0,0,0,0,1]

但这种表示方法浪费空间,且无法表示出不同词之间的联系

多维词嵌入word embeding

考虑一个文本预测问题:
比如输入“”这里有一只小" ,让模型预测下文,
模型的输出是每个单词的概率,大小词表的大小,概率最大的那个就是预测的下一个单词。

在这里插入图片描述

实际上,这这个模型输出不重要,重要的是网络模型中的第一层隐藏层的权重z1,z2,…zn,把这一层的权重z作为要预测词的w的向量,观察向量z,会发现,相近的词距离更近。
比如上面图中,确实表现出了tree和flower等相近的词距离更近,所以 词向量能够表达词之间的逻辑关系

在这里插入图片描述
这种逻辑关系有什么用呢? 当你问模型Rome的Italy 就相当于Berlin的? 的时候,电脑真正去做的事情是:
在这里插入图片描述
而这个的输出的Germany的概率最大

这种表示方法就是词嵌入,或者叫word vector

词向量的训练方法 CBOW Skip-gram

当然训练的方法除了下面的预测下一个词,还有SKIP-Gram,Cbow等等,这些不同的方法,区别就是预测的方式不一样:

  • CBOW 上下文预测中心词
  • Skip-gram,是通过中心词预测两边的词

在这里插入图片描述

那么这种表示方法到底是巧合呢还是有理论依据呢

词嵌入的理论依据

一个人人品怎么样,看他周围的朋友,而一个词是什么意思,可以看他经常跟什么词一起出现,当然这个在模型上也是有理论依据的(另外在语言学上也有理论依据)。
放到深度模型中来看,当我们有两个输入:
李逍遥御剑飞行
酒剑仙御剑飞行
模型起初不知道李逍遥和酒剑仙是同一个东西,但是模型最后的输出都是要输出 御剑飞行的概率最大,因此这两个不同的输入对应的z1,z2,…zn ,就必须是相似的。
在这里插入图片描述
经过词嵌入之后的模型不再是一个稀疏矩阵,而是嵌入在多维空间里的一个稠密矩阵:
在这里插入图片描述

下面再来说如何用一个vector表示句子或者一篇文章

一个vector(向量)表示短语或者文章

vector space Model

比如一个信息检索的任务,我们通常是把每篇文章变成一堆vector,也就是下图中的蓝色的点,而要检索的信息也是一个vector,当两个向量的夹角比较大的时候,我们认为这两个向量就更相近。

在这里插入图片描述
那怎么把文档表示成一个vector呢?

bag-of-word

比如文档中是this is an apple,如果this这个单词在词表中有,我们就将词表中对应位表示为1。
在这里插入图片描述
这样的表示方法显然没有考虑文本的顺序,如果两个文档的单词一样,但顺序不一致,其实是完全不同的文档

vector space Model + bag-of-word 实现信息搜索

在这里插入图片描述
这种表示方法就是将要搜索的信息座位查询q,文档作为被检索的资料,计算两个向量的夹角。
这种检索方法,把词都是看做独立的个体,没有考虑顺序,也没有考虑不同的词其实是表达了同一个意思,又或者不同的词在某种情景下其实是相同的意思。

改进版 bag-of-word

我们在上述基础上,加入神经网络,改进了句子的表示方法。

在这里插入图片描述

需要查询和检索的句子和文档,都加入神经网络,用神经网络的输出代表这个词向量,可问题是这个神经网络如何训练呢?如何获取这些training data,这些的target又是什么呢?
实际上是有方法获取这些标签数据的,比如百度的时候,我们输入的查询就是query,但是它怎么知道结果是哪个呢?就靠你点击的链接了
总之是有办法获取神经网络的输入和target,从而训练一个网络。

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

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

相关文章

P1990 覆盖墙壁题解

题目 有一个长为N宽为2的墙壁,给你两种砖头:一个长2宽1,另一个是L型覆盖3个单元的砖头。如下图: 0 0 0 00砖头可以旋转,两种砖头可以无限制提供。你的任务是计算用这两种来覆盖N2的墙壁的覆盖方法。例如一个23的墙…

13种2023年智能算法进行PK,免费获取matlab代码

本期推出13种2023年智能算法进行PK,在CEC2005和CEC2022函数集进行测试。文末有代码获取方式。 13种算法都是2023年提出的,分别为: 淘金优化器(GRO),雪消融优化器(SAO),霜冰优化算法(RIME),减法优化器(SABO)…

easyx搭建项目-永七大作战(割草游戏)

永七大作战 游戏介绍: 永七大作战 游戏代码链接:永七大作战 提取码:ABCD 不想水文了,直接献出源码,表示我的诚意

(三十七)大数据实战——Solr服务的部署安装

前言 Solr是一个基于Apache Lucene的开源搜索平台,它提供了强大的全文搜索、分布式搜索和数据分析功能。Solr 可以用于构建高性能的搜索应用程序,支持从海量数据中快速检索和分析信息。Solr 使用倒排索引和先进的搜索算法,可实现快速而准确的…

计算机组成原理:存储系统【一】

🌈个人主页:godspeed_lucip 🔥 系列专栏:计算机组成与原理基础 1 主存的模型、寻址1.1 总览1.2 存储器的层次化结构1.3 存储器的分类1.3.1 按层次1.3.2 按照介质1.3.3 按照访问方式1.3.4 按照信息的可更改性1.3.5 按照信息的可保存…

28.Stream流

Stream流 1. 概述2. 方法2.1 开始生成方法2.1.1 概述2.1.2 方法2.1.3 代码示例 2.2 中间操作方法2.2.1 概述2.2.2 方法2.2.3 代码示例 2.3 终结操作方法2.3.1 概述2.3.2 方法2.3.3 代码示例 2.4 收集操作方法2.4.1 概述2.4.2 方法2.4.3 代码示例 3. 代码示例14. 代码示例25. 代…

Linux入门(1)Linux介绍

目录 1. 认识 Linux, 了解 Linux 的相关背景 1.发展史 2. 学会如何使用云服务器 3. 掌握使用远程终端工具 xshell 登陆 Linux 服务器 1. 认识 Linux, 了解 Linux 的相关背景 1.发展史 学习Linux系统编程,你可能要问Linux从哪里来?它是怎么发展的&am…

百面嵌入式专栏(面试题)驱动开发面试题汇总 2.0

沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇我们将介绍驱动开发面试题 。 1、Linux系统的组成部分? Linux内核、Linux文件系统、Linux shell、Linux应用程序。 2、Linux内核的组成部分? (1)第一种分类方式:内存管理子系统、进程管理子系统、文件管理子系…

RSIC-V“一芯”学习笔记(三)——读后感以及部分PA0工作

文章目录 一、别像弱智一样提问二、提问的智慧三、安装linux以及配置问题3.1 关于问题配置 一、别像弱智一样提问 提问前,应该清晰问自己几个问题,1. 是否尝试了在搜索引擎进行搜索过2. 相关的手册和文档是否看了3. 找找有没有常见的问题文档&#xff0…

Vue--》深入学习Tailwind CSS掌握优雅而高效的前端样式开发

Tailwind CSS是一个非常强大且灵活的CSS框架,适用于开发者希望高度定制化界面样式的项目。今天博主就 Tailwind CSS 做一个简单介绍以及案例讲解,争取读者阅读文章后入门。 仅靠一篇文章博主也不可能将Tailwind CSS所有内容讲解的面面俱到,在…

66万个 全国行政区划代码表

66万个全国各级行政区划代码表 提供的数据一览 简介 一共有66万个全国各级行政区划,一共有5个级别的行政单位级别 表格头部数据 表格尾部数据 全国行政单位各省份数量统计 数据下载地址 数据整理不易 百度云盘 链接: https://pan.baidu.com/s/1o1C2piYj2wu…

软件实例分享,宠物店兽医电子处方开单系统软件教程

软件实例分享,宠物店兽医电子处方开单系统软件教程 一、软件教程问答 以下教程以 佳易王宠物店兽医电子处方软件V16.0为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 问:宠物医院电子处方单子使用的纸张大小是多少&…

树莓派编程基础与硬件控制

1.编程语言 Python 是一种泛用型的编程语言,可以用于大量场景的程序开发中。根据基于谷歌搜 索指数的 PYPL(程序语言流行指数)统计,Python 是 2019 年 2 月全球范围内最为流行 的编程语言 相比传统的 C、Java 等编程语言&#x…

compile error ESP32cam.h no such file or directory

解决方法 可以参考这篇文章: But first, you will need to download the esp32cam.h library. For this go to Github and download the esp32cam Zip. GitHub - yoursunny/esp32cam: OV2640 camera on ESP32-CAM, Arduino library 具体就是下面的这篇重要的文章 …

URL编码算法:解决特殊字符在URL中的烦恼

引言: URL编码算法是一种将URL中的特殊字符转换为特定格式的编码方式。它在网络传输中起到了保护数据安全与完整性的重要作用。本文将深入探讨URL编码算法的优点与缺点,并介绍它在Web开发、网络安全等方面的应用。 URL编码解码 | 一个覆盖广泛主题工具…

抽象工厂模式-Abstract Factory Pattern

原文地址:https://jaune162.blog/design-pattern/abstract-factory-pattern/ 引言 首先我们由一个实际问题来引出抽象工厂模式。 考虑这样一个场景,系统中需要向OSS上传文件,以及通过OSS下载文件。而在系统中有不同的业务在使用这两个功能。如下图: 伪代码如下 public in…

怎么使用ChatGPT提高工作效率?

怎么使用ChatGPT提高工作效率,这是一个有趣的话题。 相信不同的人有不同的观点,大家的知识背景和从事的工作都不完全相同,所以最终ChatGPT能起到的作用也不一样。 在编程过程中,如果我们要找一个库,我们最先做的肯定…

算法讲解之字符串

前言: 本文主要讲解算法中和字符串结合的题目,跟字符串结合的算法题种类丰富,主要是跟别的算法结合,下面介绍几道比较经典的题目~ 第一道:14. 最长公共前缀 题目描述: 编写一个函数来查找字符串数组中的…

987. 二叉树的垂序遍历 - 力扣(LeetCode)

题目描述 给你二叉树的根结点 root ,请你设计算法计算二叉树的 垂序遍历 序列。 对位于 (row, col) 的每个结点而言,其左右子结点分别位于 (row 1, col - 1) 和 (row 1, col 1) 。树的根结点位于 (0, 0) 。 二叉树的 垂序遍历 从最左边的列开始直到…

生活篇——华为手机去除负一屏

华为手机去除如下图的恶心负一屏 打开华为的应用市场app 进入:我的-设置-国家/地区(改为俄罗斯)-进入智慧助手检查更新并更新智慧助手。 然后重复开始的操作,将地区改回中国,这样就没有负一屏了。