Word2vec 学习笔记

word2vec 学习笔记

  • 0. 引言
  • 1. Word2vec 简介
    • 1-1. CBOW
    • 1-2. SG
  • 2. 实战

0. 引言

最近研究向量检索,看到有同事使用 MeCab、Doc2Vec,所以把 Word2vec 这块知识学习一下。

1. Word2vec 简介

Word2vec 即 word to vector,顾名思义,就是把词转换成向量,该方法在 2013 年由谷歌公司提出并实现。

笼统地说,Word2vec 的原理是根据词语的上下文来提取一个词的语义,在统计上,词义相同的词的上下文也应该比较类似。例如"猫"和"狗"都是人类的宠物,可能会和"喂"“可爱”"粘人"之类的词一起出现,通过这样的规律,我们可以得出"猫"和"狗"这两个词的相似性。

该方法使在深度学习中使用很大的词表成为可能。

Word2vec 可以解决 One-Hot 表示法的词向量维度高且无法体现词语意义的问题,也就是说 One-Hot 表示法的 0 和 1 是无规律的,而 Word2vec 产生的词向量能体现词语间的关系。

该方法有以下特点:

  • 第一,算法效率高,可以在百万数量级的词典和上亿规模的数据上训练;
  • 第二,得到的词向量可以较好地反映词间的语义关系。

Word2vec 提出两种基本模型:

  • CBOW:连续词袋模型
  • SG:跳词模型

1-1. CBOW

CBOW 即 Continuous Bag-of-Words,是通过一个词的上下文来预测这个词的含义。

在这里插入图片描述

1-2. SG

SG 即 Skip-Gram,是通过一个词语来预测上下文词语。

在这里插入图片描述

2. 实战

下面实战的对象语言是日文,如果想尝试中文,请自行搜索其他文档。

安装MeCab,

sudo dnf install mecab

安装词典,

sudo dnf install mecab-ipadic

安装开发包(用于gensim),

sudo dnf install mecab-devel

安装Python绑定,

pip install mecab-python3

安装gensim,

pip install gensim

下载 wiki 记事(日文),

curl https://dumps.wikimedia.org/jawiki/latest/jawiki-latest-pages-articles.xml.bz2
-o jawiki-latest-pages-articles.xml.bz2

整理 wiki 记事,

git clone https://github.com/attardi/wikiextractor; cd wikiextractor
rm -rf .git
vi wikiextractor/extract.py

--- modify
ANCHOR_CLASS = r'[^][\x00-\x08\x0a-\x1F]'
ExtLinkBracketedRegex = re.compile(
    '\[((' + '|'.join(wgUrlProtocols) + ')' + EXT_LINK_URL_CLASS + r'+)' +
    r'\s*((?:' + ANCHOR_CLASS + r'|\[\[' + ANCHOR_CLASS + r'+\]\])' + r'*?)\]',
    re.I | re.S | re.U)

EXT_IMAGE_REGEX = re.compile(
    r"""^(http://|https://)([^][<>"\x00-\x20\x7F\s]+)
    /([A-Za-z0-9_.,~%\-+&;#*?!=()@\x80-\xFF]+)\.(gif|png|jpg|jpeg)$""",
    re.I | re.X | re.S | re.U)
---

refer: https://github.com/attardi/wikiextractor/pull/182/commits/45662a5c914a1fb896bbdbbc26be5b3ea598cc51

python setup.py install
python -m wikiextractor.WikiExtractor ../jawiki-latest-pages-articles.xml.bz2
# 该命令将从指定目录中提取所有包含 "wiki" 的文本文件并将其合并到一个名为 "wiki.txt" 的文件中。
find text/ | grep wiki | awk '{system("cat "$0" >> wiki.txt")}'
# 下面这个过程比较花时间
mecab -Owakati wiki.txt -o wiki_wakati.txt
nkf -w --overwrite wiki_wakati.txt

训练,

from gensim.models import word2vec
import logging

logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)
sentences = word2vec.Text8Corpus('./wiki_wakati.txt')

model = word2vec.Word2Vec(sentences, size=200, min_count=20, window=15)
model.save("./wiki.model")

推理1,在推理过程中,可以提取与指定为正向的词语相似的词语。

from gensim.models import word2vec

model = word2vec.Word2Vec.load("./wiki.model")
results = model.wv.most_similar(positive=['講義'])
for result in results:
    print(result)

