NLP之词的向量化

文章目录

  • 前言
  • One-hot编码
    • one-hot编码-缺点
  • word2vec-词向量
    • 基于语言模型的训练方式
    • 基于窗口——CBOW
    • 基于窗口——SkipGram

前言

向量对于机器学习非常重要,大量的算法都需要基于向量来完成。对于机器来说,字符是没有含义的,只是有区别。只使用字符无法去刻画字与字、词与词、文本与文本之间的关系,文本转化为向量可以更好地刻画文本之间的关系,向量化后,可以启用大量的机器学习算法,具有很高的价值。文本是由词和字组成的,想将文本转化为向量,首先要能够把词和字转化为向量。所有向量应该有同一维度n,我们可以称这个n维空间是一个语义空间。
我 [ 0.780290020.770109740.074791240.4106988 ] 爱 [ 0.140921940.636909710.737747120.42768218 ] 北京 [ 0.957805680.519037890.766158550.6399924 ] 天安门 [ 0.738613830.496943730.132135380.41237077 ] \begin{align}我 [0.78029002 0.77010974 0.07479124 0.4106988 ]\\ 爱 [0.14092194 0.63690971 0.73774712 0.42768218]\\ 北京 [0.95780568 0.51903789 0.76615855 0.6399924 ]\\ 天安门 [0.73861383 0.49694373 0.13213538 0.41237077]\end{align} [0.780290020.770109740.074791240.4106988][0.140921940.636909710.737747120.42768218]北京[0.957805680.519037890.766158550.6399924]天安门[0.738613830.496943730.132135380.41237077]

One-hot编码

首先统计一个字表或词表,选出n个字或词:

今天 [ 1 , 0 , 0 , 0 , 0 ] 天气 [ 0 , 1 , 0 , 0 , 0 ] 真 [ 0 , 0 , 1 , 0 , 0 ] 不错 [ 0 , 0 , 0 , 1 , 0 ] 。 [ 0 , 0 , 0 , 0 , 1 ] \begin{align}今天 [1, 0, 0, 0, 0] \\ 天气 [0, 1, 0, 0, 0]\\ 真 [0, 0, 1, 0, 0]\\ 不错 [0, 0, 0, 1, 0]\\ 。 [0, 0, 0, 0, 1]\end{align} 今天[1,0,0,0,0]天气[0,1,0,0,0][0,0,1,0,0]不错[0,0,0,1,0][0,0,0,0,1]

将向量相加,组成句子:

今天不错 [ 1 , 0 , 0 , 1 , 0 ] 今天真不错 [ 1 , 0 , 1 , 1 , 0 ] \begin{align}今天 不错 [1, 0, 0, 1, 0] \\ 今天 真 不错 [1, 0, 1, 1, 0]\end{align} 今天不错[1,0,0,1,0]今天真不错[1,0,1,1,0]

在对文本向量化时,也可以考虑词频:

不错 [ 0 , 0 , 0 , 1 , 0 ] 不错不错 [ 0 , 0 , 0 , 2 , 0 ] \begin{align}不错 [0, 0, 0, 1, 0]\\ 不错 不错 [0, 0, 0, 2, 0]\end{align} 不错[0,0,0,1,0]不错不错[0,0,0,2,0]

有时也可以不事先准备词表,临时构建,如做文本比对任务,成对输入,把相同字的所在列设置为1,此时维度可随时变化:

例 1 : 你好吗心情 A : 你好吗 [ 1 , 1 , 1 , 0 , 0 ] B : 你心情好吗 [ 1 , 1 , 1 , 1 , 1 ] 例 2 :我不知道谁呀 A : 我不知道 [ 1 , 1 , 1 , 1 , 0 , 0 ] B : 谁知道呀 [ 0 , 0 , 1 , 1 , 1 , 1 ] \begin{align}例1:你好吗心情\\ A: 你好吗 [1, 1, 1, 0, 0]\\ B: 你心情好吗 [1, 1, 1, 1, 1]\\ 例2: 我不知道谁呀\\ A:我不知道 [1, 1, 1, 1, 0, 0]\\ B:谁知道呀 [0, 0, 1, 1, 1, 1]\end{align} 1:你好吗心情A:你好吗[1,1,1,0,0]B:你心情好吗[1,1,1,1,1]2:我不知道谁呀A:我不知道[1,1,1,1,0,0]B:谁知道呀[0,0,1,1,1,1]

