# Tensorflow (5) Word2Vec

word2vec模型深度解析 – 知乎

Word2Vec的训练过程详解 – 知乎

Word2Vec-——gensim实战教程 – 知乎

1、基础背景

[En]

Which of the two people is more like me in the picture below?

[En]

When dealing with vectors, the common method to calculate the similarity score is cosine similarity:

[En]

CoSine similarity applies to any number of dimensions. These scores are better than the last one.

1.我们可以将人和事物表示为代数向量（这对机器来说很棒！）。

2.我们可以很容易地计算出相似的向量之间的相互关系。

2、Word Embeddings

[ 0.50451 , 0.68607 , -0.59517 , -0.022801, 0.60046 , -0.13498 , -0.08813 , 0.47377 , -0.61798 , -0.31012 , -0.076666, 1.493 , -0.034189, -0.98173 , 0.68229 , 0.81722 , -0.51874 , -0.31503 , -0.55809 , 0.66421 , 0.1961 , -0.13495 , -0.11476 , -0.30344 , 0.41177 , -2.223 , -1.0756 , -1.0783 , -0.34354 , 0.33505 , 1.9927 , -0.04234 , -0.64319 , 0.71125 , 0.49159 , 0.16754 , 0.34344 , -0.25663 , -0.8523 , 0.1661 , 0.40102 , 1.1685 , -1.0137 , -0.21585 , -0.15155 , 0.78321 , -0.91241 , -1.6106 , -0.64426 , -0.51042 ]

[En]

Let’s color-code cells according to their values (red if they are close to 2, white if they are close to 0, and blue if they are close to-2):

1.所有这些不同的单词都有一条直的红色列。 它们在这个维度上是相似的（虽然我们不知道每个维度是什么）

2.你可以看到”woman”和”girl”在很多地方是相似的，”man”和”boy”也是一样

3.”boy”和”girl”也有彼此相似的地方，但这些地方却与”woman”或”man”不同。这些是否可以总结出一个模糊的”youth”概念？可能吧。

4.除了最后一个单词，所有单词都是代表人。 我添加了一个对象”water”来显示类别之间的差异。你可以看到蓝色列一直向下并在 “water”的词嵌入之前停下了。

5.”king”和”queen”彼此之间相似，但它们与其它单词都不同。这些是否可以总结出一个模糊的”royalty”概念？

3、语言模型

[En]

The output of the natural language model is the probability score of the words known to the model, and we usually express the probability as a percentage, but in fact, a score of 40% is expressed as 0.4 in the output vector group.

4、 语言模型训练

[En]

By looking for the words that often appear near each word, their mapping can be obtained. The mechanism is as follows:

1.先是获取大量文本数据(例如所有维基百科内容)

1. 然后我们建立一个可以沿文本滑动的窗(例如一个窗里包含三个单词)

2. 利用这样的滑动窗就能为训练模型生成大量样本数据。

[En]

When this window slides along the text, we can (truly) generate a dataset for model training.

5、 Skipgram模型

[En]

We should consider not only the first two words of the target word, but also the next two words.

[En]

If we do this, the model we actually build and train is as follows:

[En]

Another architecture, which does not guess the target word based on the preceding and following text (before and after the word), but * speculates the possible word before and after the current word. Let’s imagine that the sliding window in the training data is shown in the following figure:*

[En]

The words in the green box are the input words, while the pink box is the possible output.

[En]

The color depth of the pink box is different here because the sliding window produces four separate samples for the training set:

[En]

Then we move the sliding window to the next location, so we produce the next four samples:

[En]

After moving several sets of positions, we can get a batch of samples:

6、模型训练过程

[En]

Objective: how to use it to train a natural language model that can predict adjacent words.

[En]

Start with the first sample in the dataset. We input features into an untrained model and ask it to predict a possible adjacent word.

[En]

The model performs three steps and enters a prediction vector (corresponding to the probability of each word in the vocabulary). Because the model is untrained, the prediction at this stage must be wrong. But it doesn’t matter, we already know which word it should be– this word is the output tag in my training set data:

[En]

What is the deviation of the model? Subtract the two vectors and you get the deviation vector:

7、模型切换与负样例

[En]

[En]

This simple transformation changes the model we need from a neural network to a * logical regression model -so it becomes simpler and faster.*

[En]

This requires us to switch the structure of the dataset-the tag value is now a new column with a value of 0 or 1. They will all be 1 because all the words we add are neighbors.

[En]

The computing speed is amazing now-millions of examples can be processed in a few minutes. But we still need to fix a loophole. If all the examples are neighbors (goal: 1), our “genius model” may be trained to return 1 color forever-100% accurate, but it learns nothing but spam embedding results.

[En]

To solve this problem, we need to introduce negative samples into the dataset-word samples that are not neighbors. Our model needs to return 0 for these samples. The model must try to solve this challenge-and it must still be kept at high speed.

[En]

For each sample in our dataset, we added a negative example. They have the same input words with a label of 0.

[En]

But what do we fill in as output words? We randomly pick words from the vocabulary

[En]