推理2,如果指定多个正向词语,可以提取与这些词语语义相近的词语。

from gensim.models import word2vec

model = word2vec.Word2Vec.load("../../dataset/w2v_wiki/wiki.model")
results = model.wv.most_similar(positive=['メジャー',"野球"])
for result in results:
    print(result)

推理3,通过指定正向和反向词语,可以进行语义消减。

from gensim.models import word2vec

model = word2vec.Word2Vec.load("../../dataset/w2v_wiki/wiki.model")
results = model.wv.most_similar(positive=['東京',"ロンドン"],negative=["日本"])
for result in results:
    print(result)

完结!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python 编程中反斜杠 “\” 的作用:作为续行符和转义字符,处理文件路径和正则表达式时需特别注意。

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ Python 中的反斜杠 \ 可以被用作续行符&#xff0c;它允许你将一行代码分成多行来书写&#xff0c;以提高代码的可读性。这在处理长字符串、复杂的数学表达式或其他需要多行布局的代码时非常有用。 使…

Spring Boot Starter: 快速简明地创建Spring应用

Spring Boot Starter是Spring Boot的核心功能之一&#xff0c;它帮助开发人员快速简明地创建、配置和运行Spring应用。在本文中&#xff0c;我们将详细介绍Spring Boot Starter以及如何使用它创建一个Spring Boot应用。 文章目录 什么是Spring Boot Starter?为何使用Spring B…

Spring Boot(六十九):利用Alibaba Druid对数据库密码进行加密

1 Alibaba Druid简介 之前介绍过Alibaba Druid的,章节如下,这里就不介绍了: Spring Boot(六十六):集成Alibaba Druid 连接池 这章使用Alibaba Druid进行数据库密码加密,在上面的代码上进行修改,这章只介绍密码加密的步骤。 目前越来越严的安全等级要求,我们在做产品…

ICANN备稿时debug遇到的问题

包问题 装包&#xff1a;先用fastai出现单击没有跳转的情况&#xff1a;安装pylance即可出现了用pip3 uninstall后pip3 list还有原来的numpy&#xff0c;然后用conda uninstall之后就行了。pip, pip3, conda这几个来回用。 精度问题 打印tensor数组自动保留后四位&#xff1a;…

Tensorflow笔记(二):激活函数、优化器等、神经网络模型实现(商品销量预测)

import tensorflow as tf import numpy as np from tqdm import tqdm# ----------------------------- tensor常用函数2 ----------------------------------- a tf.constant([1, 2, 3, 1, 2]) b tf.constant([0, 1, 3, 4, 5]) c tf.where(tf.greater(a, b), a, b) # 若a&g…

中国生态系统服务空间数据集/食物生产、土壤保持、水源涵养、防风固沙、生物多样性、碳固定

生态系统服务是生态系统形成并维持的人类赖以生存和发展的环境条件与效用&#xff0c;是测度自然生态系统保护价值的重要指标。 生态系统服务(ecosystem service)是指生态系统为人类社会的生产、消费、流通、还原和调控活动提供的有形或无形的自然产品、环境资源和生态损益的能…

Jenkins通知目标服务器拉取Harbor镜像部署

1.告诉目标服务器拉取哪个镜像 2.判断当前有没有正在运行此容器&#xff0c;有就删除 3.接着查看拉取的镜像目标服务器上是否已存在&#xff0c;有就删除 4.拉取Harbor镜像 5.运行容器 目标服务器编写脚本 创建个部署脚本 vim deploy.sh告诉目标服务器Harbor地址、仓库、镜像…

从电影《沙丘》说起——对人工智能的思考

从《沙丘》开始说起 之前看《沙丘》电影&#xff0c;里面有一类角色叫门泰特&#xff0c;这类人大脑可以飞快地运算&#xff0c;在电影设定里是替换人工智能、机器运算的存在。男主保罗也是这类型的人&#xff0c;但他可能基因更强大&#xff0c;吸食了香料后&#xff0c;他的…

测试人员Bug书写规范

&#x1f4cb; 个人简介 作者简介&#xff1a;大家好&#xff0c;我是凝小飞&#xff0c;软件测试领域作者支持我&#xff1a;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; 在测试人员日常工作中&#xff0c;关于bug的编写和定义是一个比较经常的工作&#xff0c;如果bug编写描…

应用开发平台集成表单设计器系列之4——表单构造器深度了解

