目录
前言
在机器学习里的自然语言处理,是将语料库中的词语转换成词向量矩阵,再使用朴素贝叶斯算法对其进行预测。这篇文章要讲的是深度学习里关于自然语言处理的一些概念
一、词嵌入(Embedding)
1.传统自然语言处理问题
- 早期的模型没有考虑到词序和上下文关系,使得模型无法捕捉句子中词之间更复杂的语义联系
- 某些传统算法可能需要大量的计算和存储资源,影响其可扩展性
例如:
- 一个语料库 有4960个词语
- 每个词语的独热编码都是4959个0和1个1按顺序组成
- 第一个词语就是[000000...0001],第二个[0000...0010],依此类推
- 将其转换成词向量矩阵就是(4960*4960)
- 每一行数据就是一个词
- 如果语料库很大,那么就会出现维度灾难
- 使用词嵌入解决这种情况
2.什么是词嵌入
例如将一个词向量为(1*4960)的词语乘以一个(4960*300)的矩阵,将其变成(1*300)的词向量矩阵,从而达到降维的目的,解决了维度灾难。
二、Word2vec模型
- Word2Vec是由Google的研究团队提出的一种用于词嵌入的模型,旨在将单词转换为向量,以便于计算机理解和处理自然语言。
- 它能够捕捉词与词之间的语义关系,并在许多自然语言处理任务中得到了广泛应用。
1.Word2Vec的基本原理
连续词袋模型(CBOW):
- 目标是在给定上下文(周围词)的情况下预测中心词。
- 例如,在句子"我喜欢学习"中,如果上下文是"我"和"学习",模型的目标是预测"喜欢"。
- 即输入"我"、"学习"的独热编码,"喜欢"当做被预测的值
跳字模型(Skip-gram):
- 目标是根据中心词预测其上下文。
- 例如,在句子"我喜欢学习"中,如果中心词是"喜欢",模型的目标是预测"我"和"学习"。
- 输入"喜欢"的独热编码,"我"、"学习"当做被预测的值
三、CBOW模型训练过程
- 当前词的上下文词语的one-hot编码输入到输入层。
- 这些词分别乘以同一个矩阵W(V*N)后分别得到各自的1*N 向量。
- 将多个这些1*N 向量取平均为一个1*N 向量。
- 将这个1*N 向量乘矩阵 W'(N*V) ,变成一个1*V 向量。
- 将1*V 向量softmax归一化后输出取每个词的概率向量1*V
- 将概率值最大 的数对应的词作为预测词。
- 将预测的结果1*V 向量和真实标签1*V 向量(真实标签中的V个值中有一个是1,其他是0)计算误差
- 在每次前向传播之后反向传播误差,不断调整 W(V*N)和 W'(N*V)矩阵的值。
拿一个词语为4960个的语料库来举例,使用CBOW模型完成词嵌入:
- 假设选取上下各选两个词语,输入层每一个神经元接收一个词语的独热编码,然后将其乘以第一个权重w1(4960*300)的矩阵,将结果(1*300)的矩阵传入中间层
- 中间层将输入层传入的四个结果组合成一个(4*300)的矩阵,然后再对每一列进行求和得到(1*300)的矩阵,将该矩阵传入输出层
- 输出层接收到输入层传入的(1*300)的矩阵,将其乘以第二个权重w2(300*4960)的矩阵,得到(1*4960)的矩阵,每一行就是每个词语的预测结果
- 对矩阵进行归一化,得到的每一行都是一个词语的概率值
- 概率值最大的即为预测词
- 然后将该词的预测结果与真实标签进行误差计算
- 在每次前向传播之后反向传播误差,不断调整w1和w2的值