【NLP】图解词嵌入和Word2vec

自然语言处理中关键概念——词嵌入(Word Embedding) 词嵌入(Word Embedding)是一种在自然语言处理中广泛使用的表示方法,它将离散的词汇表中的每个词转换为一个连续向量空间中的稠密向量。这种低维度实数向量能够捕捉词语之间的语义和句法关系。通过训练神经网络模型(如word2vec、GloVe或FastText等),可以在大规模文本语料库上学习到这些词嵌入。经过预训练后,每个单词会被映射到一个固定长度的向量上,这个向量可以反映该单词在整个语料库中的上下文信息和潜在语义特征。词嵌入技术极大地改善了机器学习模型对自然语言的理解能力。 阅读详情

0.导语

词嵌入是自然语言处理(NLP)中语言模型与表征学习技术的统称。概念上而言,它是指把一个维数为所有词的数量的高维空间嵌入到一个维数低得多的连续向量空间中,每个单词或词组被映射为实数域上的向量。

本篇文章讲解词嵌入基础和Word2vec。

本文作者:

jalammar(https://jalammar.github.io)

翻译:

黄海广(https://github.com/fengdu78)

本文代码可以在github下载:

https://github.com/fengdu78/Data-Science-Notes/tree/master/8.deep-learning/word2vec

图解Word2vec

正文开始

我发现嵌入的概念是机器学习中最迷人的想法之一。如果您曾经使用Siri,Google智能助理,Alexa,谷歌翻译,甚至智能手机键盘进行下一词预测,那么您很有可能从这个已经成为自然语言处理模型核心的想法中受益。在过去的几十年中,使用嵌入技术进行神经模型已有相当大的发展(最近的发展包括BERT和GPT2 等尖端模型的语境化嵌入)。

自2013年以来,Word2vec一直是一种有效创建单词嵌入的方法。除了词嵌入字的方法之外,它的一些概念已经被证明可以在非语言任务中有效地创建推荐引擎和理解顺序数据。比如Airbnb,阿里巴巴,Spotify和Anghami这样的公司都从NLP世界中创造出这一优秀的工具并将其用于生产中,从而为新型推荐引擎提供支持。

我们将讨论嵌入的概念,以及使用word2vec生成嵌入的机制。

让我们从一个例子开始,了解使用向量来表示事物。

您是否知道五个数字(向量)的列表可以代表您的个性?

个性嵌入:你的个性怎么样?

使用0到100的范围表示你的个性(其中0是最内向的,100是最外向的)。

五大人格特质测试,这些测试会问你一个问题列表,然后在很多方面给你打分,内向/外向就是其中之一。

图:测试结果示例。它可以真正告诉你很多关于你自己的事情,并且在学术、个人和职业成功方面都具有预测能力。
假设我的测试得分为38/100。我们可以用这种方式绘制:

让我们将范围切换到从-1到1:

了解一个人,一个维度的信息不够,所以让我们添加另一个维度 - 测试中另一个特征的得分。

你可能不知道每个维度代表什么,但仍然可以从一个人的个性的向量表示中获得了很多有用的信息。

我们现在可以说这个向量部分代表了我的个性。当你想要将另外两个人与我进行比较时,这种表示的有用性就出现了。在下图中,两个人中哪一个更像我?

处理向量时,计算相似度得分的常用方法是余弦相似度:

一号人物与我的余弦相似度得分高,所以我们的性格比较相似。

然而,两个方面还不足以捕获有关不同人群的足够信息。几十年的心理学研究已经研究了五个主要特征(以及大量的子特征)。所以我们在比较中使用所有五个维度:

我们没法在二维上绘制出来五个维度,这是机器学习中的常见挑战,我们经常需要在更高维度的空间中思考。但好处是余弦相似度仍然有效。它适用于任意数量的维度:

嵌入的两个中心思想:

  • 我们可以将人(事物)表示为数字的向量。

  • 我们可以很容易地计算出相似的向量彼此之间的关系。

词嵌入

我们导入在维基百科上训练的GloVe向量

import gensim
import gensim.downloader as api
model = api.load('glove-wiki-gigaword-50')
单词“king”的词嵌入表示:
model["king"]
array([ 0.50451 ,  0.68607 , -0.59517 , -0.022801,  0.60046 , -0.13498 ,
       -0.08813 ,  0.47377 , -0.61798 , -0.31012 , -0.076666,  1.493   ,
       -0.034189, -0.98173 ,  0.68229 ,  0.81722 , -0.51874 , -0.31503 ,
       -0.55809 ,  0.66421 ,  0.1961  , -0.13495 , -0.11476 , -0.30344 ,
        0.41177 , -2.223   , -1.0756  , -1.0783  , -0.34354 ,  0.33505 ,
        1.9927  , -0.04234 , -0.64319 ,  0.71125 ,  0.49159 ,  0.16754 ,
        0.34344 , -0.25663 , -0.8523  ,  0.1661  ,  0.40102 ,  1.1685  ,
       -1.0137  , -0.21585 , -0.15155 ,  0.78321 , -0.91241 , -1.6106  ,
       -0.64426 , -0.51042 ], dtype=float32)

查看“king”最相似的单词

model.most_similar("king")
[('prince', 0.8236179351806641),
 ('queen', 0.7839042544364929),
 ('ii', 0.7746230363845825),
 ('emperor', 0.7736247181892395),
 ('son', 0.766719400882721),
 ('uncle', 0.7627150416374207),
 ('kingdom', 0.7542160749435425),
 ('throne', 0.7539913654327393),
 ('brother', 0.7492411136627197),
 ('ruler', 0.7434253096580505)]

这是一个包含50个数字的列表,我们无法说清楚里面的值代表什么。我们把所有这些数字放在一行,以便我们可以比较其他单词向量。让我们根据它们的值对单元格进行颜色编码(如果它们接近2则为红色,如果它们接近0则为白色,如果它们接近-2则为蓝色)

import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np

plt.figure(figsize=(15, 1))
sns.heatmap([model["king"]],
            xticklabels=False,
            yticklabels=False,
            cbar=False,
            vmin=-2,
            vmax=2,
            linewidths=0.7)
plt.show()

我们将忽略数字并仅查看颜色以指示单元格的值,我们将“King”与其他词语进行对比:

plt.figure(figsize=(15, 4))
sns.heatmap([
    model["king"],
    model["man"],
    model["woman"],
    model["king"] - model["man"] + model["woman"],
    model["queen"],
],
            cbar=True,
            xticklabels=False,
            yticklabels=False,
            linewidths=1)
plt.show()


看看“man”和“woman”是如何彼此更相似的,他们中的任何一个都是“king”?这告诉你一些事情。这些向量表示捕获了这些单词的信息/含义/关联。

这是另一个示例列表(通过垂直扫描列来查找具有相似颜色的列):

有几点需要指出:

  • 所有这些不同的单词都有一个直的红色列。它们在这个维度上是相似的(我们不知道每个维度代码是什么)

  • 你可以看到“woman”和“girl”在很多地方是如何相似的。与“man”和“boy”一样

  • “boy”和“girl”也有彼此相似的地方,但与“woman”或“man”不同。这些是否可以编写一个模糊的青年概念?可能。

  • 除了最后一个字之外的所有字都代表着人。我添加了一个对象“water”来显示类别之间的差异。例如,您可以看到蓝色列一直向下并在嵌入“water”之前停止。

  • 有一个明显的地方,“king”和“queen”彼此相似,并与所有其他人不同。

类比

我们可以添加和减去单词嵌入并获得有趣的结果,最有名的例子是公式:“king” - “man” + “woman”:

model.most_similar(positive=["king","woman"],negative=["man"])
[('queen', 0.8523603677749634),
 ('throne', 0.7664334177970886),
 ('prince', 0.759214460849762),
 ('daughter', 0.7473883032798767),
 ('elizabeth', 0.7460220456123352),
 ('princess', 0.7424569725990295),
 ('kingdom', 0.7337411642074585),
 ('monarch', 0.7214490175247192),
 ('eldest', 0.7184861898422241),
 ('widow', 0.7099430561065674)]

我们可以像以前一样想象这个类比:

语言建模

如果想要给出NLP应用程序的示例,最好的示例之一将是智能手机键盘的下一个字(词)预测功能。这是数十亿人每天使用数百次的功能。

下一个字(词)预测是一项可以通过语言模型解决的任务。语言模型可以采用单词列表(比方说两个单词),并尝试预测它们之后的单词。

在上面的屏幕截图中,我们可以将模型视为接受这两个绿色单词(thou shalt)并返回建议列表(“not”是具有最高概率的那个字)的模型:

我们可以把模型想象成这个黑盒子:

但实际上,该模型不会只输出一个单词。它实际上输出了它所知道的所有单词的概率分数(模型的“词汇表”,其范围可以从几千到一百多万个字(词))。然后应用程序必须找到分数最高的单词,并将其呈现给用户。

图:神经语言模型的输出是模型知道的所有单词的概率分数。我们在这里将概率称为百分比,比如概率40%将在输出向量中表示为0.4。

经过训练,早期的神经语言模型(Bengio 2003)将分三步计算预测:

在讨论嵌入时,第一步对我们来说最相关。训练过程的结果之一是这个矩阵包含我们词汇表中每个单词的嵌入。在预测时间内,我们只查找输入字的嵌入,并使用它们来计算预测:

现在让我们转到训练过程,以了解嵌入矩阵是如何工作的。

语言模型的训练

与大多数其他机器学习模型相比,语言模型具有巨大优势。即:我们所有的书籍,文章,维基百科内容和其他形式的大量文本数据可以作为训练数据。与此相比,许多其他机器学习模型需要手动设计特征和专门收集的数据。

单词通过我们查看它们往往会出现在旁边的其他单词来嵌入。其机制就是这样

  1. 我们获得了大量文本数据(例如,所有维基百科文章)。然后

  2. 我们有一个窗口(比如说三个单词),我们会对所有文本进行滑动。

  3. 滑动窗口为我们的模型生成训练样本

当这个窗口滑动文本时,我们(虚拟地)生成一个用于训练模型的数据集。为了准确看看它是如何完成的,让我们看看滑动窗口如何处理这个短语:

当我们开始时,窗口在句子的前三个单词上:

我们将前两个单词作为特征,将第三个单词作为标签:

我们现在已经在数据集中生成了第一个样本,我们稍后可以使用它来训练语言模型。

然后我们将窗口滑动到下一个位置并创建第二个样本:

现在生成第二个示例。

很快我们就会有一个更大的数据集,在不同的单词对之后,这些数据集会出现:

在实践中,模型往往在我们滑动窗口时进行训练。但我发现逻辑上将“数据集生成”阶段与训练阶段分开是更清楚的。除了基于神经网络的语言建模方法之外,一种称为N-gram的技术通常用于训练语言模型。

要了解这种从N-gram到神经模型的转换如何反映现实世界的产品,建议看这篇2015年博客文章,介绍他们的神经语言模型并将其与之前的N-gram模型进行比较。

两边看

给了你句子前面的内容,进行填空:

我在这里给你的背景是空格之前的五个字(以及之前提到的“bus”)。我相信大多数人都会猜到空格里的这个词会是“bus”。但是,如果我再给你一条信息:空格之后的一句话,那会改变你的答案吗?

这完全改变了应该留在空格中的内容。“red”这个词现在最可能填到空格中。我们从中学到的是特定词语之前和之后的词语都具有信息价值。事实证明,考虑两个方向(我们猜测的单词左侧和右侧的单词)会让词嵌入做得更好。

让我们看看我们如何调整我们训练模型的方式来解决这个问题。

Skipgram

我们不仅可以查看在目标词之前的两个单词,还可以查看其后的两个单词。

如果我们这样做,我们实际构建和训练模型的数据集将如下所示:

这被称为连续词袋结构,并在word2vec论文 one of the word2vec papers 中进行过描述。

另一种结构与连续词袋结构略有不同,但也可以也显示出良好结果。这个结构试图使用当前词来猜测相邻词,而不是根据其上下文(它之前和之后的词)猜测一个词。我们可以想到它在训练文本上滑动的窗口如下所示:

图:绿色框中的字将是输入字,每个粉色框将是可能的输出。粉色框具有不同的阴影,因为此滑动窗口实际上在我们的训练数据集中创建了四个单独的样本:

此方法称为skipgram架构。我们可以执行以下操作将滑动窗口可视化:

这会将这四个样本添加到我们的训练数据集中:

然后我们将窗口滑动到下一个位置:

这将产生我们的下四个样本:

接着滑动几个位置之后,我们有更多的样本:

重新审视训练过程

现在我们已经从现有的运行文本中提取了我们的skipgram训练数据集,让我们看看我们如何使用它来训练预测相邻单词的基本神经语言模型。

我们从数据集中的第一个样本开始。我们把特征提供给未经训练的模型,要求它预测一个合适的相邻单词。

该模型进行三个步骤并输出预测向量(概率分配给其词汇表中的每个单词)。由于该模型未经过训练,因此在此阶段的预测肯定是错误的。但那没关系。我们知道应该它将猜到哪个词:我们目前用于训练模型的行中的标签/输出单元格:

图:“目标向量”的词(字)概率为1,其他词(字)的概率都是0。我们减去两个向量,得到一个误差向量:

现在可以使用此误差向量来更新模型,以便下次当“not”作为输入时,模型更有可能猜测“thou”。

这就是训练的第一步。我们继续使用数据集中的下一个样本进行相同的处理,然后是下一个样本,直到我们覆盖了数据集中的所有样本。这就结束了一个epcho的训练。我们继续训练多个epcho,然后我们就有了训练好的模型,我们可以从中提取嵌入矩阵并将其用于任何其他应用。

虽然这加深了我们对该过程的理解,但仍然不是word2vec实际上的训练过程。

负采样

回想一下这个神经语言模型如何计算其预测的三个步骤:

从计算的角度来看,第三步非常消耗资源:尤其是我们将在数据集中为每个训练样本做一次(很可能数千万次)。我们需要做一些事情来提高效率。

一种方法是将目标分成两个步骤:

  1. 生成高质量的单词嵌入(不要担心下一个单词预测)。

  2. 使用这些高质量的嵌入来训练语言模型(进行下一个单词预测)。

我们将专注于第1步,因为我们专注于嵌入。要使用高性能模型生成高质量嵌入,我们可以从预测相邻单词切换模型的任务:

并将其切换到一个取输入和输出字的模型,并输出一个分数,表明它们是否是邻居(0表示“不是邻居”,1表示“邻居”)。

这个简单的改变,将我们需要的模型从神经网络改为逻辑回归模型:因此它变得更简单,计算速度更快。

这个改变要求我们切换数据集的结构 - 标签现在是一个值为0或1的新列。它们将全部为1,因为我们添加的所有单词都是邻居。

现在可以以极快的速度计算 - 在几分钟内处理数百万个示例。但是我们需要关闭一个漏洞。如果我们所有的例子都是正面的(目标:1),我们打开自己的智能模型的可能性总是返回1 - 达到100%的准确性,但什么都不学习并生成垃圾嵌入。

为了解决这个问题,我们需要在数据集中引入负样本 - 不是邻居的单词样本。我们的模型需要为这些样本返回0。现在这是一个挑战,模型必须努力解决,而且速度还要快。

图:对于我们数据集中的每个样本,我们添加了负样本。它们具有相同的输入词和0标签。但是我们填写什么作为输出词?我们从词汇表中随机抽取单词

这个想法的灵感来自Noise-contrastive estimation。我们将实际信号(相邻单词的正例)与噪声(随机选择的不是邻居的单词)进行对比。这是计算量和统计效率的巨大折衷。

带负采样的skipgram(SGNS)

我们现在已经介绍了word2vec中的两个核心思想:

skipgram和负采样。

Word2vec训练流程

现在我们已经建立了skipgram和负采样的两个中心思想,我们可以继续仔细研究实际的word2vec训练过程。

在训练过程开始之前,我们预先处理我们正在训练模型的文本。在这一步中,我们确定词汇量的大小(我们称之为vocab_size,比如说,将其视为10,000)以及哪些词属于它。在训练阶段的开始,我们创建两个矩阵 - Embedding矩阵和Context矩阵。这两个矩阵在我们的词汇表中嵌入了每个单词(这vocab_size是他们的维度之一)。第二个维度是我们希望每次嵌入的时间长度(embedding_size- 300是一个常见值,但我们在本文前面的例子是50。)。

在训练过程开始时,我们用随机值初始化这些矩阵。然后我们开始训练过程。在每个训练步骤中,我们采取一个正样本及其相关的负样本。我们来看看我们的第一组:

现在我们有四个单词:输入单词not和输出/上下文单词:( thou实际邻居),aaron,和taco(负样本)。我们继续查找它们的嵌入 - 对于输入词,我们查看Embedding矩阵。对于上下文单词,我们查看Context矩阵(即使两个矩阵都在我们的词汇表中嵌入了每个单词)。

然后,我们计算输入嵌入与每个上下文嵌入的点积。。在每种情况下,会产生一个数字,该数字表示输入和上下文嵌入的相似性。

现在我们需要一种方法将这些分数转化为看起来像概率的东西 :使用sigmoid函数把概率转换为0和1。

现在我们可以将sigmoid操作的输出视为这些样本的模型输出。您可以看到taco得分最高aaron,并且在sigmoid操作之前和之后仍然具有最低分。既然未经训练的模型已做出预测,并且看到我们有一个实际的目标标签要比较,那么让我们计算模型预测中的误差。为此,我们只从目标标签中减去sigmoid分数。

图:这是“机器学习”的“学习”部分。现在,我们可以利用这个错误分数调整`not`,`thou`,`aaron`和`taco`的嵌入,使下一次我们做出这一计算,结果会更接近目标分数。

 训练步骤到此结束。我们从这一步骤中得到稍微好一点的嵌入(`not`,`thou`,`aaron`和`taco`)。我们现在进行下一步(下一个正样本及其相关的负样本),并再次执行相同的过程。 

当我们循环遍历整个数据集多次时,嵌入继续得到改进。然后我们可以停止训练过程,丢弃`Context`矩阵,并使用`Embeddings`矩阵作为下一个任务的预训练嵌入。

窗口大小和负样本数量

word2vec训练过程中的两个关键超参数是窗口大小和负样本的数量。

不同的窗口大小可以更好地提供不同的任务。

一种启发式方法是较小的窗口嵌入(2-15),其中两个嵌入之间的高相似性得分表明这些单词是可互换的(注意,如果我们只查看周围的单词,反义词通常可以互换 - 例如,好的和坏的经常出现在类似的情境中)。

使用较大的窗口嵌入(15-50,甚至更多)会得到相似性更能指示单词相关性的嵌入。实际上,您通常需要对嵌入过程提供注释指导,为您的任务带来有用的相似感。

Gensim默认窗口大小为5(输入字本身加上输入字之前的两个字和输入字之后的两个字)。

负样本的数量是训练过程的另一个因素。原始论文里负样本数量为5-20。它还指出,当你拥有足够大的数据集时,2-5似乎已经足够了。Gensim默认为5个负样本。

结论

我希望你现在对词嵌入和word2vec算法有所了解。我也希望现在当你读到一篇提到“skip gram with negative sampling”(SGNS)的论文时,你会对这些概念有了更好的认识。

本文作者:jalammar(https://twitter.com/jalammar)。

文末福利

各位猿们,还在为记不住API发愁吗,哈哈哈,最近发现了国外大师整理了一份Python代码速查表和Pycharm快捷键sheet,火爆国外,这里分享给大家。

这个是一份Python代码速查表

下面的宝藏图片是2张(windows && Mac)高清的PyCharm快捷键一览图

怎样获取呢?可以添加我们的AI派团队的程序媛姐姐

一定要备注【高清图】哦

????????????????????

➕我们的程序媛小姐姐微信要记得备注【高清图】哦

关于词嵌入(Word Embedding)的一些总结 看了课程半天没搞懂词嵌入是啥,梳理一下相关知识。参考: https://www.jianshu.com/p/2fbd0dde8804 https://blog.youkuaiyun.com/m0_37565948/article/details/84989565 https://www.cnblogs.com/wkang/p/9611257.html 词嵌入一、关于文本与向量二、One-hot编码三、信息检索(IR)技术·Bag of wordsTF-IDF·Bi-gram 和N-Gram五、词嵌入简介四、分布式表 阅读详情

相关推荐

NLP系列(10)_词向量之图解Word2vec

审校:龙心尘 作者:Jay Alammar 编译:张秋玥、毅航、高延 https://blog.youkuaiyun.com/longxinchen_ml/article/details/89077048 原文链接: https://jalammar.github.io/illustrated-word2vec/ 嵌入(embedding)是机器学习中最迷人的想法之一。 如果你曾经使用Siri、Google...

寒小阳 3万+

word2vec与词嵌入

文章目录为什么需要做词嵌入独热编码词嵌入CBOW(Continuous Bag-of-Words)CBOW改进Skip-Gram 词嵌入:将一个单词(word)转换为一个向量(vector)表示。 word2vec:是实现词嵌入的一些算法的集合。 为什么需要做词嵌入 独热编码 独热编码即 One-Hot 编码,又称一位有效编码,其方法是使用N位状态寄存器来对N个状态进行编码,每个状态都有它独立的寄...

Black eyes的博客 1568

词嵌入(Word2Vec)

⾃然语⾔是⼀套⽤来表达含义的复杂系统。在这套系统中,词是表义的基本单元。顾名思义,词向量是⽤来表⽰词的向量,也可被认为是词的特征向量或表征。**把词映射为实数域向量的技术也叫词嵌⼊(word embedding)。**近年来,词嵌⼊已逐渐成为⾃然语⾔处理的基础知识。在NLP(自然语言处理)领域,文本表示是第一步,也是很重要的一步,通俗来说就是把人类的语言符号转化为机器能够进行计算的数字,因为普通的文本语言机器是看不懂的,必须通过转化来表征对应文本。早期是基于规则的方法进行转化,而现代的方法是。

sikh_0529的博客 1万+

NLP优质参考资料

一些介绍自然语言处理技术的优质资料。

芳樽里的歌的博客 385

『NLP学习笔记』图解Word2vec(The Illustrated Word2vec)

嵌入(embedding)是机器学习中最迷人的想法之一。 如果你曾经使用Siri、Google Assistant、Alexa、Google翻译,甚至智能手机键盘进行下一词预测,那么你很有可能从这个已经成为自然语言处理模型核心的想法中受益。

AI新视界 783

Rockchip rv1126平台在gstreamer1中添加OpenCv实现视频流负片的效果

rv1126 gstreamer opencv negetive effect

Aisy_D的专栏 1464

word2vec相似度计算_图解word2vec(原文翻译)

文章转载自公众号 机器学习初学者 , 作者 机器学习初学者自2013年以来,word2vec一直是一种有效的词嵌入的方法,本文把word2vec用图解的方式进行,全篇没有数学公式,非常通俗易懂,推荐初学者阅读。(原文作者:jalammar,翻译:黄海广)。备注:这个是另一个版本的翻译,网上也有其它版本的翻译,都是独立完成的。原文链接:https://jalammar.github.io/illu...

weixin_39746282的博客 597

ANSYS Help USER300

USER 300概述单元描述输入数据假设与限制条件 概述 单元描述 Mechanical APDL提供了一种方便的方法来创建自定义的单元,命名为USER300,可以创建几乎任何单元类型。 UserElem子程序为Mechanical APDL在单元类型创建上提供了一个接口,可传递用户自定义单元创建时所需的所有数据,然后从自定义单元返回所有数据和结果,以更新数据库和文件。因为通过接口可以访问数据库和文件信息,所以很少需要了解Mechanical APDL数据库程序和文件结构。该接口还提供了获取Mechanic

weixin_47019765的博客 2235

图解词嵌入、语言模型、Word2Vec

嵌入(embedding)是机器学习中最迷人的想法之一。 如果你曾经使用Siri、Google Assistant、Alexa、Google翻译,甚至智能手机键盘进行下一词预测,那么你很有可能从这个已经成为自然语言处理模型核心的想法中受益。 在过去的几十年中,嵌入技术用于神经网络模型已有相当大的发展。尤其是最近,其发展包括导致BERT和GPT2等尖端模型的语境化嵌入。 Word2vec是一种有效创...

cuijiekun的博客 1万+

车道线检测(传统基于Opencv的方法)

传统车道线检测方法主要是使用颜色选择、高斯平滑、边缘检测、ROI区域选择、霍夫变换、标定车道边界等Opnecv图像处理操作去检测道路上的车道线,我自己对很多用这类处理对很多道路场景车道线进行过实验,这类算法往往需要人工根据不同街道场景手动去反复调整各算法参数,从而才能使检测效果最佳。

Yangxiaoaijiejie的博客 2073

LangFlow开源神器:拖拽构建AI Agent与MCP协议集成实战

LangFlow 15万星开源神器:拖拽搭建 AI Agent,一键部署 API / MCP / JSON 在AI应用开发领域,传统编码方式往往需要处理复杂的API调用、数据处理和流程编排,这让很多开发者望而却步。LangFlow作为GitHub上获得15万星的开源项目,通过可视化拖拽的方式彻底改变了AI Agent的开发体验。本文将完整介绍如何使用LangFlow快速构建功能强大的AI Agent,并实现API、MCP协议和JSON配置的一键部署。 1. LangFlow与AI Agent核心概念解析 1

weixin_33717117的博客 948

图解Word2vec

作者: 龙心尘 时间:2019年4月 出处:https://blog.youkuaiyun.com/longxinchen_ml/article/details/89077048 审校:龙心尘 作者:Jay Alammar 编译:张秋玥、毅航、高延 嵌入(embedding)是机器学习中最迷人的想法之一。 如果你曾经使用Siri、Google Assistant、Alexa、Google翻译,甚至智能手机键...

龙心尘 1万+

别再死记硬背了!用Amesim HCD库亲手搭建单向阀、锥阀、球阀模型(附详细参数设置)

本文详细介绍了如何使用Amesim HCD库从零构建单向阀、锥阀和球阀的仿真模型,帮助工程师摆脱死记硬背,掌握物理建模的核心技巧。通过实战案例和参数设置指南,读者将学会如何优化阀门动态响应、验证流量特性以及处理旋转运动等独特挑战,提升液压系统设计效率。

weixin_29248611的博客 501

图解Word2vec,读这一篇就够了(通俗易懂)

大数据文摘出品 作者:Jay Alammar 编译:张秋玥、毅航、高延、龙心尘 嵌入(embedding)是机器学习中最迷人的想法之一。 如果你曾经使用Siri、Google Assistant、Alexa、Google翻译,甚至智能手机键盘进行下一词预测,那么你很有可能从这个已经成为自然语言处理模型核心的想法中受益。 在过去的几十年中,嵌入技术用于神经网络模型已有相当大的发展。尤其是最近,其发展包括导致BERT和GPT2等尖端模型的语境化嵌入。 BERT: https://jalammar..

Java搜索工程技术栈 3万+

(02)Cartographer源码无死角解析-(81) ROS栅格地图→服务接收子图、cairo图像绘详解、OccupancyGrid地图发布

疑问1疑问1src/cartographer/cartographer/mapping/2d/probability_grid.cc 文件中的 ProbabilityGrid::DrawToSubmapTexture 函数的 proto::SubmapQuery::Response::SubmapTexture* 示例对象 texture 中texture->mutable_slice_pose() 的含义具体是什么。

江南才尽江南山,年少无知年少狂! 1930

EuROC 数据集格式及相关代码

Euroc提供ROS和zip两种数据格式。

~勿据散客~的博客 2093

【NLP】词嵌入基础和Word2vec

0.导语词嵌入是自然语言处理(NLP)中语言模型与表征学习技术的统称。概念上而言,它是指把一个维数为所有词的数量的高维空间嵌入到一个维数低得多的连续向量空间中,每个单词或词组被映射为实数域...

fengdu78的博客 782

华为OD面试手撕真题 - 最大数

华为OD面试手撕真题 最大的数 提供Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解

qq_45776114的博客 345

词嵌入来龙去脉 word embedding、word2vec

0词嵌入来龙去脉 NLP的核心关键语言表示Representation NLP词的表示方法类型 1词的独热表示one-hot representation 2词的分布式表示distributed representation NLP语言模型 词的分布式表示 1基于矩阵的分布表示 2基于聚类的分布表示 3基于神经网络的分布表示词嵌入 word embedding 词嵌入 word embedding

和而不流 3万+

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

【自然语言处理】图解Word2Vec

嵌入(Embedding)是机器学习中最令人着迷的 idea 之一。如果你使用过 Siri、Google Assistant、Alexa、Google Translate,或者是带有预测下一个词的功能的智能手机键盘,那么你已经从这个成为 NLP 模型核心的 idea 中受益。在过去的几十年中,将嵌入用于神经网络模型方面取得了相当大的发展,如最新的 BERT、GPT2 等。

Data · Model · Agent · Repeat 1333

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

图解word2vec(原文翻译)

自2013年以来,word2vec一直是一种有效的词嵌入的方法,本文把word2vec用图解的方式进行,全篇没有数学公式,非常通俗易懂,推荐初学者阅读。(原文作者:jalammar,翻译...

fengdu78的博客 1701

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

深度学习教程(15) | 自然语言处理与词嵌入(吴恩达·完整版)

本节介绍自然语言处理的文本表示与词嵌入相关知识,包括:词嵌入与迁移学习/类比推理,词嵌入学习方法,神经概率语言模型,word2vec(skip-gram与CBOW),GloVe,情感分析,词嵌入消除偏见

ShowMeAI研究中心 1万+

词嵌入以及word2vec的介绍

作者:Dhruvil Karani编译:ronghuaiyang前戏给大家介绍一些词嵌入和word2vec的一些基础内容,非常的浅显,都可以看得懂。词嵌入是文档词汇表最常...

AI公园 775
上一篇: 学AI的,为何对论文十分重视?
下一篇: 当年要是这样搞,我的C++也不至于这样!
Wang_AI
博客等级 码龄12年 996粉丝 162原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值