【发布时间】:2018-01-05 18:57:28
【问题描述】:
我想了解词嵌入中的“维度”是什么意思。
当我为 NLP 任务以矩阵的形式嵌入一个词时,维数起什么作用?有没有一个直观的例子可以帮助我理解这个概念?
【问题讨论】:
标签: nlp terminology dimensionality-reduction word-embedding
我想了解词嵌入中的“维度”是什么意思。
当我为 NLP 任务以矩阵的形式嵌入一个词时,维数起什么作用?有没有一个直观的例子可以帮助我理解这个概念?
【问题讨论】:
标签: nlp terminology dimensionality-reduction word-embedding
词嵌入只是从词到向量的映射。 Word 中的维度 embeddings 指的是这些向量的长度。
这些映射有不同的格式。大多数预训练的嵌入是
以空格分隔的文本文件的形式提供,其中每一行包含一个单词
第一个位置,以及它旁边的向量表示。如果你要分开
这些行,您会发现它们的长度为1 + dim,其中dim
是词向量的维数,1 对应于被表示的词。请参阅GloVe pre-trained
vectors 获取真实示例。
比如你下载glove.twitter.27B.zip,解压,运行如下python代码:
#!/usr/bin/python3
with open('glove.twitter.27B.50d.txt') as f:
lines = f.readlines()
lines = [line.rstrip().split() for line in lines]
print(len(lines)) # number of words (aka vocabulary size)
print(len(lines[0])) # length of a line
print(lines[130][0]) # word 130
print(lines[130][1:]) # vector representation of word 130
print(len(lines[130][1:])) # dimensionality of word 130
你会得到输出
1193514
51
people
['1.4653', '0.4827', ..., '-0.10117', '0.077996'] # shortened for illustration purposes
50
有点不相关但同样重要的是,这些文件中的行是根据在训练嵌入的语料库中找到的词频排序的(最常见的词在前)。
您还可以将这些嵌入表示为字典,其中 键是单词,值是表示单词向量的列表。长度 这些列表中的一个将是您的词向量的维数。
更常见的做法是将它们表示为矩阵(也称为查找
表),维度为(V x D),其中V 是词汇量大小(即,如何
你有很多词),D 是每个词向量的维数。在
在这种情况下,您需要保留一个单独的字典,将每个单词映射到它的
矩阵中的对应行。
关于维度所扮演的角色的问题,您需要一些理论背景。但总而言之,嵌入单词的空间呈现出很好的特性,可以让 NLP 系统表现得更好。这些属性之一是具有相似含义的单词在空间上彼此接近,也就是说,具有相似的向量表示,由诸如Euclidean distance 或cosine similarity 之类的距离度量来衡量。
您可以可视化多个词嵌入 here 的 3D 投影,例如,查看与“roads”最接近的词是“highways”、“road”和“routes” " 在 Word2Vec 10K 嵌入中。
如需更详细的解释,我建议阅读 Christopher Olah 的 this post 的“词嵌入”部分。
有关为什么使用作为 分布式表示的实例的词嵌入比使用例如单热编码(本地表示)更好的理论,我建议阅读 Geoffrey Hinton 等人的 Distributed Representations 的第一部分。
【讨论】:
word2vec 或 GloVe 等词嵌入不会将词嵌入到二维矩阵中,它们使用一维向量。 “维度”是指这些向量的大小。它与词汇量的大小是分开的,词汇量是您实际保留向量而不是丢弃的单词数。
理论上,更大的向量可以存储更多信息,因为它们具有更多可能的状态。在实践中,超过 300-500 的大小并没有太大的好处,在某些应用程序中,甚至更小的向量也能正常工作。
这是来自GloVe homepage 的图片。
向量的维数显示在左轴上;例如,减少它会使图表更短。每列是一个单独的向量,每个像素的颜色由向量中该位置的数字决定。
【讨论】:
词嵌入中的“维度”表示它编码的特征总数。其实定义过于简单化了,后面会讲到。
特征的选择通常不是手动的,而是自动在训练过程中使用隐藏层。根据文献的语料库选择最有用的维度(特征)。例如,如果文学是关于浪漫小说的,则与数学文学相比,gender维度更可能被表示出来。
一旦你有 100 维(例如)由神经网络为 100,000 个唯一词生成的词嵌入向量,通常就没有多大用处了每个维度,并尝试通过“特征名称”标记每个维度。因为每个维度所代表的特征可能并不简单和正交,而且由于这个过程是自动的,所以没有人确切知道每个维度代表什么。
要更深入地了解这个主题,您可能会发现这个post 很有用。
【讨论】:
在输入任何机器学习算法之前,必须将文本数据转换为数字数据。 Word Embedding 是一种方法,其中每个单词都映射到一个向量。
在代数中,向量是具有比例和方向的空间点。 简单来说,Vector 是一维垂直数组(或者说是一个具有单列的矩阵),Dimensionality 是该一维垂直数组中的元素数。
Glove、Word2vec 等预训练的词嵌入模型为每个词提供多维选项,例如 50、100、200、300。每个词代表 D 维空间中的一个点,同义词是彼此更接近的点。维度越高,精度越高,但计算需求也越高。
【讨论】:
我不是专家,但我认为维度仅代表分配给单词的变量(也称为属性或特征),尽管可能还有更多。每个维度的含义和维度总数将特定于您的模型。
我最近从 Tensor Flow 库中看到了这个嵌入可视化: https://www.tensorflow.org/get_started/embedding_viz
这尤其有助于将高维模型简化为人类可感知的东西。如果您有超过三个变量,则很难可视化聚类(除非您显然是斯蒂芬霍金)。
此wikipedia article on dimensional reduction 和相关页面讨论了特征如何以维度表示,以及维度过多的问题。
【讨论】:
根据Neural Network Methods for Natural Language Processing by Goldenberg 的书,dimensionality in word embeddings (demb) 指的是嵌入算法的第一个权重矩阵(输入层和隐藏层之间的权重)中的列数,例如word2vec。图像中的N 是词嵌入中的dimensionality:
更多信息可以参考这个链接: https://blog.acolyer.org/2016/04/21/the-amazing-power-of-word-vectors/
【讨论】:
如果我们考虑 Word2Vec 嵌入的情况,则首先从共现矩阵构造密集的数值嵌入向量。共现矩阵有ncol通常是词汇表|V|的维度,nrow是这个维度d,我们要考虑的总共d个单词。每个条目是出现在每个列单词的上下文中的每个行单词(w_i,对于 i = 1,...,d)的计数。
Word2Vec 对这个稀疏 (d by |V|) 矩阵执行奇异值分解。我们利用分解结果中的稠密(d by d)矩阵。
这个密集矩阵的每一行都是单词 w_i 的长度为 d 的嵌入向量,我们总共有 d 个向量。这些向量连接起来形成网络中的嵌入层。
【讨论】: