Co-Occurrence Matrix——共现矩阵的计算方法

  • Co-Occurrence Matrix的介绍
  • Co-Occurrence Matrix的生成
  • Co-Occurrence Matrix的范例
  • Co-Occurrence Matrix存在的问题及解决方法
  • Co-Occurrence Matrix的优缺点
  • SVD方法存在的问题

Co-Occurrence Matrix的介绍

Co-Occurrence Matrix具有固定上下文窗口的共现矩阵 (Co-Occurrence Matrix with a fixed context window)。

遵循的基本原理是:类似的词往往出现在一起,并且会有类似的上下文,例如,苹果是一种水果,芒果是一种水果。(Similar words tend to occur together and will have a similar context for example — Apple is a fruit. Mango is a fruit.)因此,苹果和芒果往往有一个类似的背景,即水果。(Apple and mango tend to have a similar context i.e fruit.)

  • 共现(Co-occurrence)——对于给定的语料库,一对单词(如w1w1w1w2w2w2)的共现是指它们在上、下文窗口中同时出现的次数。

For a given corpus, the co-occurrence of a pair of words say w1 and w2 is the number of times they have appeared together in a Context Window.

  • 上下文窗口(Context Window)——指的是某个单词w的上下文范围的大小,也就是前后多少个单词以内的才算是上下文?一般,上、下文窗口由数字和方向指定。

Context window is specified by a number and the direction.
\quad
比如一个Context Window Size = 2的示意图如下:

Co-Occurrence Matrix的生成

如何生成Co-Occurrence矩阵(How to form the Co-occurrence matrix)?

1. 由语料库中所有不重复单词构成矩阵A以存储单词的共现次数。(The matrix A stores co-occurrences of words.)

2. 人为指定Context Window大小,计算每个单词在指定大小的上下文窗口中与它周围单词同时出现的次数。(In this method, we count the number of times each word appears inside a window of a particular size around the word of interest.)

3. 依次计算语料库中各单词对的共现次数。(Calculate this count for all the words in the corpus.)

Co-Occurrence Matrix的范例

范例一:

让我们通过一个例子具体示范Co-Occurrence Matrix的生成过程:

  1. 假设我们的语料库包含以下三句话(Let our corpus contain the following three sentences:):
I enjoy flying.
I like NLP.
I like deep learning.
  1. 构造由语料库中所有不重复单词生成的单词Dictionary(From the above corpus, the list of unique words present are as follows:)
Dictionary: [ 'I', 'like', 'enjoy', 'deep', 'learning', 'NLP', 'flying', '.' ]
  1. 假设上下文窗口Context Window的大小等于1,这意味着每个单词的上下文单词都是由左一个单词,右一个单词构成。(Let window size =1,This means that context words for each and every word are 1 word to the left and one to the right.)
  2. 依次计算由语料库中所有不重复单词构成的矩阵A中各单词与其左(右)一个单词在上下文窗口中同时出现的次数。
I = enjoy(1 time), like(2 times)  # I和enjoy共现1次,I和like共现2次
enjoy = I (1 time), flying(2 times)
flying = enjoy(1 time)
like = I(2 times), NLP(1 time), deep(1 time)
NLP = like(1 time)
deep = like(1 time), learning(1 time)
learning = deep(1 time)

共现次数的计算过程如下图所示:

  1. 最终生成的co-occurrence matrix如下所示:

上图摘自《Part 7: Step by Step Guide to Master NLP – Word Embedding in Detail》,不过原图在计算"I"与"."的共现次数时存在错误,此处已修改更正。

范例二:

假设我们有如下的语料库:

He is not lazy.
He is intelligent.
He is smart.

我们假设Context Window=2,那么我们就可以得到如下的co-occurrence matrix:

备注:此处不考虑标点符号"."
\quad
上图红框(Red cell)表示“He”和“is”上下文窗口等于2时的共现次数,这里我们观察到这个数字是4。为了理解和可视化计数,具体共现情况如下图:

共现次数的计算过程如下图所示:

Co-Occurrence Matrix存在的问题及解决方法

Co-Occurrence Matrix存在的问题:

  1. 共现矩阵增加了字典或词汇的大小(Increase in size with dictionary or vocabulary.)
  2. 对于一个庞大的语料库,这个共现矩阵可能变得非常复杂(高维),后续分类模型面临稀疏性问题,模型的健壮性较差(For a huge corpus, this co-occurrence matrix could become really complex (high-dimension) and subsequent classification models face the issue of sparsity. Models are less robust.)

Co-Occurrence Matrix的解决方法:

