Advertisement

CS224n: Natural Language Processing with Deep Learning 笔记、文献及知识点整理 (一)词向量(一)

阅读量:

词向量:引言、SVDWord2Vec

基于 Skip-gram 的语言模型训练方法通过负采样优化了 Word2Vec 算法的性能

自然语言是一个离散的、符号化的范畴体系。

1. NLP概述

1.1 NLP有什么特别之处?

人类(自然)语言有什么独特之处? 人类语言是一种经过精心设计的系统,在信息传递方面具有显著优势。 它与视觉或其他形式的机器学习任务存在根本性差异。

绝大多数单词都是语言符号,并代表或指向被指代的概念或事物。

举个例子,“rocket”这个词在语言中不仅指代火箭这一概念本身,在具体实施过程中也延伸到代表某个具体的火箭实例上。 在实际应用中采用符号系统来传递信息时,在某些情况下会遇到不寻常的现象:如‘Whooompaa’这种现象。

最重要的是,语言符号可以用多种方式进行编码:如语音、手势、文字等。

它们经由连续信号传递到大脑,在神经科学领域已展开了一系列系统性研究与探索;大脑似乎倾向于认为以一种持续不断的方式处理信息并构建认知框架。(在语言哲学与语言学领域中已开展了一系列系统性研究与探索;人们已经建立了完善的理论体系并明确了基本概念及其内涵。参见Wittgenstein, Frege, Russell 和 Mill的相关著作。)

1.2 任务示例

NLP 存在于多层次的任务体系中,在语音处理、语义解析以及对话交互等多个领域均有涉及。 NLP 的主要目标在于构建算法使计算机能够解析和生成自然语言完成各种特定的任务。 这些典型应用场景涉及的任务具有显著的复杂性差异

简单

• 拼写检查

• 关键词搜索

• 寻找同义词

中等

• 解析来自网站、文档等的信息。

困难

• 机器翻译(例如将中文文本翻译成英文)

• 语义分析(查询语句的含义是什么?)

• 共指(例如,“他”或“它”指的是给定的文档吗?)

• 问答(例如,回答危险问题)

1.3 如何表示单词?

每个NLP任务的核心共同点在于如何将单个词语表述为任意模型的输入形式。我们未探讨基于词单元作为基本符号的传统NLP方法。为了应对各种NLP任务的需求,在分析词语间的相似性与差异性方面也存在一定的共识与研究基础。借助词向量技术,在向量自身中即可编码这些特性(例如采用距离度量方法如Jaccard、余弦相似度或欧氏距离等)。

2. 词向量(Word Vectors)

英语中约有1300万个词汇存在。这些词汇之间并非完全没有关联,在某些情况下它们可能是近义词或同义词(如feline和cat、hotel和motel)。因此,在构建了一个用于表示词语的空间模型中将每个词语映射到该向量空间中,则这个向量则对应于该词语在该空间中的位置坐标。这一特性具有重要意义之一:最直接的原因之一是因为可能存在足够低维的N维空间(其中N远小于1300万),使得这些高维语言数据能够被有效压缩并提取出关键语义特征。在这个过程中每一种维度都承担着捕捉特定语义信息的功能:例如时间维度可能用于区分过去、现在与未来;数量维度则用于标识单数与复数;而性别维度则用于描述男性与女性等基本属性。

在探讨一种基础的词向量模型时, 我们首先聚焦于最简单的实现方式——one-hot编码. 在构建过程中, 对全部1300万个英语单词进行排序处理后, 每个词汇都会被编码为特定形式的数值序列. 这种方法能够有效地将词语映射到高维空间中, 从而便于后续的语义分析与计算.

该种向量 vast majority of the components are zero, 但在经过排序的词汇表中其对应的索引位置是1。该种向量表达方式下, |V| 代表的是词汇总量, 这样的词向量表达形式如下:

每个单词都被用作完全独立的实体。在之前的讨论中指出,这种词表示方式并未直接提供任何相似性概念.例如:

也许我们可以探讨将该空间的大小从R | V |降低至更低维度,并进而发现一个潜在的低维子空间以提取或反映词语间的联系。

(One-hot一词来自于数字电路设计)

3. 基于SVD的方法

为了计算出每种词汇在文本中的分布模式(也被视为向量子模型)的方法中

分解因子。随后我们采用矩阵U的行来代表我们词典中所有单词的词向量表示。接下来我们将考察X的各种可能取值:

3.1 词-文档矩阵 Word-Document Matrix

在初次探索阶段,在本研究中我们推测那些相关的词汇往往会同时出现在同一份文档中。例如,在如 X 这样的领域中,“banks", "bonds", "stocks" 和 "money" 这些词很可能频繁地共同出现;然而像 "banks", "octopus", "banana" 和 "hockey"这样的词汇不太可能持续地共同出现。为了体现这一事实,在研究框架下构建了一个词汇-文档矩阵 X:遍历数亿份文档,在每一份第 j 文档中发现词汇 i 出现时,则在位置 (i,j) 上进行标记记录;显然这样的矩阵规模非常庞大(

),它随着文档的数量 (M) 而变化。 所以也许我们可以尝试更好的方法。

分布式语义是基于词语在其通常使用环境中的一般意义所代表的意义概念。该技术特有较强的密集特性,并且能够有效地识别和关联类似的语义元素。

3.2 基于窗口的共现矩阵( Window based Co-occurrence Matrix

类似的逻辑下,在语料库中构建了一个矩阵X来记录单词之间的共现关系

假设语料库只有三个句子,窗口大小为 1:

1. I enjoy flying.
2. IlikeNLP.
3. I like deep learning.

计数矩阵结果:

3.3 在共现矩阵中使用奇异值分解( Applying SVD to the cooccurrence matrix

对变量X执行奇异值分解(SVD),以便分析其S矩阵的奇异值分布;随后,在确定的阈值k处截断较小的奇异值以减少计算复杂度。

然后我们将

子矩阵充当我们的词嵌入矩阵。这种安排将使得我们能够为词汇表中的每一个单词生成一个k维的表示

对矩阵X使用SVD:

通过选择前 k 个奇异向量来降低维度:

(注:

使用词词共现矩阵:

• 生成 |V| × |V| 共生矩阵,X。

_• 在X上使用SVD,得到X=

_

• 选择U的前k列得到一个k维的词向量。

_•

表示前 k 维捕获的方差量。_

这些方法都为我们生成了能够编码语义与句法(词性)信息的词向量序列,但仍面临诸多挑战:

• 矩阵的维度变化非常频繁(新词添加非常频繁,语料库大小发生变化)。

• 矩阵非常稀疏,因为大多数词不会同时出现。

• 矩阵通常具有很高的维度(≈ 106 × 106)

• 训练的二次成本(如执行 SVD)

• 需要在 X 上做些特别处理以解决词频的严重失衡

主要依赖于奇异值分解(SVD)的方法在面对大规模数据时存在局限性;该方法难以整合新增的内容;与此同时,在m \times n矩阵规模下其计算复杂度为O(mn^2)

不过,还是有方案来解决上面的问题的:

(基于计数的方法有效地利用了统计信息)

• 忽略虚词,如“the”、“he”、“has”等。

• 应用变化窗口——如根据文档中单词之间的距离对共现计数进行加权。

• 使用 Pearson 相关性并将负计数设置为 0,而不是仅使用原始计数。

在下一节中,我们将探讨基于迭代的方法如何以更为巧妙的方式解决上述诸多问题。

CS224n课程的"深度学习自然语言处理"领域中所涉及的"词向量(二)"这一部分的内容进行了系统的整理与总结。该课程通过详细阐述了相关的理论基础与实践应用,在第二部分深入探讨了词向量模型及其在自然语言处理中的重要作用。

全部评论 (0)

还没有任何评论哟~