DL4NLP---第二讲(上)
斯坦福大学深度学习与自然语言处理第二讲:词向量 | 我爱自然语言处理
第二讲:简单的词向量表示:word2vec, Glove(Simple Word Vector representations: word2vec, GloVe)
推荐阅读材料:
- Paper1:[Distributed Representations of Words and Phrases and their Compositionality]]
- Paper2:[Efficient Estimation of Word Representations in Vector Space]
- 第二讲Slides [slides]
- 第二讲视频 [video]
以下是第二讲的相关笔记,主要参考自课程的slides,视频和其他相关资料。
如何来表示一个词的意思(meaning)
- 英文单词Meaning的定义(来自于韦氏词典)
- the idea that is represented by a word, phrase, etc.
- the idea that a person wants to express by using words, signs, etc.
- the idea that is expressed in a work of writing, art, etc.
在计算机中如何表示一个词的意思
语义词典存在的问题
- 语义词典资源很棒但是可能在一些细微之处有缺失,例如这些同义词准确吗:adept, expert, good, practiced, proficient,skillful?
- 会错过一些新词,几乎不可能做到及时更新: wicked, badass, nifty, *****, ace, wizard, genius, ninjia
- 有一定的主观倾向
- 需要大量的人力物力
- 很难用来计算两个词语的相似度
One-hot Representation- 传统的基于规则或基于统计的自然语义处理方法将单词看作一个原子符号:hotel, conference, walk
- 在向量空间的范畴里,这是一个1很多0的向量表示:[0,0,0,0,…,0,1,0,…,0,0,0]
- 维数:20K(speech)–50K(PTB)–500K(big vocab)–13M(Google 1T)
- 这就是”one-hot”表示,这种表示方法存在一个重要的问题就是“词汇鸿沟”现象:任意两个词之间都是孤立的。光从这两个向量中看不出两个词是否有关系:
Distributional similarity based representations
如何使用上下文来表示单词
- 答案:使用共现矩阵(Cooccurrence matrix)X
- 2个选择:全文还是窗口长度
- word-document的共现矩阵最终会得到泛化的主题(例如体育类词汇会有相似的标记),这就是浅层语义分析(LSA, Latent Semantic Analysis)
- 窗口长度容易捕获语法(POS)和语义信息
基于窗口的共现矩阵:一个简单例子存在的问题
- 规模随着语料库词汇的增加而增加
- 非常高的维度:需要大量的存储
- 分类模型会遇到稀疏问题
- 模型不够健壮
解决方案:低维向量- idea: 将最重要的信息存储在固定的,低维度的向量里:密集向量(dense vector)
- 维数通常是25-1000
- 问题:如何降维?
方法1:SVD(奇异值分解)Python中简单的词向量SVD分解
用向量来定义单词的意思:
Hacks to X
- 功能词(the, he, has)过于频繁,对语法有很大影响,解决办法是降低使用或完全忽略功能词
- 延展窗口增加对临近词的计数
- 用皮尔逊相关系数代替计数,并置负数为0
- +++
词向量中出现的一些有趣的语义Pattern- 以下来自于:
使用SVD存在的问题
- 对于n*m矩阵来说计算的时间复杂度是o(mn^2) 当 n