我都创造了什么 “AI Interview Simulator ”是一款基于Web的应用程序,旨在改善用户的面试体验,能够有充分的准备。 它使用人工智能技术分析用户的答案,并提供有关如何改进的建设性反馈。该工具使用用户设备上的摄像头和麦克风,提供全面的实时评估,帮助用户在下一次面试中脱颖而出。 AI Interview Simulator 的演示地址: https://interview.nicobytes.com/ 代码开源GitHub地址: https://github.com/nicobytes/interview-cloudflare-ai 代码旅行 前段时间,我所在的公司裁员了,因此我开始在寻找下一个职位,但是每家公司的招聘流程都不同。 但我发现每次面试都会问一些常见的问题,我已经开始记下这些问题,以便在下次面试时改进。 作为招聘过程的一部分,一些公司要求你录制回答一些问题的视频,这个过程可能会令人生畏。 受这样的情况启发,我创建了一个人工智能面试模拟器,它可以根据你的角色生成问题,并使用你的手机和相机提供反馈,让你获得接近真实面试的体验。 该应用程序基于 Angular 前端,利用 Tailwind CSS 进行样式设置,并利用 Angular CDK 进行组件原语,从而增强了 UI 开发流程。后端由轻量级 JavaScript 框架 HonoJS 提供支持,并集成 LangChainJS 来有效管理与大型语言模型的交互。 对于基础设施,该应用程序利用 Cloudflare 的生态系统:用于托管的 Cloudflare Pages、用于边缘功能的 Cloudflare Workers 以及@cf/openai/whisper用于音频处理、@cf/meta/llama-2-7b-chat-fp16聊天功能的 Workers AI 模型,以及用于文本转语音功能的 openai-tts。 数据存储通过 Cloudflare R2 处理,D1 提供可扩展的数据库解决方案来管理聊天内存和其他数据需求。 多种模型以及三重任务类型: 自动语音识别:@cf/openai/whisper 文本生成:@cf/meta/llama-2-7b-chat-fp16 […]
View Article1.导语 谷歌推出的BERT模型在11项NLP任务中夺得SOTA结果,引爆了整个NLP界。而BERT取得成功的一个关键因素是Transformer的强大作用。谷歌的Transformer模型最早是用于机器翻译任务,当时达到了SOTA效果。Transformer改进了RNN最被人诟病的训练慢的缺点,利用self-attention机制实现快速并行。并且Transformer可以增加到非常深的深度,充分发掘DNN模型的特性,提升模型准确率。在本文中,我们将研究Transformer模型,理解它的工作原理。 原作者:Jay Alammar 原链接:https://jalammar.github.io/illustrated-transformer 2.正文开始 Transformer由论文《Attention is All You Need》提出,现在是谷歌云TPU推荐的参考模型。论文相关的Tensorflow的代码可以从GitHub获取,其作为Tensor2Tensor包的一部分。哈佛的NLP团队也实现了一个基于PyTorch的版本,并注释该论文。 在本文中,我们将试图把模型简化一点,并逐一介绍里面的核心概念,希望让普通读者也能轻易理解。Attention is All You Need:https://arxiv.org/abs/1706.03762从宏观的视角开始 首先将这个模型看成是一个黑箱操作。在机器翻译中,就是输入一种语言,输出另一种语言。那么拆开这个黑箱,我们可以看到它是由编码组件、解码组件和它们之间的连接组成。编码组件部分由一堆编码器(encoder)构成(论文中是将6个编码器叠在一起——数字6没有什么神奇之处,你也可以尝试其他数字)。解码组件部分也是由相同数量(与编码器对应)的解码器(decoder)组成的。所有的编码器在结构上都是相同的,但它们没有共享参数。每个解码器都可以分解成两个子层。从编码器输入的句子首先会经过一个自注意力(self-attention)层,这层帮助编码器在对每个单词编码时关注输入句子的其他单词。我们将在稍后的文章中更深入地研究自注意力。自注意力层的输出会传递到前馈(feed-forward)神经网络中。每个位置的单词对应的前馈神经网络都完全一样(译注:另一种解读就是一层窗口为一个单词的一维卷积神经网络)。解码器中也有编码器的自注意力(self-attention)层和前馈(feed-forward)层。除此之外,这两个层之间还有一个注意力层,用来关注输入句子的相关部分(和seq2seq模型的注意力作用相似)。将张量引入图景我们已经了解了模型的主要部分,接下来我们看一下各种向量或张量(译注:张量概念是矢量概念的推广,可以简单理解矢量是一阶张量、矩阵是二阶张量。)是怎样在模型的不同部分中,将输入转化为输出的。像大部分NLP应用一样,我们首先将每个输入单词通过词嵌入算法转换为词向量。每个单词都被嵌入为512维的向量,我们用这些简单的方框来表示这些向量。词嵌入过程只发生在最底层的编码器中。所有的编码器都有一个相同的特点,即它们接收一个向量列表,列表中的每个向量大小为512维。在底层(最开始)编码器中它就是词向量,但是在其他编码器中,它就是下一层编码器的输出(也是一个向量列表)。向量列表大小是我们可以设置的超参数——一般是我们训练集中最长句子的长度。将输入序列进行词嵌入之后,每个单词都会流经编码器中的两个子层。接下来我们看看Transformer的一个核心特性,在这里输入序列中每个位置的单词都有自己独特的路径流入编码器。在自注意力层中,这些路径之间存在依赖关系。而前馈(feed-forward)层没有这些依赖关系。因此在前馈(feed-forward)层时可以并行执行各种路径。然后我们将以一个更短的句子为例,看看编码器的每个子层中发生了什么。 现在我们开始“编码” 如上述已经提到的,一个编码器接收向量列表作为输入,接着将向量列表中的向量传递到自注意力层进行处理,然后传递到前馈神经网络层中,将输出结果传递到下一个编码器中。 输入序列的每个单词都经过自编码过程。然后,他们各自通过前向传播神经网络——完全相同的网络,而每个向量都分别通过它。 从宏观视角看自注意力机制 不要被我用自注意力这个词弄迷糊了,好像每个人都应该熟悉这个概念。其实我之也没有见过这个概念,直到读到Attention is All You Need 这篇论文时才恍然大悟。让我们精炼一下它的工作原理。例如,下列句子是我们想要翻译的输入句子:这个“it”在这个句子是指什么呢?它指的是street还是这个animal呢?这对于人类来说是一个简单的问题,但是对于算法则不是。当模型处理这个单词“it”的时候,自注意力机制会允许“it”与“animal”建立联系。随着模型处理输入序列的每个单词,自注意力会关注整个输入序列的所有单词,帮助模型对本单词更好地进行编码。如果你熟悉RNN(循环神经网络),回忆一下它是如何维持隐藏层的。RNN会将它已经处理过的前面的所有单词/向量的表示与它正在处理的当前单词/向量结合起来。而自注意力机制会将所有相关单词的理解融入到我们正在处理的单词中。当我们在编码器#5(栈中最上层编码器)中编码“it”这个单词的时,注意力机制的部分会去关注“The Animal”,将它的表示的一部分编入“it”的编码中。请务必检查Tensor2Tensor notebook ,在里面你可以下载一个Transformer模型,并用交互式可视化的方式来检验。 从微观视角看自注意力机制 首先我们了解一下如何使用向量来计算自注意力,然后来看它实怎样用矩阵来实现。 计算自注意力的第一步就是从每个编码器的输入向量(每个单词的词向量)中生成三个向量。也就是说对于每个单词,我们创造一个查询向量、一个键向量和一个值向量。这三个向量是通过词嵌入与三个权重矩阵后相乘创建的。可以发现这些新向量在维度上比词嵌入向量更低。他们的维度是64,而词嵌入和编码器的输入/输出向量的维度是512. 但实际上不强求维度更小,这只是一种基于架构上的选择,它可以使多头注意力(multiheaded attention)的大部分计算保持不变。X1与WQ权重矩阵相乘得到q1, 就是与这个单词相关的查询向量。最终使得输入序列的每个单词的创建一个查询向量、一个键向量和一个值向量。什么是查询向量、键向量和值向量向量?它们都是有助于计算和理解注意力机制的抽象概念。请继续阅读下文的内容,你就会知道每个向量在计算注意力机制中到底扮演什么样的角色。计算自注意力的第二步是计算得分。假设我们在为这个例子中的第一个词“Thinking”计算自注意力向量,我们需要拿输入句子中的每个单词对“Thinking”打分。这些分数决定了在编码单词“Thinking”的过程中有多重视句子的其它部分。这些分数是通过打分单词(所有输入句子的单词)的键向量与“Thinking”的查询向量相点积来计算的。所以如果我们是处理位置最靠前的词的自注意力的话,第一个分数是q1和k1的点积,第二个分数是q1和k2的点积。第三步和第四步是将分数除以8(8是论文中使用的键向量的维数64的平方根,这会让梯度更稳定。这里也可以使用其它值,8只是默认值),然后通过softmax传递结果。softmax的作用是使所有单词的分数归一化,得到的分数都是正值且和为1。这个softmax分数决定了每个单词对编码当下位置(“Thinking”)的贡献。显然,已经在这个位置上的单词将获得最高的softmax分数,但有时关注另一个与当前单词相关的单词也会有帮助。第五步是将每个值向量乘以softmax分数(这是为了准备之后将它们求和)。这里的直觉是希望关注语义上相关的单词,并弱化不相关的单词(例如,让它们乘以0.001这样的小数)。 第六步是对加权值向量求和(译注:自注意力的另一种解释就是在编码某个单词时,就是将所有单词的表示(值向量)进行加权求和,而权重是通过该词的表示(键向量)与被编码词表示(查询向量)的点积并通过softmax得到。),然后即得到自注意力层在该位置的输出(在我们的例子中是对于第一个单词)。 这样自自注意力的计算就完成了。得到的向量就可以传给前馈神经网络。然而实际中,这些计算是以矩阵形式完成的,以便算得更快。那我们接下来就看看如何用矩阵实现的。 通过矩阵运算实现自注意力机制 第一步是计算查询矩阵、键矩阵和值矩阵。为此,我们将将输入句子的词嵌入装进矩阵X中,将其乘以我们训练的权重矩阵(WQ,WK,WV)。 x矩阵中的每一行对应于输入句子中的一个单词。我们再次看到词嵌入向量 (512,或图中的4个格子)和q/k/v向量(64,或图中的3个格子)的大小差异。最后,由于我们处理的是矩阵,我们可以将步骤2到步骤6合并为一个公式来计算自注意力层的输出。 自注意力的矩阵运算形式 “大战多头怪”通过增加一种叫做“多头”注意力(“multi-headed” attention)的机制,论文进一步完善了自注意力层,并在两方面提高了注意力层的性能:1. 它扩展了模型专注于不同位置的能力。在上面的例子中,虽然每个编码都在z1中有或多或少的体现,但是它可能被实际的单词本身所支配。如果我们翻译一个句子,比如“The animal didn’t cross the street because it was too […]
View ArticleClick:outdoor barbecue torch Lineapelle: the trade show Lineapelle is the International exhibition of leathers, accessories, components, synthetic products and models for footwear, leather goods, leatherwear and furnishing, organized twice a year in Bologna. Exhibitors are producers of: finished leathers, accessories, components (welts, soles, heels, metal accessories, etc.), synthetic materials, industrial fabrics and models for footwear, […]
View ArticleJewellery Wonder: the trade show Jewellery Wonder is the B2B Jewellery & Gem Trade Show that happens once a year in New Delhi. This event is a business platform for designers, entrepreneurs, manufacturers, brands and wholesalers from jewellery industry from all over India, providing visitors with the best materials, equipments and creativity on jewels, rings watches and […]
View Article
Recent Comments