【源码分享wasqq】【11000000源码】【源码tid】skipgram源码

时间:2024-11-26 12:43:20 来源:ecmsshop商城源码 分类:休闲

1.WMD——一种文档匹配成本的源码衡量方式
2.skipgram cbow哪个好
3.图神经网络学习笔记1Graph embedding
4.NLP(一)Word Embeding词嵌入
5.Word2vec详细整理(2)—优化方法和常见问题
6.读论文——graph2vec:图的分布式表示学习

skipgram源码

WMD——一种文档匹配成本的衡量方式

       在深入探讨WMD之前,回顾一下常用的源码词汇和文本表达方式。

       TFIDF表达方式通过词汇在不同文本中的源码频数反映词汇对于文本的重要性。

       One-hot Embedding是源码一种传统的词汇表达方法,通过标记特定长度的源码全零向量的特定位置为1来表达词汇。然而,源码源码分享wasqq这种方法存在缺陷:仅能表达已知词汇,源码不能表达位置信息;向量互为正交关系,源码维度过高,源码无法表达词汇相似度;离散向量,源码计算低效。源码

       Word2Vec Embedding(词嵌w2v)是源码一种常见的词汇表达方法,其中CBOW和Skipgram两种形式基于上下文表达词汇。源码此方法拥有预测能力,源码且将词汇向量降低到特定维度,源码便于计算。语义关系得以保留,例如“柏林 – 德国 + 法国 = 巴黎”,证明了语义可以通过词向量的欧式距离表达。

       词嵌w2v可以表达同文档下的词汇语义,但效果受限于训练文本,不同文本上表现差异明显。因此,提出了WMD,一种基于词嵌w2v衡量文档匹配成本的方式。

       WMD适用于文档检索、新闻分类、聚类、歌曲识别、多语言文档匹配等任务。

       在BOW模型中,同义句的文档距离指的是文档中所有词匹配到另一文档所需成本的最小累积。WMD问题转换为一个Earth Mover's Distance(推土距离)传输问题的特例。

       EMD问题描述移动两个概率分布所需的成本,目标是11000000源码最小化成本。在文中,此问题被转化为优化WMD。

       作者使用nBOW模型训练词嵌矩阵,引入词游成本和文档距离概念,定义流矩阵,最终形成衡量文档距离的基础。

       为优化计算,文中提出了词中心距离(WCD)和松弛词移距离(RWMD)方法,分别考虑计算速度和精度。

       实验结果显示WMD在大多数情况下取得更好的效果,优化策略如Prefetch and Prune能显著降低训练时间。

       WMD的性能依赖大量良好的词嵌训练,无超参数,可解释性强,包含词嵌内容。

       尽管WMD在性能上表现良好,但仍存在未被训练词汇的适用性问题、依赖于训练语料库、未能解决词汇语序问题。未来研究可关注WMD的可解释性、同文本不同段落的同义词匹配。

       参考链接:原论文、EMD问题解释、山新们深入理解WMD距离文章。

skipgram cbow哪个好

       Skip-gram模型相较于CBOW模型更好。

       1. Skip-gram模型的特点:Skip-gram模型是Word2Vec中的两种模型架构之一。它主要关注当前词与其上下文词的关系,通过预测当前词的上下文中出现的词来生成词向量。这种模型能够有效地捕捉到词与上下文之间的关联性,因此对于语言建模和文本生成任务非常有效。

       2. CBOW模型的特点:CBOW是Word2Vec中的另一种模型架构。它基于词的上下文预测当前词。CBOW通过综合考虑上下文词的词向量来预测目标词的生成概率,但这种方式相对于Skip-gram模型在捕捉词与上下文关系的源码tid精细度上稍逊一筹。

       3. Skip-gram的优势:Skip-gram模型的优势在于它能够更有效地学习到词与词之间的关系,尤其是在处理大规模语料库时,它能够捕捉到更丰富的语义信息。此外,Skip-gram在训练过程中由于采用了随机选择上下文词的策略,使得其能够更充分地利用语料库中的信息,从而得到更准确的词向量表示。

       综上所述,Skip-gram模型相较于CBOW模型能够更好地捕捉词与上下文之间的关系,对于语言建模和文本生成任务更为有效。因此,从效果和应用的角度来看,Skip-gram模型是更优的选择。

