词的表示方法:
一、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

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

  1. 关键词(快排)刷词原理和方法

    关键词(快排)刷词原理和方法 刷词原理Seo理论:主关键词的相关关键词流量占比越大,排名越好.(长尾词带动主词排名现象的解释) 举例:如果说我们想做的主关键词是seo,那么可以统计出每天在百度上搜索和 ...

  2. 【NLP】CS224N课程笔记|词向量I: 简介, SVD和Word2Vec

    NewBeeNLP原创出品 公众号专栏作者@Ryan 知乎 | 机器学习课程笔记 CS224N课程笔记系列,持续更新中 课程主页:  http://web.stanford.edu/class/cs2 ...

  3. 【CS224n】2斯坦福大学深度学习自然语言处理课程笔记——词向量、词义和神经分类器

    Natural Language Processing with Deep Learning 课程笔记2 1. 词向量和word2vec 2. 优化基础知识 3. 我们能否通过计数更有效地抓住词义的本 ...

  4. python英文词云代码_使用python实现个性化词云的方法

    先上图片 词云图 需要模板 pip install jieba pip install wordcloud 还需要安装另外两个东西这两个我也不太懂借鉴百度写上去的 pip install scipy ...

  5. 中国地质大学英语语音学习笔记(四):英语连读——弱读、冠词连读方法(包括元音字母前添加an的原因)和词间辅音加元音的连读方法

    前言   本笔记整理于中国地质大学(武汉)的一门英语发音课程:英语语音,的第九,十单元的文档资料.包括冠词连读(不定冠词连读,定冠词连读,元音字母前用an的原因),弱读和辅音加元音连读的发音技巧.整理 ...

  6. tfidf处理代码_解霸源代码学习——用TF-IDF方法计算词权,jieba,源码,TFIDF,权重

    # encoding=utf-8 from __future__ import absolute_import import os import jieba import jieba.posseg f ...

  7. TF-IDF文本表示方法与词云图

    跟我一起机器学习系列文章将首发于公众号:月来客栈,欢迎搜索关注! 在前面的一篇文章中,我们介绍了两种基本的用于文本表示的词袋模型表示方法,两者之间的唯一区别就是一个考虑的词频而另外一个没有.下面我们再 ...

  8. python生成的词云没有图案_Python如何生成词云的方法

    这篇文章主要介绍了关于Python如何生成词云的方法,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 前言 今天教大家用wrodcloud模块来生成词云,我读取了一篇小说并生成了词云,先 ...

  9. python清洗数据去除停用词_关于regex:在Python中删除停用词的快捷方法

    我正在尝试从文本字符串中删除停用词: 1 2 3from nltk.corpus import stopwords text = 'hello bye the the hi' text = ' '.j ...

最新文章

  1. linux代码动态分析软件,举例分析Linux动态库和静态库
  2. Python那些优雅的写法:switch-case
  3. cmd编译运行Java文件详解
  4. 物联网数据终端演进之道
  5. 2019王小的Java学习之路
  6. html%2b怎么转换成加号,Apache mod_rewrite%2B和加号(+)符号
  7. 正则匹配 表情,表情
  8. C语言异常处理之 setjmp()和longjmp()
  9. ad logon hour
  10. 【caffe】基于CNN的年龄和性别检测
  11. div垂直居中和水平居中的多种方式
  12. android 看电脑视频,超级看电脑在线观看方法教程详解_丝瓜视频安卓版
  13. qemu 规范路径_EVE-NG镜像添加技巧(以思科虚拟化产品为例)
  14. 如何计算每个月有多少天
  15. OpenCV中图像的深度
  16. HBase中MemStore flush的源码解析
  17. 计算机网络:CSMA/CD 与 CSMA/CA
  18. com.google.guava maven依赖
  19. 适用于Mac的16款3D打印机建模软件
  20. 牛客网试题+答案分析+大牛面试经验(1)

热门文章

  1. Tessent MemoryBIST Overview
  2. 虚拟机服务器警报设置,Veeam ONE
  3. saiku java_Saiku源码完整搭建及问题解决方案
  4. 涂料(涂料)添加剂行业调研报告 - 市场现状分析与发展前景预测
  5. 托管DirectX,从MDX到SlimDX的转换(转)
  6. 新硬盘创建主分区和逻辑分区
  7. H5 点击链接 加入qq群聊
  8. 使用Maven构建WebApp项目
  9. PC-based 软控方案测评
  10. 解决fonts.gstatic.com无法访问