这里写自定义目录标题
-
- 词向量
- part1 基于计数的词向量
- Part 2: Prediction-Based Word Vectors
-
- Question 2.1: Word2Vec Plot Analysis
- Cosine Similarity
- Question 2.2: Polysemous Words
- Question 2.3: Synonyms & Antonyms
- Solving Analogies with Word Vectors
- Question 2.4: Finding Analogies
- Question 2.5: Incorrect Analogy
- Question 2.6: Guided Analysis of Bias in Word Vectors
- Question 2.7: Independent Analysis of Bias in Word Vectors
- 点个赞呗
# All Import Statements Defined Here
# Note: Do not add to this list.
# All the dependencies you need, can be installed by running .
# ----------------
import ssl
_create_unverified_https_context = ssl._create_unverified_context
ssl._create_default_https_context = _create_unverified_https_context
import sys
assert sys.version_info[0]==3
assert sys.version_info[1] >= 5
from gensim.models import KeyedVectors
from gensim.test.utils import datapath
import pprint
import matplotlib.pyplot as plt
plt.rcParams['figure.figsize'] = [10, 5]
import nltk
nltk.download('reuters')
from nltk.corpus import reuters
import numpy as np
import random
import scipy as sp
from sklearn.decomposition import TruncatedSVD
from sklearn.decomposition import PCA
START_TOKEN = '<START>'
END_TOKEN = '<END>'
np.random.seed(0)
random.seed(0)
# ----------------
导包存在出现连接不上服务器的问题,私自下载好了reuters压缩包,放在了C:\Users\Administrator\AppData\Roaming\nltk_data\corpora下面,注意,Roaming是隐藏文件夹。
词向量
字向量通常用作下游NLP任务的基本组件,例如,问答系统,文本生成,文本翻译等。因此,建立对词向量优缺点的直观印象很重要。在这里,您将探讨两种类型的词向量:从共现矩阵派生的和通过word2vec派生的。
注释:词向量和词嵌入经常可以互换使用。词向量的意思是我们在低维空间编码单词的含义。正如维基百科描述的那样,“从概念上讲,它涉及从每个单词一维空间到具有更低维度的连续向量空间的数学嵌入”。
part1 基于计数的词向量
大多数词向量模型来源自下面的想法:
你应该把单词放在他原来的地方理解 https://en.wikipedia.org/wiki/John_Rupert_Firth (科学上网)许多单词向量实现是由类似的单词(即,近似的)同义词将在类似的上下文中使用的想法驱动的。结果,类似的单词通常与单词的共享子集(即上下文)一起被说出或写入。通过检查这些上下文,我们可以尝试为我们的单词开发嵌入。 考虑到这种直觉,构建单词向量的许多“旧学派”方法依赖于单词计数。 在这里,我们详细阐述其中一种策略,共现矩阵(更多信息,请参见http://web.stanford.edu/class/cs124/lec/vectorsemantics.video.pdf或https://medium.com/data-science-group-iitr/word-embedding-2d05d270b285)。
共现
共现矩阵计算在某些上下文中单词共同出现的频率。给定文档中某个单词 w i w_i wi,考虑到它周围的几个单词出现的次数。假设我们窗口大小为 n n n,即文档中该单词前面和后面 n n n个。我们建立了一个共现矩阵 M M M,这是一个按字的对称矩阵, M i j M_{ij} Mij是 w j w_j wj出现在 w i w_i wi上下文的次数。
例如
文档1:“all that glitters is not gold”
文档2: “all is well that ends well”
注释:
在NLP中,我们经常添加START和END标记来表示句子,段落或文档的开头和结尾。 在这种情况下,我们想象封装每个文档的START和END标记,例如“START所有闪烁的不是金子END”,并在我们的共现计数中包括这些标记。
该矩阵的行(或列)提供一种类型的单词向量(基于单词 - 单词共现的那些),但是这些向量通常很大(语料库中不同单词的数量是线性的)。因此,我们接下来要进行降维。特别是,我们将运行SVD(奇异值分解),这是一种广义PCA(主成分分析),用于选择前 k k k主成分。 这是使用SVD降低降维的可视化。在这张图片中,我们的共生矩阵是 A A A, n n n行对应 n n n个words。 我们获得了一个完整的矩阵分解,奇异值在对角 S S S矩阵中排序,我们新的,更短的长度 k k