深度自然语言处理的起点-词向量

图灵汇官网

背景

自从2016年3月AlphaGo与李世石的围棋大战以来,人工智能这一概念开始广泛进入公众视野,这背后离不开深度学习技术的发展。2012年,多伦多大学的Geoffrey Hinton、Ilya Sutskever和Alex Krizhevsky提出了一个名为AlexNet的深度卷积神经网络结构,赢得了ImageNet竞赛,其成绩比当时的第二名高出41%。这一成就让人们对深度学习技术的潜力有了深刻的认识,并推动了大量研究转向深度学习领域。

短短几年内,深度学习技术已经在图像识别、语音识别、推荐系统、自动驾驶等多个领域取得了显著进展。自然语言处理方面的问题,如机器翻译和机器创作,也逐渐被深度学习技术所攻克。要使用深度学习技术解决自然语言处理任务,首先要将人类的符号语言转化为数字表示,即词向量(word embedding)。接下来,我们将介绍几种常见的词向量化方法。

One-hot编码

One-hot编码是一种简单的向量化方法。假设我们的语料库中有以下三句话:

  • 我 是 中国人
  • 我 爱 北京 天安门
  • 周杰伦 到 北京 了

通过对这些句子进行分词,我们发现共有9个不同的词:“我”、“是”、“中国人”、“爱”、“北京”、“天安门”、“周杰伦”、“到”、“了”。因此,每个词可以用一个9维的向量来表示:

  • “我” -> [1, 0, 0, 0, 0, 0, 0, 0, 0]
  • “是” -> [0, 1, 0, 0, 0, 0, 0, 0, 0]
  • “中国人” -> [0, 0, 1, 0, 0, 0, 0, 0, 0]
  • ...

虽然这种方法简单,但它存在一些明显的问题:

  1. 稀疏性:每个词向量只有一个非零元素,这使得向量非常稀疏。
  2. 相似度问题:这种方法无法衡量词语之间的相似度,例如“北京”和“伦敦”的相关性应大于“北京”和“番茄”。

这些问题导致One-hot编码并不是最理想的词向量化方法。

Word2vec方法

Word2vec是由Google公司开发的一种词向量工具包,可以用来训练词向量。它内部使用神经网络实现,通常提到Word2vec时,指的是其实现算法,包括Skip-grams(SG)和Continuous Bag of Words(CBOW)。这两种方法分别用于预测上下文和目标单词。

2.1 模型结构

Skip-grams模型是用中心词预测上下文,而CBOW模型则是用上下文预测中心词。例如,“小明 喜欢 吃 西红柿”,以“吃”为中心词,Skip-grams模型会用“吃”预测“喜欢”和“西红柿”,而CBOW模型则用“喜欢”和“西红柿”预测“吃”。

2.2 相关公式

对于每个词t=1...T,预测窗口内的上下文词:

[ text{目标函数} = log P(wo | wc) ]

其中,(wc)表示中心词,(wo)表示上下文中的词。预测概率可以通过softmax函数得到:

[ P(wo | wc) = frac{exp(v{wo} cdot u{wc})}{sum{j=1}^{V} exp(v{wj} cdot u{w_c})} ]

这里的(v{wo})和(u{wc})分别表示上下文词和中心词的词向量。

2.3 训练优化

Word2vec的训练过程中,参数规模非常大。为了优化训练过程,引入了一些技术,如向量哈希和Negative Sampling。

3.1 向量哈希

向量哈希是一种通过哈希映射来减少参数更新次数的技术,从而提高训练效率。

3.2 Negative Sampling

Negative Sampling是一种采样方法,用于简化计算softmax函数的复杂度。它通过对每个正例采样几个负例来训练二分类器。

结论

通过上述方法,Word2vec能够有效地生成高质量的词向量,从而提升自然语言处理任务的效果。这些技术不仅提高了计算效率,还增强了模型的性能。

本文来源: 图灵汇 文章作者: 陶晓庆