降维——我们只将“大部分”重要信息存储在固定的、少量的维度中,即:密集向量而不是稀疏向量。尺寸通常在25–1000维左右。(We only store “most” of the important information in a fixed, small number of dimensions that is a dense vector instead of a sparse vector.The dimension size is usually around 25 – 1000.)

奇异值分解(SVD)主成分分析(PCA)是两种特征值方法,主要用于将高维数据集降维,同时保留重要信息(Singular value decomposition(SVD) and principal component analysis(PCA) are two eigenvalue methods used to reduce a high-dimensional dataset into fewer dimensions while retaining important information.)

参考链接:Part 7: Step by Step Guide to Master NLP – Word Embedding in Detail

共现矩阵的PCA分解:
\quad
请记住,这个具有固定上下文窗口的共现矩阵不是通常使用的词向量表示。相反,这个共现矩阵使用 PCA、SVD 等技术分解为因子,这些因子的组合形成词向量表示。
\quad
举例而言,如果你对一个大小为 N×NN×NN×N 的共现矩阵KKK执行PCAPCAPCA分解,你将获得 VVV主成分。你可以从这VVV主成分中选择 kkk 个分量,因此,组成新矩阵的形式为N×kN×kN×k
\quad
此时,一个单词,将在 kkk 维中表示(不用在NNN 维中表示),但仍能捕获几乎相同的语义。通常,kkk 的数量级为几百。
\quad
因此,PCA分解PCA分解PCA的作用就是将一个Co-Occurrence 矩阵KKK分解为三个矩阵,UUUSSSVVV,其中UUUVVV都是正交矩阵。重要的是,UUUSSS 的点积表示单词向量VVV表示单词上下文

共现矩阵的优点

  • 保留了单词之间的语义关系。即男人和女人往往比男人和苹果更亲近。
  • 以 SVD 为核心,产生比现有方法更准确的词向量表示。
  • 使用因式分解,这是一个定义明确的问题,可以有效地解决。
  • 必须计算一次,并且一旦计算就可以随时使用。从这个意义上说,它比其他人更快。

共生矩阵的缺点

  • 它需要巨大的内存来存储共现矩阵。

但是,这个问题可以通过在系统之外分解矩阵来规避,例如在 Hadoop 集群等中,并且可以保存。

Co-Occurrence Matrix的优缺点

Co-Occurrence Matrix的优点:

1. 它保留了单词之间的语义关系。(It preserves the semantic relationship between words.)

例如,男人和女人往往比男人和苹果更加亲密。

2.它以奇异值分解(SVD)为核心,是一种比现有方法更精确的词向量表示法。( It uses Singular Value Decomposition (SVD) at its core, which produces more accurate word vector representations than existing methods.)

3.它使用因子分解,这是一个可以被更好定义的问题,而且可以被有效地解决。(It uses factorization which is a well-defined problem and can be efficiently solved.)

4.共现矩阵只需计算一次,后续可以重复使用。因此,它比其他的词向量表示法更快。( If we compute this matrix once, then it can be used anytime wherever required. So, In this sense, it is faster than others.)

Co-Occurrence Matrix的缺点:

存储共现矩阵,需要消耗大量内存。 但是,为了解决这个问题,我们可以将矩阵分解出系统(例如在Hadoop集群中)来避免。

SVD方法存在的问题

SVD(Singular Value Decomposition)奇异值分解是机器学习中最重要的矩阵分解方法,它 能够将一个任意形状的矩阵分解成一个正交矩阵和一个对角矩阵以及另一个正交矩阵的乘积。


参考链接:Co-occurrence matrix & Singular Value Decomposition (SVD)

关于SVD详细的分解、计算后续会进一步补充。

1. 矩阵的维度经常变化(新词添加非常频繁,语料库大小也会经常变化)。(The dimensions of the matrix change very often (new words are added very frequently and corpus changes in size).)
2. 矩阵是非常稀疏的,因为大多数单词不会出现。(The matrix is extremely sparse since most words do not cooccur.)
3. 矩阵通常是高维的(106*106)。(The matrix is very high dimensional in general ( 106 *106 ))
4. 执行SVD的训练成本是正常成本的平方倍。(Quadratic cost to train (i.e. to perform SVD))
5. 需要在X上加入一些hacks来解释词频的严重不平衡。(Requires the incorporation of some hacks on X to account for the drastic imbalance in word frequency)

您可以在这里找到共现矩阵和SVD的实现。

