词的表示方法笔记——词向量+代码练习

词向量(Word Embedding) 一、词的表示 在自然语言处理任务中,首先需要考虑词如何在计算机中表示。通常,有两种表示方式:one-hot representation和distribution representation。简而言之,词向量技术是将词转化成为稠密向量,并且对于相似的词,其对应的词向量也相近。 1.1 离散表示(one-hot representation) 传统的基于规则或基于统计的自然语义处理方法将单词看作一... 阅读详情

词的表示方法:
一、one-hot(最简单)
独热编码是一种将单词转化为稀疏向量的方法,其中每个单词都表示为一个只有一个元素为1其余元素均为0的向量,其维度由词库的大小决定。。例如,对于包含 4个单词的词汇表 [tapple, banana, orange, peach] 单词“banana”的独热编码为[0,1,0,0]。
缺点:
(1)纬度灾难,有多少个词语我们的维度就多大,对于庞大的语料库来说,存储量和计算量都是问题;
(2)无法度量词语之间的相似性;
二、word embedding(词向量)
词向量则是一种将单词映射到连续向量空间中的方法,旨在捕捉单词之间的语义信息和关系。通过词向量,可以将自然语言处理中的单词转化为计算机可以处理的数字形式,从而便于进行文本分类、情感分析、机器翻译等任务。常见的词向量模型包括word2Vec、Glove、ELMo、BERT等。
词向量如何获取?
针对word2vec
(1)重要假设:文本中离得越近的词语相似度越高。
(2)其使用CBOW和skip-gram来计算词向量矩阵:
CBOW:使用上下文词来预测中心词;
skip-gram(常用):使用中心词来预测上下文词;
评估词向量:输出与特定词语的相关度比较高的词语;可视化;类比实验:国王-王后=男人-女人
词向量的用途:
(1)主题聚类;
(2)情感分析;
(3)信息检索……
word2vec缺点
(1)没有考虑多义词;
(2)窗口长度有限;
(3)没有考虑全局的文本信息;
(4)不是严格意义的语序……

代码实现

导包

import jieba
import re
import numpy as np
from sklearn.decomposition import PCA
import gensim
from gensim.models import Word2Vec
import matplotlib.pyplot as plt
import matplotlib

分词

f = open("sanguo.txt", 'r',encoding='utf-8') #读入文本
lines = []
for line in f: #分别对每段分词
    temp = jieba.lcut(line)  #结巴分词 精确模式
    words = []
    for i in temp:
        #过滤掉所有的标点符号
        i = re.sub("[\s+\.\!\/_,$%^*(+\"\'””《》]+|[+——!,。?、~@#¥%……&*():;‘]+", "", i)
        if len(i) > 0:
            words.append(i)
    if len(words) > 0:
        lines.append(words)
print(lines[0:5])#预览前5行分词结果

[[‘三国演义’, ‘上卷’], [‘罗贯中’], [‘滚滚’, ‘长江’, ‘东’, ‘逝水’, ‘浪花’, ‘淘尽’, ‘英雄’, ‘是非成败’, ‘转头’, ‘空’, ‘青山’, ‘依旧’, ‘在’, ‘几度’, ‘夕阳红’], [‘白发’, ‘渔樵’, ‘江渚上’, ‘惯看’, ‘秋月春风’, ‘一壶’, ‘浊酒’, ‘喜相逢’, ‘古今’, ‘多少’, ‘事’, ‘都’, ‘付笑谈’, ‘中’], [‘–’, ‘调寄’, ‘临江仙’]]

模型训练

# 调用Word2Vec训练
# 参数:size: 词向量维度;window: 上下文的宽度,min_count为考虑计算的单词的最低词频阈值
#negative负采样,sg模型的训练算法1:skip-gram 0:CBOW
model = Word2Vec(lines,vector_size = 20, window = 2 , min_count = 3, epochs=7, negative=10,sg=1)
print("孔明的词向量:\n",model.wv.get_vector('孔明'))
print("\n和孔明相关性最高的前20个词语:")
model.wv.most_similar('孔明', topn = 20)# 与孔明最相关的前20个词语

