From 9a678cdb1833bf33b46080fa3f5000d1159ffadc Mon Sep 17 00:00:00 2001
From: ChungKingExpress <787797103@qq.com>
Date: Sun, 24 Apr 2022 10:14:51 +0800
Subject: [PATCH] test-pr
---
.idea/inspectionProfiles/Project_Default.xml | 6 +
.idea/vcs.xml | 6 +
.idea/workspace.xml | 82 ++++
.../1.0 机器学习基础/1.0.6 Word2vec.md | 391 ++++++++++++++++++
.../1.0 机器学习基础/word2vec_pictures/1.png | Bin 0 -> 27600 bytes
.../1.0 机器学习基础/word2vec_pictures/10.png | Bin 0 -> 86298 bytes
.../1.0 机器学习基础/word2vec_pictures/11.png | Bin 0 -> 23066 bytes
.../1.0 机器学习基础/word2vec_pictures/12.png | Bin 0 -> 34036 bytes
.../1.0 机器学习基础/word2vec_pictures/2.png | Bin 0 -> 42885 bytes
.../1.0 机器学习基础/word2vec_pictures/3.png | Bin 0 -> 60069 bytes
.../1.0 机器学习基础/word2vec_pictures/4.png | Bin 0 -> 59321 bytes
.../1.0 机器学习基础/word2vec_pictures/5.png | Bin 0 -> 12946 bytes
.../1.0 机器学习基础/word2vec_pictures/6.png | Bin 0 -> 16461 bytes
.../1.0 机器学习基础/word2vec_pictures/7.png | Bin 0 -> 17384 bytes
.../1.0 机器学习基础/word2vec_pictures/8.png | Bin 0 -> 120290 bytes
.../1.0 机器学习基础/word2vec_pictures/9.png | Bin 0 -> 83195 bytes
16 files changed, 485 insertions(+)
create mode 100644 .idea/inspectionProfiles/Project_Default.xml
create mode 100644 .idea/vcs.xml
create mode 100644 .idea/workspace.xml
create mode 100644 docs/第一章 推荐系统基础/1.0 机器学习基础/1.0.6 Word2vec.md
create mode 100644 docs/第一章 推荐系统基础/1.0 机器学习基础/word2vec_pictures/1.png
create mode 100644 docs/第一章 推荐系统基础/1.0 机器学习基础/word2vec_pictures/10.png
create mode 100644 docs/第一章 推荐系统基础/1.0 机器学习基础/word2vec_pictures/11.png
create mode 100644 docs/第一章 推荐系统基础/1.0 机器学习基础/word2vec_pictures/12.png
create mode 100644 docs/第一章 推荐系统基础/1.0 机器学习基础/word2vec_pictures/2.png
create mode 100644 docs/第一章 推荐系统基础/1.0 机器学习基础/word2vec_pictures/3.png
create mode 100644 docs/第一章 推荐系统基础/1.0 机器学习基础/word2vec_pictures/4.png
create mode 100644 docs/第一章 推荐系统基础/1.0 机器学习基础/word2vec_pictures/5.png
create mode 100644 docs/第一章 推荐系统基础/1.0 机器学习基础/word2vec_pictures/6.png
create mode 100644 docs/第一章 推荐系统基础/1.0 机器学习基础/word2vec_pictures/7.png
create mode 100644 docs/第一章 推荐系统基础/1.0 机器学习基础/word2vec_pictures/8.png
create mode 100644 docs/第一章 推荐系统基础/1.0 机器学习基础/word2vec_pictures/9.png
diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml
new file mode 100644
index 00000000..03d9549e
--- /dev/null
+++ b/.idea/inspectionProfiles/Project_Default.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 00000000..94a25f7f
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/workspace.xml b/.idea/workspace.xml
new file mode 100644
index 00000000..7a892a26
--- /dev/null
+++ b/.idea/workspace.xml
@@ -0,0 +1,82 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1650726567145
+
+
+ 1650726567145
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/第一章 推荐系统基础/1.0 机器学习基础/1.0.6 Word2vec.md b/docs/第一章 推荐系统基础/1.0 机器学习基础/1.0.6 Word2vec.md
new file mode 100644
index 00000000..ae55b333
--- /dev/null
+++ b/docs/第一章 推荐系统基础/1.0 机器学习基础/1.0.6 Word2vec.md
@@ -0,0 +1,391 @@
+```markdown
+### 1背景和引入:我们该如何表达单词的含义?
+ 在所有的NLP任务中,首先面临的第一个问题是我们该如何表示单词。这种表示将作为inputs输入到特定任务的模型中,如机器翻译,文本分类等典型NLP任务。
+```
+
+```markdown
+#### 1.1通过同义词表达单词的含义
+
+ 一个很容易想到的解决方案是使用同义词来表示一个单词的意义。
+ 比如***WordNet***,一个包含同义词(和有“is a”关系的词)的词库。
+```
+
+```
+##### 导包
+```
+
+```python
+!pip install --user -U nltk
+```
+
+```python
+!python -m nltk.downloader popular
+```
+
+```markdown
+##### 如获取"good"的同义词
+```
+
+```python
+from nltk.corpus import wordnet as wn
+poses = { 'n':'noun', 'v':'verb', 's':'adj (s)', 'a':'adj', 'r':'adv'}
+for synset in wn.synsets("good"):
+ print("{}: {}".format(poses[synset.pos()],", ".join([l.name() for l in synset.lemmas()])))
+```
+
+```markdown
+##### 如获取与“pandas”有"is a"关系的词
+```
+
+```python
+panda = wn.synset("panda.n.01")
+hyper = lambda s: s.hypernyms()
+list(panda.closure(hyper))
+```
+
+```markdown
+##### WordNet的问题
+ 1.单词与单词之间缺少些微差异的描述。
+ 比如“高效”只在某些语境下是"好"的同义词
+
+ 2.丢失一些词的新含义。
+ 比如“芜湖”,“蚌埠”等词的新含义
+
+ 3.相对主观
+
+ 4.需要人手动创建和调整
+
+ 5.无法准确计算单词的相似性
+```
+
+```markdown
+#### 1.2通过one-hot word vectors表达单词的含义
+
+在传统NLP中,人们使用one-hot向量(一个向量只有一个值为1,其余的值为0)来表示单词
+
+ 如:motel = [0 0 0 0 0 0 0 0 0 0 1 0 0 0 0]
+
+ 如:hotel = [0 0 0 0 0 0 0 1 0 0 0 0 0 0 0]
+
+ one-hot向量的维度是词汇表的大小(如:500,000)
+
+ 注:上面示例词向量的维度为方便展示所以比较小
+
+ ---------------------------------------------
+
+one-hot向量表示单词的问题:
+
+ 1.这些词向量是***正交向量***,无法通过数学计算(如点积)计算相似性
+
+ 2.依赖WordNet等同义词库建立相似性效果也不好
+```
+
+```markdown
+#### 1.3通过dense word vectors表达单词的含义
+ 如果我们可以使用某种方法为每个单词构建一个合适的dense vector,如下图,那么通过***点积等数学计算就可以获得单词之间的某种联系***
+
+
+
+ 
+```
+
+```markdown
+### 2模型介绍与推导:Word2vec
+```
+
+```markdown
+#### 2.1语言学基础
+ 首先,我们引入一个上世纪五十年代,一个语言学家的研究成果:
+
+ ***“一个单词的意义由它周围的单词决定”***
+
+ “You shall know a word by the company it keeps” (J. R. Firth 1957: 11)
+
+ 这是现代NLP中一个最为成功的理念。
+
+ 我们先引入上下文context的概念:当单词 w 出现在文本中时,其***上下文context***是出现在w附近的一组单词(在固定大小的窗口内),如下图
+
+ 
+
+ 这些上下文单词context words决定了banking的意义
+```
+
+```markdown
+#### 2.2Word2vec概述
+
+Word2vec(Mikolov et al. 2013)是一个用来学习dense word vector的算法:
+
+ 1.我们使用**大量的文本语料库**
+
+ 2.词汇表中的每个单词都由一个**词向量dense word vector**表示
+
+ 3.遍历文本中的每个位置 t,都有一个**中心词 c(center) 和上下文词 o(“outside”)**,如图1中的banking
+
+ 4.在整个语料库上使用数学方法**最大化单词o在单词c周围出现了这一事实**,从而得到单词表中每一个单词的dense vector
+
+ 5.不断调整词向量dense word vector以达到最好的效果
+```
+
+```markdown
+#### 2.3 Skip-gram(SG)
+
+Word2vec包含两个模型,**Skip-gram与CBOW**。下面,我们先讲解**Skip-gram**模型,用此模型详细讲解概述中所提到的内容。
+
+----------------------------------------------
+
+概述中我们提到,我们希望**最大化单词o在单词c周围出现了这一事实**,而我们需要用数学语言表示“单词o在单词c周围出现了”这一事件,如此才能进行词向量的不断调整。
+
+很自然地,我们需要**使用概率工具描述事件的发生**,我们想到用条件概率**P(o$\arrowvert$c)**表示“给定中心词c,它的上下文词o在它周围出现了”
+
+下图展示了以“into”为中心词,窗口大小为2的情况下它的上下文词。以及相对应的**P(o$\arrowvert$c)**
+
+
+
+我们滑动窗口,再以banking为中心词
+
+
+
+那么,如果我们在整个语料库上不断地滑动窗口,我们可以得到所有位置的P(o$\arrowvert$c),我们希望在所有位置上**最大化单词o在单词c周围出现了这一事实**,由极大似然法,可得:
+
+max$\prod_c$$\prod_o$P(o$\arrowvert$c) 【式1】
+
+此式还可以依图3写为:
+
+
+
+加log,加负号,缩放大小可得:
+
+
+
+上式即为**skip-gram的损失函数**,最小化损失函数,就可以得到合适的词向量
+
+---------------------------
+
+得到式1后,产生了两个问题:
+
+1.P(o$\arrowvert$c)怎么表示?
+
+2.为何最小化损失函数能够得到良好表示的词向量dense word vector?
+
+----------------------
+
+回答1:我们使用**中心词c和上下文词o的相似性**来计算P(o$\arrowvert$c),更具体地,相似性由**词向量的点积**表示:$u_{o^T}$$\cdot$$v_c$。
+
+使用词向量的点积表示P(o$\arrowvert$c)的原因:1.计算简单 2.出现在一起的词向量意义相关,则希望它们相似
+
+又P(o$\arrowvert$c)是一个概率,所以我们在整个语料库上使用**softmax**将点积的值映射到概率,如图6
+
+
+
+注:注意到上图,中心词词向量为$v_{c}$,而上下文词词向量为$u_{o}$。也就是说每个词会对应两个词向量,**在词w做中心词时,使用$v_{w}$作为词向量,而在它做上下文词时,使用$u_{w}$作为词向量**。这样做的原因是为了求导等操作时计算上的简便。当整个模型训练完成后,我们既可以使用$v_{w}$作为词w的词向量,也可以使用$u_{w}$作为词w的词向量,亦或是将二者平均。在下一部分的模型结构中,我们将更清楚地看到两个词向量究竟在模型的哪个位置。
+
+-----------------------------
+
+回答2:由上文所述,P(o$\arrowvert$c)=softmax($u_{o^T}$$\cdot$$v_c$)。所以损失函数是关于$u_{o}$和$v_c$的函数,我们通过梯度下降法调整$u_{o}$和$v_c$的值,最小化损失函数,即得到了良好表示的词向量。
+
+--------------------------------
+```
+
+```markdown
+#### 2.4 Word2vec模型结构
+
+
+
+如图八所示,这是一个输入为1 X V维的one-hot向量(V为整个词汇表的长度,这个向量只有一个1值,其余为0值表示一个词),单隐藏层(**隐藏层的维度为N,这里是一个超参数,这个参数由我们定义,也就是词向量的维度**),输出为1 X V维的softmax层的模型。
+
+$W^{I}$为V X N的参数矩阵,$W^{O}$为N X V的参数矩阵。
+
+模型的输入为1 X V形状的one-hot向量(V为整个词汇表的长度,这个向量只有一个1值,其余为0值表示一个词)。隐藏层的维度为N,这里是一个超参数,这个参数由我们定义,也就是词向量的维度。$W^{I}$为V X N的参数矩阵。
+
+我们这里,考虑Skip-gram算法,输入为中心词c的one-hot表示
+
+由输入层到隐藏层,根据矩阵乘法规则,可知,**$W^{I}$的每一行即为词汇表中的每一个单词的词向量v**,1 X V 的 inputs 乘上 V X N 的$W^{I}$,隐藏层即为1 X N维的$v_{c}$。
+
+而**$W^{O}$中的每一列即为词汇表中的每一个单词的词向量u**。根据乘法规则,1 X N 的隐藏层乘上N X V的$W^{O}$参数矩阵,得到的1 X V 的输出层的每一个值即为$u_{w^T}$$\cdot$$v_c$,加上softmax变化即为P(w$\arrowvert$c)。
+
+有V个w,其中的P(o$\arrowvert$c)即实际样本中的上下文词的概率,为我们最为关注的值。
+```
+
+```markdown
+#### 2.5 CBOW
+
+如上文所述,Skip-gram为给定中心词,预测周围的词,即求P(o$\arrowvert$c),如下图所示:
+
+
+而CBOW为给定周围的词,预测中心词,即求P(c$\arrowvert$o),如下图所示:
+
+
+
+注意:在使用CBOW时,上文所给出的模型结构并没有变,在这里,我们输入多个上下文词o,在隐藏层,**将这多个上下文词经过第一个参数矩阵的计算得到的词向量相加作为隐藏单元的值**。其余均不变,$W^{O}$中的每一列依然为为词汇表中的每一个单词的词向量u。
+```
+
+```markdown
+### 3负采样 Negative Sampling
+```
+
+```markdown
+#### 3.1 softmax函数带来的问题
+
+我们再看一眼,通过softmax得到的P(o$\arrowvert$c),如图:
+
+
+可以看到,P(o$\arrowvert$c)的分母需要在整个单词表上做乘积和exp运算,这无疑是非常消耗计算资源的,Word2vec的作者针对这个问题,做出了改进。
+
+他提出了两种改进的方法:Hierarchical Softmax和Negative Sampling,因为Negative Sampling更加常见,所以我们下面只介绍Negative Sampling,感兴趣的朋友可以在文章下面的参考资料中学习Hierarchical Softmax。
+```
+
+```markdown
+#### 3.2 负采样Negative Sampling
+
+我们依然以Skip-gram为例(CBOW与之差别不大,感兴趣的朋友们依然可以参阅参考资料)
+
+我们首先给出负采样的损失函数:
+
+
+
+其中$\sigma$为sigmoid函数1/(1+$e^{-x}$),$u_{o}$为实际样本中的上下文词的词向量,而$u_{k}$为我们在单词表中随机选出(按一定的规则随机选出,具体可参阅参考资料)的K个单词。
+
+由函数单调性易知,**$u_{o^T}$$\cdot$$v_c$越大,损失函数越小,而$u_{k^T}$$\cdot$$v_c$越小**,损失函数越大。这与原始的softmax损失函数优化目标一致,即maxP(o$\arrowvert$c),而且避免了在整个词汇表上的计算。
+```
+
+```markdown
+### 4 核心代码与核心推导
+```
+
+```markdown
+#### 4.1 Naive softmax 损失函数
+```
+
+```markdown
+损失函数关于$v_c$的导数:
+
+$$
+\frac{\partial{J_{naive-softmax}(\boldsymbol v_c,o,\boldsymbol U)}}{\partial \boldsymbol v_c} \\=
+-\frac{\partial{log(P(O=o|C=c))}}{\partial \boldsymbol v_c} \\ =
+-\frac{\partial{log(exp( \boldsymbol u_o^T\boldsymbol v_c))}}{\partial \boldsymbol v_c} + \frac{\partial{log(\sum_{w=1}^{V}exp(\boldsymbol u_w^T\boldsymbol v_c))}}{\partial \boldsymbol v_c} \\=
+-\boldsymbol u_o + \sum_{w=1}^{V} \frac{exp(\boldsymbol u_w^T\boldsymbol v_c)}{\sum_{w=1}^{V}exp(\boldsymbol u_w^T\boldsymbol v_c)}\boldsymbol u_w \\=
+-\boldsymbol u_o+ \sum_{w=1}^{V}P(O=w|C=c)\boldsymbol u_w \\=
+\boldsymbol U^T(\hat{\boldsymbol y} - \boldsymbol y)
+$$
+
+可以看到涉及整个U矩阵的计算,计算量很大,关于$u_w$的导数读者可自行推导
+```
+
+```markdown
+损失函数及其梯度的求解
+```
+
+```python
+# 来自:https://github.com/lrs1353281004/CS224n_winter2019_notes_and_assignments
+
+def naiveSoftmaxLossAndGradient(
+ centerWordVec,
+ outsideWordIdx,
+ outsideVectors,
+ dataset
+):
+ """ Naive Softmax loss & gradient function for word2vec models
+
+ Arguments:
+ centerWordVec -- numpy ndarray, center word's embedding
+ in shape (word vector length, )
+ (v_c in the pdf handout)
+ outsideWordIdx -- integer, the index of the outside word
+ (o of u_o in the pdf handout)
+ outsideVectors -- outside vectors is
+ in shape (num words in vocab, word vector length)
+ for all words in vocab (tranpose of U in the pdf handout)
+ dataset -- needed for negative sampling, unused here.
+
+ Return:
+ loss -- naive softmax loss
+ gradCenterVec -- the gradient with respect to the center word vector
+ in shape (word vector length, )
+ (dJ / dv_c in the pdf handout)
+ gradOutsideVecs -- the gradient with respect to all the outside word vectors
+ in shape (num words in vocab, word vector length)
+ (dJ / dU)
+ """
+
+ # centerWordVec: (embedding_dim,1)
+ # outsideVectors: (vocab_size,embedding_dim)
+
+ scores = np.matmul(outsideVectors, centerWordVec) # size=(vocab_size, 1)
+ probs = softmax(scores) # size=(vocab, 1)
+
+ loss = -np.log(probs[outsideWordIdx]) # scalar
+
+ dscores = probs.copy() # size=(vocab, 1)
+ dscores[outsideWordIdx] = dscores[outsideWordIdx] - 1 # dscores=y_hat - y
+ gradCenterVec = np.matmul(outsideVectors, dscores) # J关于vc的偏导数公式 size=(vocab_size, 1)
+ gradOutsideVecs = np.outer(dscores, centerWordVec) # J关于u的偏导数公式 size=(vocab_size, embedding_dim)
+
+ return loss, gradCenterVec, gradOutsideVecs
+```
+
+```markdown
+#### 4.2 负采样损失函数
+```
+
+```markdown
+负采样损失函数关于$v_c$的导数:
+
+$$
+\frac{\partial{J_{neg-sample}(\boldsymbol v_c,o,\boldsymbol U)}}{\partial\boldsymbol v_c} \\=
+\frac{\partial (-log(\sigma (\boldsymbol u_o^T\boldsymbol v_c))-\sum_{k=1}^{K} log(\sigma (-\boldsymbol u_k^T\boldsymbol v_c)))}{\partial \boldsymbol v_c} \\=
+-\frac{\sigma(\boldsymbol u_o^T\boldsymbol v_c)(1-\sigma(\boldsymbol u_o^T\boldsymbol v_c))}{\sigma(\boldsymbol u_o^T\boldsymbol v_c)}\frac{\partial \boldsymbol u_o^T\boldsymbol v_c}{\partial \boldsymbol v_c} -
+\sum_{k=1}^{K}\frac{\partial log(\sigma(-\boldsymbol u_k^T\boldsymbol v_c))}{\partial \boldsymbol v_c} \\=
+-(1-\sigma(\boldsymbol u_o^T\boldsymbol v_c))\boldsymbol u_o+\sum_{k=1}^{K}(1-\sigma(-\boldsymbol u_k^T\boldsymbol v_c))\boldsymbol u_k
+$$
+
+可以看到其只与$u_k$和$u_o$有关,避免了在整个单词表上的计算
+```
+
+```markdown
+负采样方法的损失函数及其导数的求解
+```
+
+```python
+def negSamplingLossAndGradient(
+ centerWordVec,
+ outsideWordIdx,
+ outsideVectors,
+ dataset,
+ K=10
+):
+
+ negSampleWordIndices = getNegativeSamples(outsideWordIdx, dataset, K)
+ indices = [outsideWordIdx] + negSampleWordIndices
+
+ gradCenterVec =np.zeros(centerWordVec.shape) # (embedding_size,1)
+ gradOutsideVecs = np.zeros(outsideVectors.shape) # (vocab_size, embedding_size)
+ loss = 0.0
+
+ u_o = outsideVectors[outsideWordIdx] # size=(embedding_size,1)
+ z = sigmoid(np.dot(u_o, centerWordVec)) # size=(1, )
+ loss -= np.log(z) # 损失函数的第一部分
+ gradCenterVec += u_o * (z - 1) # J关于vc的偏导数的第一部分
+ gradOutsideVecs[outsideWordIdx] = centerWordVec * (z - 1) # J关于u_o的偏导数计算
+
+ for i in range(K):
+ neg_id = indices[1 + i]
+ u_k = outsideVectors[neg_id]
+ z = sigmoid(-np.dot(u_k, centerWordVec))
+ loss -= np.log(z)
+ gradCenterVec += u_k * (1-z)
+ gradOutsideVecs[neg_id] += centerWordVec * (1 - z)
+
+
+ return loss, gradCenterVec, gradOutsideVecs
+```
+
+```markdown
+### 参考
+
+Mikolov T, Sutskever I, Chen K, et al. Distributed representations of words and phrases and their compositionality[J]. Advances in neural information processing systems, 2013, 26.
+
+https://www.cnblogs.com/peghoty/p/3857839.html
+
+http://web.stanford.edu/class/cs224n/
+```
+
diff --git a/docs/第一章 推荐系统基础/1.0 机器学习基础/word2vec_pictures/1.png b/docs/第一章 推荐系统基础/1.0 机器学习基础/word2vec_pictures/1.png
new file mode 100644
index 0000000000000000000000000000000000000000..dc2cf2355557db52a274e05005133fb90f2b86a4
GIT binary patch
literal 27600
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
Wk)C{vg9B5zj%ldqD3>Z)h5Z++KuuHt
literal 0
HcmV?d00001
diff --git a/docs/第一章 推荐系统基础/1.0 机器学习基础/word2vec_pictures/10.png b/docs/第一章 推荐系统基础/1.0 机器学习基础/word2vec_pictures/10.png
new file mode 100644
index 0000000000000000000000000000000000000000..995209f36cc039abb2fb8b0610166e1491eccc37
GIT binary patch
literal 86298
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