Co-Occurrence Matrix——共现矩阵的计算方法相关推荐

  1. 文本挖掘(part6)--共现矩阵

    学习笔记,仅供参考,有错必纠 文档信息的向量化 共现矩阵(Co-currence matrix) 共现矩阵概述 I like deep learning. I like NLP. I enjoy mo ...

  2. (转) 基于MapReduce的ItemBase推荐算法的共现矩阵实现(一)

    转自:http://zengzhaozheng.blog.51cto.com/8219051/1557054 一.概述 这2个月为公司数据挖掘系统做一些根据用户标签情况对用户的相似度进行评估,其中涉及 ...

  3. 使用PPMI改进共现矩阵

    使用PPMI改进共现矩阵 共现矩阵的元素表示两个单词同时出现的次数,这里的次数并不具备好的性质,举个例子,有短语叫the car,因为the是个常用词,如果以两个单词同时出现的次数为衡量相关性的标准, ...

  4. Java共现矩阵的构建(用于社交网络结构分析)

    本文作者:合肥工业大学 电子商务研究所 钱洋 email:1563178220@qq.com . 内容可能有不到之处,欢迎交流. 未经本人允许禁止转载. 文章目录 背景 Java实现共现矩阵 程序运行 ...

  5. python关键词共现_python 共现矩阵的实现

    1.前言 最近在学习python词库的可视化,其中有一个依据共现矩阵制作的可视化,感觉十分炫酷,便以此复刻. 2.项目背景 本人利用爬虫获取各大博客网站的文章,在进行jieba分词,得到每篇文章的关键 ...

  6. 斯坦福cs224n-2021 assignment1-探索词向量—词共现矩阵—SVD(奇异值分解)

    词共现矩阵: 通过统计一个事先指定大小(window_size)的窗口内的word共现次数,以word周边的共现词的次数做为当前word的vector. SVD(奇异值分解) 基于共现矩阵得到的离散词 ...

  7. python关键词共现图谱_如何用知网导出的关键词 几秒 生成共现矩阵及图谱 》完整版...

    自编软件使用技能视频演示(一) 最新整理完整版的,从收集数据 到 共词矩阵 到 图谱. 在做社会网络分析时,首先需要得到共现矩阵,如关键词共现矩阵.作者共现矩阵.机构共现矩阵等. 可是如何把从知网里导 ...

  8. 【NLP】关键词共现/属性共现矩阵

    [NLP]关键词共现/属性共现矩阵 [共现]理解起来无非是两个词语同时出现的频次作为一个指标,构造矩阵.矩阵的第一列和第一行都是词语列表中的所有词,因此对角线一般设置为0--即不把自己和自己共现算进去 ...

  9. 关键词提取一:构造共现矩阵

    因为TFIDF算法的提取关键词的准确性很差,tfidf提取出的关键词很难看出文本的主旨,于是考虑结合文本语义对词汇的权重(IDF)重新分配,于是想要借鉴SKE算法,即将词语语义特征融入关键词提取过程中 ...

最新文章

  1. 浏览器history操作实现一些功能
  2. Redis 与 MQ 的区别
  3. Algorand协议详解
  4. 通过微软虚拟wifi接入点共享网络连接的方法以及一个问题的解决方案
  5. [007] 详解 .NET 程序集
  6. LeetCode MySQL 1543. Fix Product Name Format(trim去空格+upper/lower大小写)
  7. window下TensorFlow CUDA,CUDNN版本对应关系
  8. 实习生有年终奖吗_“辞职,一定要赶在发年终奖前!”为什么我建议你一定要年前跳槽...
  9. C++类成员的初始化顺序
  10. 今天执行grep命令差点把服务器搞崩
  11. python学习笔记——守护进程
  12. 随手记_PPT设计风格参考
  13. 练字和平时写字完全不一样怎么办?
  14. Qt开源工业软件收录
  15. win10计算机休眠快捷键,win10电脑休眠快捷键是什么_window10电脑睡眠快捷键怎么按-win7之家...
  16. [原]基因组变异检测概述
  17. Could not acquire change log lock. Currently locked by XXX
  18. linux 1.0 如何运行,观点|Linux 1.0 之旅:回顾这一切的开始
  19. C++实验3-税收计算
  20. 怎样查看电脑中的开机启动项?简单方法!如何禁止电脑开机启动的选项?

热门文章

  1. gog无效的验证码_如何退款GOG游戏
  2. 长安大学计算机研究生报录比,2020年长安大学考研报录比
  3. (一)基于物联网的智能安防监控机器人2207231212569
  4. 习题 5.7 找出一个二维数组中的鞍点,即该位置上的元素在该行上最大,在该列上最小(也可能没有鞍点)。
  5. 计算机网络分层及原理
  6. VScode前端插件安利
  7. 各种实用网站收集整理,不定期更新
  8. 《计算机组成原理》第二版第四章课后习题解答
  9. 理性讨论:国产沙盒游戏为何都比不上《方舟:生存进化》跟《MC》?
  10. 如何充实地度过大学四年?