one-hot编码-缺点

  • 如果有很多词,编码向量维度会很高,而且向量十分稀疏(大部分位置都是零),计算负担很大(维度灾难)。
  • 编码向量不能反映字词之间的语义相似性,只能做到区分。

word2vec-词向量

我们希望得到一种词向量有以下性质

  • 向量关系能反映语义关系,比如:cos(你好, 您好) > cos(你好,天气),即词义的相似性反映在向量的相似性。
  • 向量可以通过数值运算反映词之间的关系,国王 - 男人 = 皇后 -女人。
  • 同时,不管有多少词,向量维度应当是固定的。

word2vec-词向量,本质上是一样的,都是以向量代表字符,一般说Word Embedding是指随机初始化的词向量或字向量Word2Vec一般指一种训练Word Embedding的方法,使得其向量具有一定的性质(向量相似度反映语义相似度)。

基于语言模型的训练方式

在这里插入图片描述
这是Bengio et al在《A Neural Probabilistic Language Model》提出的训练方式,做出假设:每段文本中的某一个词,由它前面n个词决定。例如:

今天 天气 不错 我们 出去 玩
今天 -> 天气
今天 天气 -> 不错
今天 天气 不错 -> 我们
今天 天气 不错 我们 -> 出去

论文中的网络层的公式为: y = b + W ∗ x + U ∗ t a n h ( d + H x ) y=b+W*x+U*tanh(d+Hx) y=b+Wx+Utanh(d+Hx)

基于窗口——CBOW

做出假设:如果两个词在文本中出现时,它的前后出现的词相似,则这两个词语义相似。如:

在这里插入图片描述
基于前述思想,我们尝试用窗口中的词(或者说周围词)来表示(预测)中间词,这个称为CBOW模型。如:

窗口:你 想 明白 了 吗
输入:你 想 了 吗
输出:明白

在这里插入图片描述
对于CBOW的网络层有如下的计算方式:

class CBOW(nn.Module):def __init__(self, vocab_size, embedding_size, window_length):super(CBOW, self).__init__()self.word_vectors = nn.Embedding(vocab_size, embedding_size)self.pooling = nn.AvgPool1d(window_length)self.projection_layer = nn.Linear(embedding_size, vocab_size)def forward(self, context):context_embedding = self.word_vectors(context)  #batch_size * max_length * embedding size  1*4*4#transpose: batch_size * embedding size * max_length -> pool: batch_size * embedding_size * 1 -> squeeze:batch_size * embeddig_sizecontext_embedding = self.pooling(context_embedding.transpose(1, 2)).squeeze()#batch_size * embeddig_size -> batch_size * vocab_sizepred = self.projection_layer(context_embedding)return pred

由embedding层和pooling层,最后经过线性层实现的,所以相比语言模型,CBOW的训练的参数相对较少,训练速度更快,而且CBOW更依赖Embedding层,所以训练出来的词向量更好一点。

基于窗口——SkipGram

或用中间词来表示周围词,这个称为SkipGram模型,窗口:你想明白了吗

(输入,输出): (明白 , 你) (明白 , 想) (明白 , 了) (明白 , 吗) \begin{align}(明白,你)\\ (明白,想)\\ (明白,了)\\ (明白,吗)\end{align} (明白,你)(明白,想)(明白,了)(明白,吗)

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

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

相关文章

爬虫开发中AttributeError的快速解决方法

