词嵌入的基本方法

    科技2024-12-28  22

    词嵌入的基本方法

    引入问题基本概念基于频率的词嵌入计数向量化TF-IDF向量化具有固定上下文的共现窗口共现矩阵的优点共现矩阵的缺点

    引入问题

    当您搜索梅西时,我们如何使计算机告诉您有关足球或罗纳尔多的信息?您如何使计算机理解“苹果是美味的水果”中的“苹果”是可以食用的水果,而不是公司的水果?

    上述问题的答案:为单词创建表示形式,以捕获单词的含义,语义关系以及所使用的不同上下文类型。

    基本概念

    词嵌入是一种表示文本的方式,其中词汇中的每个词都由高维空间中实数值向量表示,为了具有相似含义的单词在向量空间中具有相似表示(在向量空间中接近)的方式学习向量。

    基于频率的词嵌入

    计数向量化TF-IDF向量化具有固定上下文的共现窗口

    计数向量化

    计数向量化模型从所有文档中学习词汇,然后通过计算每个单词出现的次数对每个文档建模。例如,假设我们有D个文档,T是词汇量中不同单词的数量,那么计数向量矩阵的大小将由D * T给出。让我们用以下两个句子举例: D 1: “The cat sat on the hat” D 2: “The dog ate the cat and the hat”

    从这两个doc中,我们得到的词汇如下: { the, cat, sat, on, hat, dog, ate, and }

    D = 2, T = 8

    上述矩阵中’cat’的单词向量为[1,1],依此类推。这里,行对应于语料库中的文档和列对应于词典中的标记。

    TF-IDF向量化

    在大型文本语料库中,某些单词会非常出现(例如英语中的“ the”,“ a”,“ is”),因此几乎没有关于文档实际内容的有意义的信息。如果我们将直接计数数据直接提供给分类器,那么那些非常频繁的术语会掩盖稀有但更有趣的术语的频率。

    为了将计数特征重新加权为适合分类器使用的浮点值,通常使用tf–idf变换。此方法不仅考虑单个文档中单词的出现,还考虑整个语料库中的单词。让我们以商业文章为准,与其他任何文章相比,本文将包含更多与商业相关的术语,例如股票市场,价格,股票等。但是每篇文章中都会频繁出现“一个”一词。因此此方法将对这些类型的高频单词造成不利影响。

    Tf表示术语频率,而tf–idf表示术语频率乘以文档频率的倒数。

    TF =(术语t在文档中出现的次数)/(文档中术语的次数)

    IDF = log(N / n),其中N是文档总数,n是出现术语t的文档数。

    TF-IDF(t,文档)= TF(t,文档)* IDF(t)

    具有固定上下文的共现窗口

    单词共现矩阵描述单词如何一起出现,进而捕获单词之间的关系。单词共现矩阵的计算仅是通过计算给定语料库中两个或多个单词如何一起出现。作为单词共现的示例,请考虑由以下文档组成的语料库:

    penny wise and pound foolish a penny saved is a penny earned

    让count(w(next)| w(current))表示单词w(next)跟在单词w(current)之后多少次,我们可以将单词“ a”和“ penny”的共现统计总结为: 上表显示,在我们的语料库中,“ a”后跟两次“ penny”,而单词“赚取”,“保存”和“明智”分别在“ penny”之后。因此,“赚取”是出现在“一分钱”之后的三分之一。上面显示的计数称为双频频率; 它只会查看当前单词中的下一个单词。给定一个N个单词的语料库,我们需要一个NxN大小的表来表示所有可能的单词对的双字组频率。由于大多数频率等于零,因此该表非常稀疏。实际上,共现计数被转换为概率。这导致每个行的行条目在共现矩阵中总计为一。

    但是,请记住,这个共现矩阵不是通常使用的单词矢量表示。相反,使用PCA,SVD等技术将该共现矩阵分解为因子,这些因子的组合形成词向量表示。

    让我更清楚地说明这一点。例如,您对上述大小为NXN的矩阵执行PCA。您将获得V主成分。您可以从这些V分量中选择k个分量。因此,新矩阵将为NX k的形式。

    并且,单个单词而不是以N维表示,而是以k维表示,同时仍捕获几乎相同的语义。k通常约为数百。

    因此,PCA在后面所做的是将共现矩阵分解为三个矩阵U,S和V,其中U和V均为正交矩阵。重要的是,U和S的点积表示单词矢量表示,而V表示单词上下文表示。

    共现矩阵的优点

    它保留了单词之间的语义关系。即男人和女人往往比男人和苹果更接近。它以SVD为核心,比现有方法产生更准确的单词矢量表示。它使用分解是一个明确定义的问题,可以有效解决。它必须计算一次,并且可以在计算后随时使用。从这个意义上讲,它比其他方法更快。

    共现矩阵的缺点

    需要大量内存来存储共现矩阵。 但是,可以通过将矩阵分解到系统外(例如在Hadoop集群等中)来解决此问题,并可以将其保存下来。
    Processed: 0.009, SQL: 8