斯坦福CS224n


lesson one:

自然语言处理的内容,这部分是导学课,实质内容很少,但是一些重要的内容我还是会记下来的.

  1. 对于自然语言处理学习的基础来说:
  2. 基本的python编程能力是需要的,
  3. 另外多元微积分和线性代数也是需要能够看懂
  4. 概率统计方面的知识也是相当重要的一部分

课程安排:

  1. 第一周使用notebook来实现
  2. 第二周使用numpy模块来实现基础部分
  3. 第三周学习pytorch
  4. 第四周和第五周使用pytorch在GPU上进行学习
  5. 结课项目是做一个问答系统

language is glorious chaos 语言是一个混沌系统
而大多数的编程语言是一种形式化语言
研究语言计算就是猜测人们对于语言理解的形式
语言的进化尺度是相当短的(相对于人类或者其他生物的进化历程)

语言也是知识的载体(图像和语言谁先出现?)
人类语言传递信息的速度是相当慢的
为了便利的传递信息,人类交流的时候会省略大量信息(被称作压缩),因为大家假定交流对象,都具有很多默认的知识。

韦氏字典中说:语义是人们通过符号系统表示的含义

NLTK是自然语言处理中的瑞士军刀,用途很多但是效果一般是比不上专业的toolkit(工具包组件)

WordNet synonym hypernyms
同义词集的方式很难保证集合是完整的


  • 传统nlp技术在2012年之前是很盛行的,但是在2013人们开始使用人工神经网络来研究自然语言处理领域。

  • 在传统NLP研究中,我们把词汇视作是离散信号:词是一个局部语义表示,传统的做法是把这些词汇用独热码来进行表示,但是真实环境下的自然语言一般有很多词,如果对于派生词也进行统计,那么独热码会带来一场维度灾难

要探寻一种方式把词汇表示成一种向量

  • 分布语义学:一个词的意思是和它一起出现的词所决定的,通过一个词的上下文你能够理解一个词,这是统计自然语言处理里面最成功的想法。
  • 使用大量语料来学习词汇的向量表示方式,这种方式会得出一个密集向量,将原始的独热码的稀疏形式转化为一个密集向量。
  • 词向量在大部分情况下被叫做词嵌入或者是词表示,这些都是一个词的分布表示。

通常实际情况下词向量的维度必须得大于50维
,在中文领域中腾讯使用了200维可以很好的表示7000w个词汇
英文中正常使用时维度是300,追求更好的词表示可以使用1000维或者是2000维的

在语义环境中性质比较近的词汇在词向量空间中的距离也是比较近,常用的词向量距离是使用余弦相似度,同理100维词向量是难以可视化的,只能对其在二维空间中的投影进行可视化显示。


word2vec:

  • 我们有了很多语料信息
  • 固定词表中的每一个词汇都被表示成向量
  • 通过文本中的每个位置(类似于窗),确定中心词和(C)上下文内容词(O)
  • 使用词向量相似性来计算在中心词给定的情况下上下文词向量的出现概率
  • 通过调整词向量来使得其概率最大化

这里得说一下,因为这里是使用了学习算法从数据中捕获一种使得表征损失最小的向量化形式,所以向量的每个维度不是人为指定好的,一般是通过语料上下文关系获取的。
和传统的NLP方式不同绕过语言学规则的制定来学习一种合适的编码方式
这就是2013年,mikolov的词向量学习框架的思路\

术语(term):corpus ->a large pile of text 在NLP领域中将大量文本称作语料库
有趣的知识:corpus是一个拉丁文

这种使用中心词预测文本上下文内容的方式叫做skip-gram,通过上下文来预测中心词的方式叫做CBow方式,
word2vec也是一个判别式模型,它的目标函数是负的对数似然函数(使用对数来)
后边可以使用softmax函数来对将任意值转化为概率分布数值CS224n: - 图1
因为是使用上下文来表示中心词,所以可以使用点积来比较中心词现在的向量表示和上下文向量
使用softmax使得其他非最大概率部分也有一些概率,也就是说不仅仅是知道最可能出现的一些词,也会知道哪些词汇不应该出现在一个句子里。
训练并且优化一个模型使用梯度下降

重要的一点是每个词使用两个向量来表示
最开始的U,V向量就是简单的随机初始化,然后以最小损失函数为目的,调整每一个单词向量。

实现这种分布形式的意义就是使得词汇会和真实文本中的上下文词汇共现的概率实现最大化。
也就是对真实环境中的词汇共现做极大似然

现在看看参数更新过程中的计算,
可以使用Gensim来调用glove的词向量文件

  1. 胆小鬼连幸福都会害怕,碰到棉花都会受伤。