精华内容
下载资源
问答
  • 向量复数转换工具.exe

    2019-11-22 09:35:34
    该工具实现了向量转换,实部虚部向量互相转换,两个向量加减计算,可用于变电器差动的相量和、相量差计算。
  • 此函数将数字矢量转换为字符串的单元格矢量。 单元格的每个元素都包含数字向量中相应条目的字符串转换,由用户提供的字符串作为前缀和后缀。 还可以指定数字到字符串转换的格式。 用于创建图例标签或刻度标签。
  • 主要介绍了python读取图像矩阵文件并转换向量实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 将每个表达式转换为长度为表达式项数的向量: 例如: 符号 xabc r= a*x^2+b*x+c-exp(x) R=sym2vec(r); 结果是: R = [ c, -exp(x), b*x, a*x^2] 限制: 这是解决问题的粗鲁方法,表达式 r 在分配给向量之前总是被...
  • 今天小编就为大家分享一篇python读取csv和txt数据转换向量的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 向量模型(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/

    展开全文
  • 今天小编就为大家分享一篇Numpy 将二维图像矩阵转换为一维向量的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 以CMYK到CIE L*a*b*色彩空间的转换为研究对象,采用最小二乘支持向量机建立了相应的转换模型。实验选取了IT8.7/3色靶中的710个色块作为训练样本,36个色块作为测试样本对所提模型进行了验证,并已有的神经网络...
  • 今天小编就为大家分享一篇numpy:np.newaxis 实现将行向量转换成列向量,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 今天小编就为大家分享一篇Numpy之将矩阵拉成向量的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 铜-哑光转换过程的支持向量回归模型的误差校正
  • 机器学习(六)~支持向量机模型

    千次阅读 2020-05-23 10:11:12
    机器学习(六)~支持向量机1. 支持向量机模型2. 线性可分支持向量机2.1 原始问题2.2 对偶问题及求解2.3 线性可分支持向量机算法3. 线性支持向量机3.1 软间隔最大化3.2 对偶问题及求解3.3 线性支持向量机算法4. 非...

    1. 支持向量机模型

    学习策略: 间隔最大化
    学习算法: 凸二次规划
    适用条件:

    • 当训练数据线性可分:线性可分支持向量机(硬间隔最大化)
    • 当训练数据近似线性可分:线性支持向量机(软间隔最大化)
    • 当训练集线性不可分时:非线性支持向量机(软间隔最大化+核函数)

    几何间隔:
    在这里插入图片描述
    SVM与感知机区别: 通过间隔最大化使得解唯一
    核函数: 将输入从输入空间映射到特征空间得到的特征向量之间的内积

    2. 线性可分支持向量机

    2.1 原始问题

    **前提条件:**训练集线性可分
    SVM基本型:
    在这里插入图片描述

    2.2 对偶问题及求解

    对偶问题:
    在这里插入图片描述
    此时目标函数求:
    在这里插入图片描述
    在这里插入图片描述
    从而得到:
    在这里插入图片描述
    αi*>0时,yi(w·xi+b)-1=0, (xi,yi)为支持向量,只有支持向量会影响最终结果

    2.3 线性可分支持向量机算法

    在这里插入图片描述

    3. 线性支持向量机

    3.1 软间隔最大化

    软间隔最大化: 当训练集近似线性可分时,允许一些特异点被误分,防止过拟合
    在这里插入图片描述

    • 此时w的解是唯一的,b可能不唯一
    • 线性支持向量机包括线性可分支持向量机

    3.2 对偶问题及求解

    对偶问题为:
    在这里插入图片描述
    在这里插入图片描述

    • 仅ɑ约束与线性可分支持向量机不同

    3.3 线性支持向量机算法

    在这里插入图片描述

    • ɑ*>0对应支持向量,分多种情况:1) 若ɑi*<C,则§i=0,支持向量xi恰好落在间隔边界上2) 若ɑi*=C,0<§i<1,则xi在间隔边界与分离超平面之间3) 若ɑi*=C,§i=1,则xi在分离超平面上4) 若ɑi*=C,§i>1,则xi在分离超平面误分类一侧

    4. 非线性支持向量机

    4.1 核函数

    当训练集线性不可分时,可将x映射到高维空间,使得近似线性可分,即将xi·xj转换为φ(xi)·φ(xj),由于φ(xi)·φ(xj)难求,采用核函数К(xi,xj)替代,从而将非线性问题转化为线性问题

    核函数充要条件:
    核函数是指正定核函数,正定核的充要条件是K(x,z)对应的Gram矩阵是半正定矩阵

    常用核函数:

    • 1.多项式核函数
    • 2.高斯核函数

    4.2 非线性支持向量机算法

    在这里插入图片描述
    存在问题: 当训练样本大时,用以往优化算法解决凸二次规划问题很低效
    解决办法: SMO(序列最小最优化算法)

    4.3 SMO(序列最小最优化算法)

    SMO关键过程:

    • 1.变量选择(选择两个变量,固定其他变量)
    • 2.两个变量的二次规划求解
    展开全文
  • 将列向量通过matlab编程转换成矩阵将列向量通过matlab编程转换成矩阵将列向量通过matlab编程转换成矩阵将列向量通过matlab编程转换成矩阵将列向量通过matlab编程转换成矩阵
  • Word2Vec词向量模型代码

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

           Word2Vec也称Word Embedding,中文的叫法是“词向量”或“词嵌入”,是一种计算非常高效的,可以从原始语料中学习字词空间向量的预测模型。Word2Vec可以把一个维数为所有词的数量的高维空间嵌入到一个低维的连续向量空间中,每个单词或词组被映射为实数域上的向量。通过词嵌入这种方式将单词转变为词向量,机器便可对单词进行计算,得到单词之间的相似性。以诗词《全宋词》为训练数据,本文介绍用TensorFlow实现Word2Vec词向量模型的主要代码。

     

    1  读取文件“QuanSongCi.txt”作为训练数据,将文件中的句子转换为词汇列表(英文文本转换为单词列表,中文文本转换为字列表)。

    with open('./QuanSongCi.txt', encoding="utf-8") as f:
         vocabulary = f.read()
             vocabulary = list(vocabulary)
    

    原文:潘阆酒泉子(十之一)长忆钱塘,不是人寰是天上。万家掩映翠微间。处处水潺潺。异花四季当窗放。出入分明在屏障。. . . . . .

    文件中句子转换生成的vocabulary词汇表的部分词汇(字):['潘', '阆', '酒', '泉', '子', '(', '十', '之', '一', ')', '长', '忆', '钱', '塘', ',', '不', '是', '人', '寰',  '是', '天', '上', '。' . .  .]。 

    2  生成词汇表字典dictionary和词汇表的反转形式reversed_dictionary。

    使用collections.Counter统计词汇列表中词汇的频数,使用most_common 方法取前5000个频数最高的词汇,得到每个词汇的频数统计count。

    vocabulary_size = 5000
    words = vocabulary
    n_words = vocabulary_size - 1
    count = [['UNK', -1]]                     
    count.extend(collections.Counter(words).most_common(n_words - 1))
    

        创建一个字典dictionary,将高频单词放入dictionary中,并按词汇频数排名,为词汇和对应词汇频数的排名:{‘词汇’:排名}。将dictionary的key和value互换生成新的字典reversed_dictionary,即词汇表的反转形式,为词汇频数的排名和对应的词汇:{‘排名’:词汇}。

    dictionary = dict()                                   
         for word, _ in count:                                 
         dictionary[word] = len(dictionary)
     reversed_dictionary = dict(zip(dictionary.values(), dictionary.keys()))

      3  使用json模块保存字典dictionary和reversed_dictionary,用于后面的RNN循环神经网络模型训练。

    with open("./dictionary.json","w",encoding='utf-8') as f:
        json.dump(dictionary,f)
    with open("./reverse_dictionary.json","w",encoding='utf-8') as f:
        json.dump(reversed_dictionary,f)
    

     4 定义函数generate_batch(batch_size, num_skips, skip_window),用来生成训练用的batch和label数据。其中,batch_size是batch的大小,num_skips是对每个单词生成多少个样本,skip_window是单词最远可以联系的距离,设为1代表只能跟紧邻的两个单词生成样本。生成batch和label的主要代码:

    for i in range(batch_size // num_skips):
          context_words = [w for w in range(span) if w != skip_window]
          words_to_use = random.sample(context_words, num_skips)
          for j, context_word in enumerate(words_to_use):
               batch[i * num_skips + j] = buffer[skip_window]
               labels[i * num_skips + j, 0] = buffer[context_word]
    

     5  建立 Skip-gram模型。

        首先创建graph,并设为默认值graph.as_default()。主要代码:

    with tf.device('/cpu:0'):                                 
         embeddings = tf.Variable(tf.random_uniform([vocabulary_size, embedding_size], -1.0, 1.0))
         embed = tf.nn.embedding_lookup(embeddings, train_inputs)   
         nce_weights = tf.Variable(tf.truncated_normal([vocabulary_size, embedding_size],
                                                    stddev=1.0 / math.sqrt(embedding_size)))  
         nce_biases = tf.Variable(tf.zeros([vocabulary_size]))         
         loss = tf.reduce_mean(tf.nn.nce_loss(weights=nce_weights, biases=nce_biases, labels=train_labels,  inputs=embed, num_sampled=num_sampled, num_classes=vocabulary_size))
    optimizer = tf.train.GradientDescentOptimizer(1.0).minimize(loss)  
    similarity = tf.matmul(valid_embeddings, normalized_embeddings, transpose_b=True)     
    

         上述代码中,tf.random_uniform函数随机生成(5000,128)的向量,tf.nn.embedding_lookup函数查找输入train_inputs对应的向量embed,初始化权重参数nce_weigths和偏置nce_biases。用nce_loss函数计算词向量在训练数据上的loss,用tf.train.GradientDescentOptimize函数构建SGD优化器。

        并且计算了embeddings的L2范数norm,用tf.nn.embedding_lookup查询验证单词的嵌入向量,最后计算验证词汇的嵌入向量与词汇表中所有词汇的相似性。

     6  通过函数get_train_data(vocabulary, batch_size, num_steps)获取训练数据batch_inputs和batch_labels,然后用tf.Session.run()开始训练。

    with tf.Session(graph=graph) as session:
        init.run()
        average_loss = 0
    for step in range(num_steps):                 
        batch_inputs, batch_labels = generate_batch(batch_size, num_skips, skip_window
        feed_dict = {train_inputs: batch_inputs, train_labels: batch_labels}
        _, loss_val = session.run([optimizer, loss], feed_dict=feed_dict)  
        average_loss += loss_val   
    

     输出平均损失average_loss,以及与验证单词相似度最高的8个单词,部分结果如下:

    Average loss at step  100000 :  0.9967902089655399

    Nearest to 前: 刹, 乡, 峨, 论, 聪, 逊, 棼, 辂,

    Nearest to 明: 柳, 是, 万, 处, 十, 放, 一, 几,

    Nearest to 空: 品, 鹿, 东, 袜, 像, 谭, 姝, 碑,

    7  可视化词向量效果。定义一个函数def plot_with_labels(low_dim_embs, labels, filename),其中,low_dim_embs是降维到2维的词汇的空间向量。

    def plot_with_labels(low_dim_embs, labels, filename):            
        assert low_dim_embs.shape[0] >= len(labels) 
        plt.figure(figsize=(18, 18))   
        for i, label in enumerate(labels):
            x, y = low_dim_embs[i, :]
            plt.scatter(x, y)                          
            plt.annotate(label,
                     xy=(x, y),
                     xytext=(5, 2),
                     textcoords='offset points',
                     ha='right',
                     va='bottom',
                     fontproperties=myfont)         
        plt.savefig(filename)
    

         下图展示了词频最高的500个单词的可视化结果。 由图可见,意义接近的词,它们的距离比较接近,或者说距离相近的单词在词义上具有较高的相似性。          

    版权声明:本文为博主原创文章,转载请注明出处。https://blog.csdn.net/fxfviolet/article/details/82256211

    展开全文
  • 矩阵按列转换向量

    2013-03-02 19:57:02
    我们在做数值试验时,有时为了计算方便需要把矩阵转化为向量,而这里的vec可以非常简便的进行转化。
  • 本文将介绍两个使用BERT编码句子(从BERT中提取向量)的例子。 (1)BERT预训练模型字向量提取工具 本工具直接读取BERT预训练模型,从中提取样本文件中所有使用到字向量,保存成向量文件,为后续模型提供embdding。 ...
  • Rscript /jhbigdata/appform/etc/R-code/Method-shujutongji/All-combination-Below.R /mnt/hdfs/user/jhadmin/duoyuanxianxing.csv R1 Fertility,Agriculture,Examination,Education,Catholic,Infant.Mortality ...
    Rscript /jhbigdata/appform/etc/R-code/Method-shujutongji/All-combination-Below.R /mnt/hdfs/user/jhadmin/duoyuanxianxing.csv R1 Fertility,Agriculture,Examination,Education,Catholic,Infant.Mortality
    

    原始数据

    data <- iris

    方法一参数传入

    nn <- “Sepal.Length,Sepal.Width”
    nn <- strsplit(nn,",")
    print(nn)
    str(nn)
    length(nn)
    nn <- as.vector(unlist(nn[1]))
    print(nn)
    head(data[, nn])
    在这里插入图片描述

    方法二参数传入

    mm <- c(“Sepal.Length”, “Sepal.Width”)
    print(mm)
    str(mm)
    head(data[, mm])
    在这里插入图片描述

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

    千次阅读 2018-04-12 15:38:52
    获取 direction 在本地坐标中的方向向量,direction 本来是世界坐标系中的方向向量 只会受物体的 rotation 所影响 如果物体在 x 轴旋转 90 度后,则世界坐标的 up (0,1,0) 为本地的 -forward (0,0,-1) Debug.Log...
  • 向量与向量的转化

    千次阅读 2019-04-29 21:08:31
    向量方向余弦向量方向余弦的转化 n为曲线外法向量,τ为曲线切向量 cos(n,x)=cos(τ,y) cos(n,y)=-cos(τ,x)
  • 主要介绍了Numpy中对向量、矩阵的使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  •  将词用“词向量”的方式表示可谓是将 Deep Learning 算法引入 NLP 领域的一个核心技术。大多数宣称用了 Deep Learning 的论文,其中往往也用了词向量。 本文目录: 0. 词向量是什么 1. 词向量的来历...
  • word2vec原理(一): 词向量、CBOWSkip-Gram模型基础

    千次阅读 多人点赞 2019-05-12 23:10:43
    word2vec原理(一): CBOWSkip-Gram模型基础 word2vec原理(二):基于Hierarchical Softmax的模型 word2vec原理(三): 基于Negative Sampling的模型 目录 1. 词向量基础 1.1One-Hot 编码(独热编码) ...
  • 当一个给定的线性方程组被转换向量形式时,它可以很容易地写成矩阵形式。
  • 【NLP】⚠️学不会打我! 半小时学会基本操作 2⚠️词向量模型简介
  • 浅谈文本词向量转换的机制embedding

    千次阅读 2018-03-12 18:37:52
    首先感谢大家对上一篇...上文说道关于文本词向量转换的embedding相关的内容,其实是没有详细说明的,那这一篇我尝试着去解释一些,说的不对的还望各位大神指正,我也是自学的,没人一起讨论,可能有理解不到位的地方。
  • 有的时候需要对模型进行转换。常见的模型有:tfidflsilda等2、tfidf模型我们使用字典文件可以非常直观生成tfidf模型,tfidf是根据词频和逆词频抽取关键词的一种技术。通俗来讲一个文档中的所有分词只有在本文档中...
  •   本篇主要是基于gensim 库中的 Word2Vec 模型,使用维基百科中文数据训练word2vec 词向量模型,大体步骤如下: 数据预处理 模型的训练 模型的测试 准备条件: Windows10 64位 Python3.6,并安装 gensim 库:...
  • 此处提供的函数可以从域生成网格,将其转换为列向量矩阵以矢量化函数一起使用,然后将结果转换回网格表示。 例如,您可以从 2D 域开始,将其直接转换向量矩阵 q,使用某些矢量化标量函数 f 计算表面的行向量 z...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 190,716
精华内容 76,286
关键字:

向量模与向量的转换