精华内容
下载资源
问答
  • 词向量表示和句向量、文章向量计算方法 本文介绍一种计算句向量和文章向量的方法及参考代码,自然语言处理的第一步即是要进行文本的向量化,包括获得词向量,句向量或者文章向量,以便输入各种机器学习模型或者深度...

    本文介绍一种计算句向量和文章向量的方法及参考代码,自然语言处理的第一步即是要进行文本的向量化,包括获得词向量,句向量或者文章向量,以便输入各种机器学习模型或者深度学习模型。

    词向量

    可以笼统的认为词向量是文本向量的基本单位,句向量、文章向量都可以由构成文章的词向量转化计算得到。
    关于词的表示,比如one-hot编码,词袋模型,分布式编码等等。相关资料有很多,此处引用相关资料:

    1 词的独热表示:One-hot Representation
    采用稀疏方式 存储,简单易实现
    灯泡:[0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0]、灯管:[0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0]
    维度过大词汇鸿沟现象:任意两个词之间都是孤立的。光从这两个向量中看不出两个词是否有关系,哪怕”灯泡”和”灯管”这两个词是同义词也不行
    2 词袋模型: 类似用词频等表示,比如tf-idf或textrank计算的权重来表示词,不会考虑单词的语义及它们在文档中的顺序
    3 词的分布式表示:Distributed representation
    传统的独热表示( one-hot representation)仅仅将词符号化,不包含任何语义信息
    Distributed representation 最早由 Hinton在 1986 年提出。它是一种低维实数向量,这种向量一般长成这个样子: [0.792, −0.177, −0.107, 0.109, −0.542, …]
    最大的贡献就是让相关或者相似的词,在距离上更接近了

    句向量和文章向量计算方法

    方法1:前面提到的词袋模型方式,可以用tf-idf直接生成句向量或文章向量

    代码示例:直接用sklearn的TfidfVectorizer工具来获得所需向量

    from sklearn.feature_extraction.text import TfidfVectorizer
    vectorizer = TfidfVectorizer()
    # cutWordList是文章分词后得到的列表,tf_matrix即是得到的文章或者句子的向量
    tf_matrix = vectorizer.fit_transform(cutWordList).toarray()
    

    实际上是文章的每个词,计算得到tf-idf值,然后放到一个array里得到的向量,由此也可以用词的textrank权值,统一按由大到小的顺序放在一个array得到一篇文章的向量

    方法2 根据前面提到的词嵌入模式得到词向量

    基于词向量的固定表征:word2vec、fastText、glove。 基于词向量的动态表征:elmo、GPT、bert。
    动态词向量相较于静态词向量,更加充分利用了上下文信息,所以可以解决一词多义的问题。在工程实践上其优越性也得到了证明(BERT 在多个 NLP 任务中也表现优异)。参考阅读:[embedding 技术实践总结]。(https://zhuanlan.zhihu.com/p/143763320)这块我的理解是网络在训练的时候,随机初始化词向量,然后将词向量作为网络参数来进行训练,故此成为动态词向量

    可以用一些开源的静态词向量如glove训练的中文词向量来做,如下是一份预训练词向量文件预览:
    在这里插入图片描述
    实际是训练好的几万个常用词的词向量,这样一个文本文件。项目中直接加载进来使用即可。
    代码示例:
    如下是对词向量文件进行读取,获取词的词向量以便使用

    def get_embeddings_index(embeddings_model_file):
        dir_path = os.path.dirname(os.path.abspath(__file__))
        #dir_path = os.path.dirname(dir_path)
        local_path = os.path.join(dir_path, embeddings_model_file)
        word_embeddings = {}
        count = 0
        with open(local_path, encoding='utf-8') as f:
            for line in f:
                count += 1
                if count > 1:
                    values = line.split()
                    word = values[0]
                    try:
                        embedding = np.asarray(values[1:], dtype=np.float64)
                    except BaseException as e:
                        #print(e)
                        embedding = np.asarray(values[2:], dtype=np.float64)
                    word_embeddings[word] = embedding
                else:
                    print('词向量信息:%s' % line)
        return word_embeddings
    

    接着就可以用词向量来构建句向量或者文章向量了,此处以句向量的构建为例

    def get_sentence_vector(words_list,embedding_dim=300):
        '''
        获取内容的向量
        :param sentence: 句子
        :param embedding_dim:  向量维度
        :return: 一个句子的特征维度
        '''
        global embeddings_index
    
        #embeddings_index = get_all_sentences_vector_mul.embeddings_index
    
        sent_matrix = np.zeros((len(words_list), embedding_dim),dtype = np.float64) #初始化空矩阵
    
        for i in range(len(words_list)):
            if words_list[i]:
                embedding_vector = embeddings_index.get(words_list[i])
                if embedding_vector is not None and len(embedding_vector)>=embedding_dim: #使用的词向量库 有的词长短不一致
                    if embedding_vector.shape != embedding_dim:
                         sent_matrix[i] = embedding_vector
        #字向量构造句向量,向量点乘,然后取范数,先是构造1x8的全1矩阵,与8x300的向量做点积,相当于每个词向量中对应元素相加(300列,每列一个词向量的浮点值),即词向量叠加组成句向量,除以该句向量的模,做个单位化
        d =  np.dot(np.ones((1,len(words_list)),dtype = np.float64),sent_matrix)
        norm= np.linalg.norm(d, axis=1, keepdims=True)   # 向量的2范数,相当于向量的莫
        vector = d/norm   #向量除以向量模,相当于单位化
        return vector[0]
    

    得到句向量之后就可以进行各种操作了,比如进行聚类或者进行相似度计算

    文章余弦相似度计算示例

    可以直接看代码示例:一个计算余弦相似度的接口,传入两个句向量或者文章向量后,计算返回两个句子或者两篇文章的余弦相似度值。

    def cos_sim(vector_a, vector_b):
        """
        计算两个向量之间的余弦相似度
        :param vector_a: 向量 a
        :param vector_b: 向量 b
        :return: sim
        """
        vector_a = np.mat(vector_a)
        vector_b = np.mat(vector_b)
        num = float(vector_a * vector_b.T)
        denom = np.linalg.norm(vector_a) * np.linalg.norm(vector_b)
        sim = num / denom
        return sim
    
    

    其他

    一些深度学习模型进行文本分类或者其他NLP任务如摘要提取,通常是动态计算文章向量,比如用bert+rnn等进行文本分类,因为Bert等模型对输入格式有要求,所以需要特殊处理来得到相应向量,输入模型。

    展开全文
  • 提出了一种基于人工神经网络的短文语义向量放缩算法,结合社交节点自身信息和短文语义,给出社交网络短文语义计算方法和突发话题发现算法。通过文本数值化实现语义距离的计算、比较、节点的分类及社区发现等。通过...
  • 广义特征向量计算方法

    千次阅读 2020-10-06 14:49:12
    代数重数与几何重数(对于单个特征值而言) 代数重数:相同特征值的个数。 几何重数:特征子空间的维数为...广义特征向量计算 rank(λI−A)=n−αrank(λI-A)=n-αrank(λI−A)=n−α,代数重数为kkk,则对于λλλ这个

    代数重数与几何重数(对于单个特征值而言)

    代数重数:相同特征值的个数。
    几何重数:特征子空间的维数为几何重数,因为空间是几何里的概念,rank(λIA)=nαrank(λI-A)=n-α中的αα值,几何重数 ≤ 代数重数。
    在几何重数 = 代数重数时,A可以变换为对角阵,但两者不相同时,A只可以变换为约当阵,这里就需要使用广义特征向量。

    广义特征向量计算

    rank(λIA)=nαrank(λI-A)=n-α,代数重数为kk,则对于λλ这个特征值有αα个线性不相关的向量,就有αα个约当小块,通过这αα个向量来构建其余的kαk-α个向量,设为X1X2...XαX_{1}、X_{2}、...、X_{α}。将需要构建的kαk-α个向量分成αα组,每组基于一个XiX_{i}构建。
    例如rank(λIA)=102rank(λI-A)=10-2,代数重数k=5k=5,则可将5分为2组,可以为S1=3S2=2S_{1}=3,S_{2}=2
    公式:
    VS11=(λIA)VS1VS12=(λIA)VS11V1=(1)S11(λIA)S11V3=X1............. V_{S_{1}-1}=-(λI-A)V_{S_{1}}\\ V_{S_{1}-2}=-(λI-A)V_{S_{1}-1}\\ V_{1}=(-1)^{S_{1}-1}(λI-A)^{S_{1}-1}V_{3}=X_{1}\\ .............

    我们先求出S1S_{1}组对应的三个列向量,S1S_{1}组以X1X_{1}为基向量,构建V3V2V1V_{3},V_{2},V_{1},根据
    (1)S11(λIA)S11V3=X1(-1)^{S_{1}-1}(λI-A)^{S_{1}-1}V_{3}=X_{1}得到最大下标的V3V_{3}(最高下标的V3V_{3}和最低下标的V1V_{1}才与X1X_{1}有直接关系),然后根据V2=(λIA)V3V_{2}=-(λI-A)V_{3}V1=(λIA)V2=X1V_{1}=-(λI-A)V_{2}=X_{1}
    得到V2V_{2}V1V_{1},同理得到S2S_{2}组下的两个列向量W2W_{2}W1W_{1},则Q=[V1V_{1} V2V_{2} V3V_{3} W1W_{1} W2W_{2} ] 。
    证明与例题详见广义特征向量的构造

    简易方法求广义特征向量

    公式:

    λ1P1AP1=0λ1P2AP2=P1λ1P3AP3=P2......... λ_{1}P_{1}-AP_{1}=0\\ λ_{1}P_{2}-AP_{2}=P_{1}\\ λ_{1}P_{3}-AP_{3}=P_{2}\\ .........
    Q=[P1P_{1} P2P_{2} P3P_{3} P4P_{4} P5P_{5} P6P_{6}]

    展开全文
  • “基于门控卷积与层次注意力机制的多语义词向量计算方法”一文的源码,有源码,有真相。 gthub链接地址:地址 使用本代码请注明引用: “柳杨, 吉立新, 黄瑞阳,等. 基于门控卷积机制与层次注意力机制的多...

    code-for-Multi-sense-Word-Embedding

    “基于门控卷积与层次注意力机制的多语义词向量计算方法”一文的源码,有源码,有真相。

    gthub链接地址:地址

    • 使用本代码请注明引用:

    • “柳杨, 吉立新, 黄瑞阳,等. 基于门控卷积机制与层次注意力机制的多语义词向量计算方法[J]. 中文信息学报, 2018(7).”

    • ...抱歉临近毕业事情较多,代码太多、太乱,忙完这些事情有空再整理上传

    • ...百忙之中抽空翻了翻代码,凭着仅存的记忆注释、整理并上传了一些,不知道对不对。。。

    • ...所以说同志们写代码的时候一定要命名好、做好注释。。。否则你绝对不知道你之前写的什么玩意儿。。。(这是我研一写的,写的贼low,因为临近毕业,忙着改其他小论文,没来得及改源码,欢迎有兴趣的同学folk和贡献自己的力量)

    • ...PS:写代码的时候一定要以一定的规范和标准,否则代码执行效率差、并且可读性差

    • ...PS:emmm,也不知道写了些什么玩意儿,有没有人看。。。欢迎讨论!

      • e-mail:fabyangliu@hotmail.com
      • RG也可以,还是这个邮箱;
      • 原论文邮箱也可以,虽然已经不怎么用了...
    展开全文
  • 在CG中,基于Per-Pixel的算法经常会涉及到Tangent Space的坐标变换,比如Bump Mapping,需要将Object Space的Light Vector转换到Tangent Space,然后在和该Pixel上的Normal Vector进行计算,因为Normal Vector是在...

    原文地址


    在CG中,基于Per-Pixel的算法经常会涉及到Tangent Space的坐标变换,比如Bump Mapping,需要将Object Space的Light Vector转换到Tangent Space,然后在和该Pixel上的Normal Vector进行计算,因为Normal Vector是在Tangent Space中的。


    像上面的Bump Mapping,对于Normal Texture,如果Normal Vector(这里的Normal Vector不是指Vertex上的)是设计在Mesh的Object Space中的话,一方面,Mesh的复杂度导致Normal Vector不方便设计;另外,如果Mesh的形状发生改变,那么原来的Normal Vector将不能够适用。所以,将Normal Vector的设计就放在统一的一个空间里面(Tangent Space)中,然后通过一个Triangle Surface上的几何信息,进行几何变化,最后在同一个坐标空间来使用。

    对于一个Normal Texture的图示,他里面所有像素上的Normal Vector都在u,v,n坐标系上的,这也就是Tangent Space:

    当将一个Normal Texture贴到Mesh上后,单考虑一个Vertex,他对应于Normal Texture上的一个点(具体在哪由这个Vertex的Texture Address u-v指定),而他的法向量就对应了Tangent Space中的n,经过该Vertex,垂直于n可以构造出Tangent Space中的u-v平面,这实际上也就在Object Space中构造出了Tangent Space。如图所示,V1为该顶点,淡蓝色矩形框平面为对应的u-v平面:


    在Object Space和Tangent Space两个坐标系下进行坐标变换必须找到这两个坐标系之间的过渡矩阵。
    根据变换等式
    <xo, yo, zo>*T = <xt, yt, zt>
    <x0, y0, z0>  : 为Object Space中的基向量,实际上就是一个单位矩阵
    T             : 过渡矩阵
    <xt, yt, zt>  : 为Tangent Space的基向量

    可见T = <xt, yt, zt>构成的矩阵,所以这里要求的就是这三个基向量

    zt这里就是这个Vertex上的n。xt,yt分别对应于u,v两个基向量,这是后面要求的两个向量。
    根据一个Triangle上面的贴图,可以构建这个模型:
    记:
    Vertex1 : V1(x1, y1, z1), T1(u1, v1), N1(nx1, ny1, nz1)
    Vertex2 : V2(x2, y2, z2), T2(u2, v2), N2(nx2, ny2, nz2)
    Vertex3 : V3(x3, y3, z3), T3(u3, v3), N3(nx3, ny3, nz3)


    记:
    T21 = T2-T1 = (u21, v21)
    T31 = T3-T1 = (u31, v31)

    V21 = V2-V1
    V31 = V3-V1

    则有
    V21_ = V21-V21*N1*N1                        V21*N1*N1是V21在u-v平面上的投影向量
    V31_ = V31-V31*N1*N1
    V21_和V31_分别为V21和V31在u-v平面上的投影向量

    在图中的
    v21 = Len(V21)*Nor(V21_)
    v31 = Len(V31)*Nor(V31_)
    Len()为计算对应向量的长度,Nor()为单位化对应向量,v21 和v31 分别为将V21和V31"拉到"u-v平面上去的向量。

    根据在tangent space和Object Space两个空间是同构的,可以列出下面的等式:
    u*u21 + v*v21 = v21
    u*u31 + v*v31 = v31

    解该方程,得到u,v,并单位化两个向量

    通过上面的过程也就得到了<u,v,n>--->过渡矩阵T。
    得到过渡矩阵T后,就可以任意的转化两个坐标系中的坐标。

    其他:
    1:<u,v,n>并不一定是标准正交基,所以T的转置矩阵并不一定等于T的逆矩阵。u,v的关系如何这要取决于上面的三个顶点的T1,T2,T3。
    2:上面的计算过程是基于Vertex的,可以采用基于一个Triangle的计算方法,过程和上面是一致的,不同点在于这个时候u,v平面和Triangle平面重合。
    3:在DirectX中有D3DXComputeTangent API对计算这三个基向量的支持。但是在他的描述中使用的是Tangent Vector(也就是u),Binormal Vector(也就是v)和Normal Vector(也就是n),且B = N Cross T

    展开全文
  • 研究结果表明:地形场景为百万级(1 048 576)三角形时,GPU顶点法向量计算方法具备较高渲染帧率(66帧/s)和较好显卡兼容性.研究结论初步突破了真实感地形需要Normal Map的限制,有利于网络条件下快速高效渲染大规模真实感...
  • 提出了一种基于人工神经网络的短文语义向量放缩算法,结合社交网络自身信息和短文语义识别社交网络短文语义计算方法和突发主题发现算法。 ,上游的分类及社区发现等。通过自行开发的微博采集工具Argus采集的大量新浪...
  • 词袋向量及其计算方法 词袋模型基础 (略) 词袋向量的特点 通过词袋模型,一副图片可以用词袋向量描述。词袋向量的维度等于词典的维度(词典中单词的个数),故词袋向量往往是超高维的向量,几万,几十万的都有可能...
  • 矩阵主特征向量(principal eigenvectors computing, PEC)的求解是科学与工程计算中的一个重要问题。随着图形处理单元通用计算(general-purpose computing on graphics processing unit, GPGPU)的兴起, 利用GPU 来...
  • 平面法向量计算 平面法向量知识介绍: 对于平面法向量计算实质就是:平面内两非平行向量的叉积(又称"外积、向量积、叉乘")为该平面的法向量。 根据两向量相乘的前后顺序计算得到两个方向相反的法向量...
  • 在raytrace的计算中,光反射与折射的计算是两个非常重要的过程,而由于我们在图形学中通常都使用向量来计算,所以也有必要找到一套计算光反射和折射模型的向量计算方法。(该方法来自Bram de Greve的文章...
  • 光学反射向量计算

    2020-08-18 20:54:45
    在图形学中,计算光照模型时,经常需要求取反射向量,一般的shader函数库都提供计算反射向量方法,下面介绍一下如何手动计算反射向量。 给定入射光线向量I和平面法向量N,求反射向量R,如下图。为了方便计算,这里...
  • 向量的相似度计算常用方法

    万次阅读 2018-06-02 16:50:22
    向量的相似度计算常用方法相似度的计算简介 关于相似度的计算,现有的几种基本方法都是基于向量(Vector)的,其实也就是计算两个向量的距离,距离越近...下面我们详细介绍几种常用的相似度计算方法。共8种。每人...
  • 使用向量方法计算点到直线的距离
  • 一种考虑屏蔽效应的电路输入向量敏感性计算方法
  • SIF:一种简单但是有效的词向量计算余弦相似度的方法,利用了tfidf等知识。
  • 向量卷积的两种计算方法通过卷积计算多项式乘法符号向量的卷积运算 通过卷积计算多项式乘法   多项式乘:(x^2 + x +1)*(x + 2) 可用MATLAB的conv卷积命令实现。   结果为:[1 3 3 2]   手算方法一、   ...
  • 运用B3LYP/STO-3G和ZINDO两种低水平的量子...最小二乘支持向量机校正方法的引入可在较少的机时和计算资源下得到比单一的量子化学计算方法更为稳定和精确的计算结果,且可在现有计算条件下预测现有计算能力达不到的精度.
  • OpenGl法向量计算

    千次阅读 2015-04-08 15:24:37
    网上对于法向量计算方法有多种:1.取顶点周围三角面片的法向量的平均值 2.加权算法 3.....等,大同小异,无法就是取个近似值,每种方法在不同的情景中,所得的近似值各有千秋。 本文参考外文代码,给出实现
  • 向量的几种距离计算方法

    千次阅读 2019-06-19 19:16:32
    本文展示了4中距离计算方法:欧氏距离、曼哈顿距离、切比雪夫距离、夹角余弦距离。 另外:向量可以自己根据需要来构造,本文的比较杂乱,是由特定要求计算得来的 例如:A=[0.1,0.2,0.3,0.4,0.5],B=[0.005,0.006,0....
  • 向量方法

    2020-03-27 15:13:25
    右边为向量方法,把θ和x都看作向量,只需一步运算就可计算出h, 梯度下降更新θ值时,需要n个θ的同步更新。 θ为n+1维向量,学习率a为常数,δ为n+1维向量(h-y为常数,x为n+1维向量,所以计算得到的δ也为n...
  • 今天小编就为大家分享一篇对numpy中数组转置的求解以及向量内积计算方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 转载于:https://www.cnblogs.com/shanlizi/p/8907693.html
  • 在主流的OLTP数据库中,PostgreSQL可以说是十分优秀了。同时在OLAP领域,pg的表现也是越来越好,例如支持并行计算,JIT编译等等。...向量计算的本质是一次计算多个值,减少函数调用,上下文切换,尽量的利用C
  • 基于多模态词向量的语句距离计算方法[D].哈尔滨工业大学,2018. 摘要 摘要分三段,大致阐述了本文的出发点和工作内容,基本情况如下: 简述语句间的距离问题:自然语言处理任务是度量文本间的距离;不同阶段语言学习...
  • 用户偏好用于描述用户的偏好倾向和历史行为...在分析基于QoS选择的Web服务基本构建框架和WSMS概念结构的基础上,引入了一种面向用户群偏好的EOWA算子计算方法,用来获取可靠、有效的用户群偏好向量,并进行了实例分析。
  • 使用向量方法效率更高,更简单。首先要了解什么是向量,什么是向量的模 主要用到了解析几何里的几个公式 a * b = | a | * | b | * cos(x),其中x为向量a,b的夹角| a | * 单位向量 = a,单位向量为模为1的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,274
精华内容 2,909
关键字:

向量计算方法