图神经网络学习笔记1Graph embedding

       Graph Embedding

       当使用One-hot编码表示图上的每个节点时,容易出现节点数较多时向量长度过长以及丢失节点在图上信息的问题。

       为简化节点特征长度并保留图上信息,采用Graph Embedding,即在图上计算每个节点的嵌入。

       本文介绍5种主要Graph Embedding方法:Deep Walk、LINE、SDNE、Node2Vec和Struc2Vec。

       Deep Walk通过随机游走生成节点序列,使用word2vec学习每个节点的嵌入,适用于无向图。

       LINE考虑节点的一阶和二阶相似性,分别优化,适用于大规模图,能捕获节点的局部结构信息。

       Node2Vec结合DFS和BFS采样策略,通过随机游走生成序列,使用SkipGram学习嵌入,适用于大规模图。

       Struc2Vec通过构建层次结构并优化相似性,老衲源码学习节点嵌入,适用于节点分类任务,结构标识比邻居标识更重要。

       SDNE使用多层非线性结构自动编码器优化一阶和二阶相似度,学习节点嵌入,对稀疏网络具有鲁棒性。

       总结各方法特点如下:

       Deep Walk:随机游走生成序列,SkipGram学习嵌入。

       Node2Vec:结合DFS和BFS采样,随机游走生成序列,SkipGram学习嵌入。

       LINE:分别优化一阶和二阶相似性,学习嵌入。

       Struc2Vec:构建层次结构优化相似性,学习嵌入。

       SDNE:多层非线性结构自动编码器优化相似度,学习嵌入。

       代码实现和实验可在GitHub项目中找到。

