精华内容
下载资源
问答
  • 向量的模怎么表示
    千次阅读
    2021-04-19 08:13:20

    向量 v 中的元素 v1, v2, v3, …, vn,下式给出其幅度:

    |v| = √(v1^2 + v2^2 + v3^2 + … + vn^2)

    MATLAB中需要采按照下述步骤进行向量的模的计算:采取的矢量及自身的积,使用数组相乘(*)。这将产生一个向量sv,其元素是向量的元素的平方和V.

    sv = v.*v;

    使用求和函数得到 v。这也被称为矢量的点积向量的元素的平方的总和V.

    dp= sum(sv);

    使用sqrt函数得到的总和的平方根,这也是该矢量的大小V.

    mag = sqrt(s);

    详细例子

    在MATLAB中建立一个脚本文件,代码如下:v = [1: 2: 20];

    sv = v.* v; %the vector with elements

    % as square of v's elements

    dp = sum(sv); % sum of squares -- the dot product

    mag = sqrt(dp); % magnitude

    disp('Magnitude:'); disp(mag);

    运行该文件,显示结果如下:Magnitude:

    36.4692

    更多相关内容
  • 文本表示:静态词向量模型

    千次阅读 2022-01-21 15:46:17
    文本的词向量表示又叫文本的分布式表示,它源自于语言学家的语境理论。语言学家Firth认为:“语言是人类的生活方式,词语的含义根植于人类赖以生存的社会活动中”;也就是说,词语的含义存在于语境中,由与它搭配...

    1. 词向量模型的核心思想

    文本的词向量表示又叫文本的分布式表示,它源自于语言学家的语境理论。语言学家Firth认为:“语言是人类的生活方式,词语的含义根植于人类赖以生存的社会活动中”;也就是说,词语的含义存在于语境中,由它与其上下文单词的搭配关系体现,这就是词向量分布式假设的核心思想[1-2]

    2. 词向量模型

    根据该思想,词向量模型就是学习单词间的搭配关系,这容易定义成三类任务:

    1. 给定上下文词,预测其中心词
    2. 给定中心词,预测其上下文词
    3. 给定一组单词,判断它们是否搭配

    前两种定义方式更早被想到,它们成就了经典算法Word2Vec中的CBOWSkip-gram模型[3]。实践中人们发现,在很多情况下Skip-gram模型的词向量训练效果会好于CBOW模型,所以目前Skip-gram模型是Word2Vec算法的主流实现方案。最后一种定义方式,推出了目前Skip-gram模型的主流简化方法,结合负采样实现Skip-gram模型,它在极大减少计算量的同时并未明显牺牲训练效果。

    关于Skip-gram模型的具体实现细节,敬请详见作者文章:

    3. 词向量分类

    我们都知道单词存在一词多义的现象,对不同含义的同一单词的不同表示思路,自然将词向量模型分成两类。一类是静态词向量模型,它将不同含义的同一个单词编码成相同的词向量;另一类是动态词向量模型,它将不同含义的同一个单词编码成不同的词向量。所以静态词向量模型时一词一码,相对简单但训练简单、实现成本低,而动态词向量模型是一词一义一码,表示精准但也需要更大的训练语料库且模型复杂。

    3.1 静态词向量模型

    3.1.1 Word2Vec

    SkipGram是目前主流的静态词向量模型,它训练发生在局部,具有训练效率高、且善于捕捉局部文本特征的优点;但也有不能从全局的视角掌握语料库的局限。

    3.1.2 矩阵分解

    矩阵分解(SVD)是另一种静态词向量模型,作为全局方法,它的学习过程包含了全局的文本信息;但每次语料库中某些文本发生改变都要需要重新训练模型,效率很低。

    3.1.3 Glove

    Glove是一种融合矩阵分解(SVD)和SkipGram模型优点的静态词向量模型,它同时具有二者的优点,在实践中也有一定量使用。

    3.1.4 高斯嵌入

    此外,针对极度不均衡数据集中罕见词训练结果可信度不高的问题,提出高斯嵌入(Gaussian Embedding)静态词向量模型,它既可以输出一个单词的向量表示,又可以给出这个向量表示的置信度。

    参考文献:

    [1] HARRIS Z S J W. Distributional structure [J]. 1954, 10(2-3): 146-62.
    [2] FIRTH J R. Papers in linguistics, 1934-1951 [M]. Papers in linguistics, 1934-1951, 1957.
    [3] MIKOLOV T, CHEN K, CORRADO G, et al. Efficient estimation of word representations in vector space [J]. 2013.

    展开全文
  • 高中数学平面向量数量积的坐标表示模夹角PPT课件.pptx
  • 典型的使用场景就是把高质量的词向量输入到的模型中,通过后续的一系列计算,去完成相应的任务。比如文本分类,文本匹配等等。 说到高质量的词向量,这里要给出一个名词:预训练。土豪公司利用大量数据、构造复杂...

    文章均从个人微信公众号“ AI牛逼顿”转载,文末扫码,欢迎关注!


    word embedding的出现提升了自然语言处理的效果。典型的使用场景就是把高质量的词向量输入到的模型中,通过后续的一系列计算,去完成相应的任务。比如文本分类,文本匹配等等。

    说到高质量的词向量,这里要给出一个名词:预训练。土豪公司利用大量数据、构造复杂深层的网络结构能够训练出高质量的词向量,然后把结果开放,可以直接拿来用。这比自己用小量数据去获取词向量的效果要好得多。

    这就是预训练的意思。买来就可以吃,也可以根据自己的喜好,再稍微加工一下。(不要流口水哈)​​​​​

     

    然而,质量再高,多义词的向量表示依然是笼罩在word embedding头上的一朵乌云。

    不解决多义词的向量表示,智能?智障吧

     

    上篇文章可以看到,同一个单词只占参数矩阵的同一行。这就导致了两种不同的上下文信息都会编码成同一个向量,而这个向量包含了这个词不同的意义。当我们使用这个词的向量表示时,就算明确了词的具体含义,但是取出来的向量只能混合所有词义,那肯定会影响后续任务的效果了。

    其次,后续任务一般是对句子甚至是整篇文章的分析。简单的做法就是把每个词的向量加起来,这样就得到了整个句子的向量表示。由于多义词问题的存在,句子向量的表示效果会受到影响。另外,词语的向量相加是不是最好的处理方式呢?

     

    一、解决问题的思路

    对于第一个问题,ELMO模型给出了解决思路:

    1、先训练好一个单词的Word Embedding,此时多义词无法区分,不过这没关系。

    2、在实际使用Word Embedding的时候,单词已经具备了特定的上下文,根据上下文单词的语义去调整单词的Word Embedding表示。这样经过调整后的Word Embedding就能表达在这个上下文中的具体含义,自然也就解决了多义词的问题了。

    对于第二个问题,GPT模型给出了解决思路:

    上篇文章里训练词向量的方法类似,只是把对象换成了句子,从而可以获得整个句子的向量表示。

    关于这两个模型的详细介绍,可以参考文末链接。之所以提到这两个模型,关键在于它们改变了处理后续任务的方式。它们在预训练的基础上,可以直接适用于各种类型的后续任务!词语或者句子的向量表示只是中间结果而已,还顺带着把之前存在的问题给解决了。

    接下来要介绍的BERT模型,继承了它们的思路,同时还汲取了上述两个模型的优点:双向编码和Transformer特征提取。关于Transformer的一些细节,可以参考我之前的一篇文章

     

    二、BERT模型的理解

    BERT模型的核心就是预训练过程。其过程也非常简洁:它会先从数据集抽取两个句子,其中第二句是第一句的下一句的概率是 50%,这样就能学习句子之间的关系。其次随机掩盖掉两个句子中的一些词,并要求模型预测这些词是什么,这样就能学习句子内部的关系。最后再将经过处理的句子传入大型 Transformer 模型,并通过两个损失函数同时学习上面两个目标就能完成训练。

    同时完成两个目标的学习:预测被遮掩的词和判断是否为下一句

     

    其中,预测被遮掩的词是模型的亮点。它没有采用之前介绍的语言模型,而是随机遮掩一些词,并利用所有没被遮掩的词进行预测。这种做法和完形填空如出一辙。(至于随机遮掩的一些技巧和处理办法,参考文末链接)

    很多空都是要看到后面才能做出正确的选择。勾起了很不愉快的英语学习回忆

     

    说完预训练的目标之后,再来看看数据是以怎样的形式输入到模型里的。

    此图从上往下看。最上层是输入的一条数据序列,由两句话组成:

                                                                             上句:my dog is cute

                                                                             下句:he likes playing

    对输入的句子做一些处理:分词并添加一些标识符。每个句子的最后添加[SEP]标识符,起到分割句子的作用。在第一个句子前面添加[CLS]标识符。这是因为BERT有一个任务是预测B句是不是A句的下一句话,而这个分类任务会借助首句最前面的特殊符 [CLS] 实现,该特殊符可以视为汇集了整个输入序列的表征。

    图片中,横线下方有三类向量:标记向量、分割向量、位置向量。标记向量可以理解为就是普通的词向量;分割向量用来表示上句和下句;位置向量能反映各个标记在句子中词序信息。把这三类向量相加,传入到Transformer架构中。

    预训练的原理差不多就是这些。真正使用的时候,只需按照不同的任务,把数据按照模型要求的格式准备好就可以了,确实省心不少。更省心的是,不论后续是什么类型的任务(序列标注、分类任务、句子关系判断、生成任务),BERT模型一概通吃!!!(代码使用的细节参考文末链接)

    此图是作者根据后续的不同任务,给出的BERT模型的使用办法

    (a)图输入两个句子,利用最上层的C向量,能解决两个句子关系的判别任务;

    (b)图输入单个句子,也是利用最上层的C向量,能解决单个句子的分类任务;

    (c)图输入两个句子,利用最上层第二个句子的输出向量,能解决问答或者自动生成的任务。

    (d)图输入单个句子,利用最上层每个token的输出向量,能解决序列标注的任务。

     

    三、BERT模型的初步尝试

    下面是我尝试BERT模型的结果,做的任务是判断两个句子间的关系。做法比较简单,加载预训练好的中文BERT模型;利用训练数据微调BERT模型里的参数;然后就是在验证集上查看效果;最后就是在测试集上进行测试了。

    训练开始时返回的信息

     

    一共有68590条训练数据,返回的信息含义如下:

    1、tokens:按字分割,并添加[CLS]和[SEP]标识符;

    2、input_id:各个tokens在字典里的序号;最后有几个0,因为这里设置了固定的输入长度,句子长度不够的,要填充补齐。

    3、input_mask:标记为1的是要随机遮掩的,至于是哪些被遮掩,这里体现不出来。同样的,后续有些0也是填充补齐,0不被遮掩。

    4、segment_ids:前面是0,后面是1,用来区分上句和下句。1后面还有部分0,也是填充补齐。

    5、label:0或者1。0表示不是上下句关系,1表示是上下句关系。图中的第一个Example的label值为1,第二个Example的label值为0。

     

    四、后记

    慢,真的很慢!就这么一点数据量,一个通宵还不能在自己的笔记本上完成训练。也只有土豪公司才能玩得起、玩得好这么复杂的模型。后续的尝试还在进行中。。。。。。

    千里之行始于足下!定期分享人工智能的干货,通俗展现原理和案例实现,并探索案例在中学物理教育过程中的使用。还有各种有趣的物理科普哟。 坚持原创分享!坚持理解并吸收后的转发分享! 欢迎大家的关注与交流。

     

     

    参考链接

    https://mp.weixin.qq.com/s/vFdm-UHns7Nhbmdoiu6jWg

    https://blog.csdn.net/u012526436/article/details/84637834

    https://blog.csdn.net/qq_39521554/article/details/83062188

    https://zhuanlan.zhihu.com/p/49271699

    展开全文
  • Bert模型获得词向量和句子向量表示

    千次阅读 2022-02-22 17:28:20
    tokens, 768] #句子向量表示 token_vecs = hidden_states[-2][0] sentence_embedding = torch.mean(token_vecs, dim=0)#一个句子就是768维度 改进:处理被切分的token,处理被分割成子单词的单词嵌入,通过平均这些...
    text = "After stealing money from the bank vault, the bank robber was seen fishing on the Mississippi river bank."	
    marked_text = "[CLS] " + text + " [SEP]"		
    tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')	
    tokenized_text = tokenizer.tokenize(marked_text)	
    indexed_tokens = tokenizer.convert_tokens_to_ids(tokenized_text)	#得到每个词在词表中的索引
    segments_ids = [1] * len(tokenized_text)	
    tokens_tensor = torch.tensor([indexed_tokens])	.to(DEVICE)
    segments_tensors = torch.tensor([segments_ids]).to(DEVICE)	
    model = BertModel.from_pretrained('bert-base-uncased',
                                      output_hidden_states = True)
    model.to(DEVICE) 
    model.eval()
    with torch.no_grad():
        outputs = model(tokens_tensor, segments_tensors)
        hidden_states = outputs[2]
    
    token_embeddings = torch.stack(hidden_states, dim=0)
    token_embeddings.size()
    token_embeddings = torch.squeeze(token_embeddings, dim=1)
    token_embeddings.size()
    token_embeddings = token_embeddings.permute(1,0,2)#调换顺序
    token_embeddings.size()
    
    #词向量表示
    token_vecs_cat = [torch.cat((layer[-1], layer[-2], layer[-3], layer[-4]), 0) for layer in token_embeddings] #连接最后四层 [number_of_tokens, 3072]	
    token_vecs_sum = [torch.sum(layer[-4:], 0) for layer in token_embeddings] #对最后四层求和 [number_of_tokens, 768]
    
    #句子向量表示
    token_vecs = hidden_states[-2][0]
    sentence_embedding = torch.mean(token_vecs, dim=0)#一个句子就是768维度

    改进:处理被切分的token,处理被分割成子单词的单词嵌入,通过平均这些子单词的嵌入向量来为原始单词生成一个近似的向量:

    text = "After stealing money from the bank vault the bank robber was seen fishing on the Mississippi river bank"	
    #tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')	
    tokenized_text = tokenizer.tokenize(text)	
    len(tokenized_text)
    #把分开的词进行合并
    text_words = text.split(' ')#list,放每一个words
    len(text_words)
     
    ##如果是以##开头的就将词进行合并,数一下有多少个词,对应将embedding对应进行求和平均?
    #后续再尝试进行处理,就是可以对应获得每个词的向量表示,而不是token,根据
    num_emb = []
    m = 1
    for i in range(len(tokenized_text)):
        if '##' in tokenized_text[i]:#合并前一个词和当前词
            m = m+1
            num_emb.append(m)
        else:
            m = 1
            num_emb.append(m)    #仅需要当前一个emb
    #所以再在emb合并,即对由123,12这种的合成相应的embedding,倒序合成?获得emb,倒着排列,是1即取,是3取三个,就可以得到每个词的向量表示
     
     
     
    indexed_tokens = tokenizer.convert_tokens_to_ids(tokenized_text)	#得到每个词在词表中的索引
    segments_ids = [1] * len(tokenized_text)	
    tokens_tensor = torch.tensor([indexed_tokens]).to(DEVICE)
    segments_tensors = torch.tensor([segments_ids]).to(DEVICE)	
    #model = BertModel.from_pretrained('bert-base-uncased',output_hidden_states = True)
    #model.to(DEVICE)
    #model.eval()
    with torch.no_grad():#其实这里可以直接放进去很多句子的
        outputs = model(tokens_tensor, segments_tensors)
        hidden_states = outputs[2]
    #    print(hidden_states)#13层的tuple#好像只能获得最后一层?
    
    token_embeddings = torch.stack(hidden_states, dim=0)#将每层获得向量打包
    token_embeddings.size()
    token_embeddings = torch.squeeze(token_embeddings, dim=1)
    token_embeddings.size()
    token_embeddings = token_embeddings.permute(1,0,2)#调换顺序
    token_embeddings.size()
     
    #词向量表示
    #token_vecs_cat = [torch.cat((layer[-1], layer[-2], layer[-3], layer[-4]), 0) for layer in token_embeddings] #连接最后四层 [number_of_tokens, 3072]	
    token_vecs_sum = [torch.sum(layer[-4:], 0).cpu().detach().numpy() for layer in token_embeddings] #对最后四层求和 [number_of_tokens, 768]
    token_vecs_sum = token_vecs_sum[::-1]
    num_embr = num_emb[::-1]
    text_words = text_words[::-1]
     
    token_vecs_sum_words = []
     
    m = 0
    for i in num_embr:
        if i == 1:
            token_vecs_sum_words.append(token_vecs_sum[m])
            m = m+1
        elif i==0:
            m = m+1
        else:
            #合并i个emb,并相应的删除num_emb中的词
            token_vecs_sum_words.append(np.asarray(token_vecs_sum[m:m+i]).mean(axis=0))#torch.mean(token_vecs_sum[m:m+i], dim=0).cpu().detach().numpy()
            for j in range(i-1):
                num_embr[m+1+j]=0
            m = m+1
    
    #每个词的向量表示
    emb_dic = {}
    for w,emb in zip(text_words,token_vecs_sum_words):
        emb_dic[w] = emb
     
     
    #句子向量表示
    token_vecs = hidden_states[-2][0]#直接取倒数第二层的CLS作为句子的向量表示?
    sentence_embedding = torch.mean(token_vecs, dim=0)#一个句子就是768维度

     参考:1. BERT Word Embeddings Tutorial · Chris McCormick

                2. 使用pytorch获取bert词向量_海蓝时见鲸-CSDN博客_pytorch获取bert词向量

                3. BERT中的词向量指南,非常的全面,非常的干货_AI公园-CSDN博客

    展开全文
  • 向量 (module) 范数(norm)

    万次阅读 2019-02-14 16:52:46
    2,在空间几何中(经常是2或3维空间),常用表示向量的长度或两个向量间的距离,符号为||x⃗\vec{x}x||。 例子: 在二维空间中有两个向量:x⃗=(1,2),y⃗=(2,3)\vec{x}=(1,2),\vec{y}=(2,3)x=(1,2),y​=(2,3)...
  • 向量向量间的夹角。
  • 3.1 向量和单位向量

    千次阅读 2020-08-25 16:50:30
    向量的长度() u=(3,4) 该向量的大小是多少? ||u|| = 5 二范数、欧拉距离 在二维空间中,可以直接根据勾股定理计算出。 u=OP=(2,3,5) 该向量的大小是多少? n维向量 同理。 单位向量向量上记^为单位...
  • 详解GloVe词向量模型

    万次阅读 多人点赞 2019-08-04 21:26:52
      词向量表示可以分成两个大类1:基于统计方法例如共现矩阵、奇异值分解SVD;2:基于语言模型例如神经网络语言模型(NNLM)、word2vector(CBOW、skip-gram)、GloVe、ELMo。   word2vector中的skip-gram模型是...
  • matlab编程之求向量

    千次阅读 2020-06-22 08:24:16
    1、求乘积 2、求和 3、开平方 disp('&&&&&&&...%用*向量,得到一个一对一相乘的向量% s=sum(ff); t=sqrt(s) 如果运行报错的话,我建议clear所有的变量! ...
  • matlab向量

    万次阅读 2019-11-09 11:33:08
    MATLAB中需要采按照下述步骤进行向量的计算: 采取的矢量及自身的积,使用数组相乘(*)。这将产生一个向量sv,其元素是向量的元素的平方和V. sv = v.*v; 使用求和函数得到 v。这也被称为矢量的点积...
  • 求问 向量表示方法 有哪几种

    千次阅读 2021-05-23 12:06:11
    2、几何表示向量可以用有向线段来表示.有向线段的长度表示向量的大小,箭头所指的方向表示向量的方向。(若规定线段AB的端点A为起点,B为终点,则线段就具有了从起点A到终点B的方向和长度.这种具有方向和长度的线段...
  • 向量表示

    千次阅读 2020-08-12 23:53:10
    语音中,用音频频谱序列向量所构成的矩阵作为模型的输入;在图像中,用图像的像素构成的矩阵数据作为模型的输入。这些都可以很好表示语音/图像数据。而语言高度抽象,很难刻画词语之间的联系,比如“麦克风”和...
  • 自然语言词向量模型:Glove和Bert

    千次阅读 2019-06-30 23:13:58
    自然语言预训练模型:Glove和Bert1. 词向量模型2....这里面有些是“一揽子”表示的词向量模型,如word2vec、glove,是用一个固定的向量表示一个具体的token(单词)。这样的好处是简单且易于使用,预训练完...
  • sparsevector.py 模块包含 SparseVector 类,该类实现了对向量对象的稀疏表示的基本代数运算。 该类假定Python 3.3或更高版本,因为它使用了yield from语法。 稀疏性 向量的一个典型例子是实数 R 的 n 重集合乘积中...
  • 向量模型(1)

    万次阅读 2018-08-14 09:55:59
    向量模型 one-hot Vector one-hot vector 最简单的编码方式:假设我们的词库总共有n个词,那我们开一个1*n的高维向量,而每个词都会在某个索引index下取到1,其余位置全部都取值为0。 问题 这种词向量编码...
  • python中向量怎么表示

    千次阅读 2020-12-05 19:07:25
    python 中的向量怎么表示可以用numpy 库 np.mat([[a],[b],[c]]) 表示一个3*1 列向量 (a,b,c)^Tpython方向向量要怎么表示向量本身属于矢量,有大小也有方向,大小就称为向量向量的方向就是指坐标原点到该向量...
  • Matlab求向量——速度比较

    千次阅读 2022-03-10 19:57:54
    Matlab求向量——6种方式 方式A:利用norm()函数 A=norm(vector); 方式B:利用sum()函数和sqrt()函数 B=sqrt(sum(vector.*vector)); 方式B1 B1=sqrt(sum(vector.^2)); 方式C:利用向量点积和sqrt()函数 C=...
  • 平面向量数量积的坐标表示模夹角练习
  • C++向量类模板

    千次阅读 多人点赞 2020-01-27 17:47:51
    C++向量类模板 向量(vector)时一种随机访问的数组类型,提供了对数组元素的快速、随机访问,以及在序列尾部快速、随机的删除和插入...表示向量的类型,v表示向量名。 vector对象主要成员函数说明: 只是一些常......
  • 高中数学平面向量数量积坐标表示模夹角PPT课件.pptx
  • 高中数学24242平面向量数量积坐标表示模夹角PPT课件.pptx
  • 向量及语言模型

    万次阅读 2018-06-21 10:23:24
    一、词向量向量(word embedding):词的向量表征。...词向量表示方法:1)one-hot vector:将所有单词排序,排序之后每个单词就会有一个位置,然后用一个与单词数量等长的数组表示某单词,该单词所...
  • 向量—分布式表示方法

    千次阅读 2020-03-26 11:53:39
    在用one-hot表示单词的时候,用欧氏距离或者余弦相似度计算句子的相似度容易陷入所有的相似度的值相等,无法进行判断的情况,不能表示语义的相似度。因为向量的大小与词的大小是有相关性的,有稀疏性的特征 二、...
  • 2.4.2平面向量数量积的坐标表示、夹角.doc
  • 平面向量数量积的坐标表示模夹角练习[精选].doc
  • 【NLP】⚠️学不会打我! 半小时学会基本操作 2⚠️词向量模型简介
  • 向量2.Distributed representation词向量表示3.词向量模型4.word2vec算法思想5.doc2vec算法思想6.参考内容 深度学习掀开了机器学习的新篇章,目前深度学习应用于图像和语音已经产生了突破性的研究进展。深度学习...
  • 高一数学平面向量数量积的坐标表示模夹角[精选].doc
  • 转自:[Algorithm & NLP] 文本深度表示模型——word2vec&doc2vec词向量模型 阅读目录 1. 词向量 2.Distributed representation词向量表示 3.词向量模型 4.word2vec算法思想 5.doc2vec算法...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 240,568
精华内容 96,227
关键字:

向量的模怎么表示