位置: IT常识 - 正文

Word2Vec【附代码】(word2vec使用方法)

发布时间:2024-01-17
Word2Vec【附代码】 Word2Vec【附代码】

推荐整理分享Word2Vec【附代码】(word2vec使用方法),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:word2vec cbow,word2vec实例详解,word2vec使用方法,word2vec使用方法,word2vec 实现,word2vec实例详解,word2vec+lstm,word2vec 实现,内容如对您有帮助,希望把文章链接给更多的朋友!

原文链接:https://towardsdatascience.com/word2vec-explained-49c52b4ccb71

目录

介绍 什么是词嵌入? Word2Vec 架构

CBOW(连续词袋)模型连续 Skip-Gram 模型 实施数据要求导入数据预处理数据嵌入PCA on Embeddings 结束语介绍

Word2Vec 是 NLP 领域的最新突破。Tomas Mikolov是捷克计算机科学家,目前是 CIIRC(捷克信息学、机器人和控制论研究所)的研究员,是 word2vec 研究和实施的主要贡献者之一。词嵌入是解决 NLP 中许多问题的一个组成部分。它们描绘了人类如何理解机器的语言。您可以将它们想象为文本的矢量化表示。Word2Vec 是一种常用的词嵌入生成方法,具有文本相似度、推荐系统、情感分析等多种应用。

什么是词嵌入?

在我们进入 word2vec 之前,让我们先了解一下词嵌入是什么。了解这一点很重要,因为 word2vec 的整体结果和输出将是与通过算法传递的每个唯一单词相关联的嵌入。

词嵌入是一种将单个词转换为词的数字表示(向量)的技术。每个单词都映射到一个向量,然后以类似于神经网络的方式学习该向量。向量试图捕捉该词相对于整个文本的各种特征。这些特征可以包括单词的语义关系、定义、上下文等。通过这些数字表示,你可以做很多事情,比如识别单词之间的相似性或不相似性。

显然,这些作为机器学习各个方面的输入是不可或缺的。机器无法处理原始形式的文本,因此将文本转换为嵌入将允许用户将嵌入提供给经典的机器学习模型。最简单的嵌入是文本数据的一次热编码,其中每个向量都将映射到一个类别。

例如: have = [1, 0, 0, 0, 0, 0, … 0] a = [0, 1, 0, 0, 0, 0, … 0] nice = [0, 0, 1, 0 , 0, 0, … 0] day = [0, 0, 0, 1, 0, 0, … 0] … 然而,像这样的简单嵌入有多重限制,因为它们不能捕捉单词的特征,而且根据语料库的大小,它们可能会很大。

Word2Vec 架构

Word2Vec 的有效性来自于它能够将相似词的向量组合在一起。给定足够大的数据集,Word2Vec 可以根据单词在文本中的出现次数对单词的含义做出强有力的估计。这些估计产生了与语料库中其他单词的单词关联。例如,像“King”和“Queen”这样的词会非常相似。在对词嵌入进行代数运算时,您可以找到词相似度的近似值。例如,“king”的二维嵌入向量——“man”的二维嵌入向量+“woman”的二维嵌入向量,产生了一个与“queen”的嵌入向量非常接近的向量。请注意,以下值是任意选择的。

国王 - 男人 + 女人 = 女王 [5,3] - [2,1] + [3, 2] = [6,4]

Word2Vec【附代码】(word2vec使用方法)

可以看到,King 和 Queen 两个字的位置相近。(图片由作者提供) word2vec 的成功主要有两种架构。skip-gram 和 CBOW 架构。

CBOW(连续词袋)

这种架构非常类似于前馈神经网络。这种模型架构本质上试图从上下文词列表中预测目标词。这个模型背后的直觉很简单:给定一个短语"Have a great day",我们将选择目标词为“a”,上下文词为[“have”、“great”、“day”]。该模型将做的是采用上下文词的分布式表示来尝试和预测目标词。

skip-gram模型