在这里插入图片描述
可视化

# 将词向量投影到二维空间
rawWordVec = []
word2ind = {}
for i, w in enumerate(model.wv.index_to_key): #index_to_key 序号,词语
    rawWordVec.append(model.wv[w]) #词向量
    word2ind[w] = i #{词语:序号}
rawWordVec = np.array(rawWordVec)
X_reduced = PCA(n_components=2).fit_transform(rawWordVec) 
rawWordVec #降维之前20维

在这里插入图片描述

X_reduced #降维之后2维

在这里插入图片描述

# 绘制星空图
# 绘制所有单词向量的二维空间投影
fig = plt.figure(figsize = (15, 10))
ax = fig.gca()
ax.set_facecolor('white')
ax.plot(X_reduced[:, 0], X_reduced[:, 1], '.', markersize = 1, alpha = 0.3, color = 'black')


# 绘制几个特殊单词的向量
words = ['孙权', '刘备', '曹操', '周瑜', '诸葛亮', '司马懿','汉献帝']

# 设置中文字体 否则乱码
zhfont1 = matplotlib.font_manager.FontProperties(fname='./华文仿宋.ttf', size=16)
for w in words:
    if w in word2ind:
        ind = word2ind[w]
        xy = X_reduced[ind]
        plt.plot(xy[0], xy[1], '.', alpha =1, color = 'orange',markersize=10)
        plt.text(xy[0], xy[1], w, fontproperties = zhfont1, alpha = 1, color = 'red')

在这里插入图片描述
类比关系实验

# 玄德-孔明=?-曹操
words = model.wv.most_similar(positive=['玄德', '曹操'], negative=['孔明'])
words

在这里插入图片描述

# 曹操-魏=?-蜀
words = model.wv.most_similar(positive=['曹操', '蜀'], negative=['魏'])
words

在这里插入图片描述
代码参考:【词向量 | word2vec | 理论讲解+代码 | 文本分析【python-gensim】-哔哩哔哩】 https://b23.tv/O02nfAb

pyTorch 导入预训练词向量 pyTorch 导入预训练词向量 现在的预训练词向量很多,如glove,word2vec等。在做实验时,这次词向量基本能够满足自己的需求,只需要从特定的网址把预训练词向量下载下来即可。 笔者就是遇到了这样的一个需求,在torch中使用预训练的词向量。于是写下此份笔记,便于后面查询。 ... 阅读详情

相关推荐

深度学习笔记——Word2vec和Doc2vec原理理解并结合代码分析

一直在用Word2vec和Doc2vec做Embedding,但是刚开始用的时候对其原理一直是一知半解,只是知道怎么用而已。古人云:既要知其然,也要知其所以然。所以,结合作者论文,以及网上各位前辈的博客和开源代码之后,抽空写写自己对Word2vec和Doc2vec原理的理解,以及结合代码做一些分析。希望能够有用,有错误也请各位朋友批评指正!

mpk_no1的博客 4万+

【自然语言处理】Word2Vec 词向量模型详解 + Python代码实战

如下图所示,在神经网络初始化的时候,我们会随机初始化一个 N×K 的矩阵,其中 N 是 词典的大小,K 是词向量的维数(一个自行设定的超参数)。下面提出了一个初始解决方案:假设,传统模型中,我们输入 not ,希望输出是 thou,但是由于语料库庞大,最后一层 SoftMax 太过耗时,所以我们可以改为:将 not 和 thou 同时作为输入,做一个二分类问题,类别 1 表示 not 和 thou 是邻居,类别 0 表示它们不是邻居。如下图所示,在词向量模型中,输入可以是多个词。

知不足而奋进,望远山而前行 5万+

【笔记】使用Gensim模块训练词向量

