斯坦福大学深度学习与自然语言处理第二讲:词向量 | 我爱自然语言处理
第二讲:简单的词向量表示: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.在计算机中如何表示一个词的意思
通常使用类似Wordnet的这样的语义词典,包含有上位词(is-a)关系和同义词集panda的上位词,来自于NLTK中wordnet接口的演示 good的同义词集语义词典存在的问题
语义词典资源很棒但是可能在一些细微之处有缺失,例如这些同义词准确吗:adept, expert, good, practiced, proficient,skillful?会错过一些新词,几乎不可能做到及时更新: wicked, badass, nifty, crack, 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
通过一个词语的上下文可以学到这个词语的很多知识 这是现代统计NLP很成功的一个观点如何使用上下文来表示单词
答案:使用共现矩阵(Cooccurrence matrix)X 2个选择:全文还是窗口长度word-document的共现矩阵最终会得到泛化的主题(例如体育类词汇会有相似的标记),这就是浅层语义分析(LSA, Latent Semantic Analysis)窗口长度容易捕获语法(POS)和语义信息基于窗口的共现矩阵:一个简单例子
窗口长度是1(一般是5-10)对称(左右内容无关)语料样例 I like deep learning.I like NLP.I enjoy flying存在的问题
规模随着语料库词汇的增加而增加非常高的维度:需要大量的存储分类模型会遇到稀疏问题模型不够健壮解决方案:低维向量
idea: 将最重要的信息存储在固定的,低维度的向量里:密集向量(dense vector)维数通常是25-1000问题:如何降维?方法1:SVD(奇异值分解)
对共现矩阵X进行奇异值分解Python中简单的词向量SVD分解
语料:I like deep learning. I like NLP. I enjoy flying 打印U矩阵的前两列这也对应了最大的两个奇异值用向量来定义单词的意思:
在相关的模型中,包括深度学习模型,一个单词常常用密集向量(dense vector)来表示Hacks to X
功能词(the, he, has)过于频繁,对语法有很大影响,解决办法是降低使用或完全忽略功能词延展窗口增加对临近词的计数用皮尔逊相关系数代替计数,并置负数为0+++词向量中出现的一些有趣的语义Pattern
以下来自于: An improved model of semantic similarity based on lexical co-occurence使用SVD存在的问题
对于n*m矩阵来说计算的时间复杂度是o(mn^2) 当 n