精华内容
下载资源
问答
  • 2021-02-07 15:23:46

    Oracle synonym 同义词

    1、Oracle synonym 同义词是数据库当前用户通过给另外一个用户的对象创建一个别名,然后可以通过对别名进行查询和操作,等价于直接操作该数据库对象。

    2、Oracle同义词常常是给表、视图、函数、过程、包等制定别名,可以通过CREATE 命令进行创建、ALTER 命令进行修改、DROP 命令执行删除操作。

    3、Oracle synonym 同义词按照访问权限分为私有同义词、公有同义词。

    4、私有同义词:私有同义词只能当前用户可以访问,前提:当前用户具有create synonym 权限。

    5、公有同义词:公有同义词只能具有DBA用户才能进行创建,所有用户都可以访问的。

    语法结构:

    CREATE [OR REPLACE] [PUBLIC] SYSNONYM [当前用户.]synonym_nameFOR [其他用户.]object_name;

    解析:

    1、create [or replace] 命令create建表命令一样,当当前用户下同义词对象名已经存在的时候,就会删除原来的同义词,用新的同义词替代上。

    2、[public]:创建的是公有同义词,在实际开发过程中比较少用,因为创建就代表着任何用户都可以通过自己用户访问操作该对象,一般我们访问其他用户对象时,需要该用户进行授权给我们。

    3、用户名.object_name:oralce用户对象的权限都是自己用户进行管理的,需要其他用户的某个对象的操作权限,只能通过对象拥有者(用户)进行授权给当前用户。或者当前用户具有系统管理员权限(DBA),即可通过用户名.object_name操作该对象。

    案例分析:

    我们在school用户下也创建了一张学生信息表(stuinfo),该信息表只存在一个学生信息“张三”。由于我们当前用户student用户不具有school.stuino的权限,因此要需要该用户授权,然后才能访问。

    操作如下:

    1、--未授权之前查询(提示表不存在,没有操作权限)select * from school.stuinfo;

    2、--登录jsq_copy用户进行授权 conn school/123456;  grant all on stuinfo to student;

    3、--授权后再次查询该表数据 conn student/123456;  select * from school.stuinfo;

    同义词创建

    我们现在为school.stuinfo创建同义词stuinfo_copy,然后通过当前用户student直接操作同义词stuinfo_copy查询school.stuinfo表数据。

    代码如下:

    create synonym stuinfo_copy for school.stuinfo;

    创建同义词之后,即可使用select *from stuinfo_copy 进行查询,效果等同于select *from school.stuinfo。

    同义词删除

    同义词删除只能通过同义词拥有者的用户或者具有DBA权限的用户才能删除。

    语法结构:

    DROP [PUBLIC] SYNONYM [用户.]sysnonym_name;

    0b1331709591d260c1c78e86d0c51c18.png

    更多相关内容
  • Coo Coo Computing Challengers是一家比实际编写软件花费更多时间创建替代双关语的公司,因此他们需要我们的帮助。 他们希望您创建一个跟踪用户点击的网页,但是对于“点击伙伴”和“集体培养复合者”有一些奇怪的...
  • 当我们使用 “类库” 这个的时候,通常我们指的是位于 libraries 这个目录下的那些类。 接下来我们将介绍 如何在 application/libraries 目录下创建你自己的类库,和全局的框架类库独立开来。 另外,如果你希望在...
  • 该项目旨在为电子书阅读器创建字典,以替代有时非常糟糕的字典。 它以 Kobo 读者的英德词典开头,但应该很容易修改,以便为其他品牌的读者创建词典。
  • Select2是基于jQuery的选择框的替代品。 它支持搜索,远程数据集和结果分页。 首先,请在查看示例和文档。 用例 通过搜索增强本机选择。 通过更好的多选界面增强本机选择。 从JavaScript加载数据:通过AJAX轻松...
  • 注释框 演示页面: : 注释框是传统HTML输入框(例如,文本输入,文本区域)的替代... 要链接复合,请选择并突出显示相关,然后按Ctrl + Space。 链接完成后,您可以将鼠标移到带注释的文本上,以显示一个包含基
  • 视图基于的表称为基表,Oracle的数据库对象分为五种:表,视图,序列,索引和同义。 视图是存储在数据字典里的一条select语句。通过创建视图可以提取数据的逻辑上的集合或组合。 视图的优点: 1.对数据库的...

    视图:是基于一个表或多个表或视图的逻辑表,本身不包含数据,通过它可以对表里面的数据进行查询和修改。视图基于的表称为基表,Oracle的数据库对象分为五种:表,视图,序列,索引和同义词。

    视图是存储在数据字典里的一条select语句。通过创建视图可以提取数据的逻辑上的集合或组合。

    视图的优点:

    1.对数据库的访问,因为视图可以有选择性的选取数据库里的一部分。

    2.用户通过简单的查询可以从复杂查询中得到结果。

    3.维护数据的独立性,试图可从多个表检索数据。

    4.对于相同的数据可产生不同的视图。

    视图分为简单视图和复杂视图:

    1、简单视图只从单表里获取数据,复杂视图从多表;

    2、简单视图不包含函数和数据组,复杂视图包含;

    3、简单视图可以实现DML操作,复杂视图不可以。

    创建视图语法结构:

    CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view_name
        [(alias[, alias]...)]
    
    AS subquery
         [WITH CHECK OPTION [CONSTRAINT constraint]]
         [WITH READ ONLY]

    语法解析:

    OR REPLACE    :若所创建的试图已经存在,则替换旧视图;

    FORCE:不管基表是否存在ORACLE都会自动创建该视图(即使基表不存在,也可以创建该视图,但是该视图不能正常使用,当基表创建成功后,视图才能正常使用);

    NOFORCE  :如果基表不存在,无法创建视图,该项是默认选项(只有基表都存在ORACLE才会创建该视图)。

    alias:为视图产生的列定义的别名;

    subquery  :一条完整的SELECT语句,可以在该语句中定义别名;

    WITH CHECK OPTION  :插入或修改的数据行必须满足视图定义的约束;

    WITH READ ONLY       :默认可以通过视图对基表执行增删改操作,但是有很多在基表上的限制(比如:基表中某列不能为空,但是该列没有出现在视图中,则不能通过视图执行insert操作),WITH READ ONLY说明视图是只读视图,不能通过该视图进行增删改操作。现实开发中,基本上不通过视图对表中的数据进行增删改操作。

    例如:

    CREATE 
    	OR REPLACE VIEW test_view ( PROJECT_ID, CONTRACT_ID,DEPT_NAME ) 
    	AS SELECT p.PROJECT_ID,p.CONTRACT_ID,t.DEPT_NAME
    FROM
    	PINFO_CONTRACTS p
    	LEFT JOIN T_SALE_CONTRACT_LIST_ALL t ON p.CONTRACT_ID = t.SALE_CONTRACT_ID
    	WHERE t.DEPT_NAME = '卫生健康事业部'
        

    实际:生成了对应的视图,数据也查询出来了。如下图:

    总结:

    1.视图一般用于封装复杂的查询数据如来源多个表的关联数据,单个表一般用处不是很大。

    2.视图数据属于临时数据一般是不能直接修改的,对于单个表创建的视图可以添加with read only 防止真实数据被修改。

    3.视图如果是多表关联创建,如果想改视图数据可以使用替代触发器实现。


    参考:https://www.cnblogs.com/zl520/p/10245633.html


    ❤如果文章对您有所帮助,就在文章的右上角或者文章的末尾点个赞吧!(づ ̄ 3 ̄)づ 

    ❤如果喜欢大白兔分享的文章,就给大白兔点个关注吧!(๑′ᴗ‵๑)づ╭❤~

    ❤对文章有任何问题欢迎小伙伴们下方留言或者入群探讨【群号:708072830】

    ❤鉴于个人经验有限,所有观点及技术研点,如有异议,请直接回复讨论(请勿发表攻击言论)

    展开全文
  • 向量算法

    千次阅读 2019-06-05 22:31:07
    https://www.cnblogs.com/the-wolf-sky/articles/10192363.html...基于神经网络的表示一般称为向量、嵌入(word embdding)或分布式表示。 神经网络的向量和其他分布式类似,都基于分布式表达方式,核心依然是上...

    https://www.cnblogs.com/the-wolf-sky/articles/10192363.html

    https://blog.csdn.net/weixin_37947156/article/details/83146141

    基于神经网络的表示一般称为词向量、词嵌入(word embdding)或分布式表示。

    神经网络的词向量和其他分布式类似,都基于分布式表达方式,核心依然是上下文的表示以及上下文与目标词之间的关系映射。主要通过神经网络对上下文,以及上下文和目标词之间的关系进行建模,之所以神经网络可以进行建模,主要是由于神经网络的空间非常大,所以这种方法可以表达复杂的上下文关系。

    1. 词向量
      nlp中最常见的第一步是创建一个词表库并把每个词顺序编号,one-hot表达就是一种。这种方法把每个词顺序编号,但每个词就变成一个很长的向量,向量的维度就是词表的大小,只有对应位置上的数字为1,其他都为0。这种方式的弊病是很显然的,就是无法捕捉到词与词之间的相似度,也称为“语义鸿沟“。one-hot的基本假设是词与词之间的语义和语法关系是相互独立的,仅仅靠两个向量是无法看出两个词之间的关系的。其次,维度爆炸问题也是one-hot表达方法的很大的一个问题,随着词典的规模的增大,句子构成的词袋模型的维度变得越来越大,矩阵也变得越稀疏。所以此时构建上下文与目标词之间的关系,最为理想的方式是使用语言模型。

    分布式表示的基本细想是通过训练将每个词映射成k维实数向量(k一般为模型中的超参数),然后通过词之间的距离来判断它们之间的语义相似度。而word2vec使用的就是这种分布式表示的词向量表示方式。

    1. 词向量模型
      词向量模型是基于假设:衡量词之间的相似性,在于其相邻词汇是否相识,这是基于语言学的“距离相似性“原理。词汇和它的上下文构成一个象,当从语料库当中学习到相识或相近的象时,他们在语义上总是相识的。
      而典型的就是word2vec了,它可以分为CBOW(continuous bag-of-words 连续的词袋模型)和skip-gram两种。word2vec通过训练,可以把对文本内容的处理简化为k维向量空间中的向量运算,而向量空间上的相似度可以用来表示文本语义上的相似度,因此word2vec输出的词向量是一个基础性的工作,比如聚类、同义词、词性分析等。还有一个word2vec被广泛使用的原因是其向量的加法组合和高效性。

    2.1 NNLM模型
    关于该模型的介绍可以参考:https://blog.csdn.net/lilong117194/article/details/82018008
    这里需要注意的是整个网络分为两部分:

    第一部分是利用词特征矩阵C获得词的分布式表示(即词嵌入)。
    第二部分是将表示context的n个词的词嵌入拼接起来,通过一个隐藏层和一个输出层,最后通过softmax输出当前的p(wt|context)(当前上下文语义的概率分布,最大化要预测的那个词的概率,就可以训练此模型)。
    第一部分词嵌入的获取如下图所示:
    在这里插入图片描述
    这里可以看到最初的输如其实是词的one-hot表示,而这里的中间的w矩阵就是c矩阵。

    其中第i行对应的是one-hot表示中第i项为1的词向量的词嵌入。词向量与矩阵相乘后就可以得到自己的词嵌入了。由于C是神经网络的参数,所以词的词嵌入会随着模型的训练不断得到优化。

    在网络的第二部分中,表示context的n个词嵌入通过隐藏层进行语义组合,最后经过输出层使用softmax输出预测的词向量,因为本模型是基于n-gram模型,所以只要最大化正确预测当前词即可。最后不但训练了一个用神经网络表示的语言模型,而且还获得了词语的词嵌入(存在矩阵C中)

    从第二部分的输入到输出层有一个直连边,一般情况下该直连边的权重矩阵可以设为0,在最后的实验中,Bengio 发现直连边虽然不能提升模型效果,但是可以少一半的迭代次数。同时他也猜想如果没有直连边,可能可以生成更好的词向量。

    nnlm模型的其他细节可以参考上面的连接。

    2.2 C&W模型
    首先要明确:nnlm模型的目标是构建一个语言概率模型,而C&W模型则是以生成词向量为目的模型。
    在nnlm中最废时间的是隐藏层到输出层的权重计算。由于C&W模型没有采用语言模型的方式求解词语上下文的条件概率,而是直接对n元短语打分,这是一种更快速获取词向量的方式。
    而其简单来讲就是:如果n元短语在语料库中出现过,那么模型会给该短语打高分;如果是未出现在语料库中的短语则会得到较低的评分。
    优化的目标函数是:∑(w,c)∈D∑w′∈Vmax(0,1−score(w,c)+score(w′,c))∑(w,c)∈D∑w′∈Vmax(0,1−score(w,c)+score(w′,c))
    其中(w,c)(w,c)为 语料库中抽取的n元短语,为保证上下文词数的一致性,n为奇数。
    其中ww是目标词,c是目标词的上下文语境
    其中w′w′是从词典中随机抽取的一个词语。

    C&W模型采用的是成对的词语方式对目标函数进行优化。这里(w,c)表示正样本,(w’,c)表示负样本,负样本是将正样本序列中的中间词替换为其他词得到的。一般而言,如果用一个随机的词语替代正确文本序列的中间词,得到的新的文本序列基本上都是不符合语法习惯的错误序列,这种构造负样本的方法是合理的。同时由于负样本仅仅修改了正样本的一个词得到的,故其基本的语境没有改变,因此不会对分类效果造成太大的影响。

    与nnlm模型的目标词所在输出层不同,C&W模型的输入层就包含了目标词,其输出层也变为了一个节点,该节点输出值的大小就代表n元短语的打分高低。相应的,C&W模型的最后一层运算次数是|h|,远低于nnlm的|v|x|h|次。

    C&W模型设计了2个网络来完成词性标注 (POS)、短语识别(CHUNK)、命名实体识别(NER) 和语义角色标注 (SRL)这些nlp任务。其中一个模型叫window approach,另一个叫sentence approach。其中词嵌入的预训练用的是window approach,只是把输出层的神经原个数改成了1个,window approach网络结构见下图
    在这里插入图片描述
    其中,窗口大小为n,中心的那个词为中心词,上下文各(n-1)/2个词。作者利用该模型以无监督的方法预训练词嵌入来提高在具体工作上的效果,最后的输出层只有一个神经元,表示该中心词与上下文语义关联程度的得分。得分高则说明该中心词在当前位置是符合上下文语义的,得分低则说明该中心词在当前位置不符合上下文语义。

    2.3 CBOW模型
    上面说多的nnlm模型以训练语言模型为目标,同时得到了词表示。而word2vec包含了CBOW和Skip-gram两个得到词向量为目标的模型。
    这里要注意的地方是:CBOW和Skip-gram模型当中,目标词wtwt是一个词串联的词,也即是该词是在一句话的中间某个词,并拥有上下文。而nnlm的wtwt是最后一个词,并作为要预测的词。

    在这里插入图片描述
    由图可知,该模型使用一段文本的的中间词作为目标词,同时cbow模型去掉了隐藏层,大大提高了预运算速度,也因此其输入层就是语义上下文的表示。此外cbow模型,使用上下文各词的词向量的平均值替代nnlm模型各个拼接的词向量。

    整体流程:
    首先明确输入是周围词的词向量,而输出则是当前词的词向量,也就是通过上下文来预测当前的词。
    CBOW包含了输入层、投影层、以及输出层(没有隐藏层)。其运算流程如下:

    随机生成一个所有单词的词向量矩阵,每一个行对应一个单词的向量
    对于某一个单词(中心词),从矩阵中提取其周边单词的词向量
    求周边单词的的词向量的均值向量
    在该均值向量上使用logistic regression 进行训练,softmax作为激活函数
    期望回归得到的概率向量可以与真实的概率向量(即中心词的one-hot编码向量)相匹配
    在这里插入图片描述
    2.4 Skip-gram模型
    Skip-gram模型的结构如下:
    在这里插入图片描述

    由图可知, Skip-gram模型同样没有隐藏层,但与CBOW模型的输入上下文词的平均向量不同, Skip-gram模型是从目标词w的上下文中选择一个词,将其词向量组成上下文的表示。
    Skip-gram模型的目标函数:
    max(∑(w,c)∈D∑wj∈clogP(w|wj))max(∑(w,c)∈D∑wj∈clogP(w|wj))
    2.5 CBOW和Skip-gram模型的对比
    其中CBOW是周围的词预测中间的词,最大化对w(t)的预测。Skip-gram是中间的词预测周围的词,最大化对w(t-2),w(t-1),w(t+1),w(t+2)的预测之和。由于没有隐藏层,所以2个网络都是线性模型。正因为如此,模型的训练时间比较短,只花了一天就训练了16亿单词的语料。且获得的词嵌入质量很好,还具有“king”-“man”+“women”=“queen”的语义规律。

    论文中使用了两种训练方法,一种是哈夫曼树结构的Hierarchical Softmax,另一种是Negative Sampling,它们的使用都是为了缩短训练时间。由于这两个技术这是加快训练的技术,不是网络结构。
    不过正是这2个技术的运用缩短了训练时间(另外一个缩短时间的原因是删掉隐藏层),使其更快地生成了质量好的词嵌入,值得重视。
    在这里插入图片描述

    网络对比:
    对比上面介绍的模型我们发现,后面的模型都是以NNLM为基础进行修改的。其中主要修改有3个部分:输入层,隐藏层,输出层。其中输入层是存储词嵌入的层,隐藏层是做语义重组的层,输出层是根据目标构造输出语义的层。
    以NNLM作为对比对象。后面几个模型的修改情况如下:

    C&W:修改了输入和输出层
    CBOW :去除了隐藏层,输出层优化
    skip-gram:去除了隐藏层,修改了输入层,输出层优化
    根据上面的对比,总结一下:

    对与每个模型来说,输入是上下文,输出是预测,这些模型的核心是用上下文做预测。
    C&W只是为了具体任务来做词嵌入的预训练,所以它把要预测的和上下文放在一起,以得分的形式进行判断,最大化正例和反例的得分差。
    CBOW没有隐藏层,直接叠加构造语义输出,或许正是如此所以训练的词嵌入具有线性语义特征。其当前的预测是作为上下文语义的词嵌入的线性叠加。

    Skip-gram以一个单词作为上下文,多次预测周围的词。它的成功是否表明预测是可逆的,即A可预测B,则B可预测A,而其根本原因是A与B具有相似语义。而这种相似的产生是因为模型没有隐藏层,只有线性变换?

    在这里插入图片描述

    3.ELMo–动态词向量
    ELMo官网:https://allennlp.org/elmo

    艾伦研究所开发,并于6月初在NAACL 2018年发布ELMo(深度语境化的单词表示)。

    ELMO(Embeddings from Language Models) ,被称为时下最好的通用词和句子嵌入方法,来自于语言模型的词向量表示,也是利用了深度上下文单词表征,该模型的优势:
    (1)能够处理单词用法中的复杂特性(比如句法和语义)
    (2)这些用法在不同的语言上下文中如何变化(比如为词的多义性建模)

    ELMo与word2vec最大的不同:
    Contextual: The representation for each word depends on the entire context in which it is used. 
    (即词向量不是一成不变的,而是根据上下文而随时变化,这与word2vec或者glove具有很大的区别)

    举个例子:针对某一词多义的词汇w=“苹果”
    文本序列1=“我 买了 六斤 苹果。”
    文本序列2=“我 买了一个 苹果 7。”
    上面两个文本序列中都出现了“苹果”这个词汇,但是在不同的句子中,它们我的含义显示是不同的,一个属于水果领域,一个属于电子产品呢领域,如果针对“苹果”这个词汇同时训练两个词向量来分别刻画不同领域的信息呢?答案就是使用ELMo。

    ELMo是双向语言模型biLM的多层表示的组合,基于大量文本,ELMo模型是从深层的双向语言模型(deep bidirectional language model)中的内部状态(internal state)学习而来的,而这些词向量很容易加入到QA、文本对齐、文本分类等模型中,后面会展示一下ELMo词向量在各个任务上的表现。
    在这里插入图片描述

    它首先在大文本语料库上预训练了一个深度双向语言模型(biLM),然后把根据它的内部状态学到的函数作为词向量。实验表明,这些学到的词表征可以轻易地加入到现有的模型中,并在回答问题、文本蕴含、情感分析等 6 个不同的有难度的 NLP 问题中大幅提高最佳表现。实验表明显露出预训练模型的深度内部状态这一做法非常重要,这使得后续的模型可以混合不同种类的半监督信号。

    3.1 ELMo的安装与使用
    AllenNLP是一个相对成熟的基于深度学习的NLP工具包,它构建于 PyTorch之上,该工具包中集成了ELMo方法。
    可以直接使用pip安装:

    pip install allennlp

    适用于python3.6以上的版本

    或者,也可以直接clone源码到本地[https://github.com/allenai/allennlp]
    在这里插入图片描述
    使用ELMo获得词向量替换Glove的词向量作为多项特定NLP模型的输入,在ELMo的论文实验中表明具有一定的效果提升:
    在这里插入图片描述

    BERT的诞生过程:
    BERT的工作方式跟ELMo是类似的,但是ELMo存在一个问题,它的语言模型使用的是LSTM,而不是google在2017最新推出的Transformer(来自论文《Attention is all you need》)。LSTM这类序列模型最主要的问题有两个,一是它单方向的,即使是BiLSTM双向模型,也只是在loss处做一个简单的相加,也就是说它是按顺序做推理的,没办法考虑另一个方向的数据;二是它是序列模型,要等前一步计算结束才可以计算下一步,并行计算的能力很差。
    所以在ELMo之后,一个新模型GPT(来自论文《Improving Language Understanding by Generative Pre-Training》)推出了,它用Transformer来编码。但是它的推理方式跟ELMo相似,用前面的词去预测下一个词,所以它是单方向,损失掉了下文的信息。
    然后BERT诞生了,它采用了Transformer进行编码,预测词的时候双向综合的考虑上下文特征。这里作者做了一个改进,原来没办法综合利用双向的特征是因为目标是用前面的词逐个的预测下一个词,如果你能看到另一个方向,那就等于偷看了答案。BERT的作者说受到了完形填空的启发,遮盖住文章中15%的词,用剩下85%的词预测这15%的词,那就可以放心的利用双向上下文的特征了。
    在这里插入图片描述

    Transformer:
    Transformer是论文《Attention is all you need》中的模型,它把attention机制从配角搬上了主角的位置,没有采用CNN或者RNN的结构,完全使用attention进行编码。Transformer应该会取代CNN和RNN成为NLP主流的编码方式,CNN提取的是局部特征,但是对于文本数据,忽略了长距离的依赖,CNN在文本中的编码能力弱于RNN,而RNN是序列模型,并行能力差,计算缓慢,而且只能考虑一个方向上的信息。Transformer可以综合的考虑两个方向的信息,而且有非常好的并行性质,简单介绍一下Transformer的结构。

    https://jalammar.github.io/illustrated-transformer/ 这一篇博客上有非常详细的介绍,详细了解Transformer可以看一下这一个博客。
    在这里插入图片描述

    整个Transformer的结构如上图所示,它分为两个部分,一边是encoder,另一边是decoder,一个encoder或decoder看作一个block,encoder和decoder又有多个block串行相连,图中是2个,原文中使用了6个。
    先看encoder,单独看一个block,输入一行句子,先经过一个Self-Attention,Self-Attention首先是对每个Token的embedding通过3个不同的矩阵映射成3个向量,Query(Q)、Key(K)和Value(V)。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    每个pos的位置用一个d维的向量表示,这个向量的偶数位置用sin,奇数位置用cos计算,得到-1到1之间的值,之所以用三角函数是利用了三角函数和差变换可以线性变换的特性,因为BERT中没有采用这种计算方式,所以不作详细的介绍。
    然后经过一个Feed Forward的神经网络再经过Add&Normalize完成一个encoder,传向下一个encoder。Decoder的结构和运算机制与encoder基本一致,不同的是encoder顶层的K、V向量会传到Decoder的每个Block的Encoder-Decoder Attention部件中。最后经过一个线性的变换和Softmax分类器得到最后的结果。

    BERT的实现方式:
    Mask Language Model
    受到完形填空的启发,它不同于传统的语言模型,它是盖住整篇文章15%的词,然后用其他的词预测这15%的词。被盖住的词用[mask]这样的一个标记代替,但是由于下游任务中没有[mask]这个符号,为了削弱这个符号的影响,15%被盖住的词中:

    80%的词就用[mask]符号盖住
    10%的词保留原来真实的词
    10%的词用随机的一个词替代
    编码方式:
    采用Transformer为编码方式,实验结果最好的结构是BERT:L=24,H=1024,A=16。L=24也就是Transformer中提到的Block数,H=1024是隐藏层的维度,也就是Token经过矩阵映射之后K、Q、V向量的维度,A=16是Attention的头数,叠加了16层相互独立的Self-Attention。非常的google,money is all you need,如此复杂的结构,一般人是玩不了的,所幸的是google开源了pre-train的参数,只要用pre-train的参数对下游任务进行fine-tuning就可以使用google的BERT。
    BERT的Transformer结构与Attention is all you need中有一个不同是对于位置信息的编码,论文中的Transformer是采用cos和sin函数计算,而BERT用了更为简单粗暴的方法,每一个位置赋予一个向量,例如句子的截断长度固定为50,那么0-49这50个位置各赋予一个向量,将这个向量加到self-attention的embedding上。

    获取句间的关系:
    目前为止只获得了Token级别的特征,但是对于一些句间关系的推理,对话系统、问答系统需要捕捉一些句子的特征。BERT采用给定2个句子,判断它们是否是连续的句子的方式捕捉句子级别的特征:
    在这里插入图片描述
    具体的实现方式是两个连续的句子,开始和结束打上符号,两句之中打上分隔符,然后中一个二分类,反例的生成采用类似于word2vec的负采样。
    在这里插入图片描述
    这是整体的编码方式,Token Embedding是Transformer的embedding,加上segment embedding A和B,捕捉句子级别的特征,区分第一句和第二句,如果只有一个句子的情况就只有embedding A,加上每个位置赋予的Position embedding得到最终的embedding。

    BERT的实验结果:
    在这里插入图片描述

    在这里插入图片描述
    在 NLP 具体任务中应用的效果来看:效果最差的是 CBOW;其次是 Skip-gram(GloVe 跟 Skip-gram 差不多);效果最好的是 FastText。其中,FastText 能很好地处理 OOV(Out of Vocabulary)问题,最小粒度介于word和character之间 问题,并能很好地对词的变形进行建模,对词变形非常丰富的德语、西班牙语等语言都非常有效;

    从效率(训练时间)上来看:CBOW 的效率是最高的,其次是 GloVe;之后是 Skip-gram;而最低的是 FastText。

    https://blog.csdn.net/sinat_26917383/article/details/83041424

    展开全文
  • 钱包的原理-助记

    万次阅读 2018-06-07 17:10:56
    钱包是管理密钥、地址、跟踪余额和创建交易的软件。我们的比特币数据是存储在区块链上的,而不是在钱包里。经过前面几篇文章的解读,我们知道一个私钥生成公钥,公钥生成地址,这三者是一一对应的,就是一个私钥只有...

    首先,我们需要知道一点,比特币钱包里面并没有比特币。钱包是管理密钥、地址、跟踪余额和创建交易的软件。我们的比特币数据是存储在区块链上的,而不是在钱包里。
    经过前面几篇文章的解读,我们知道一个私钥生成公钥,公钥生成地址,这三者是一一对应的,就是一个私钥只有一个公钥和一个地址。但是我们在往交易所充币的时候,看到交易所为我们每个人生成一个独一无二的地址。这是怎么做的呢?接下来均益就来解读比特币的钱包。
    目前钱包分为两种,一种是非确定性(随机)的钱包,就是随机生成多个私钥,钱包管理这些私钥。如果需要成千上万的地址,通过随机的方式来生成私钥,这就需要存储那么多无规律的私钥,这样就很麻烦不好管理。另一种是确定性(种子)的钱包,就是通过种子可以生成无数的私钥,我们只需要记住种子就可以了。我们在使用钱包时记住的助记词可以生成种子,只要我们保管好助记词,我们的币就能找回来。那么问题来了?

    1. 种子是怎么来的?
    2. 种子是怎么生成无数地址的?

    带着这两个问题,我们来研究一下。先上一个大概图,然后我们再一步一步来解析


    钱包生成私钥

    主要流程是这样的

    第一,随机生成128到258位的随机数,我们这里叫做熵;
    第二,熵经过一定处理方法,生成助记词;
    第三,助记词经过密钥延伸函数PBKDF2,生成种子;
    第四,种子经过HMAC-SHA512算法,生成母密钥;
    第五,通过CKD(child key derivation)函数,母密钥生成众多子密钥。

    接下来均益一步步解析这里面的细节

    一、从熵到助记词

    1、随机生成一个128到258位的数字,叫做熵
    2、熵通过SHA256哈希得一个值,取前面的几位(熵长/32),记为y
    3、熵和y组成一个新的序列,
    4、将新序列以11位为一部分,已经预先定义2048个单词的字典做对应,单词的列表像这样的 https://github.com/trezor/python-mnemonic/blob/master/mnemonic/wordlist/english.txt
    5、生成的有顺序的单词组就是助记词
    如图:

    从熵到助记词

    二、从助记词生成种子

    助记词表示长度为128至256位的熵。 通过使用密钥延伸函数PBKDF2,熵被用于导出较长的(512位)种子。
    PBKDF2的基本原理是通过一个伪随机函数(例如HMAC函数),把明文和一个盐值作为输入参数,然后重复进行运算,并最终产生密钥。如果重复的次数足够大,破解的成本就会变得很高。而盐值的添加也会增加“彩虹表”攻击的难度。
    比特币钱包中,PBKDF2函数的第一个参数是助记词,第二个参数盐,由字符串常数“助记词”与可选的用户提供的密码字符串连接组成。使用HMAC-SHA512算法,使用2048次哈希来延伸助记符和盐参数,产生一个512位的值作为其最终输出。 这个512位的值就是种子。如图


    从助记词生成种子

    三、从种子到母密钥

    512位分成平均分成两部分,左边的256位为母私钥,右边的256位为链码。母私钥、链码和索引号,CKD(child key derivation)函数去从母密钥衍生出子密钥。如图


    从种子到主密钥

    三、从母密钥到子密钥

    母密钥、链码、索引合并在一起并且用HMAC-SHA512函数散列之后可以产生512位的散列。所得的散列可被拆分为两部分。散列右半部分的256位产出可以给子链当链码。左半部分256位散列以及索引码被加载在母私钥上来衍生子私钥。在图中,我们看到这个说明——索引集被设为0去生产母密钥的第0个子密钥(第一个通过索 引)。


    从主密钥到子密钥

    四、扩展密钥

    母密钥和链码结合叫做扩展密钥,拥有扩展私钥可以推导出子私钥,扩展公钥可以推导出子公钥。拥有扩展公钥就可以推导出子公钥,在服务器不需要母私钥也可以,这样就更安全更方便。但是还有一个问题,那就是扩展公钥包含有链码,如果子私钥被知道或者被泄漏的话,链码就可以被用来衍生所有的其他子私钥。简单地泄露的私钥以及一个母链码,可以暴露所有的子密钥。更糟糕的是,子私钥与母链码可以用来推断母私钥。
    为此,HD钱包使用一种叫做硬化衍生(hardened derivation)的替代衍生函数。这就“打破”了母公钥以及子链码之间的关系。这个硬化衍生函数使用了母私钥去推导子链码,而不是母公钥。这就在母/子顺序中创造了一道“防火墙”——有链码但并不能够用来推算子链码或者姊妹私钥。强化衍生函数看起来几乎与一般的衍生的子私钥相同,不同的是母私钥被用来输入散列函数中而不是母公钥。如图


    扩展密钥

    五、钱包索引

    1、前面说到索引和私钥链码可以生成子密钥,这个索引号码是32位的整数。为了区分密钥是从正常衍生函数中衍生出来还是从强化衍生函数中产出,这个索引号被分为两个范围。索引号在0和2^31–1(0x0 to 0x7FFFFFFF)之间的是只被用在常规衍生。索引号在231和232– 1(0x80000000 to 0xFFFFFFFF)之间的只被用在强化衍生。因此,索引号小于231就意味着子密钥是常规的,而大于或者等于231的子密钥就是强化型的。

    2、钱包索引识别路径
    HD钱包中的密钥是用“路径”命名的,且每个级别之间用斜杠(/)字符来表示(见表5-6)。由主私钥衍生出的私钥起始以“m”打头。由主公钥衍生的公钥起始以“M“打头。因此,母密钥生成的第一个子私钥是m/0。第一个公钥是M/0。第一个子密钥的子密钥就是m/0/1,以此类推。
    密钥的“祖先”是从右向左读,直到你达到了衍生出的它的主密钥。举个例子,标识符m/x/y/z描述的是子密钥m/x/y的第z个子密钥。而子密钥m/x/y又是m/x的第y个子密钥。m/x又是m的第x个子密钥。


    钱包密钥识别符(路径)
    展开全文
  • 中文停用列表

    千次阅读 2018-09-06 12:50:27
    中文停用分享 ! ” # $ % & ’ ( ) * + , – . .. … …… ………………. ./ .一 .数 .日 / // 0 1 2 3 4 5 6 7 8 9 : :// :: ; < > &...
  • 一个简单的ReST服务器,用于查找威胁因素(按名称,同义或UUID)并返回有关已知威胁因素的MISP星系信息。 要求 Python 3.6 龙卷风 安装 git clone https://github.com/MISP/threat-actor-intelligence-server cd...
  • 破解替代加密法

    万次阅读 2020-03-02 22:00:19
    首先必须先找出字典文件里的每个单词的模式,把它们放置在一个列表里排序好,以便获取匹配特定密的单词模式的所有候选单词。 计算字典文件里的每个单词的单词模式,保存到另一个文件里,及 wordPatterns.py文件。 ...
  •  将用“向量”的方式表示可谓是将 Deep Learning 算法引入 NLP 领域的一个核心技术。大多数宣称用了 Deep Learning 的论文,其中往往也用了向量。 本文目录: 0. 向量是什么 1. 向量的来历...
  • MySQL中创建用户赋予权限的命令详解

    千次阅读 2018-07-05 14:57:58
    创建用户格式:grant 权限 on 数据库.* to 用户名@登录主机 identified by “密码”;例1:增加一个test1用户,密码为123456,可以在任何主机上登录,并对所有数据库有查询,增加,修改和删除的功能。需要在mysql的...
  • 在此文章中,我们将探讨transformers的背景,什么是注意力机制,以及为什么RFA可以更好地替代softmax注意力机制。 我们将通过RFA的一些总结来结束本文章。 背景 目前,transformers是序列到序列机器学习模型的最佳...
  • 替代废除iframe方案

    万次阅读 2016-03-13 15:33:31
    但是比较麻烦的是,SVG的shadow DOM非常……非常……水(shady),不不,不是这个,是另一个,以sh开头,以y结尾。(注:对英文语境不是太熟悉,评论中有人提到是 shy。)对对,就是它!我可以继续说,但是请...
  • Oracle中 SYNONYM(同义)的作用

    千次阅读 2020-04-23 08:51:40
    翻译: 使用该CREATE SYNONYM语句创建同义,这是表,视图,序列,过程,存储的函数,包,实例化视图,Java类模式对象,用户定义的对象类型或其他同义替代名称。 同义提供了数据独立性和位置透明性。同义...
  • 替代键的解释(alternate key)

    千次阅读 2016-03-02 17:39:00
    SQL技巧:唯一性约束 一、  所谓唯一性约束(unique constraint)不过是数据表内替代键的另一...比方说,你可以用车辆识别 代号(VIN)作为汽车(Automobile)数据表的替代键,在汽车数据表里,主键是汽车识别号...
  • 上一篇:Oracle-----定义序列&定义特殊序列) 总目录震惊!...好好的学习好复杂查询 下一篇Oracle-----同义&索引 本篇博客到这就完啦,非常感谢您的阅读,如果对您有帮助,可以帮忙点个赞或者来波关注鼓励一下喔 ,嘿嘿
  • 嵌入算法

    千次阅读 2018-08-27 01:06:42
    基于神经网络的表示一般称为向量、嵌入(word embdding)或分布式表示。 神经网络的向量和其他分布式类似,都基于分布式表达方式,核心依然是上下文的表示以及上下文与目标之间的关系映射。主要通过神经网络...
  • 虽然其不支持,但是为了方便统计数据,我们是可以重新创建该函数的,或者,我们也可以使用其替代函数,listagg,下面我们就这两种方式分别写出对应解决方案 2、解决方案 2.1创建wm_concat函数 --首先使用dba...
  • Algolia国內替代方案

    千次阅读 2021-01-27 09:24:04
    Algolia 官网截图 Algolia 是什么? Algolia 是一家美国的创业公司,他们提供了很容易使用的搜索引擎的服务,让开发者可以快速对站内内容进行检索和搜索。...Algolia 的 开源替代方案: MeiliSearch M..
  • 创建停用词典3.定义Document类(可省)4.序列化标签 载入数据5.创建词典6.文本向量化方法一:one-hot 表达方法方法二:袋模型方法三:TF-IDF7.打乱数据集8.划分训练集、测试集,训练模型。(略) 1.准备 1/ 环境...
  • nlpaug:NLP的数据增强

    2021-02-03 06:52:33
    如何创建 增强器 增强器 目标 增强器 行动 描述 文字的 字符 键盘式 替代 模拟键盘距离错误 文字的 OcrAug 替代 模拟OCR引擎错误 文字的 插入,替换,交换,删除 随机应用增强 文字的 字 反义 替代 根据WordNet...
  • 现在把我今天弄了一上午(初学)的Oracle数据库创建过程记录下。是通过shell脚本通过sqlplus连接数据库并创建表。在这里把创建表和插入数据的学习文件记录下。比较抠脚,哈哈。 一、创建表 create_st...
  • 10,支持 Unicode,包括自己的“Blade”字预测和缩写扩展引擎,可以与 CCF-SymbolServer 交互以支持图形符号(http://www.conceptcoding.org/),以及添加了其他一些功能,使使用替代输入的人可以轻松创建界面。...
  • 本文介绍自然语言处理(NLP)的概念及其面临的问题,进而介绍向量和其构建方法(包括基于共现矩阵降维和Word2Vec)。
  • 教你在NVivo中如何自动创建主题节点

    千次阅读 2020-03-26 16:22:40
    NVivo是一款支持定性研究方法和混合研究方法的软件。它可以帮助您收集、整理和分析访谈... NVivo提供了可帮助您自动创建主题实例的工具。本文中的技术也适用于其他类型的代码,例如关系。 从......创...
  • BERT中的向量指南,非常的全面,非常的干货

    万次阅读 多人点赞 2019-08-20 07:30:00
    从教育的角度看,仔细查看BERT的嵌入的是一个深入学习BERT及其迁移学习模型的很好的方法,我们设置了一些实用知识和上下文,以便在后面的内容中更好地理解模型的内部细节。 安装和导入 使用Hugging Face的github...
  • 使用字典创建If-Else函数的简洁代码 动机 您可能经常使用Python的字典。... 本文将重点介绍如何使用Python的词典替代if-else语句 该图片由 Gerd Altmann 在 Pixabay上发布 使用默认值的红利来削...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 50,103
精华内容 20,041
关键字:

创建的替代词