在网络爬虫开发过程中,AttributeError是一个常见且令人头疼的问题。这个错误通常是由于尝试访问一个对象中不存在的属性而引发的。本文将概述如何快速定位和解决AttributeError,并提供使用爬虫代理IP和多线程技术提高爬取效率的示例代码。 概述 Attrib…

mysql 数据库空间统计sql

mysql 数据库空间统计 文章目录 mysql 数据库空间统计说明一、数据库存储代码二、查询某个数据库的所有表的 代码总结 说明 INFORMATION_SCHEMA Table Reference 表参考 information_schema是‌MySQL中的一个特殊数据库,它存储了关于所有其他数据库的元数据信息。…

物理机 gogs+jenkins+sonarqube 实现CI/CD

一、部署gogs_0.11.91_linux_amd64.tar.gz gogs官网下载&#xff1a;https://dl.gogs.io/ yum -y install mariadb-serversystemctl start mariadbsystemctl enable mariadbuseradd gittar zxvf gogs_0.11.91_linux_amd64.tar.gzcd gogsmysql -u root -p < scripts/mysql.…

xLua | xLua Framework | 2 加载

0. 基础 0.1 不同加载模式 测试用 编辑器模式&#xff1b;打包模式&#xff1b;更新模式 public enum GameMode {EditorMode,PackageBundle,UpdateMode, } 0.2 加载资源步骤与接口 private void LoadAsset(string assetName, Action<Object> action) {if (AppConst.G…

c++ 求解质因数(细节详解)

定义 这里先来了解几个定义&#xff08;如已了解&#xff0c;可直接看下一个板块&#xff09; 因数&#xff1a;又称为约数&#xff0c;如果整数a除以整数b&#xff08;b0&#xff09;的商正好是是整数而没有余数&#xff0c;我们就说b是a的因数 质数&#xff1a;又称为素数…

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第五十章 Linux设备树

i.MX8MM处理器采用了先进的14LPCFinFET工艺&#xff0c;提供更快的速度和更高的电源效率;四核Cortex-A53&#xff0c;单核Cortex-M4&#xff0c;多达五个内核 &#xff0c;主频高达1.8GHz&#xff0c;2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…

儿童洗衣机什么牌子质量好?五款质量上乘机型推荐

在当今繁忙的生活中&#xff0c;儿童洗衣机已成为我们日常生活中不可或缺的家电。但是&#xff0c;面对市场上众多品牌的儿童洗衣机&#xff0c;那么&#xff0c;到底儿童洗衣机哪个牌子好&#xff1f;本次我将在这篇文章中探讨儿童洗衣机的选购策略&#xff0c;以帮助大家找到…

Logitech Media Server已更名为Lyrion Music Server

还以为是个新软件&#xff0c;折腾之后来才发现 &#xff0c;Lyrion Music Server 原名叫 Logitech Media Server&#xff0c;只是现在它已不再由 Logitech 拥有和维护&#xff0c;已完全移交给社区&#xff0c;因此更名&#xff0c;但简称依然还是 LMS。镜像目前还是延续了 lo…

Python Flask入门到精通:详细教程和实战案例

前言 Flask是一个轻量级的Web框架&#xff0c;用于快速开发Web应用程序。它的设计理念是简洁、灵活和易于扩展&#xff0c;非常适合于从简单的单页应用到复杂的大型项目。通过Flask&#xff0c;可以创建各种Web应用程序&#xff0c;比如博客、电子商务网站、RESTful API等。 …

在 LCD 上显示 png 图片-I.MX6U嵌入式Linux C应用编程学习笔记基于正点原子阿尔法开发板

在 LCD 上显示 png 图片 PNG 简介 无损压缩&#xff1a;PNG 使用 LZ77 派生算法进行无损压缩&#xff0c;确保图像质量不受损&#xff0c;且压缩比高 体积小&#xff1a;通过高压缩比&#xff0c;PNG 文件体积小&#xff0c;适合网络传输 索引彩色模式&#xff1a;PNG-8 格式…

结合el-upload上传组件,验证文件格式及大小