skip-gram 模型是一个简单的神经网络,具有一个经过训练的隐藏层,以便在输入单词出现时预测给定单词出现的概率。直观地,您可以想象 skip-gram 模型与 CBOW 模型相反。在这个架构中,它将当前单词作为输入,并试图准确地预测当前单词之前和之后的单词。该模型本质上是尝试学习和预测指定输入词周围的上下文词。基于评估该模型准确性的实验,发现在给定大范围的词向量的情况下预测质量有所提高,但它也增加了计算复杂度。该过程可以直观地描述,如下所示。 如上所示,给定一些文本语料库,在某个滚动窗口上选择目标词。训练数据由目标词和窗口中所有其他词的成对组合组成。这是神经网络的最终训练数据。一旦模型经过训练,我们基本上可以得出一个词作为给定目标的上下文词的概率。下图代表了 skip-gram 模型的神经网络架构。 语料库可以表示为大小为 N 的向量,其中 N 中的每个元素对应于语料库中的一个词。在训练过程中,我们有一对目标词和上下文词,输入数组中除目标词外的所有元素都为 0。目标词将等于 1。隐藏层将学习每个词的嵌入表示,产生一个 d 维嵌入空间。输出层是一个带有 softmax 激活函数的密集层。输出层基本上会产生一个与输入大小相同的向量,向量中的每个元素都包含一个概率。该概率表示目标词与语料库中相关词之间的相似度。

有关这两种模型的更详细概述,我强烈建议您阅读概述这些结果的原始论文“Efficient Estimation of Word Representations inVector Space”。

执行

我将展示如何使用 word2vec 生成词嵌入,并使用这些嵌入来查找相似的词并通过 PCA 可视化嵌入。

数据

出于本教程的目的,我们将使用莎士比亚数据集。你可以在这里找到我用于本教程的文件,它包含莎士比亚为他的戏剧写的所有台词。

要求nltk==3.6.1node2vec==0.4.3 pandas==1.2.4 matplotlib==3.3.4 gensim==4.0.1 scikit-learn=0.24.1

注意:由于我们正在使用 NLTK,您可能需要下载以下语料库,以便教程的其余部分正常工作。这可以通过以下命令轻松完成:

import nltknltk.download('stopwords') nltk.download('punkt')导入数据import pandas as pdimport nltkimport stringimport matplotlib.pyplot as pltfrom nltk.corpus import stopwordsfrom nltk import word_tokenizefrom gensim.models import Word2Vec as w2vfrom sklearn.decomposition import PCA# constantsPATH = 'data/shakespeare.txt'sw = stopwords.words('english')plt.style.use('ggplot')# nltk.download('punkt')# nltk.download('stopwords')# import datalines = []with open(PATH, 'r') as f: for l in f: lines.append(l)

注意:将变量更改为PATH您正在使用的数据的路径。

预处理数据# remove new lineslines = [line.rstrip('\n') for line in lines]# make all characters lowerlines = [line.lower() for line in lines]# remove punctuations from each linelines = [line.translate(str.maketrans('', '', string.punctuation)) for line in lines]# tokenizelines = [word_tokenize(line) for line in lines]def remove_stopwords(lines, sw = sw): ''' The purpose of this function is to remove stopwords from a given array of lines. params: lines (Array / List) : The list of lines you want to remove the stopwords from sw (Set) : The set of stopwords you want to remove example: lines = remove_stopwords(lines = lines, sw = sw) ''' res = [] for line in lines: original = line line = [w for w in line if w not in sw] if len(line) < 1: line = original res.append(line) return resfiltered_lines = remove_stopwords(lines = lines, sw = sw)

停用词过滤说明

请注意,从这些行中删除的停用词是现代词汇。应用程序和数据对于单词清理所需的预处理策略类型非常重要。

在我们的场景中,像“you”或“yourself”这样的词将出现在停用词中并从行中删除,但是由于这是莎士比亚文本数据,因此不会使用这些类型的词。相反,“你”或“你自己”可能有助于删除。保持对这些类型的微小变化保持热情,因为它们在一个好的模型和一个差的模型的性能上产生了巨大的差异。

出于本示例的目的,我不会详细介绍如何识别来自不同世纪的停用词,但请注意,您应该这样做。

嵌入w = w2v( filtered_lines, min_count=3, sg = 1, window=7 ) print(w.wv.most_similar('thou'))emb_df = ( pd.DataFrame( [w.wv.get_vector(str(n)) for n in w.wv.key_to_index], index = w.wv.key_to_index ))print(emb_df.shape)emb_df.head()

嵌入的 PCApca = PCA(n_components=2, random_state=7)pca_mdl = pca.fit_transform(emb_df)emb_df_PCA = ( pd.DataFrame( pca_mdl, columns=['x','y'], index = emb_df.index ))plt.clf()fig = plt.figure(figsize=(6,4))plt.scatter( x = emb_df_PCA['x'], y = emb_df_PCA['y'], s = 0.4, color = 'maroon', alpha = 0.5)plt.xlabel('PCA-1')plt.ylabel('PCA-2')plt.title('PCA Visualization')plt.plot()