背景 平台需要实现自定义表单功能&#xff0c;作为低代码开发的一部分&#xff0c;通过技术预研和技术选型&#xff0c;选择form-create和form-create-designer这两个组件进行集成作为实现方案。通过深入了解和技术验证&#xff0c;确认了组件的功能能满足需求&#xff0c;具备…

el-select使用filterable下拉无法关闭得问题

这里推荐一个前端框架 sakuya / SCUI&#xff0c;他里面有个formTable&#xff0c;可以解决很多订单明细保存得问题。基本沿用element-plus的前端使用模式&#xff0c;让表单表格变的非常容易。 这个的供应商插件&#xff0c;当使用filterable后&#xff0c;点击表格重的选项&…

包装类常用方法

包装类 常用Integer.valueOf(int i) 包装类就是把基本类型的数据包装成对象 基本类型转化为对象 实际上idea会自动装箱(自动的把基本类型的数据转为对象) 自动装箱:(自动的把基本类型的数据转为对象) 自动拆箱:可以自动把包装类型的对象转为对应基本数据类型 泛型和集合不支持…

【Liunx-后端开发软件安装】Liunx安装nginx

【Liunx-后端开发软件安装】Liunx安装nginx 使用安装包安装 一、简介 nginx&#xff0c;这个家伙可不是你厨房里的那位大厨&#xff0c;它可是互联网世界的“煎饼果子摊主”。想象一下&#xff0c;在熙熙攘攘的网络大街上&#xff0c;nginx挥舞着它的锅铲——哦不&#xff0c;是…

无设备树platform设备驱动实验:platform驱动注册代码框架测试

一. 简介 前面两篇文章中&#xff0c;一篇实现 platform设备注册代码实现&#xff0c;文章如下&#xff1a; 无设备树platform设备驱动实验&#xff1a;platform设备注册代码实现-CSDN博客 一篇文章实现了 platform驱动注册代码框架&#xff0c;文章如下&#xff1a; 无设…

Google云计算原理与应用(三)

目录 五、分布式存储系统Megastore&#xff08;一&#xff09;设计目标及方案选择&#xff08;二&#xff09;Megastore数据模型&#xff08;三&#xff09;Megastore中的事务及并发控制&#xff08;四&#xff09;Megastore基本架构&#xff08;五&#xff09;核心技术——复制…

Mac屏幕录制编辑软件

以下是一些Mac平台上受到推荐和好评的屏幕录制编辑软件&#xff1a; OBS Studio&#xff08;免费且开源&#xff09;&#xff1a; OBS 是一款功能强大的免费屏幕录制工具&#xff0c;不仅限于游戏直播&#xff0c;也适用于各种屏幕录制需求。它允许用户捕获屏幕、摄像头、音频&…

Python常见报错疑难杂症的解决思路解决方案

目录快速跳转 一、TypeError&#xff1a;类型错误&#xff0c;对象用来表示值的类型非预期类型时发生的错误 二、AttributeError&#xff1a;属性错误&#xff0c;特性引用和赋值失败时会引发属性错误 三、NameError&#xff1a;试图访问的变量名不存在。 四、错误使用标点符…

设计模式:智能合约的经典设计模式及解析

苏泽 大家好 这里是苏泽 一个钟爱区块链技术的后端开发者 本篇专栏 ←持续记录本人自学两年走过无数弯路的智能合约学习笔记和经验总结 如果喜欢拜托三连支持~ 总而言之&#xff0c;智能合约实现上要达到的目标是&#xff1a;完备的业务功能、精悍的代码逻辑、良好的模块抽象…

JavaSE、JavaEE和Jakarta EE的历史、区别与联系

JavaSE、JavaEE和Jakarta EE是Java平台中的三个重要组成部分&#xff0c;它们各自承担着不同的角色&#xff0c;同时也有着密切的联系。在理解它们之间的历史、区别和联系之前&#xff0c;我们首先需要了解它们的基本概念。 JavaSE&#xff08;Java Standard Edition&#xff…

论文阅读_时序模型_iTransformer

1 2 3 4 5 6 7 8英文名称: ITRANSFORMER: INVERTED TRANSFORMERS ARE EFFECTIVE FOR TIME SERIES FORECASTING 中文名称: ITRANSFORMER&#xff1a;倒置Transformers在时间序列预测中的有效性 链接: https://openreview.net/forum?idX6ZmOsTYVs 代码: https://github.com/thum…