NLP深入学习(七):词向量

文章目录

  • 0. 引言
  • 1. 什么是词向量
  • 2. Word2Vec
    • 2.1 介绍
    • 2.2 例子
  • 3. 参考


0. 引言

前情提要:
《NLP深入学习(一):jieba 工具包介绍》
《NLP深入学习(二):nltk 工具包介绍》
《NLP深入学习(三):TF-IDF 详解以及文本分类/聚类用法》
《NLP深入学习(四):贝叶斯算法详解及分类/拼写检查用法》
《NLP深入学习(五):HMM 详解及字母识别/天气预测用法》
《NLP深入学习(六):n-gram 语言模型》

1. 什么是词向量

在自然语言处理(NLP)领域中,词向量是将单词映射为实数向量的一种方法,使得具有相似含义的词在数学空间中的距离更近。通过词向量表示,可以将原本无法直接进行数学运算的文本数据转化为数值形式,从而能够应用于机器学习和深度学习模型。

早期的词向量表示方法如 One-hot 编码,它是以稀疏向量的形式存在,每个词对应一个很长的向量,向量中只有一个位置上的值为1,其余全为0。这种表示方式简单直观,但无法表达词与词之间的语义关系。

随着技术的发展,出现了分布式词向量(Distributed Representation),其中最具代表性的有:

  1. Word2Vec

    • 包括CBOW(Continuous Bag-of-Words)和Skip-gram两种训练模式。
    • Skip-gram模型通过预测给定词语周围上下文的词语来学习词向量。
    • CBOW则是通过给定的上下文预测中心词。
  2. GloVe(Global Vectors for Word Representation)

    • GloVe结合了全局统计信息和局部上下文窗口的优势,通过矩阵分解的方法学习词向量。
  3. FastText

    • FastText不仅考虑整个词汇表的统计信息,还对词内部的子结构进行建模,特别适用于捕捉形态学特征丰富的语言中的词义。

这些词向量模型训练完成后,每个词都将有一个固定长度的稠密向量,通过计算两个词向量之间的余弦相似度或欧氏距离,可以衡量它们在语义上的接近程度。词向量技术极大地提升了诸如情感分析、文档分类、机器翻译等NLP任务的效果。

下面以 Word2Vec 为例介绍下词向量的具体使用方法!

2. Word2Vec

2.1 介绍

Word2Vec 是 Google 在2013年提出的一种用于自然语言处理的词嵌入(word embedding)技术,它将文本中的每个词映射为一个连续向量空间内的稠密向量。通过训练,Word2Vec 能够捕捉词汇之间的语义和语法关系,使得具有相似上下文环境或含义相近的词语在向量空间中的距离较近。

Word2Vec主要包含两种模型结构:

  1. Continuous Bag-of-Words (CBOW):

    • CBOW 模型试图根据给定单词周围的上下文单词来预测中心词。
    • 训练过程中,模型的目标是最大化正确预测目标词的概率,即根据多个输入词预测出中间缺失的单个词。
  2. Skip-gram:

    • 与CBOW相反,Skip-gram 模型利用中心词去预测其前后出现的上下文单词。
    • 在 Skip-gram 中,模型的任务是对于给定的一个词,尽可能准确地预测它前后窗口内的其他词。

这两种模型都采用神经网络架构进行训练,不过重点不同:CBOW 更关注于上下文信息的整体统计特征,而 Skip-gram 则强调单个词与其上下文的关系,通常能捕获到更丰富的词汇间关联性。

训练过程:

  • 初始化时,所有的词都被随机赋予一个向量表示。
  • 神经网络通过迭代优化损失函数(如负采样或 Hierarchical Softmax),不断调整词向量,使得模型可以更好地基于上下文预测目标词(CBOW)或者由目标词预测上下文(Skip-gram)。

最终得到的词向量可以在下游任务中直接使用,无需进一步特征工程,并且往往能提供优异的表现,比如在词类比任务、文档分类、情感分析等领域中展现出了强大的能力。例如,经过训练的Word2Vec模型中,“国王”-“男人”+“女人”≈“女王”,这种操作展示了词向量在数学上的可加性和潜在的语义含义。

2.2 例子

使用 Word2Vec 进行训练和生成词向量的常见方法是使用 Gensim 库。以下是一个简单的 Word2Vec 的 Python 代码示例:

from gensim.models import Word2Vec
from nltk.tokenize import word_tokenize
import nltk
nltk.download('punkt')  # 下载分词所需的资源# 示例文本
corpus = "Word embeddings are dense vector representations of words."# 分词
tokenized_corpus = word_tokenize(corpus.lower())  # 转为小写以便一致性
sentences = [tokenized_corpus]# 设置 Word2Vec 参数
vector_size = 100  # 词向量维度
window_size = 5  # 上下文窗口大小
min_count = 1  # 最小词频,低于此频率的词将被忽略
workers = 4  # 并行处理的线程数# 创建并训练 Word2Vec 模型
model = Word2Vec(sentences, vector_size=vector_size, window=window_size, min_count=min_count, workers=workers)# 保存模型
model.save("word2vec_model.model")# 加载模型
loaded_model = Word2Vec.load("word2vec_model.model")# 获取单词的词向量
word_vector = loaded_model.wv['word']# 打印词向量
print("Vector for 'word':", word_vector)

在这个例子中,我们首先使用 NLTK 进行分词,然后使用 Gensim 中的 Word2Vec 类创建和训练一个 Word2Vec 模型。模型可以保存到磁盘,以后可以加载并用于获取单词的词向量。

请注意,这只是一个简单的演示。在实际应用中,你通常需要使用更大规模的文本数据集,并调整模型的超参数以获得更好的性能。

在上述代码中:

  • vector_size参数指定了生成词向量的维度。
  • window_size参数定义了上下文窗口的大小,即考虑当前词前后多少个词作为其上下文。
  • min_count参数设置了词汇表中保留词的最小出现次数,小于这个次数的词将被忽略。
  • workers参数表示训练时使用的并发进程数。

通过训练好的 Word2Vec 模型,我们可以获取每个词的向量表示,并利用这些向量进行后续的自然语言处理任务。

3. 参考

《NLP深入学习(一):jieba 工具包介绍》
《NLP深入学习(二):nltk 工具包介绍》
《NLP深入学习(三):TF-IDF 详解以及文本分类/聚类用法》
《NLP深入学习(四):贝叶斯算法详解及分类/拼写检查用法》
《NLP深入学习(五):HMM 详解及字母识别/天气预测用法》
《NLP深入学习(六):n-gram 语言模型》

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

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

相关文章

常见域控开放端口及其作用

TCP/UDP 53(域名系统,DNS):域控制器使用DNS端口来提供域名解析服务,将域名映射到IP地址,以便客户端能够找到域控制器。 TCP/UDP 88(Kerberos):Kerberos是Windows中用于身…

【博士每天一篇论文-综述】Deep Echo State Network (DeepESN)_ A Brief Survey

阅读时间:2023-11-22 1 介绍 年份:2017 作者:C. Gallicchio 比萨大学计算机科学系终身教授助理教授,A. Micheli,比萨大学计算机科学系 期刊: ArXiv 引用量:68 这是两个大牛的论文,…

Nginx 平滑升级原理分析和实验

Nginx平滑升级 1. 为什么要对 Nginx 平滑升级2. 平滑升级的原理3. Nginx 信号简介3.1. master 主进程支持的信号3.2. worker 工作进程支持的信号 4. Nginx 平滑升级实战5. 平滑升级总结6. 升级实验6.1. 部署一台新的 Nginx 服务器6.2. 查看版本和模块6.3. 访问验证6.4. 升级 Ng…

autosar学习笔记 之SecOC

SecOC 接下来SecOC标准就更复杂一点,它不单单是做了通讯校验。 SecOC是基于对称密钥加密的一套机制,需要对ECU间的通讯作身份认证处理,来更好的防止伪装攻击,谈起对称或非对称加密,就会涉及到密钥的存储和Mac值的计算。 因此SECOC机制对于密钥的硬件存储,也有一定的要求…

matlab appdesigner系列-常用15-滑块、微调器

滑块,以左右拖动的方式在一定范围内改变数值 此示例,滑块显示微调器的数值,微调器也可以显示滑块的数值 操作步骤为: 1)将滑块和微调器拖拽到画布上 2)分别设置这两个组件的回调函数 回调函数有两个选项…

c语言-常见的动态内存错误

文章目录 前言一、常见的动态内存错误1.1 对空指针进行解引用操作1.2 对动态开辟的空间进行越界访问1.3 对非动态开辟的空间使用free()1.4 使用free()释放一块动态开辟的空间时,释放不完全1.5 对同一块动态开辟的空间进行多次释放1.6 动态开辟的空间使用后&#xff…

Android14源码剖析:MediaPlayer与MediaPlayerService区别?(五十四)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒体系统工程师系列【原创干货持续更新中……】🚀 人生格言: 人生从来没有捷径,只…