Tensorflow 对 word2vec 模型进行了非常漂亮、直观和用户友好的表示。我强烈建议您探索它,因为它允许您与 word2vec 的结果进行交互。链接如下:https://projector.tensorflow.org/

结束语

词嵌入是解决 NLP 中许多问题的重要组成部分,它描述了人类如何理解机器的语言。给定一个大型文本语料库,word2vec 会生成一个与语料库中的每个单词相关联的嵌入向量。这些嵌入的结构使得具有相似特征的单词彼此非常接近。CBOW(连续词袋)和 skip-gram 模型是与 word2vec 相关的两个主要架构。给定一个输入词,skip-gram 将尝试预测输入上下文中的词,而 CBOW 模型将采用各种词并尝试预测缺失的词。

本文链接地址:https://www.jiuchutong.com/zhishi/300212.html 转载请保留说明!

上一篇:2023前端面试题集(含答案)之HTML+CSS篇(一)(2023前端面试题目)

下一篇:js算法 字母大小写转换(如何在js中给字母排序)

  • 荣耀x20怎么关闭按键音(荣耀x20怎么关闭自动更新系统)

    荣耀x20怎么关闭按键音(荣耀x20怎么关闭自动更新系统)

  • 荣耀30s可以支持NFC吗(荣耀30s可以支持无线充电吗)

    荣耀30s可以支持NFC吗(荣耀30s可以支持无线充电吗)

  • 快手闪回什么意思(快手闪现什么意思)

    快手闪回什么意思(快手闪现什么意思)

  • 小米cc9信号不好怎么解决(小米cc9e手机信号差怎么解决)

    小米cc9信号不好怎么解决(小米cc9e手机信号差怎么解决)

  • 苹果手机换屏后颜色不正(苹果手机换屏后耗电快,怎么回事?)

    苹果手机换屏后颜色不正(苹果手机换屏后耗电快,怎么回事?)

  • 淘宝人生账单包括退货吗(淘宝人生账单包括哪些)

    淘宝人生账单包括退货吗(淘宝人生账单包括哪些)

  • autodesk桌面能卸载吗(autodesk桌面应用程序仍在计算机上运行,怎么卸载)

    autodesk桌面能卸载吗(autodesk桌面应用程序仍在计算机上运行,怎么卸载)

  • ipad键盘怎么缩小(ipad键盘怎么缩小放大)

    ipad键盘怎么缩小(ipad键盘怎么缩小放大)

  • iphonex左边扬声器不响(iphonex左边扬声器)

    iphonex左边扬声器不响(iphonex左边扬声器)

  • 快手的扫一扫在哪里(快手的扫一扫在哪个位置)

    快手的扫一扫在哪里(快手的扫一扫在哪个位置)

  • 主存储器又称为什么(主储存器又可以称为)

    主存储器又称为什么(主储存器又可以称为)

  • qq把对方拉黑对方知道吗(QQ把对方拉黑对方还能加我吗)

    qq把对方拉黑对方知道吗(QQ把对方拉黑对方还能加我吗)

  • qq关了设备锁为什么还要验证(qq设备锁明明关了这什么还要验证呢)

    qq关了设备锁为什么还要验证(qq设备锁明明关了这什么还要验证呢)

  • 手机ke是什么(手机壳是什么垃圾分类)

    手机ke是什么(手机壳是什么垃圾分类)

  • 闲鱼发布不了,提示账号异常(闲鱼发布不了多规格商品)

    闲鱼发布不了,提示账号异常(闲鱼发布不了多规格商品)

  • 微信收不到消息提醒打开才能看到(微信收不到消息提醒怎么办)

    微信收不到消息提醒打开才能看到(微信收不到消息提醒怎么办)

  • 抖音视频的分辨率是多少(抖音视频的分辨率一般是多少)

    抖音视频的分辨率是多少(抖音视频的分辨率一般是多少)

  • wps文字超链接怎么做(wps文字超链接怎么打开)

    wps文字超链接怎么做(wps文字超链接怎么打开)

  • 如何将wps文件上传到电脑(如何将wps文件上传到云盘)

    如何将wps文件上传到电脑(如何将wps文件上传到云盘)

  • 手机拍照闪光灯怎么开(手机拍照闪光灯怎么设置)

    手机拍照闪光灯怎么开(手机拍照闪光灯怎么设置)

  • ipadmini2019电池容量(ipad mini电池容量多少)

    ipadmini2019电池容量(ipad mini电池容量多少)

  • 怎么下载ie8浏览器(ie8-11浏览器怎么下载)

    怎么下载ie8浏览器(ie8-11浏览器怎么下载)

  • 小米手机有学生模式吗(小米手机有学生模式功能吗)

    小米手机有学生模式吗(小米手机有学生模式功能吗)

  • 苹果6不支持电信卡吗(苹果6不支持电信卡怎么解决)

    苹果6不支持电信卡吗(苹果6不支持电信卡怎么解决)

  • 打给对方一直呼叫失败(打给对方一直呼叫受限是啥意思)

    打给对方一直呼叫失败(打给对方一直呼叫受限是啥意思)

  • 苹果微信朋友圈突然发不了视频(苹果微信朋友圈怎么发文字不带图片)

    苹果微信朋友圈突然发不了视频(苹果微信朋友圈怎么发文字不带图片)

  • html中插入svg(svg如何嵌入html5)

    html中插入svg(svg如何嵌入html5)

  • 基于Java Web的图书管理系统(基于javaweb的图书馆管理系统)

    基于Java Web的图书管理系统(基于javaweb的图书馆管理系统)

  • 个税在资产负债表中体现吗
  • 小区业委会是否可以进行经营活动?
  • 子公司分红母公司缴税吗
  • 个人代开房租普票需要缴纳哪些税种?
  • 销售金银首饰消费税怎么算
  • 营改增的增值税
  • 委托加工应税消费品消费税的账务处理是怎样的?
  • 股东退股分红怎么拿回
  • 两个公司成立一个新的公司注意事项
  • 由于审计环境的变化
  • 交通运输业安全心得体会范文
  • 税务社保扣取300干嘛的
  • 员工销售家具取得的工资怎么写分录?
  • 备品的定义
  • 印花税零申报怎么填样本
  • 对于甲供工程,施工方销售额不包括建设方提供的材料款。那么该销售额是否包括设备及动力款?
  • 高新技术企业认定管理办法
  • 职工福利费支出计入什么科目
  • 承兑贴息的会计分录
  • 收到房租的增值税税率
  • 电子商务出来干嘛
  • bois如何设置启动项
  • 自然人独资企业交什么税
  • PRISMSVR.EXE - PRISMSVR是什么进程 有什么用
  • 资产负债表中资产项目的排列顺序是
  • 银行承兑汇票付款提示期限
  • 小规模纳税人采购商品时有可能涉及的会计科目有
  • 债务担保可以税前抵扣吗
  • 哪些发票不可以通过数电平台开具
  • 一只正在树上吃的苹果
  • 代销商品受托方怎么做账
  • 对于个体工商户不需要满足累计经营三个月以上的条件
  • idea安装vue.js
  • php多维数组转一维数组
  • 广告代理费收取比例
  • 出资入股是什么意思
  • 出口退税款的账务怎么做
  • echarts中国地图代码
  • 周志华《机器学习》第三章课后习题
  • 知识图谱的构建方法有两种
  • php魔术方法功能与用法实例分析
  • 员工预支款计入什么科目
  • 人才引进的安家费
  • 怎么调整利润分配
  • 公司法人代表能考公务员吗
  • 外购货物用于在建工程分录
  • python搞自动化
  • 购买商标入账
  • 金蝶迷你版年结账套
  • 企业所得税固定资产的计税基础
  • 按利润总额的10%怎么算
  • 房地产公司分立 土地转移
  • 承兑汇票利息分录
  • 车间管理人员的福利费计入什么科目
  • 管理费用月底结转吗
  • 项目回款是什么意思
  • 库存商品用于研发分录
  • 印花税可以去地方申报吗
  • 本年利润的会计科目代码
  • 法人在公司账户取钱要纳税么
  • 在计划管理中根据事实思考这一步的内容是
  • 未开票收入怎么报税
  • 贷内部往来
  • Winserver2012下mysql 5.7解压版(zip)配置安装教程详解
  • 硬盘 linux
  • freebsd软件安装
  • linux shell awk 流程控制语句(if,for,while,do)详细介绍
  • ntfs硬盘分区整数
  • linux重复命令
  • Linux系统如何创建目录
  • 批处理 /b
  • unity怎么做触屏按键
  • nodejs项目搭建
  • 深入了解求助者时,首先要进行工作是
  • div显示边框线
  • shell脚本switch
  • [置顶]星陨计划
  • 开票信息电子版怎么做
  • 广东电子税务局官网登录入口手机版
  • 如何计算土地增值税税率
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号