返回介绍

3. 基于 SVD 的方法

发布于 2025-02-18 23:44:02 字数 3152 浏览 0 评论 0 收藏 0

这是一种构造词嵌入(即词向量)的方法,我们首先会遍历所有的文本数据集,然后统计词出现的次数,接着用一个矩阵来表示所有的次数情况,紧接着对 X 进行奇异值分解得到一个的分解。然后用的行(rows)作为所有词表中词的词向量。对于矩阵,我们有几种选择,咱们一起来比较一下。

3.1 词-文档矩阵

最初的想法是,我们猜测相互关联的词组同时出现在相同的文件中的概率很高。例如,“银行”、“债券”、“股票”、“钱”等都可能出现在一起。但是,“银行”、“章鱼”、“香蕉”和“曲棍球”可能不会一直一起出现。基于这个想法,我们建立一个词组文档矩阵,具体是这么做的:遍历海量的文件,每次词组 i 出现在文件 j 中时,将的值加 1。不过大家可想而知,这会是个很大的矩阵,而且矩阵大小还和文档个数 M 有关系。所以咱们最好想办法处理和优化一下。

3.2 基于窗口的共现矩阵 X

我们还是用一样的逻辑,不过换一种统计方式,把矩阵记录的词频变成一个相关性矩阵。我们先规定一个固定大小的窗口,然后统计每个词出现在窗口中次数,这个计数是针对整个语料集做的。可能说得有点含糊,咱们一起来看个例子,假定我们有如下的 3 个句子,同时我们的窗口大小设定为 1(把原始的句子分拆成一个一个的词):
1. I enjoy flying.
2. I like NLP.
3. I like deep learning.
由此产生的计数矩阵如下:

然后我们对 X 做奇异值分解,观察观察奇异值(矩阵的对角元素),并根据我们期待保留的百分比来进行阶段(只保留前 k 个维度):

然后我们把子矩阵视作我们的词嵌入矩阵。也就是说,对于词表中的每一个词,我们都用一个 k 维的向量来表达了。

对 X 采用奇异值分解

通过选择前 K 个奇异向量来进行降维:

这两种方法都能产生词向量,它们能够充分地编码语义和句法的信息,但同时也带来了其他的问题:

  • 矩阵的维度会经常变化(新的词语经常会增加,语料库的大小也会随时变化)。
  • 矩阵是非常稀疏的,因为大多数词并不同时出现。
  • 矩阵的维度通常非常高(
  • 训练需要的复杂度(比如 SVD)
  • 需要专门对矩阵 X 进行特殊处理,以应对词组频率的极度不平衡的状况

当然,有一些办法可以缓解一下上述提到的问题:

  • 忽视诸如“he”、“the” 、“has”等功能词。
  • 应用“倾斜窗口”(ramp window),即:根据文件中词组之间的距离给它们的共现次数增加相应的权重。
  • 使用皮尔森的相关性(Pearson correlation),将 0 记为负数,而不是它原来的数值。

不过缓解终归只是缓解,咱们需要更合理地解决这些问题,这也就是我们马上要提到的基于迭代的方法。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文