CRM系统环境搭建部署(nginx、jdk、tomcat、keepalived、mysql、zabbix)

CRM系统环境搭建部署(nginx、jdk、tomcat、keepalived、mysql、zabbix) crm.XXX.com #CRM系统使用的域名,已注册并做好DNS解析 两台应用服务器(主、备):172.16.38.172、172.16.38.173 两台数据库服务器…

MySQL数据库 | 事务中的一些问题(重点)

文章目录 什么是事务?事务的几个特性(ACID) -重点原子性(Atomicity)一致性(Consistency)隔离性(Isolation)持久性(Durability) Mysql中事务操作隐式事务显式事务 savepoint关键字只读事务事务中的一些问题(重点)隔离级别脏读解决办法 幻读解决…

美易官方《惊爆财务丑闻,有空头已经赚了十倍》

惊爆财务丑闻,“四大粮商”之首ADM股价暴跌,有空头已经赚了十倍 近日,一起惊爆市场的财务丑闻让全球投资者为之震惊。作为全球最大的农业综合企业之一,“四大粮商”之首的ADM(Archer Daniels Midland)被曝涉…

信息检索与数据挖掘 | (八)语言建模的IR

文章目录 📚语言生成模型📚平滑🐇线性插值平滑方法(Lelinek-Mercer)🐇dirichlet 平滑🐇Vector space(向量空间) vs BM25 vs LM 📚语言生成模型 传统的语言生成模型可以用于识别或生成…

【Pytorch】搭建一个简单的泰坦尼克号预测模型

介绍 本文使用PyTorch构建一个简单而有效的泰坦尼克号生存预测模型。通过这个项目,你会学到如何使用PyTorch框架创建神经网络、进行数据预处理和训练模型。我们将探讨如何处理泰坦尼克号数据集,设计并训练一个神经网络,以预测乘客是否在灾难…

MySQL数据库查询语句之组函数,子查询语句

组函数 以组为操作单位,一组数据得到一个结果。 在没有手动分组的前提下,整张表默认为一组数据 max(列名):获取最大值 min(列名):获取最小值 sum(列名):获取总和 avg(列名):获取平均值 count(列名)&a…

20.云原生之GitLab CICD实战

云原生专栏大纲 文章目录 GitLab RunnerGitLab Runner 介绍Gitlab Runner工作流程 Gitlab集成Gitlab RunnerGitLab Runner 版本选择Gitlab Runner部署docker-compose方式安装kubesphere中可视化方式安装helm方式安装 配置gitlab-runner配置gitlab-ci.ymlgitlab-ci.yml 介绍编写…

基于FPGA的高效乘法器

1、设计思路 二进制的乘法运算与十进制的乘法运算相似,如下图所示,二进制数据6’b110010乘以二进制数据4’b1011,得到乘积结果10’b1000100110。 图1 二进制乘法运算 仔细观察上图发现,乘数最低位为1(上图紫色数据位&a…

机器学习:什么是监督学习和无监督学习

目录 一、监督学习 (一)回归 (二)分类 二、无监督学习 聚类 一、监督学习 介绍:监督学习是指学习输入到输出(x->y)映射的机器学习算法,监督即理解为:已知正确答案…

Eureka基础知识总结(微服务)

Eureka Eureka是Netflix开发的一个服务发现框架,它提供了一种在微服务架构中注册和发现服务的方法。通过使用Eureka,我们可以实现负载均衡、故障转移和服务的自动注册等功能。本文将对Eureka的相关知识进行总结。 一、Eureka的基本概念 Eureka Server…

Arduino开发实例-LoRa通信(基于SX1278 LoRa)

LoRa通信(基于SX1278 LoRa) 文章目录 LoRa通信(基于SX1278 LoRa)1、硬件准备1.1 Semtech LoRa SX1278 收发器2、LoRa介绍2.1 什么是LoRa2.2 SX1278 LoRa 模块2.1 LoRa 频段(按国家/地区划分)3、硬件接线原理图4、代码实现4.1 数据发送与接收4.2 远距离控制LED实现4.2.1 硬…

leetcode-二叉树的前序遍历

144. 二叉树的前序遍历 递归方法 # Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftNone, rightNone): # self.val val # self.left left # self.right right class Solution:def preorderTraversal(…

期末考试发等级发成绩,就用易查分!

期末考试后,学校老师如何发布私密成绩?易查分可以轻松创建等级、成绩查询系统,让家长仅看到自己孩子成绩。 支持查询后留言反馈,电子签名确认签收等高级功能,节省老师沟通时间,大大提升工作效率。 &#x1…