精华内容
下载资源
问答
  • 向量 (module) 范数(norm)
    万次阅读
    2019-02-14 16:52:46

    1,向量的模和范数的计算结果都是一个实数,这个数字对应着单个向量的长度或者两个向量之间的距离。

    2,在空间几何中(经常是2或3维空间),常用模来表示向量的长度或两个向量间的距离,符号为|| x ⃗ \vec{x} x ||。

    例子:
    在二维空间中有两个向量: x ⃗ = ( 1 , 2 ) , y ⃗ = ( 2 , 3 ) \vec{x}=(1,2),\vec{y}=(2,3) x =(1,2)y =(2,3)
    x ⃗ 的 长 度 为 ∣ ∣ x ⃗ ∣ ∣ = 1 2 + 2 2 \vec{x}的长度为||\vec{x}||=\sqrt{1^2+2^2} x x =12+22
    x ⃗ 和 y ⃗ 之 间 的 距 离 为 ∣ ∣ x ⃗ − y ⃗ ∣ ∣ = ( 1 − 2 ) 2 + ( 2 − 3 ) 2 \vec{x}和\vec{y}之间的距离为||\vec{x}-\vec{y}||=\sqrt{(1-2)^2+(2-3)^2} x y x y =(12)2+(23)2

    3,在线性代数中,常用范数这个概念。对于1维空间的实数集,标准的范数就是绝对值,将绝对值的概念推广到多维空间就叫做范数。

    4,范数的定义:

    A norm is any function g that maps vectors to real numbers that satis es the following conditions:
    1, Non-negativity: for all x ⃗ ∈ R D , g ( x ⃗ ) > = 0 ; \vec{x} \in R^D, g(\vec{x})>=0; x RD,g(x )>=0;
    2, Strictly positive: for all x ⃗ , g ( x ⃗ ) = 0 \vec{x}, g(\vec{x})=0 x ,g(x )=0 implies that x ⃗ = 0 \vec{x}=0 x =0;
    3, Homogeneity: for all x ⃗ \vec{x} x and a, g ( a x ⃗ ) = ∣ a ∣ g ( x ⃗ ) , g(a\vec{x})=|a|g(\vec{x}), g(ax )=ag(x ), where |a| is the absolute value;
    4, Triangle inequality: for all x ⃗ , y ⃗ , g ( x ⃗ , y ⃗ ) &lt; = g ( x ⃗ ) + g ( y ⃗ ) \vec{x}, \vec{y}, g(\vec{x}, \vec{y})&lt;=g(\vec{x})+g(\vec{y}) x ,y ,g(x ,y )<=g(x )+g(y ).

    5,ell-p norm ( ℓ p \ell_p p)

    这是一类特殊的范数家族,读作“little ell p 范数”。
    定义如下:
    Let p p p be in the range [ 0 , ∞ ] [0, \infin] [0,]; then the ℓ p \ell_p p norm of x, denoted by ∣ ∣ x ⃗ ∣ ∣ p ||\vec{x}||_p x p, is de ned by:

    ∣ ∣ x ⃗ ∣ ∣ p = ( ∑ d = 1 D ∣ x d ∣ p ) 1 p ||\vec{x}||_p=(\sum_{d=1}^{D}|x_{d}|^p)^\frac{1}{p} x p=(d=1Dxdp)p1

    6,由 ℓ p \ell_p p范数家族衍生出来的特殊范数

    1,欧式范数(Euclidean norm):
    g ( x ) = ∑ d = 1 D x d 2 g(x)=\sqrt{\sum_{d=1}^{D} x_d^2} g(x)=d=1Dxd2
    (对应着 ℓ 2 范 数 \ell_2范数 2

    2,曼哈顿范数(Manhattan norm):
    g ( x ) = ∑ d = 1 D ∣ x d ∣ g(x)=\sum_{d=1}^{D} |x_d| g(x)=d=1Dxd
    (对应着 ℓ 1 范 数 \ell_1范数 1

    3,最大值范数(Maximum norm):
    g ( x ) = m a x d ∣ x d ∣ g(x)=max_d|x_d| g(x)=maxdxd
    (对应着 ℓ ∞ 范 数 \ell_\infin范数

    4,0范数(Zero norm):
    g ( x ) = ∑ d = 1 D 1 [ x d 不 等 于 0 ] g(x)=\sum_{d=1}^{D}1[x_d不等于0] g(x)=d=1D1[xd0]
    (对应着 ℓ 0 范 数 \ell_0范数 0

    更多相关内容
  • c++向量模板(myVector)

    2015-11-27 22:38:44
    自己写的一个向量模板类,大家可以参考学习一下。
  • 向量模法与模糊物元模型在南京市水环境承载力评价中的应用,程卓,,水是人类赖以生存的根本,是城市产生和发展的根基,一座城市的水环境状况对城市公共安全具有很重要的意义,然而近年来突发水环境�
  • 向量模型(1)

    万次阅读 2018-08-14 09:55:59
    向量模型 one-hot Vector one-hot vector 最简单的编码方式:假设我们的词库总共有n个词,那我们开一个1*n的高维向量,而每个词都会在某个索引index下取到1,其余位置全部都取值为0。 问题 这种词向量编码...

    词向量模型

    one-hot Vector

    one-hot vector

    最简单的编码方式:假设我们的词库总共有n个词,那我们开一个1*n的高维向量,而每个词都会在某个索引index下取到1,其余位置全部都取值为0。

    问题

    这种词向量编码方式简单粗暴,我们将每一个词作为一个完全独立的个体来表达。遗憾的是,这种方式下,我们的词向量没办法给我们任何形式的词组相似性权衡。因为你开了一个极高维度的空间,然后每个词语都会占据一个维度,因此没有办法在空间中关联起来。

    解决方案

    可以把词向量的维度降低一些,在这样一个子空间中,可能原本没有关联的词就关联起来了。

    基于 SVD 的方法

    SVD

    这是一种构造词嵌入(即词向量)的方法,我们首先会遍历所有的文本数据集,然后统计词出现的次数,接着用一个矩阵 X 来表示所有的次数情况,紧接着对X进行奇异值分解得到一个 USVT 的分解。然后用 U 的行(rows)作为所有词表中词的词向量。对于矩阵 X ,有2种选择:全文或者窗口长度。

    • 词-文档矩阵
      建立一个词组文档矩阵 X,具体是这么做的:遍历海量的文件,每次词组 i 出现在文件 j 中时,将 Xij 的值加1。不过大家可想而知,这会是个很大的矩阵R|V|×M,而且矩阵大小还和文档个数M有关系。所以咱们最好想办法处理和优化一下。word-document的共现矩阵最终会得到泛化的主题(例如体育类词汇会有相似的标记),这就是浅层语义分析(LSA, Latent Semantic Analysis)

    • 基于窗口的共现矩阵 X
      把矩阵X记录的词频变成一个相关性矩阵,对 X 做奇异值分解,观察奇异值(矩阵的对角元素),并根据我们期待保留的百分比来进行截断(只保留前k个维度),把子矩阵 U1:|V|,1:k 视作我们的词嵌入矩阵。也就是说,对于词表中的每一个词,我们都用一个 k 维的向量来表达了。窗口长度容易捕获语法(POS)和语义信息

    对共现矩阵X进行奇异值分解

    特征值分解与奇异值分解
    特征值分解只适用于方阵。当矩阵是高维的情况下,那么这个矩阵就是高维空间下的一个线性变换,一个矩阵乘以一个向量后得到的向量,其实就相当于将这个向量进行了线性变换。我们通过特征值分解得到的前N个特征向量,对应了这个矩阵最主要的N个变化方向。利用这前N个变化方向,可以近似这个矩阵(变换)。也就是 – 提取这个矩阵最重要的特征。总结一下,特征值分解可以得到特征值与特征向量,特征值表示的是这个特征到底有多重要,而特征向量表示这个特征是什么,可以将每一个特征向量理解为一个线性的子空间,我们可以利用这些线性的子空间干很多的事情。
    奇异值分解是一个能适用于任意的矩阵的一种分解的方法,可以通过求特征值得到。

    Python中简单的词向量SVD分解

    问题

    • 矩阵的维度会经常变化(新的词语经常会增加,语料库的大小也会随时变化)。
    • 矩阵是非常稀疏的,因为大多数词并不同时出现。
    • 矩阵的维度通常非常高(≈106×106),需要大量的存储
    • 训练需要O(n2)的复杂度
    • 对于新词或者新的文档很难及时更新
    • 需要专门对矩阵X进行特殊处理,以应对词组频率的极度不平衡的状况

    解决方案:直接学习低维度的词向量

    idea: 将最重要的信息存储在固定的,低维度的向量里:密集向量(dense vector),维数通常是25-1000
    然而,如何降维?

    基于迭代的方法

    创建一个模型,它能够一步步迭代地进行学习,并最终得出每个单词基于其上下文的条件概率。

    n-gram

    基本思想: 一个词出现的概率只与它前面固定数目的词相关。
    主要工作是在预料中统计各种词串出现的次数以及平滑化处理,概率值计算号之后就存储起来,下次需要计算一个句子的概率时,只需找到相关的概率参数,将它们连乘起来就好了。
    建立一个概率模型,它包含已知和未知参数。每增加一个训练样本,它就能从模型的输入、输出和期望输出(标签),多学到一点点未知参数的信息。
    在每次迭代过程中,这个模型都能够评估其误差,并按照一定的更新规则,惩罚那些导致误差的参数。(误差“反向传播”法)。

    CBOW

    以 {“The”, “cat”, “over”, “the”, “puddle”} 为上下文,能够预测或产生它们中心的词语”jumped”。模型输入为 x(c),模型输出为 y,y 就是中心词 ‘jumped’。对于每个词语 wi 学习了两个向量。

    2.jpg

    连续词袋模型(CBOW)中的各个记号:

    • WiWi:单词表 V 中的第 i 个单词, one-hot 向量
    • v∈Rn∗|V|v∈Rn∗|V|:输入词矩阵
    • vivi:V的第i列,n 维 WiWi 的输入向量
    • U∈R|V|∗nU∈R|V|∗n:输出词矩阵
    • UiUi:U 的第 i 行,n 维 WiWi 的输出向量

    把整个过程拆分成以下几步:

    • 对于 m 个词长度的输入上下文,我们产生它们的 one-hot 向量 (xc−m,⋯,xc−1,xc+1,⋯,xc+m)(xc−m,⋯,xc−1,xc+1,⋯,xc+m),作为模型输入。
    • 我们得到上下文的嵌入词向量 (vc−m+1=Vxc−m+1,⋯,vc+m=Vxc+m)(vc−m+1=Vxc−m+1,⋯,vc+m=Vxc+m)
    • 将这些向量取平均 vˆ=Vc−m+Vc−m+1+⋯+Vc+m2mv^=Vc−m+Vc−m+1+⋯+Vc+m2m
    • 产生一个得分向量 z=Uvˆz=Uv^
    • 将得分向量转换成概率分布形式 yˆ=softmax(z)y^=softmax(z)
    • 我们希望我们产生的概率分布 ,与真实概率分布 yˆy^ 相匹配。而 y 刚好也就是我们期望的真实词语的one-hot向量。

    怎样找到矩阵U、V?
    目标函数选交叉熵,用梯度下降法去更新每一个相关的词向量 UcUc 和 VjVj.

    当我们试图从已知概率学习一个新的概率时,最常见的是从信息论的角度寻找方法来评估两个概率分布的差距。其中广受好评又广泛应用的一个评估差异/损失的函数是交叉熵:
    H(yˆ,y)=−∑|V|j=1yjlog(yˆj)H(y^,y)=−∑j=1|V|yjlog(y^j)

    结合我们当下的例子,y 只是一个one-hot向量,于是上面的损失函数就可以简化为:
    H(yˆ,y)=−yjlog(yˆj)H(y^,y)=−yjlog(y^j)

    我们用 c 表示 y 这个 one-hot 向量取值为 1 的那个维度的下标。所以在我们预测为准确值的情况下 yˆc=1y^c=1。于是损失为 −1 log(1) = 0。所以对于一个理想的预测值,因为预测得到的概率分布和真实概率分布完全一样,因此损失为0。相反,当我们的预测结果非常不理想, yˆc=0.01y^c=0.01。计算得到的损失为−1 log(0.01) ≈ 4.605,损失非常大,原本这才是标准结果,可是你给了一个非常低的概率,因此会拿到一个非常大的loss。最终的优化函数为:

    Skip-Gram

    与上面提到的模型对应的另一种思路,是以中心的词语 ”jumped” 为输入,能够预测或产生它周围的词语 ”The”, “cat”, “over”, “the”, “puddle” 等。这里我们叫 ”jumped” 为上下文。我们把它叫做Skip-Gram 模型。

    这个模型的建立与连续词袋模型(CBOW)非常相似,但本质上是交换了输入和输出的位置。我们令输入的 one-hot 向量(中心词)为 x(因为它只有一个),输出向量为 y(j)。U 和 V 的定义与连续词袋模型一样。看一下网络结构图:

    1.jpg

    举个例子,假设现在的数据集如下:

    the quick brown fox jumped over the lazy dog

    这个数据集中包含了词语及其上下文信息。上下文信息(Context)是一个比较宽泛的概念,有多种不同的理解:例如,词语周边的句法结构,词语的左边部分的若干个词语信息,对应的右半部分等。这里,我们使用最原始和基本的定义,即认为词语左右相邻的若干个词汇是该词对应的上下文信息。例如,取左右的词窗口为1,下面是数据集中的(上下文信息,对应的词)的pairs:

    ([the, brown], quick), ([quick, fox], brown), ([brown, jumped], fox), ...

    Skip-Gram模型是通过输入的目标词来预测其对应的上下文信息,所以目标是通过[quick]来预测[the]和[brown],通过[brown]来预测[quick]和[fox]… 将上面的pair转换为(inpUt, output)的形式如下:

    (quick, the), (quick, brown), (brown, quick), (brown, fox), ...

    对应到上面部分,我们可以把 Skip-Gram 模型的运作方式拆分成以下几步:

    • 生成 one-hot 输入向量 x。
    • 得到上下文的嵌入词向量 VcVc=VxVx。
    • 因为这里不需要取平均值的操作,所以直接是vˆ=vcv^=vc。
    • 通过U=UVcU=UVc产生 2m 个得分向量 Uc−m,⋯,Uc−1,Uc+1,⋯,Uc+mUc−m,⋯,Uc−1,Uc+1,⋯,Uc+m,如果上下文各取一个词,就是 Uc−1Uc−1, Uc+1Uc+1
    • 将得分向量转换成概率分布形式 y=softmax(u)y=softmax(u)。
    • 我们希望我们产生的概率分布与真实概率分布 yc−m,⋯,yc−1,,yc+1⋯,yc+myc−m,⋯,yc−1,,yc+1⋯,yc+m 相匹配,也就是我们真实输出结果的 one-hot 向量。

    为模型设定一个目标/损失函数。不过不同的地方是我们这里需要引入朴素贝叶斯假设来将联合概率拆分成独立概率相乘。只要给出了中心词,所有的输出词是完全独立的。使用随机梯度下降算法(SGD)来进行最优化求解,并且使用mini-batch方法 (通常batch_size在16到512之间)。可以用随机梯度下降法去更新未知参数的梯度。
    对应的优化函数是

    这里值得一提的是,skipgram 和 PMI 之间是有联系的,Levy and Goldberg(2014) 提到过,skip-gram 在矩阵成为 PMI 的一个 shifted version 时(WW‘T=MPMI−logkWW‘T=MPMI−logk),得到最优解,也就是说,

    Skip-gram is implicitly factoring a shifted version of the PMI matrix into the two embedding matrices.

    我们再次观察一下目标函数,注意到对整个单词表|V|求和的计算量是非常巨大的,任何一个对目标函数的更新和求值操作都会有O(|V|)的时间复杂度。我们需要一个思路去简化一下,我们想办法去求它的近似,可以参照负面采样(Negative Sampling)

    why skip-gram

    在NLP中,语料的选取是一个相当重要的问题。
    首先,语料必须充分。一方面词典的词量要足够大,另一方面尽可能地包含反映词语之间关系的句子,如“鱼在水中游”这种句式在语料中尽可能地多,模型才能学习到该句中的语义和语法关系,这和人类学习自然语言是一个道理,重复次数多了,也就会模型了。
    其次,语料必须准确。所选取的语料能够正确反映该语言的语义和语法关系。如中文的《人民日报》比较准确。但更多时候不是语料选取引发准确性问题,而是处理的方法。
    由于窗口大小的限制,这会导致超出窗口的词语与当前词之间的关系不能正确地反映到模型中,如果单纯扩大窗口大小会增加训练的复杂度。Skip-gram模型的提出很好解决了这些问题。

    我们来看看 skip-gram 的定义。

    Skip-gram 实际上的定义很简单,就是允许跳几个字的意思。依照原论文里的定义,这个句子:

    Insurgents killed in ongoing fighting.

    在 bi-grams 的时候是拆成:

    { insurgents killed, killed in, in ongoing, ongoing fighting }

    在 2-skip-bi-grams 的时候拆成:

    { insurgents killed, insurgents in, insurgents ongoing, killed in, killed ongoing, killed fighting, in ongoing, in fighting, ongoing fighting }

    在 tri-grams 的时候是:

    { insurgents killed in, killed in ongoing, in ongoing fighting }

    在 2-skip-tri-grams 的时候是:

    { insurgents killed in, insurgents killed ongoing, insurgents killed fighting, insurgentsin ongoing, insurgents in fighting, insurgents ongoing fighting, killed in ongoing, killed in fighting, killed ongoing fighting, in ongoing fighting }

    这样就有办法在整篇文章都是用“台湾大学”的情况下以“台大”找到文章,解决一些“同义词”想要解决的问题。Skip-gram 一方面反映了句子的真实意思,另一方面还扩大了语料,2元词组由原来的4个扩展到了9个,3元词组由原来的3个扩展到了10个。

    Word2Vec

    Word2Vec 是一个典型的预测模型,用于高效地学习Word Embedding,实现的模型就是上面提到的两种:连续词袋模型(CBOW)和Skip-Gram模型。算法上这两个模型是相似的

    • CBOW 从输入的上下文信息来预测目标词
    • Skip-gram 模型则是相反的,从目标词来预测上下文信息
      一般而言,这种方式上的区别使得 CBOW 模型更适合应用在小规模的数据集上,能够对很多的分布式信息进行平滑处理;而 Skip-Gram 模型则比较适合用于大规模的数据集上。

    另外一点是,embeddings 可以来捕捉关系!
    3.jpg

    向量空间模型(Vector space models, VSMs)

    将词语表示为一个连续的词向量,并且语义接近的词语对应的词向量在空间上也是接近的。
    分布式假说理论: 该假说的思想是如果两个词的上下文(context)相同,那么这两个词所表达的语义也是一样的;换言之,两个词的语义是否相同或相似,取决于两个词的上下文内容,上下文相同表示两个词是可以等价替换的。

    词向量生成方法主要分两大类:

    • 计数法(count-based methods, e.g. Latent Semantic Analysis)
      在大型语料中统计词语及邻近的词的共现频率,然后将之为每个词都映射为一个稠密的向量表示;
    • 预测法(predictive methods, e.g. neural probabilistic language models)。
      直接利用词语的邻近词信息来得到预测词的词向量(词向量通常作为模型的训练参数)。

    词向量任务评价

    内部任务评价

    内部任务评价的特点如下:

    • 一般是在一个特定的子任务中进行评测
    • 计算很快
    • 有助于理解相关的系统
    • 在实际的NLP任务中表现好坏,可能需要外部关联实际应用

    方法:词向量类比

    我们先输入一组不完整的类比 a:b::c:? 内部任务评价系统找出最大化余弦相似度的词向量
    理想情况下,我们想得到xb−xa=xd−xc(例如,王后–国王 = 女演员 – 男演员)。于是xb−xa+xc=xd, 所以我们只需要找出一个与xb−xa+xc的标准化内积(比如余弦相似度)取最大值的词向量就可以了。

    类比语料示例:

    首都城市1 : 国家1 : : 首都城市2 : 国家2
    Beijing:China::Astana       Kazakhstan
    Beijing:China::Asmara       Eritrea
    ...
    
    比较级
    bad:worst::big            biggest
    bad:worst::easy           easiest
    ...
    
    时态
    dancing:danced::decreased         decreased
    dancing:danced::falling           fell
    ...
    

    评测语料

    方法:相关性评价

    另外一个评测词向量质量的简单方法是人为对两个词的相似度在一个固定区间内打分(比如说 0-10),再跟对应向量的余弦相适度进行对比。
    评测语料

    考虑参数

    • 词向量的维度
    • 资料库的大小
    • 资料源/类型
    • 上下文窗口的大小
    • 上下文的对称性

    一般而言,

    • 精度和使用的模型高度相关,因为这些生成词向量的方法所依据的特性是完全不同的(如同时出现的次数,奇异向量等。)
    • 文集量越大,精度越高,因为例子越多,生成的系统学习到的经验就更丰富。比如在完成词汇类比的例子中,系统如果之前没有接触测试词,就可能会生成错误的结果。
    • 如果维度特别低或特别高,精度就会比较低。低维度词向量无法捕捉文集中不同词语的不同意义。这可以视为我们模型复杂度过低而导致的高偏差。比如 “king”, “queen”, “man”, “woman” 这几个词,我们需要至少2个维度像”gender” 如 “leadership” 来把它们编译成 2-字节 词向量。 过低的维度将无法捕捉四个词之间的语义差别,而过高的维度将捕捉到一些对泛化能力没有用的噪音– 即高方差的问题。

    外部任务评价

    外部任务评价的特点如下:

    • 在一个实际任务中进行评测
    • 需要花很长的时间来计算精度
    • 不太清楚是否是某个子系统或者其他子系统,又或是几个子系统互相作用引起的问题
    • 如果替换原有的子系统后获得精度提升,则说明替换很可能是有效的

    参考链接:
    斯坦福大学课程:深度学习与自然语言处理
    斯坦福大学深度学习与自然语言处理第二讲:词向量

    转自: http://www.shuang0420.com/2016/06/21/%E8%AF%8D%E5%90%91%E9%87%8F%E6%80%BB%E7%BB%93%E7%AC%94%E8%AE%B0%EF%BC%88%E7%AE%80%E6%B4%81%E7%89%88%EF%BC%89/

    展开全文
  • 【NLP】⚠️学不会打我! 半小时学会基本操作 2⚠️词向量模型简介

    概述

    我们先来说说词向量究竟是什么. 当我们把文本交给算法来处理的时候, 计算机并不能理解我们输入的文本, 词向量就由此而生了. 简单的来说, 词向量就是将词语转换成数字组成的向量.
    在这里插入图片描述
    当我们描述一个人的时候, 我们会使用身高体重等种种指标, 这些指标就可以当做向量. 有了向量我们就可以使用不同方法来计算相似度.
    在这里插入图片描述
    那我们如何来描述语言的特征呢? 我们把语言分割成一个个词, 然后在词的层面上构建特征.
    在这里插入图片描述

    词向量维度

    词向量的维度越高, 其所能提供的信息也就越多, 计算结果的可靠性就更值得信赖.

    50 维的词向量:
    在这里插入图片描述
    用热度图表示一下:
    在这里插入图片描述
    在这里插入图片描述
    从上图我们可以看出, 相似的词在特征表达中比较相似. 由此也可以证明词的特征是有意义的.

    Word2Vec

    Word2Vec 是一个经过预训练的 2 层神经网络, 可以帮助我们将单词转换为向量. Word2Vec 分为两种学习的方法: CBOW 和 Skip-Gram.
    在这里插入图片描述

    CBOW 模型

    CBOW (Continuous Bag-of-Words) 是根据单词周围的上下文来预测中间的词. 如图:
    在这里插入图片描述

    Skip-Gram 模型

    Skip-Gram 用于预测同一句子中当前单词前后的特定范围内的单词.
    在这里插入图片描述
    Skip-Gram 所需的训练数据集:
    在这里插入图片描述

    在这里插入图片描述

    负采样模型

    如果一个语料库稍微大一些, 可能的结果简直太多了. 词向量模型的最后一层相当于 softmax (转换为概率), 计算起来会非常耗时.

    我们可以将输入改成两个单词, 判断这两个词是否为前后对应的输入和输出, 即一个二分类任务.
    在这里插入图片描述
    在这里插入图片描述

    但是我们会发现一个问题, 此时的训练集构建出来的标签全为 1, 无法进行较好的训练. 这时候负采样模型就派上用场了. (默认为 5 个)
    在这里插入图片描述
    在这里插入图片描述

    词向量的训练过程

    1. 初始化词向量矩阵

    在这里插入图片描述
    在这里插入图片描述

    2. 神经网络反向传播

    通过神经网络反向传播来计算更新. 此时不光更新权重参数矩阵 W, 也会更新输入数据.
    在这里插入图片描述

    展开全文
  • 用HPLC法分离测定了不同种属、产地及年限的麻黄草的主要成分,根据17批供试品溶液HPLC图谱给出的相关参数建立了麻黄药材的指纹图谱,并用向量模算法对麻黄指纹图谱进行了解析.结果表明,用向量模算法能够很好地区分...
  • 详解GloVe词向量模型

    万次阅读 多人点赞 2019-08-04 21:26:52
      词向量的表示可以分成两个大类1:基于统计方法例如共现矩阵、奇异值分解SVD;2:基于语言模型例如神经网络语言模型(NNLM)、word2vector(CBOW、skip-gram)、GloVe、ELMo。   word2vector中的skip-gram模型是...

      词向量的表示可以分成两个大类1:基于统计方法例如共现矩阵、奇异值分解SVD;2:基于语言模型例如神经网络语言模型(NNLM)、word2vector(CBOW、skip-gram)、GloVe、ELMo。
      word2vector中的skip-gram模型是利用类似于自动编码的器网络以中心词的one-hot表示作为输入来预测这个中心词环境中某一个词的one-hot表示,即先将中心词one-hot表示编码然后解码成环境中某个词的one-hot表示(多分类模型,损失函数用交叉熵)。CBOW是反过来的,分别用环境中的每一个词去预测中心词。尽管word2vector在学习词与词间的关系上有了大进步,但是它有很明显的缺点:只能利用一定窗长的上下文环境,即利用局部信息,没法利用整个语料库的全局信息。鉴于此,斯坦福的GloVe诞生了,它的全称是global vector,很明显它是要改进word2vector,成功利用语料库的全局信息。

    1. 共现概率

    什么是共现?
      单词 i i i出现在单词 j j j的环境中(论文给的环境是以 j j j为中心的左右10个单词区间)叫共现。

    什么是共现矩阵?
      单词对共现次数的统计表。我们可以通过大量的语料文本来构建一个共现统计矩阵。
      例如,有语料如下:
      I like deep learning.
      I like NLP.
      I enjoy flying.
      我以窗半径为1来指定上下文环境,则共现矩阵就应该是[2]
    共现矩阵
      取 x 01 x_{01} x01解释:它表示 l i k e like like出现在 I I I的环境( I l i k e I like Ilike区间)中的次数(在整个语料库中的总计次数),此处应当为2次,故第一行第二列应当填2。还应当发现,这个共现矩阵它是对称阵,因为 l i k e like like出现在 I I I的环境中,那么必然 I I I也会出现在 l i k e like like的环境中,所以 x 10 x_{10} x10=2。
      共现矩阵它有以下3个特点:
      ·统计的是单词对在给定环境中的共现次数;所以它在一定程度上能表达词间的关系。
      ·共现频次计数是针对整个语料库而不是一句或一段文档,具有全局统计特征。
      ·共现矩阵它是对称的。

    共现矩阵的生成步骤:
      · 首先构建一个空矩阵,大小为 V × V V ×V V×V,即词汇表×词汇表,值全为0。矩阵中的元素坐标记为 ( i , j ) (i,j) (i,j)
      · 确定一个滑动窗口的大小(例如取半径为m)
      · 从语料库的第一个单词开始,以1的步长滑动该窗口,因为是按照语料库的顺序开始的,所以中心词为到达的那个单词即 i i i
      · 上下文环境是指在滑动窗口中并在中心单词 i i i两边的单词(这里应有2m-1个 j j j)。
      · 若窗口左右无单词,一般出现在语料库的首尾,则空着,不需要统计。
      · 在窗口内,统计上下文环境中单词 j j j出现的次数,并将该值累计到 ( i , j ) (i,j) (i,j)位置上。
      · 不断滑动窗口进行统计即可得到共现矩阵。

    什么是叫共现概率?
      我们定义 X X X为共现矩阵,共现矩阵的元素 x i j x_{ij} xij为词 j j j出现在词 i i i环境的次数,令 x i = ∑ k x i k x_i=\sum_kx_{ik} xi=kxik为任意词出现在 i i i的环境的次数(即共现矩阵行和),那么, P i j = P ( j ∣ i ) = x i j x i P_{ij}=P(j|i)={x_{ij}\over x_{i}} Pij=P(ji)=xixij
      为词 j j j出现在词 i i i环境中的概率(这里以频率表概率),这一概率被称为词 i i i和词 j j j的共现概率。共现概率是指在给定的环境下出现(共现)某一个词的概率。注意:在给定语料库的情况下,我们是可以事先计算出任意一对单词的共现概率的。

    2. 共现概率比

      接下来阐述为啥作者要提共现概率和共现概率比这一概念。下面是论文中给的一组数据:
    共现概率比
      先看一下第一行数据,以 i c e ice ice为中心词的环境中出现 s o l i d solid solid固体的概率是大于 g a s 、 f a s h i o n gas、fashion gasfashion的而且是小于 w a t e r water water的,这是很合理的,对吧!因为有 i c e ice ice的句子中出现 s o l i d 、 w a t e r solid、water solidwater的概率确实应当比 g a s 、 f a s h i o n gas、fashion gasfashion大才对,实验数据也说明的确是如此。同理可以解释第二行数据。我们来重点考虑第三行数据:共现概率比。我们把共现概率进行一比,我们发现:
      1.看第三行第一列:当 i c e ice ice的语境下共现 s o l i d solid solid的概率应该很大,当 s t r e a m stream stream的语境下共现 s o l i d solid solid的概率应当很小,那么比值就>1。
      2.看第三行第二列:当 i c e ice ice的语境下共现 g a s gas gas的概率应该很小,当 s t r e a m stream stream的语境下共现 g a s gas gas的概率应当很大,那么比值就<1。
      3.看第三行第三列:当 i c e ice ice的语境下共现 w a t e r water water的概率应该很大,当 s t r e a m stream stream的语境下共现 w a t e r water water的概率也应当很大,那么比值就近似=1。
      4.看第三行第四列:当 i c e ice ice的语境下共现 f a s h i o n fashion fashion的概率应该很小,当 s t r e a m stream stream的语境下共现 f a s h i o n fashion fashion的概率也应当很小,那么比值也是近似=1。
      因为作者发现用共现概率比也可以很好的体现3个单词间的关联(因为共现概率比符合常理),所以glove作者就大胆猜想,如果能将3个单词的词向量经过某种计算可以表达共现概率比就好了(glove思想)。如果可以的话,那么这样的词向量就与共现矩阵有着一致性,可以体现词间的关系。

    3. 设计词向量函数

      想要表达共现概率比,这里涉及到的有三个词即 i , j , k i,j,k i,j,k,它们对应的词向量我用 v i 、 v j 、 v ~ k v_i、v_j、\widetilde{v}_k vivjv k表示,那么我们需要找到一个映射 f f f,使得 f ( v i , v j , v ~ k ) = P i k P j k f(v_i,v_j,\widetilde{v}_k)={P_{ik}\over P_{jk}} f(vi,vj,v k)=PjkPik (1)。前面我说过,任意两个词的共现概率可以用语料库事先统计计算得到,那这里的给定三个词,是不是也可以确定共现概率比啊。这个比值可以作为标签,我们可以设计一个模型通过训练的方式让映射值逼近这个确定的共现概率比。很明显这是个回归问题,我们可以用均方误差作为 l o s s loss loss。明显地,设计这个函数或者这个模型当然有很多途径,我们来看看作者是怎么设计的。
      我们可以发现公式(1)等号右侧结果是个标量,左边是个关于向量的函数,如何将函数变成标量。于是作者这么设计: f ( ( v i − v j ) T v ~ k ) = P i k P j k f((v_i-v_j)^T\widetilde{v}_k)={P_{ik}\over P_{jk}} f((vivj)Tv k)=PjkPik (2)即向量做差再点积再映射到目标。再次强调,这只是一种设计,它可能不是那么严谨,合理就行。于是乎:
    在这里插入图片描述
      于是,glove模型的学习策略就是通过将词对儿的词向量经过内积操作和平移变换去趋于词对儿共现次数的对数值,这是一个回归问题。于是作者这样设计损失函数: J = ∑ i = 1 N ∑ j = 1 N f ( x i j ) ( v i T v ~ j + b i + b j − l o g ( x i j ) ) 2 J=\sum_{i=1}^{N}\sum_{j=1}^{N}f(x_{ij})(v_i^T\widetilde{v}_j+b_i+b_j-log(x_{ij}))^2 J=i=1Nj=1Nf(xij)(viTv j+bi+bjlog(xij))2
      这里用的是误差平方和作为损失值,其中N表示语料库词典单词数。它这里在误差平方前给了一个权重函数 f ( x i j ) f(x_{ij}) f(xij),这个权重是用来控制不同大小的共现次数( x i j x_{ij} xij)对结果的影响的。作者是这么设计这个权重函数的:
    权重函数
    在这里插入图片描述
      也就是说词对儿共现次数越多的它有更大的权重将被惩罚得更厉害些,次数少的有更小的权重,这样就可以使得不常共现的词对儿对结果的贡献不会太小,而不会过分偏向于常共现的词对儿。此外,当 x i j x_{ij} xij=0时,加入了这个权重函数此时该训练样本的损失直接为0,从而避免了 l o g ( x i j ) log(x_{ij}) log(xij)为无穷小导致损失值无穷大的问题。

    4. GloVe模型算法

      最后,关于glove模型算法,大致是这样的:从共现矩阵中随机采集一批非零词对作为一个mini-batch的训练数据;随机初始化这些训练数据的词向量以及随机初始化两个偏置;然后进行内积和平移操作并与 l o g ( x i j ) log(x_{ij}) log(xij)计算损失值,计算梯度值;然后反向传播更新词向量和两个偏置;循环以上过程直到结束条件。论文中还提到一个词最终的glove词向量用的是训练后的两个词向量之和,关于这一点论文中有解释,如果感兴趣的话最好阅读一下原论文。

    reference:
    [1] 来b站搞学习
    [2] https://web.stanford.edu/class/archive/cs/cs224n/cs224n.1184/lectures/midterm-review.pdf
    [3] GloVe论文
    [4] glove开源代码

    展开全文
  • 向量空间模型在信息检索中是众所周知的,其中每个文档被表示为向量。矢量分量表示文档中每个单词的权重或重要性。使用余弦相似性度量计算两个文档之间的相似性。 尽管对单词使用矢量表示的想法也已经存在了一段时间...
  • 自然语言词向量模型:Glove和Bert

    千次阅读 2019-06-30 23:13:58
    向量模型2. Glovebert模型bert模型的使用参考资料 1. 词向量模型 词向量模型包括:word2vec、glove、fastText、elmo、GPT和bert、xlnet等。 这里面有些是“一揽子”表示的词向量模型,如word2vec、glove,是用一...
  • 向量模型(word2vec) 详解

    千次阅读 多人点赞 2019-01-16 12:49:28
    觉得挺有意思,于是做了一个实现(可参见[20]),但苦于其中字向量的训练时间太长,便选择使用 word2vec 来提供字向量,没想到中文分词效果还不错,立马对 word2vec 刮目相看了一把,好奇心也随之增长。 后来,...
  • Word2Vec词向量模型代码

    千次阅读 2018-08-31 15:01:27
    Word2Vec也称Word Embedding,中文的叫法是“词向量”或“词嵌入”,是一种计算非常高效的,可以从原始语料中学习字词空间向量的预测模型。Word2Vec可以把一个维数为所有词的数量的高维空间嵌入到一个低维的连续向量...
  • 训练自己的词向量模型

    千次阅读 2019-03-15 15:55:36
    通过以下方式来得到单词的向量: model['computer'] # raw NumPy vector of a word array([-0.00449447, -0.00310097, 0.02421786, ...], dtype=float32)   案例一:800万微信语料训练 来源于: ...
  • python 求向量模长(一范二范)

    万次阅读 多人点赞 2018-09-05 17:07:36
    import numpy as np x = np.array([1,2,3,4,5]) np.linalg.norm(x)  默认为2范数,下面是一范数 np.linalg.norm(x,ord=1)  
  •  在词向量模型中,词向量与词向量之间有这非常特殊的特性。例如现在存在国王、男生、女人、皇后四个词向量,那么一个完善的词向量模型,就存在“国王-男人+女人=皇后”这样的关系。 参考:...
  • 本文作者:合肥工业大学 管理学院 钱洋 email:... 未经本人允许禁止转载。论文来源Nguyen D Q, Billingsley R, Du L, et al. Improving topic models with latent feature word representations[J]. Transactions of
  • 主要内容这篇文章主要内容是介绍从初始语料(文本)到生成词向量模型的过程。词向量模型词向量模型是一种表征词在整个文档中定位的模型。它的基本内容是词以及它们的向量表示,即将词映射为对应的向量,这样就可以被...
  • 用tensorflow提取gensim预训练词向量模型并计算相似度 本文提供如何加载已经训练好的词向量模型并在tensorflow上计算常用词的相似度。 Step1. Import 一些package import gensim from gensim.models import word2vec...
  • 词袋模型和词向量模型

    万次阅读 多人点赞 2016-06-05 19:47:44
    本文简要介绍了词袋模型、词向量模型的原理和应用。
  • MATLAB向量

    千次阅读 2021-04-19 08:13:20
    向量 v 中的元素 v1, v2, v3, …, vn,下式给出其幅度:|v| = √(v1^2+ v2^2+ v3^2+ … + vn^2)MATLAB中需要采按照下述步骤进行向量的计算:采取的矢量及自身的积,使用数组相乘(*)。这将产生一个向量sv,其元素...
  • 空间向量模型和tf-idf

    千次阅读 2017-09-21 16:56:00
    向量空间模型 向量空间模型是一个把文本文件表示为标识符(比如索引)向量的代数模型,它应用于信息过滤、信息检索、索引以及相关排序。 1 定义 文档和查询都用向量来表示: 每一维都对应于一个个别的词组。...
  • http://nlp.stanford.edu/data/wordvecs/ http://nlp.stanford.edu/projects/glove/
  • Doc2Vec句向量模型PV-DM与PV-DBOW的理解

    千次阅读 2018-09-26 12:01:02
    在我们的句(Paragraph)向量模型中,每一个句子都被映射成一个独立的向量,这个句向量作为矩阵 的一列;同时,每一个词也被映射成一个独立的向量,这个词向量作为矩阵 的一列。对这个句向量和这些词向量求平均或者...
  • Word2vec 句向量模型PV-DM与PV-DBOW

    万次阅读 2016-08-24 11:38:27
    参考原文:LE, Quoc V.; MIKOLOV, Tomas. Distributed representations of sentences ...这篇论文提出了一个使用Word2vec的原理创建句子的特征向量的方法,阅读需要先掌握Word2vec的相关知识,这里推荐一篇博文《Word
  • Matlab求向量——速度比较

    千次阅读 2022-03-10 19:57:54
    Matlab求向量——6种方式 方式A:利用norm()函数 A=norm(vector); 方式B:利用sum()函数和sqrt()函数 B=sqrt(sum(vector.*vector)); 方式B1 B1=sqrt(sum(vector.^2)); 方式C:利用向量点积和sqrt()函数 C=...
  • 向量及语言模型

    万次阅读 2018-06-21 10:23:24
    一、词向量向量(word embedding):词的向量表征。很多初识机器学习、深度学习等的同学,包括我,一定对词向量比较迷惑,为什么说前者之前都要提到词向量?答案:为了将输入数据表示成向量,在向量上进行数学建模...
  • unity中计算向量长和归一化向量

    千次阅读 2020-12-26 10:33:45
    unity中计算向量长和归一化向量计算向量向量归一化 计算向量长 创建一个cube, 获取position后计算向量长 void fun() { Vector3 pos = this.transform.position; // 已开平方计算 float m01 ...
  • C++向量类模板

    千次阅读 多人点赞 2020-01-27 17:47:51
    C++向量类模板 向量(vector)时一种随机访问的数组类型,提供了对数组元素的快速、随机访问,以及在序列尾部快速、随机的删除和插入操作。它是大小可变的向量,在需要时可以改变其大小。 创建vector向量的方法: ...
  • matlab向量

    万次阅读 2019-11-09 11:33:08
    MATLAB中需要采按照下述步骤进行向量的计算: 采取的矢量及自身的积,使用数组相乘(*)。这将产生一个向量sv,其元素是向量的元素的平方和V. sv = v.*v; 使用求和函数得到 v。这也被称为矢量的点积...
  • 3.1 向量和单位向量

    千次阅读 2020-08-25 16:50:30
    向量的长度() u=(3,4) 该向量的大小是多少? ||u|| = 5 二范数、欧拉距离 在二维空间中,可以直接根据勾股定理计算出。 u=OP=(2,3,5) 该向量的大小是多少? n维向量 同理。 单位向量向量上记^为单位...
  • 利用gensim包的word2vec模块构建CBOW或Skip-Gram模型来进行词向量化比较方便。 ''' 根据训练语料库,自己训练语言模型得到词向量 ''' # 对分词后的文本训练Word2vec模型 from gensim.models import word2vec import ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 350,211
精华内容 140,084
关键字:

向量的模