NLP(一)Word Embeding词嵌入

       语言数字化的过程被称为Word Embeding,即“词嵌入”,其转化后的向量矩阵称为词向量,实际上就是词的数学表示。在过去多年中,NLP中最直观且常用的词向量方法是One-hot Representation。随着Google发布Word2Vec,Distributed Representation逐渐流行起来。本文将介绍一些常用的词嵌入技术,包括它们的优缺点和适用场景。

       本文主要内容概览:

       1. Classical Representation: One-hot Encoding

       独热编码是NLP领域最简单的一种单词表示法。One-hot Encoding就是一个单词用长度为V的向量表示,其中只有一个位置为1,其余位置为0,V为语料中词库的大小。

       One-hot Encoding有什么问题呢?假如我想用余弦相似度计算上图中“机器学习”与“深度学习”的openedge源码相似度,或者计算“贪心科技”与“深度学习”的相似度,我们会发现相似度的值都是相同的。也就是说,单词通过独热编码的方式是不能表示单词间语义的相似度。且具有稀疏性,向量中只有一个位置是1,是有用的,其他位置全是0,十分浪费空间。所以科学家进行改进,产生了Distributed Representation。

       2. From One-hot to Distributed Representation

       Distributed Representation中的distributed没有统计上的“分布”含义,而是“分散”、“分配”的意思。代表,讲一段文本中,具有相似含义的word分散到空间中相邻的区域,不相似的分散到相距较远的区域。以此来解决onehot非常的稀疏、不能表示单词间语义的相似度等缺点。

       经过Distributed Representation得到的矩阵就叫词向量(word vector),如上图右边所示。词向量需要通过词向量模型学习来得到。我们需要一批语料当作模型的输入,然后词向量模型可以选择Word2Vec模型、Bert模型或者其它模型,最后就可以得到词的分布式表示向量。

       3. Static Word Embedding

       Static Word Embedding和Contextualized(Dynamic) Word Embedding的区别在于,Static Word Embedding训练后,一个Word只对应一个词向量,而Contextualized一个Word对应多个。Contextualized是NLP最近几年发展出来的新技术,在解决联系上下文、一词多义等方面具有更好的效果。

       3.1 Word2Vec

       比较经典的词向量模型是Word2Vec,主要包含两个模型:CBOW和SkipGram模型。CBOW是根据上下文来预测中心单词;SkipGram通过中心词来预测上下文的单词。

       在SkipGram预测的时候,输出的是预测目标词的概率,也就是说我每一次预测都要基于全部的数据集进行计算,这无疑会带来很大的时间开销。因此,Word2Vec提出两种加快训练速度的方式,一种是Hierarchical softmax,另一种是Negative Sampling。

       3.2 Word Embedding by Matrix Factorization

       矩阵分解也是可以学习词向量的。假如我们有三个句子组成的语料库:I enjoy flying. I like NLP. I like deep learning. 我们可以统计出单词的共现矩阵(Co-occurrence Matrix)如下。将共现矩阵行(列)作为词向量。例如:假设统计窗口大小为2,“I like”出现在第2、3句话中,一共出现2次,所以“I like”=2。同理,“like I”也是2次。将共现矩阵行(列)作为词向量表示后,可以知道“like”、“enjoy”都是在“I”附近且统计数目大约相等,因此它们意思相近。

       co-occurrence matrix的方法也是经典的LSA(Latent Semantic Analysis)所采用的,很多很多时候我们也用LSA来指代MF

       3.3 Glove

       局部的方法和全局的方法都有自己的优缺点。全局的方法可以从整个语料的角度更宏观的审视词的特点;局部的方法是基于局部语料库训练的,其特征提取是基于滑窗的,因此局部的方法可以进行在线学习。基于局部方法论和全局方法论的优缺点,科学家提出了Glove算法。

       Glove算法很好地把MF这种全局的方法和SkipGram这种局部的方法整合在了一起。Glove的计算效率很高、效果也很好。

       Word2Vec vs Glove vs LSA

       (1)Glove vs LSA

       (1)Glove vs Word2Vec

       4. Contextualized(Dynamic) Word Embedding

       上面讲了一些静态的词向量,就是一个单词只能学出一个词向量。在很多的NLP工作里面,一个单词可以表示成很多种意思(即一词多义),如何处理一词多义、考虑单词在上下文中的意思?这就需要动态词向量,也就是一个单词可以学出多个词向量。这个问题是近四年来NLP领域最火热的一个研究方向。

       4.1 LSTM-based Model

       4.1.1 CoVe

       下图a)是一个经典的Seq2Seq模型,我们以机器翻译任务训练模型的Encoder和Decoder部分。我们可以通过这种方式学习出带有上下文的词向量。那么我们为什么可以通过这种方式学习到带有上下文的词向量呢?

       从下图b)中我们可以知道,由于Encoder和Decoder都是BI-LSTM模型,模型本身含有语句上下文的信息。因此,用静态词向量输入Encoder编码器就可以得到含有上下文的词向量。我们把含有上下文的词向量和静态的词向量拼接在一起,就可以解决某些特定的任务。

       4.1.2 ELMo

       CoVe使用了机器翻译任务的Loss训练模型,而ELMo训练目标就是语言模型,根据上下文预测下一个单词。通过语言模型从左到右训练的方式,我们也叫做Autoregressive Model。

       要从ELMo得到一个单词的词向量,我们可以把静态词向量,拼接第一层隐层向量,再拼接第二层隐层向量,最后再拼接第三层隐层向量,就得到了这个单词的完整的含有上下文的单词向量。比如,单词“今天”的词向量为:

       由于最近较忙,先写这么多。后面的内容我会尽快补上。欢迎大家关注我,与我一起学习,一起快乐AI~