The idea is inspired by noise comparison estimates. We compare the actual signal (a positive example of a neighboring word) with noise (a randomly selected word that is not a neighbor). This leads to a great compromise between computational and statistical efficiency.

8、 Word2vec训练流程

（1）预先处理训练模型的文本，确定词典的大小（我们称之为vocab_size，比如说10,000）以及哪些词被它包含在内。

（2）在训练阶段的开始，我们创建两个矩阵—— Embedding矩阵 和Context矩阵。两个矩阵由单词表中每个单词的 嵌入（Embedding）组成，所以这两个二维矩阵的一个维度是vocab_size，另一个维度嵌入 Embedding的长度（embedding_size——300是一个常见值，但我们在前文也看过50的例子）。

[En]

At the beginning of the training process, we initialize these matrices with random values. Then we begin the training process. In each training step, we take an adjacent example and its related non-adjacent example. Let’s take a look at our number one

error = target – sigmoid_scores

## 1. 背景知识

Word2Vec是语言模型中的一种，它是从大量文本预料中以无监督方式学习语义知识的模型，被广泛地应用于自然语言处理中。

1.1 统计语言模型

p(W)被称为语言模型，即用来计算这个句子概率的模型。利用Bayes公式，上式可以被链式地分解为：

1.2 N-gram模型

[En]

There is a general method to solve the problem in the field of machine learning: after modeling the problem, an objective function is constructed, and then the objective function is optimized to obtain a set of optimal parameters. finally, the model corresponding to this set of optimal parameters is used to predict.

[En]

For statistical language models, using maximum likelihood, the objective function can be set to:

1.3 神经概率语言模型

Softmax是一个非常低效的处理方式，需要先计算每个单词的概率，并且还要计算指数，指数在计算机中都是用级数来近似的，计算复杂度很高，最后再做归一化处理。此后很多研究都针对这个问题进行了优化，比如层级softmax、softmax tree

• *词语之间的相似性可以通过词向量来体现。

[En]

For example, if a (English) corpus

A dog is running in the room
A cat is running in the room
The cat is running in a room
A dog is walking in a bedroom
The dog was walking in the room

[En]

Finally, in retrospect, what role does word vector play in the whole neural probabilistic language model? During training, it is an auxiliary parameter to help construct the objective function, and after the training is completed, it seems to be a by-product of the language model. But this by-product should not be underestimated, which will be further elaborated in the next section.

## 2. 词向量

[En]

In the tasks related to natural language processing, it is usually necessary to mathematize the language to the algorithms in machine learning, because the machine is not a human being, and the machine only recognizes mathematical symbols. Vector is what people abstract from nature to the machine to deal with, basically it can be said that the vector is the main way for people to input to the machine.

## 2.1 One-Hot Representation

I like writing code

1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1

[En]

But the word indicates two drawbacks:

（1）容易受维数灾难的困扰，尤其是将其用于 Deep Learning的一些算法时；

（ 2 ）词汇鸿沟，不能很好地刻画词与词之间的相似性；

（3）强稀疏性；

## 2.2 Distributed Representation

Distributed Representation基本想法是：通过训练将某种语言中的每一个 映射成一个固定长度的 短向量（当然这里的”短”是相对于One-Hot Representation的”长”而言的），所有这些向量构成一个 词向量空间，而每一个向量则可视为 该空间中的一个 ，在这个空间上 引入”距离“，就可以根据词之间的距离来判断它们之间的 语法、语义上的相似性了。Word2Vec中采用的就是这种Distributed Representation 的词向量。

## 3.1 CBOW

### 3.1.1 Simple CBOW Model

* 输入层到隐藏层之间有一个 权重矩阵W，隐藏层得到的值是由 输入X乘上 权重矩阵得到的（细心的人会发现，0-1向量乘上一个矩阵，就相当于选择了权重矩阵的某一行，如图：输入的向量X是[0，0，1，0，0，0]，W的转置乘上X就相当于从矩阵中选择第3行[2,1,3]作为隐藏层的值）;
* 隐藏层到输出层也有一个权重矩阵W’，因此，输出层向量y的每一个值，其实就是 隐藏层的向量点乘 权重向量W’的每一列，比如输出层的第一个数7，就是 隐藏层向量[2,1,3]和 权重向量列向量[1，2，1]点乘之后的结果；
* 最终的输出需要经过softmax函数，将输出向量中的每一个元素归一化到0-1之间的概率，概率最大的，就是预测的词。

## 4.1 基于Hierarchical Softmax的CBOW

4.1.1 CBOW模型网络结构

[En]

Preliminary knowledge: Huffman coding, as shown in the figure:

word2vec hierarchical softmax结构

[En]

How should we get the probability of a certain leaf node?

## 4.2 基于Hierarchical Softmax的Skip-gram

4.2.1 Skip-gram模型网络结构

* 输出层：和CBOW模型一样，输出层也是一颗Huffman树。

5. 基于Negative Sampling的模型

[En]

At every step of the training process of the traditional neural network, it is necessary to calculate the probability values of other words in the thesaurus in the current context, which leads to a huge amount of computation.

[En]

At this point, the objective function of maximization is as follows:

number，这样wI=phone,wO=number, 正例就是number这个词，负例就是不太可能与phone共同出现的词。负采样的思想是每次训练只随机取一小部分的负例使他们的概率最小，以及对应的正例概率最大。随机采样需要假定一个概率分布，word2vec中直接使用词频作为词的分布，不同的是频数上乘上0.75，相比于直接使用频次作为权重，取0.75幂的好处可以减弱不同频次差异过大带来的影响，使得小频次的单词被采样的概率变大。

[En]

The loss function defined by negative sampling is as follows:

Original: https://blog.csdn.net/light169/article/details/124035519
Author: light169
Title: Tensorflow (5) Word2Vec

(0)

### 大家都在看

• #### python + dlib 实现简单疲劳驾驶检测

引言 本文章实现的疲劳驾驶功能比较单一，仅对眼部进行一个眨眼阈值的检测，并没有对人脸其它部位（瞌睡会点头、嘴部微张等）进行检测，需要在疲劳驾驶这个方向上深究的hxd可以自己对代码进…

人工智能 2023年7月19日
0146
• #### sklearn实现决策树（分类树）

阿喽哈~小伙伴们，今天我们来唠一唠决策树 ♣ ♣ ♣ 决策树应该是很多小伙伴入门机器学习的时候最先接触到的分类算法之一，决策树分为分类树和回归树，今天我们只说分类树~ 简单回顾一下…

人工智能 2023年7月1日
0145
• #### 机器学习 & 知识图谱常用术语

算法常用术语 1. 机器学习 1.1 什么是机器学习 什么是”学习”？学习就是人类通过观察、积累经验，掌握某项技能或能力。就好像我们从小学习识别字母、认识汉…

人工智能 2023年6月1日
0153
• #### Python 离散小波变换（DWT） pywt库

文章目录 * – + 一、小波变换 + * 离散小波变换函数 + 二、Haar 变换 + * 2.1 一维Haar变换 * 2.2 二维离散小波变换 * 2.3 pyw…

人工智能 2023年7月6日
0254
• #### 开放信息抽取(OIE)系统（一）–概述

开放信息抽取(OIE)(一)——概述 开放信息抽取（OIE）是信息抽取的一种全新的范式，主要思想是减少人工参与，无监督地进行信息抽取，抽取那些实体、关系未定义地情形。早期，10年代…

人工智能 2023年6月1日
0217
• #### 遥感图像小目标检测算法

遥感图像小目标检测算法 小目标检测算法论文代码 https://github.com/knhngchn/awesome-tiny-object-detection 1.YOLT Y…

人工智能 2023年5月25日
0161
• #### box-shadow 和 outline 的多重边框之旅

人工智能 2023年6月4日
0199
• #### 简单的二次回归和线性回归的拟合效果对比

文章目录 前言 * 本次主要是简单的对比了一下线性回归和二次回归的拟合效果对比，查看两种回归之间的差异。 一、引入我们所需要的库 二、创建训练数据集和测试数据集，并绘制训练集的散点…

人工智能 2023年6月17日
0202
• #### 关于解决pip成功下载模块后，pycharm导入模块出现找不到模块的问题

问题 ModuleNotFoundError: No module named ‘visdom’导入模块时，报错模块’visdom’…

人工智能 2023年7月6日
0152
• #### 机器学习（1）——Python数据处理与绘图

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

人工智能 2023年6月15日
0186
• #### 【Opencv】光照不均匀图像处理-基于Retinex理论

简单记录一下学习过程 原理介绍 * 图像机理 方法介绍 功能实现 * 程序设计 结果展示 原理介绍 近期在处理样本的过程中，在对样本的处理的过程中，总是收到样本拍摄过程中光照的影响…

人工智能 2023年7月19日
0170
• #### 知识图谱综述

知识图谱概述 * – 1.摘要 – 2.概述 – + 2.1 知识图谱 + 2.2 知识图谱设计原则 – 3.知识图谱技术 &#82…

人工智能 2023年6月1日
0222
• #### YOLOv5的Neck端设计

YOLOv5的Neck端设计 在上一篇《YOLOv5的Backbone设计》中，我们从yolov5的backbone配置文件出发，细致讲解了backbone的网络架构及各模块的源码…

人工智能 2023年7月20日
0222
• #### 【机器学习】最经典案例：房价预测（完整流程：数据分析及处理、模型选择及微调）

环境：anaconda+jupyter notebook 文章目录 * – 数据处理前导： – （一）、数据分析 – + 1、收集数据 + 2、…

人工智能 2023年7月4日
0237
• #### Pytorch中nn.Module中的self.register_buffer解释

self.register_buffer作用解释 今天遇到了这样一种用法，self.register_buffer(‘name’,Tensor)，该方法的作…

人工智能 2023年7月5日
0166
• #### 18家机构批量刷新SOTA！T5 is all you need！

卷友们好，我是rumor。 昨天刚说最近没什么好玩的文章，老天就好像听到了我的话一样，在Arixv空降一篇文章下来，打开一看到作者list我都傻眼了： https://arxiv….

人工智能 2023年5月28日
0137