结合el-upload上传组件&#xff0c;验证文件格式及大小 效果如下&#xff1a; 代码如下&#xff1a; upgradeFirmwareInfo.vue页面 <template><div><el-dialog title"新增固件升级包" :visible.sync"dialogFormVisible"top"7vh&qu…

一年八百倍!刘邦不装杯!——早读(逆天打工人爬取热门微信文章解读)

台风格美&#xff0c;是比较倾向内陆的&#xff0c;大家注意安全 引言Python 代码第一篇 洞见 读懂了刘邦的人性哲学&#xff0c;你迟早脱离底层第二篇 看看新闻了 不小心越写越俗结尾 引言 这行情我TM真的越来越看不懂 现在的互联网太恐怖了 以前还好 很多散户都是懵懂懂的 现…

Java语言程序设计基础篇_编程练习题**15.28(显示一个转动的风扇)

**15.28(显示一个转动的风扇) 编写一个程序显示一个转动的风扇&#xff0c;如图15-33c所示。Pause、Resume和Reverse按钮用于暂停、继续和反转风扇的转动 可修改编程练习题14_9的代码 习题思路&#xff1a; 新建一个BorderPane&#xff0c;一个Pane和一个HBox&#xff0c;P…

javafx的ListView代入项目的使用

目录 1. 创建一个可观察的列表&#xff0c;用于存储ListView中的数据,这里的User是包装了用户的相关信息。 2.通过本人id获取friendid&#xff0c;及好友的id&#xff0c;然后用集合接送&#xff0c;更方便直观一点。 3.用for遍历集合&#xff0c;逐个添加。 4.渲染器&…

Python+Pytest+Allure+Yaml+Pymysql+Jenkins+GitLab运行原理

PythonPytestAllureYamlPymysqlJenkinsGitLab运行原理逻辑及调用关系 GitLab代码仓&#xff1a; Jenkins工作空间&#xff1a; 代码&#xff1a; 测试报告展示&#xff1a;

CTF ssrf 基础入门 (一)

0x01 引言 我发现我其实并不是很明白这个东西&#xff0c;有些微妙&#xff0c;而且记忆中也就记得Gopherus这个工具了&#xff0c;所以重新学习了一下&#xff0c;顺便记录一下吧 0x02 辨别 我们拿到一个题目&#xff0c;他的名字可能就是题目类型&#xff0c;但是也有可能…

Python3网络爬虫开发实战(1)爬虫基础

一、URL 基础 URL也就是网络资源地址&#xff0c;其满足如下格式规范 scheme://[username:password]hostname[:port][/path][;parameters][?query][#fragment] scheme&#xff1a;协议&#xff0c;常用的协议有 Http&#xff0c;https&#xff0c;ftp等等&#xff1b;usern…

数据库(MySQL)-DQL数据查询语言

DQL(Data Query Language 数据查询语言)的用途是查询数据库数据&#xff0c;如select语句。其中&#xff0c;可以根据表的结构和关系分为单表查询和多表联查。 单表查询 单表查询&#xff1a;针对数据库中的一张数据表进行查询 全字段查询 语法&#xff1a;select 字段名 fro…

C# 实现条件变量

C# 进程通信系列 第一章 共享内存 第二章 条件变量&#xff08;本章&#xff09; 第三章 消息队列 文章目录 C# 进程通信系列前言一、关键实现1、用到的主要对象2、初始化区分创建和打开3、变量放到共享内存4、等待和释放逻辑 二、完整代码三、使用示例1、线程同步控制2、进程…

Maven概述

目录 1.Maven简介 2.Maven开发环境搭建 2.1下载Maven服务器 2.2安装&#xff0c;配置Maven 1.配置本地仓库地址 2.配置阿里云镜像地址 2.3在idea中配置maven 2.4在idea中创建maven项目 3.pom.xml配置 1.项目基本信息 2.依赖信息 3.构建信息 4.Maven命令 5.打包Jav…