【笔记】使用Gensim模块训练词向量 文章目录【笔记】使用Gensim模块训练词向量1. 语料获取2. 训练word2vec 1. 语料获取 参考 下载维基百科中文语料作为预训练数据集; 下载地址: zhWiki [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 选择一个时间段进行下载, 点进去,我们选择正文的语料,比如 zhwiki-20210120-pages-articles-multistream1.xml-p1p187712.bz2 ; 下载完得到一个压缩包,WikiPed

Finks 636

基于gensim实现word2vec模型(附案例实战)

Word2Vec是google在2013年推出的一个NLP工具,它的特点是能够将单词转化为向量来表示,这样词与词之间就可以定量的去度量他们之间的关系,挖掘词之间的联系。用词向量来表示词并不是Word2Vec的首创,在很久之前就出现了。最早的词向量采用One-Hot编码,又称为一位有效编码,每个词向量维度大小为整个词汇表的大小,对于每个具体的词汇表中的词,将对应的位置置为1。

m0_64336780的博客 9231

OV5640调试大坑,关于binning、RES分辨率与EV曝光

OV5640在使用binning模式时,必须考虑使用场景,分辨率下降叠加动态范围压缩,会使目标对象细节在高光环境下大量丢失,2x2的binning模式,分辨率会远低于感光面积的1/4。

chongyun_的专栏 1827

别再只跑memtester了!嵌入式Linux内存压力测试,这5个参数和场景你试过吗?

本文深入探讨了嵌入式Linux内存压力测试的高级技巧,重点解析了memtester工具的5个关键参数和实战场景。通过物理地址测试、迭代控制、内存分配策略等调优方法,帮助开发者有效检测内存稳定性问题,适用于长期运行设备、特定故障重现等复杂场景,提升嵌入式系统可靠性。

weixin_30838873的博客 424

One-Hot 独热编码

文章目录为什么使用One-Hot独热编码什么是One-Hot独热编码案例示例1示例2One-Hot 编码优缺点优点缺点常见疑问 为什么使用One-Hot独热编码 在机器学习算法中,我们经常会遇到分类特征,例如:人的性别有男女,祖国有中国,美国,法等。 这些特征值并不是连续的,而是离散的,无序的。 如果要作为机器学习算法的输入,通常我们需要对其进行特征数字化。什么是特征数字化呢?例如:性别特征:[“男”,“女”],祖国特征:[“中国”,"美国,“法国”],运动特征:[“足球”,“篮球”,“羽毛球”,“乒乓球

糊里糊涂 430

不用编码器也能玩转BLDC?手把手教你反电动势定位实战

本文详细介绍了无刷直流电机(BLDC)的无传感器控制方案——反电动势定位法,通过STM32实战演示如何实现基本控制。文章涵盖核心原理、硬件准备、信号采集技巧及代码实现,特别适合静音风扇、小型机器人等对成本敏感的应用场景,帮助开发者降低硬件成本并提升系统可靠性。

lg888的博客 898

词向量系列之One-Hot编码详解

目录0.前言1. 独热编码1.1 独热编码例子1.2 独热编码的优点1.3 独热编码的缺点1.4 独热编码适用的情况2. 独热编码的实现2.1 python简单实现one-hot编码2.2 sklearn2.3 Keras2.4 tensorflow 0.前言   在回归,分类,聚类等机器学习算法中,各个特征之间的距离(相似度)计算是非常重要的,然而常用的距离计算都是在欧式空间内计算,例如计算余弦...

Elenstone的博客 5821

路径搜索算法——RRT*算法

RRT算法是RRT算法的优化版本,通过引入路径优化机制实现渐进最优性。该算法在高维空间和复杂环境中表现优异,主要步骤包括随机采样、树扩展和邻近节点重新连接。相比RRT,RRT能够不断优化路径质量,但计算复杂度更高。Python实现展示了其核心逻辑:随机采样扩展树节点,检查碰撞,选择最优父节点,并通过重新连接优化路径。算法适用于机器人导航等场景,但需平衡计算效率与路径质量。

swaggytiger的博客 3062

ABAP代码检查(Code Review)

1、SLIN 扩展程序检查 也可通过(SE38工具栏->检查-扩展程序检查) 进入 2、ATC 检查 通过<SE38菜单栏-检查-ABAP测试主控室> 或事物代码SCI, 支持自定义检查变式 SCI可以配置检查变式满足特殊需求,配置对象集用于批量检查 3、通过ABAP测试主控室实现统一管理,定期检查作业和监控功能(事务代码ATC) 参考 SLIN...

u012232542的博客 6068

【笔记3-2】CS224N课程笔记+作业参考代码 - 词向量表示 word2vec

CS224N(二)Word VectorsHow to represent meaning of wordsWord2vecDerivations of gradient CS224n:深度学习的自然语言处理(2017年冬季)1080p https://www.bilibili.com/video/av28030942/ How to represent meaning of words me...

cindy_1102的博客 6796

激光三角测量法:斜射与直射式技术的原理与应用解析

本文深入解析激光三角测量法中斜射式与直射式技术的原理、应用及对比。斜射式适用于高精度小范围测量,尤其擅长处理反光表面;直射式则适合大范围位移检测,结构更简单。文章详细介绍了两种技术的光路分析、数学建模、应用场景及选型建议,并探讨了系统校准与误差分析方法,为工业检测领域提供实用参考。

weixin_29280219的博客 414

NLP学习笔记02:文本表示方法——从词袋模型到 BERT

本文系统梳理了自然语言处理中文本表示方法的发展历程。从早期的词袋模型、TF-IDF等统计方法,到Word2Vec、GloVe等静态词向量表示,再到ELMo、BERT等上下文感知的深度表示方法。文章详细分析了每种技术的核心思想、实现方式、优缺点及适用场景,展现了NLP领域从简单统计特征到复杂语义建模的演进路径。传统方法如词袋模型实现简单但语义捕捉有限,而现代预训练模型如BERT能够理解上下文相关语义,但也带来更高的计算复杂度。不同阶段的文本表示方法各具特色,在实际应用中需要根据任务需求、数据规模和计算资

qq_73077451的博客 545

Python 爬虫实战:科研数据库学术论文数据抓取

在科研工作中,学术论文是获取前沿知识和研究方法的重要资源。然而,手动从科研数据库中查找和整理论文信息往往耗时费力。幸运的是,Python 爬虫技术可以自动化这一过程,帮助我们高效地抓取和管理学术论文数据。本文将详细介绍如何使用 Python 爬虫技术抓取科研数据库中的学术论文数据,并进行全字段提取和文献管理,助力科研工作。

u014481728的博客 945

IEC 104电力规约详细解读(一) - 报文结构、报文分类、ASDU

比如,双方可以按频率发送,比如接收8帧I帧回答一帧S帧,也可以要求接收1帧I帧就应答1帧S帧,当然也可以不要求(S帧内容示例参考例1)。所以U帧格式的控制欲第一个字节就只有6种情况,分别是0x83(TESTER确认)、0x43(TESTER命令)、0x23(STOPDT确认)、0x13(STOPDT命令)、0x0B(START确认)、0x07(START命令)ASDU(应用服务数据单元),协议原文格式最好去101协议去看看,会比较详细。遥信、遥测、遥控、遥调、总召、对时等都需要使用I格式传送。

张二狗的博客 1万+

NLP中的词向量总结与实战:从one-hot到bert

离散表示 One-hot独热表示法 NLP 中最常用、最传统的词特征表示方式是采用One-Hot 编码,即每一个词特征都被表示成一个很长的向量,其长度等于词表大小,当前词对应位置为1,其他位置为0。 但是这种表示方式存在显而易见的问题: 不同词之间总是正交的,无法衡量不同词之间的相似关系。 只能反映每个词是否出现,但无法突出词之间重要性的区别。 BOW词袋表示法 在One-Hot 表示...

Kaiyuan_sjtu的博客 3410

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

斯坦福深度学习与自然语言处理高级的词向量表示

http://www.52nlp.cn/%E6%96%AF%E5%9D%A6%E7%A6%8F%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E4%B8%8E%E8%87%AA%E7%84%B6%E8%AF%AD%E8%A8%80%E5%A4%84%E7%90%86%E9%AB%98%E7%BA%A7%E7%9A%84%E8%AF%8D%E5%90%91%E9%87%8F...

weixin_34377919的博客 195

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

lstm 根据前文预测词_宅家NLP —— 词向量与ELMo

感谢@贪心科技 @李文哲 老师,附NLP系列第一场《词向量与ELMo》笔记整理btw, 后面的课程笔记我也会整理到知乎,需要的小伙伴可以关注欧~一、基础回顾之词向量与语言模型词的表示之独热编码用0, 1量化词的表示;存在的问题:无法计算词之间的(语义)相似度,因为无论如何单词之间的相似度都相等,为1;导致向量稀疏,大部分位置为0;2. 词向量之生成词向量的模型和方法(非LM的方法 )CBOW, S...

weixin_39830012的博客 387

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

词向量学习笔记(三)FastText

词向量学习笔记(三)FastText 文章目录词向量学习笔记(三)FastText一、概述二、FastText模型原理2.1 FastText架构2.1 Softmax回归和层次Softmax2.2 n-gram特征三、源代码分析3.1 总体结构3.2 训练格式3.3 具体模块实现四、FastText的Python应用4.1 模型的训练4.2 模型的应用4.2.0 查看一个词的词向量4.2.1 计算和一个词语最相关的词4.2.2 计算两个词的相似度4.2.3 查找不同类的词4.2.4 查看对应关系4.2.5

weixin_43886056的博客 1423

lesson-02 NLP 基础-文本表示与词向量

解决专有名词切错问题还能做。

深度学习算法工程师,专注于前沿算法研究与实战应用。在这里,我将分享深度学习领域的实战经验、优质数据集资源以及最新论文解读与精度分析,旨在与广大技术爱好者共同探索人工智能的奥秘,助力技术成长与创新。 423

词向量Word2Vec---学习笔记

本文为下述视频的笔记: 【论文复现代码数据集见评论区】5小时精讲 Paper,BAT大厂导师带你吃透NLP自然语言处理的经典模型Word2vec_哔哩哔哩_bilibili 论文: Efficient Estimation of Word Representations in Vector Space 向量空间中词表示的有效估计 目录 1. 词向量储备知识 语言模型 2. 论文模型导读 词的表示 word representation 发展历程 研究成果 研究意义 论文...

weixin_44748589的博客 1274

莫烦nlp——ELMO一词多义

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar

ronghwa_lu 1470

词向量深度笔记:从 OneHot 到 Word2Vec(逻辑链 + 代码)

本文系统梳理了词向量技术从OneHot到Word2Vec的发展历程。首先指出计算机需要将文本转化为向量形式才能处理,引出词向量的重要性。OneHot编码虽然解决了类别无序问题,但存在维度灾难和无法表达语义关系的缺陷。Word2Vec通过分布假设,利用上下文信息训练稠密词向量,提出CBOW和Skip-Gram两种架构:CBOW通过上下文预测中心词,训练速度快但低频词效果弱;Skip-Gram则通过中心词预测上下文,对低频词表现更好。文章详细讲解了CBOW的实现原理,并给出完整的Python代码示例,最后比较了

2504_94557665的博客 1057

推荐:腾讯开源的词向量精简版本下载

腾讯AI Lab 宣布开源大规模、高质量的中文词向量数据,该数据包含800多万中文词汇,相比现有的公开数据,在覆盖率、新鲜度及准确性上大幅提高,为对话回复质量预测和医疗实体识别等自然语言...

fengdu78的博客 7337
上一篇: 【动手学习深度学习】微积分代码练习
下一篇: 【动手学习深度学习】概率+代码实现
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是小蔡呀~~~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值