Word2vec详细整理(2)—优化方法和常见问题

       在探讨Word2vec优化方法和常见问题之前,让我们先回顾一下基础模型。在原始形式的二元模型、CBOW(连续词袋模型)和SKIPGRAM模型中,每个单词都对应输入向量和输出向量。输入向量用于模型的输入,而输出向量则用于计算单词概率。

       接下来,我们将重点介绍两种优化方法:分层softmax和负采样。

       分层softmax

       分层softmax,也称为霍夫曼树softmax,是一种更高效的方式计算输出概率,而非直接使用标准softmax函数。它利用霍夫曼树结构,通过二分类过程沿着树路径计算概率,从而降低计算复杂度。这种方法在词汇表中频率较低的词上效率较低,但对大多数常见词而言,效率得到显著提高。

       负采样

       负采样技术在每次循环中仅更新输出层的一部分权重,即正样本和选定的负样本。这减少了权重更新的计算量,提高了训练速度,尤其在大词汇表中效果显著。

       常见问题解答

       为什么要使用负采样或分层softmax优化?

       在Word2vec中,从隐层到输出层的权重更新涉及大量计算,尤其是标准softmax函数的使用。负采样和分层softmax通过减少需要计算的概率数量,显著降低了计算复杂度,从而提高了训练效率。

       为什么使用softmax?

       使用softmax函数有助于模型输出概率分布,每个输出值在0到1之间,且总和为1。这使得模型能够有效拟合数据,优化交叉熵损失函数。

       隐层到输出层的权重矩阵作用是什么?

       这个权重矩阵将输入词向量映射到词汇表的维度,使得能够通过全连接层计算出每个词的概率。在训练过程中,通过梯度下降最小化交叉熵损失,优化这些权重以拟合样本数据。

       W2V的训练任务是什么?

       CBOW的主要任务是根据上下文预测中间词,而SKIPGRAM则相反,它根据中间词预测上下文。词向量的训练是这些任务的副产品,用于表示词汇的语义和句法特性。

读论文——graph2vec:图的分布式表示学习

       文章《graph2vec: Learning Distributed Representations of Graphs》于年在MLG th International Workshop上发布,探讨了如何有效地表示图谱中的子结构,为图的分类与聚类等知识图谱分析提供支撑。传统的表示方法在面对大型数据集时,往往产生高维、稀疏且不平滑的表示,这限制了其应用。因此,文章引入了Graph Kernel方法,通过将机器学习的核方法扩展至图结构数据,实现图与图之间的相似度计算。相较于Graph Embedding方法,Graph Kernel保留了结构信息,同时具备高效计算的优点。

       然而,Graph Kernel方法在应用大型数据集时面临挑战,包括产生高维、稀疏、不平滑表示等问题。为解决这些问题,作者提出了将word2vec中的Skipgram模型引入图谱领域,创新性地提出graph2vec方法。Skipgram的核心思想是相似上下文中的单词应具有相似的向量表示,这与图谱中节点周围的有根子图在相似上下文中的作用相似。

       文中将图谱视为一个“文档”,并将图谱中的所有节点与周围有根子图视为“词”,构建了一种基于有根子图的分布式表示学习方法。有根子图的选择基于以下两个理由:首先,它是一种无监督算法,与doc2vec的思路相似;其次,它有效地避免了高维、稀疏、不平滑的表示问题。

       文章详细介绍了graph2vec算法的主要流程,包括对有根子图的提取和负采样的应用。提取有根子图时,文章提供了一个具体的函数GetWLSubgraph,用于从给定图中获取有根子图。为了提高训练效率,文章采用了负采样的方法,引入不属于目标图的子图集,以减少学习过程的复杂度。在优化方面,文章使用随机梯度下降算法和方向传播算法来估算导数,并根据经验调整学习率。

       总的来说,graph2vec方法通过引入Skipgram模型并结合无监督学习策略,提供了一种有效表示图谱中节点和子图的新途径,为图结构数据分析提供了更高效、准确的解决方案。

fasttext和word2vec的区别?

       é¦–先,要明确它在说的fasttext是什么?我们学的fasttext工具有两个作用,也就是两个主要接口,文本分类和训练词向量,而我们学习的word2vec是什么,是如何进行词向量训练的理论。

        但大家要知道,word2vec是有这个工具的,同样实现word2vec还有gensim这样的工具包。所以更进一步,问的是原生的word2vec和fasttext在实现时的差异,到底加了哪些工程技巧呢?为了避免出现OoV(out of vocab)现象,设计了允许加入子词(subword)特征,同时对subword可以进行n-gram,以拓展词表。当然,我们知道,word2vec提供两种模式训练cbow和skipgram,他们的结构都是输出层,隐层和输出层,这些都属于全连接层,输出层就是全连接层+softmax,全连接层+softmax如果计算非常大,那可以怎么办呢?就是允许使用层次softmax。

