当前位置: 首页 > article >正文

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)

完结!


http://www.kler.cn/a/272296.html

相关文章:

  • HTML语言的多线程编程
  • 题解 CodeForces 1037D Valid BFS? 三种解法 C++
  • 我在广州学Mysql 系列——触发器的使用
  • iOS中的设计模式(三)- 工厂方法
  • Asp .Net Core 实现微服务:集成 Ocelot+Nacos+Swagger+Cors实现网关、服务注册、服务发现
  • NotebookLM:Google 最新 AI 笔记助理解析与实战应用
  • mac安全干净卸载Anaconda3
  • 安装使用sqlite
  • ChatGPT编程实现简易聊天工具
  • What Can ChatGPT Tell Us About the Evolution of Artificial Intelligence?
  • ​使用PotPlayer播放器查看软解和硬解4K高清视频时的CPU及GPU占用情况​
  • LabVIEW电液伺服作动器
  • 【C++ 08】vector 顺序表的常见基本操作
  • Python——pgzero游戏打包exe执行时报错
  • 【Docker】常用命令 docker ps
  • pyinstaller打包不显示DOS窗口
  • 【GPT-SOVITS-03】SOVITS 模块-生成模型解析
  • LabVIEW电磁阀特性测控系统
  • UnityShader:IBL
  • 【洛谷 P9242】[蓝桥杯 2023 省 B] 接龙数列 题解(线性DP+二维数组)
  • -bash-4.2$
  • Lua中文语言编程源码-第六节,更改lmathlib.c 数学库函数, 使Lua加载中文库关键词(与数学库相关)
  • docker-compose是什么
  • 【PyTorch】进阶学习:一文详细介绍 torch.load() 的应用场景、实战代码示例
  • 指南:在各主流操作系统上安装与配置Apache Tomcat
  • git问题列表(一)(持续更新中~~~)