在之前的课程中,我们介绍了基本的分词理论,例如词频和TF-IDF值。今天这节课我们将介绍一种基于神经网络的自然语言处理模型——词向量。为了让更多的读者了解词向量的重要性,我们会尽量避免复杂的数学推导。不过,理解词向量的原理仍需要一定的线性代数和统计学知识。如果需要深入了解词向量和深度学习的相关知识,可以参考李沐老师及其团队的课程。
自然语言是一种复杂的系统,其中词是表达意义的基本单元。在机器学习中,如何将词语信息转化为数值特征是一个关键问题。虽然词频和TF-IDF值能够提供一些词语信息量的数值表示,但它们并不能完全揭示词语的语义特征。为了更好地表达词语的语义信息,我们需要找到一种更有效的方法,这就是词向量。
词向量是一种将词语映射到实数向量空间的技术,称为词嵌入。目前,已经有很多模型可以实现词嵌入,本次课程将以经典的word2vec库中的跳字模型为例,讲解词向量的生成过程。
词向量最简单的构建方法是使用One-Hot编码。One-Hot编码将不同的词语视为不同的类别,如果有N个词语,则每个词可以与从0到N-1的连续整数一一对应。创建一个全0的向量,并将对应词的索引位置设为1。然而,One-Hot编码在大多数语义抽取场景中并不理想,因为它导致所有词语的向量都是两两正交的,无法准确计算语义相似度。
2013年,Google团队发布了Word2Vec工具,主要包括跳字模型(Skip-Gram)和连续词袋模型(CBOW),以及两种近似训练方法:负采样和层级softmax。Word2Vec能够较好地表达词语之间的相似和类比关系,自发布以来被广泛应用于自然语言处理任务中。
本次课程将重点介绍Word2Vec中的跳字模型和训练方法。跳字模型通过上下文环境来判断词语的语义信息,从而提取词向量。这一思想类似于马克思所说的“人的本质是一切社会关系的总和”,词语的含义很大程度上取决于其上下文环境。两个相似的上下文环境意味着词语的含义也可能相似。
在跳字模型中,我们用一个词来预测其上下文中的其他词。例如,假设一段文本的分词结果是“他”、“是”、“厨师”、“的”和“外甥”。跳字模型会关注给定中心词“厨师”的情况下,其上下文环境出现“他”、“是”、“的”和“外甥”的条件概率。背景词的选择依赖于与中心词的距离窗口大小,本例中窗口大小为2。
通过上述原理,我们可以用数学公式来描述跳字模型。假设词典索引集V的大小为|V|,且V={0, 1, …, |V|-1}。给定一个长度为T的文本序列,第t步的词为w(t)。当上下文窗口大小为m时,跳字模型需要最大化给定任一中心词生成所有背景词的概率:
[ prod{t=1}^{T} prod{-m leq j leq m, j neq 0} P(w{t+j}|wt) ]
实际上,这个公式是统计学中的极大似然估计的似然函数。为了简化计算,我们假设给定中心词后生成各个背景词的概率是相互独立的。设中心词wc在词典中的索引为c,背景词wo在词典中的索引为o,条件概率可以通过softmax函数定义为:
[ P(wo|wc) = frac{exp(vc cdot uo)}{sum{k=1}^{|V|} exp(vc cdot u_k)} ]
在实际应用中,为了获得更准确的语义信息,通常需要使用较大的语料库进行训练。但这样做会导致计算量过大。为了解决这个问题,常用的方法包括负采样和层级softmax。
由于词向量的流行,Python中有许多库都封装了Word2Vec,本次课程以Gensim库为例,以《红楼梦》为语料进行分享。相比TF-IDF和TextRank,词向量能够更好地表示词语的语义信息,但这也取决于训练语料的不同。读者可以根据应用场景选择合适的语料进行训练,并调整参数以获得不同的结果。
本次课程介绍了词向量的基本概念和生成方法,特别是跳字模型。希望读者能够理解词向量的重要性和应用方法。下一期课程将对比介绍Python爬虫工具,以及如何使用这些工具爬取文本信息。
希望以上改写内容符合您的要求,如有需要进一步调整的地方,请随时告知。