Metapath2vec的前世今生

        最近看到的一些文章会提到Metapath2vec。于是乎抽了点时间整理了一下从word2vec方法发展到metapath2vec的路径。比较单纯的算是知识总结。本文尽量阐述思想,不过度使用公式表达。

        本文中可能会涉及到的比较重要的知识,及其出处:

        word2vec: Efficient Estimation of Word Representations in Vector Space

        论文地址: work 和 supervised 任务来进行学习训练,以找到最适合的表示以及挖掘其内在联系。

        neural network embedding中最早的应用之一就是word2vec。

        Word2Vec是从大量文本语料中以无监督的方式学习语义知识的一种模型,它被大量地用在自然语言处理(NLP)中。那么它是如何帮助我们做自然语言处理呢?Word2Vec其实就是通过学习文本来用词向量的方式表征词的语义信息,即通过一个嵌入空间使得语义上相似的单词在该空间内距离很近。Embedding其实就是一个映射,将单词从原先所属的空间映射到新的多维空间中,也就是把原先词所在空间嵌入到一个新的空间中去。

        举个例子:

        有四个词:man, woman, king, queen.我们通常是希望这四个词的embedding结果有相近的(距离)关系。man和woman的距离比man和queen的距离小,类似地,man和king的距离与woman和queen的距离相差无几,但比man和queen的距离以及woman和king的距离更小。

        Word2Vec模型中,主要有Skip-Gram和CBOW两种模型,从直观上理解,Skip-Gram是给定input word来预测上下文。而CBOW是给定上下文,来预测input word。如下图所示。

        下图表达的是CBOW的网络结构,这里是输入是多个单词,一般是求和然后平均再进行计算,最终的损失函数保持不变。

        下图表示skip-gram的网络结构,输入一个词,预测周边的词。

        正如我们所看到的,如果想要计算相关的模型,对于我们来说,计算代价是很大的。因此有了hierarchical softmax和negative sampling两个方法。这里稍微提一下hierarchical softmax这个方法,其本质是将一个N分类问题,通过建立树模型,变成一个log(N)次二分类问题。今天的重点在negative sampling。

        负采样的思想更简单直接:in order to deal with the difficulty of having too many output vectors that need to be updated per iteration, we only update a sample of them.

        这就是此思想最核心的部分,它的实现过程则是如下面的例子:

        当训练样本 ( input word: "fox",output word: "quick") 来训练我们的神经网络时,“ fox”和“quick”都是经过one-hot编码的。如果vocabulary大小为时,在输出层,我们期望对应“quick”单词的那个神经元结点输出1,其余个都应该输出0。这个我们期望输出为0的神经元结点所对应的单词我们称为“negative” word。使用负采样时,我们将随机选择一小部分的negative words(比如选5个negative words)来更新对应的权重。我们也会对我们的“positive” word进行权重更新(在我们上面的例子中,这个单词指的是”quick“)。

        下面请出今天的一号主角,负采样目标函数表达式:

        因此,这个目标函数可以理解为两方面的限制:

        word2vec是将词变成向量,顾名思义,node2vec其实就是将复杂网络中的节点变成向量。其核心思想为:生成随机游走,对随机游走采样得到(节点,上下文)的组合,然后用处理词向量的方法对这样的组合建模得到网络节点的表示。

        Deepwalk和node2vec的思想是高度一致的。相比于deepwalk,node2vec在生成随机游走过程中做了一些创新。这里我们不对两者进行深入比较,但由此提出一个结论,也请出今天的二号主角,这一类编码方式的核心结构:我个人把它看做是“上、下”结构

        上:想尽一切办法,在你的网络中进行游走,并采集成序,具体什么游走策略取决于你想采集到什么信息。

        下:将采集好的序当作文本,后续与处理词向量的方法相似。

        下面以node2vec为例,简单介绍一下这个过程。

        采序的目的很单纯:

        当然,你采序的思想反映了你希望获取到什么样的信息。论文原文中提到关于广度优先或者深度优先的采序方式在本质上就表达了对不同累心信息的重视。BFS倾向于在初始节点的周围游走,可以反映出一个节点的邻居的微观特性;而DFS一般会跑的离初始节点越来越远,可以反映出一个节点邻居的宏观特性。因此!因此!因此!采序策略是直接反应操作者对哪部分信息更加重视!(二号主角再度出现)

        node2vec原文中提出的随机游走策略,实际上就是综合BFS与DFS的策略。下面我们细细品一哈。

        上图表示我们刚刚从已经采集了t到v,那么下一个临幸的对象应该是谁?原文作者,给出了以下的转移概率:

        释一下这个分布:

        参数p、q的意义分别如下:

        返回概率p:

        出入参数q:

        当p=1,q=1时,游走方式就等同于DeepWalk中的随机游走。

        再一次,采序策略是直接反应操作者对哪部分信息更加重视!(二号主角再度出现)!

        这部分我们只挑重点的说,原文作者通过扩展skipgram,定义了目标函数:

        到此,我们已经基本了解到了embedding方法中,这一类方法的结构特点(所谓“上、下”)。但是之前接触的方法均是处理同质网络的方法,而metapath2vec恰恰是可以处理异质网络的一个方法。

        Metapath2vec是Yuxiao Dong等于年提出的一种用于异构信息网络(Heterogeneous Information Network, HIN)的顶点嵌入方法。metapath2vec使用基于meta-path的random walks来构建每个顶点的异构邻域,然后用Skip-Gram模型来完成顶点的嵌入。在metapath2vec的基础上,作者还提出了metapath2vec++来同时实现异构网络中的结构和语义关联的建模。

        这里说说metapath的贡献:

        下面我们看看metapath2vec是怎么样实现对异质网络编码的。

        对于一个异质网络 ,目标是学习到 维的表达式,其中 的长度远小于邻接矩阵边长,并且同时保持图的结构信息与语义关系。

        这部分划重点:虽然顶点的类型不同,但是不同类型的顶点的表征向量映射到同一个维度空间。由于网络异构性的存在,传统的基于同构网络的顶点嵌入表征方法很难有效地直接应用在异构网络上。

        metapath2vec方法,着重强调对采序过程的改进。其训练过程方面的改进并不明显。

        meta-path-based random walk

        该随机游走方式可以同时捕获不同类型顶点之间语义关系和结构关系,促进了异构网络结构向metapath2vec的Skip-Gram模型的转换。

        此处有个小技巧。一般来说metapath的定义都是对称的,比如:一个meta-path的scheme可以是"o-a-p-v-p-a-o"。

        这个时候可以将这一小节的内容对比上面4.1 采序中的内容,可以发现metapath的第一个核心贡献:采序策略。

        顾名思义,通过最大化条件概率来学习异质网络的顶点特征。

        这个时候再次请出我们的一号主角,原始skip-gram的负采样下的目标函数:

        有没有发现区别。本质上的区别非常细微。甚至可以说没有区别。因此,这部分最主要的贡献在“采序”升级。

        上面我看到了metapath2vec对“上”部分的升级。下面我们看看metapath2vec++是怎么对“下”进行升级的。

        主要两点:

        首先,softmax函数根据不同类型的顶点的上下文 进行归一化,即是:

        这里的目标函数和我们的一号主角虽然也没有本质区别。但是!但是!但是!异质网络的异质信息不仅仅在采序中体现出来,也在目标函数中被体现出来。我把metapath2vec的目标函数和metapath2vec++的目标函数放在一起比较看看:

        这里也就引出了metapath2vec++在“训练”目标上的升级。

        实验效果说明,下图是原论文中的截图。类别聚类准确率: