cs224d-lecture3 基于Window的分类与神经网络

  • 分类问题
  • window classification
  • 如何自己开始一个项目

分类问题

sentiment, named-entity recognition(NER)都可以看作是分类问题。给定一个词的词向量,预测其所属的类。这与传统的监督学习都是一样的~ \[\{x^{(i)},y^{(i)}\}_1^N\] 其中 \(x^{(i)}\) 是一个 d-维向量,\(y^(i)\) 是一个 C-维one-hot向量,N是总数。

softmax

softmax: \[p(y_i=1|x)=\dfrac{exp(W_jx)}{\sum_{c=1}^Cexp(W_cx)}\]

softmax与交叉熵损失

训练时可以直接最小化正确类别的概率的负对数: \[-log(\dfrac{exp(W_kx)}{\sum_{c=1}^Cexp(W_cx)})\]

其实这个损失函数等效于交叉熵 \(H(\hat y, y)=-logy_ilog(\hat y)\),其中y是one-hot向量。

对于N个数据点 \[-\sum_{i = 1}^N\log \bigg(\frac{\exp(W_{k{(i)}\cdot}x^{(i)})}{\sum_{c=1}^C\exp(W_{c\cdot}x^{(i)})}\bigg)\]

加上正则化: \[-\sum_{i = 1}^N\log \bigg(\frac{\exp(W_{k{(i)}\cdot}x^{(i)})}{\sum_{c=1}^C\exp(W_{c\cdot}x^{(i)})}\bigg) + \lambda \sum_{k=1}^{C\cdot d + |V|\cdot d} \theta_k^2\]

在传统的机器学习中,我们只需要训练权重参数即可。但在这里我们还可以以重新训练词向量中的权重参数。那么需要训练的参数数量:Nxd+dxV

retrain embedding

但当你的训练集很小时,可能会使词向量失去泛化效果。

This is because Word2Vec or GloVe produce semantically related words to be located in the same part of the word space. When we retrain these words over a small set of the vocabulary, these words are shifted in the word space and as a result, the performance over the final task could actually reduce.

Window classification

通过监督学习来对一个single word进行分类显然是不符合自然语言的特性的。因为一个word具有多义性和多词性。需要结合上下文来判断。

\(X^{i}_{window}\) 代替单个词作为输入 \(W_i\)

cs224d-lecture4 反向传播和项目指导

Project

QA: A neural network for Factoid Question Answering over Paragraph

sentiment: http://nlp.standford.edu/sentiment/

接下来都是围绕着课程项目的指导与建议,就不啰嗦了。简单写写一些体会:

  • 不要想着一上来就发明个新模型搞个大新闻

  • 也不要浪费大部分时间在爬虫上面,本末倒置

  • 把旧模型用于新领域

  • 先要按部就班地熟悉数据、熟悉评测标准、实现基线方法

  • 再根据基线方法的不足之处思考深度学习如何能带来改进

  • 再实现一个已有的较为前沿的模型

  • 观察该模型犯的错误,思考如何改进

  • 这时才能没准就福至心灵发明一个新方法