精华内容
下载资源
问答
  • torch.cat A=torch.ones(2,4) print(A) B=2*torch.ones(2,4) print(B) C=torch.cat((A,B),0) print(C) D=torch.cat((A,B),1) print(D) #A的输出 tensor([[1., 1., 1., 1.], [1., 1., 1., 1.]]) ...te

    torch.cat

    A=torch.ones(2,4)
    print(A)
    B=2*torch.ones(2,4)
    print(B)
    C=torch.cat((A,B),0)
    print(C)
    D=torch.cat((A,B),1)
    print(D)
    #A的输出
    tensor([[1., 1., 1., 1.],
            [1., 1., 1., 1.]])
    #B的输出
    tensor([[2., 2., 2., 2.],
            [2., 2., 2., 2.]])
    #C的输出
    tensor([[1., 1., 1., 1.],
            [1., 1., 1., 1.],
            [2., 2., 2., 2.],
            [2., 2., 2., 2.]])
    #D的输出
    tensor([[1., 1., 1., 1., 2., 2., 2., 2.],
            [1., 1., 1., 1., 2., 2., 2., 2.]])

    torch.sum

    E=torch.sum(A,0)
    print(E)
    F=torch.sum(A,1)
    print(F)
    #E的输出
    tensor([2., 2., 2., 2.])
    #F的输出
    tensor([4., 4.])

    展开全文
  • python小记(一)矩阵和向量拼接

    千次阅读 2021-04-11 10:05:32
    python矩阵和向量拼接 比如用python生成一个长度为17000的向量和一个17000×8的矩阵,那么向量的shape为(17000,),矩阵的shape为(17000,8)。查了CSDN上很多都是矩阵拼接矩阵,用的基本就是numpy.concatenate...

    @TOCpython小计(一)

    python矩阵和向量的拼接

    比如用python生成一个长度为17000的向量和一个17000×8的矩阵,那么向量的shape为(17000,),矩阵的shape为(17000,8)。查了CSDN上很多都是矩阵拼接矩阵,用的基本就是numpy.concatenate,但是这个函数只能拼接两个相同shape的array。
    所以首先要用reshape将向量变成矩阵
    reshape(17000,1)

    numpy.concatenate

    numpy.concatenate,axis=0为按列拼接,axis=1为按行拼接,axis对应shape的位置按照从左往右。axis为几,就是拼接后矩阵的shape的第几位发生变化。

    展开全文
  • 本发明涉及一种中文字词向量和方面词向量联合嵌入CNN-LSTM情感分析方法。背景技术:近年来,越来越多的用户习惯在网络上发自己对某一事物的看法与评论。如何快速,准确地从互联网海量评论信息中分析所包含的用户情感...

    本发明涉及一种中文字词向量和方面词向量联合嵌入CNN-LSTM情感分析方法。

    背景技术:

    近年来,越来越多的用户习惯在网络上发自己对某一事物的看法与评论。如何快速,准确地从互联网海量评论信息中分析所包含的用户情感已经成为当前信息科学与技术领域研究的热点。用户评论情感分析中最基本的任务是对用户的情感倾向进行分类,其中包括二元情感分类和多元情感分类。

    在自然语言处理领域,深度学习方法首先将文本转化为一组向量序列表示,然后将该向量序列输入神经网络模型提取特征,最后将特征输入分类器进行情感分类。当前大部分的词向量模型针对一个单词只能生成一个向量,由于单词的多义性,使用同一个向量表达不同语境下的同一个单词是不准确的。对于神经网络训练手段,基于卷积神经网络的特征提取方法使用一个滑动窗口来提取输入的局部特征,并通过池化技术将这些局部特征组合起来;而基于循环神经网络的LSTM神经网络的特征提取方法将输入编码为一个定长的特征,可以有选择地保存和遗忘信息来存储文本中的重要的信息。

    然而,近年来随着深度学习技术发展而产生的基于深度神经网络的方法大多停留在使用单一网络或网络的简单变体的阶段,采用复杂结构进行长文本情感倾向性分析的研究相对较少。

    技术实现要素:

    本发明的目的是:将卷积神经网络和LSTM网络组合,并且改变以往词向量嵌入模型,有效改善情感分析判断的准确度。

    为了达到上述目的,本发明的技术方案是提供了一种中文字词向量和方面词向量联合嵌入情感分析方法,其特征在于,包括如下步骤:

    步骤一、载入中文商品评论语料库,并将语料库按比例进行分割,分为训练集和测试集;

    步骤二、利用jieba分词工具对训练集和测试集分别进行分词处理;

    步骤三、利用神经网络模型进行字词向量联合预训练,得到词语的初始化词向量和汉字的初始化字向量表示,即得到字词向量联合嵌入表示;

    步骤四、利用LDA模型对主题aspects进行建模,提取商品评论中的方面词,并且线性的将方面词与词向量结合,得到词向量和方面词联合嵌入表示;

    步骤五、将步骤三中得到的字词向量联合嵌入表示输入到卷积神经网络一提取出不同维度的特征,然后经过池化操作得到字词向量联合嵌入表示的低维特征向量;

    步骤六、将步骤四中得到的词向量和方面词联合嵌入表示输入到卷积神经网络二提取出不同维度的特征,然后经过池化操作得到词向量和方面词联合嵌入表示的低维特征向量;

    步骤七、将步骤五得到的低维特征向量和步骤六得到的低维特征向量组合加权,即分别将两个卷积神经网络得到的字词向量和方面词向量进行拼接建模,得到拼接建模向量;

    步骤八、利用LSTM神经网络,将步骤七得到的字词向量和方面词向量的拼接建模向量输入到LSTM中,利用LSTM的时序记忆功能对文本的特征进行排序,得到隐藏层当前的隐状态H;

    步骤九、LSTM输出的隐层表示与主题aspects向量拼接后作为输入,经过一层神经网络得到的新的隐层表示,给当前的隐状态添加注意力机制,通过自动加权的方式决定输入文本需要关注的部分,分别得到句子向量的概率分布;

    步骤十、最终的句子向量经过softmax函数判断情感类别的概率,得到情感结果。

    优选地,步骤三中,在进行词向量训练的时候,将词语中把组成词语的汉字单独抽取出来和词语一起进行训练,使那些共享汉字的词语之间产生了联系,词语中的汉字对词语的意思具有一定的表征作用。

    本发明主要是利用两种新型的向量嵌入,分别是:(1)字词向量联合嵌入表示,(2)词向量和方面词联合嵌入表示。并且将二者同时输入卷积神经网络获取主要特征向量,利用LSTM的时序记忆功能对文本特征进行排序,并且添加基于方面词的注意力机制进一步提高情感分类的准确率。属于自然语言处理与人工智能交叉领域。

    附图说明

    图1为本发明实施的流程算法;

    图2为本发明实施深度神经网络模型。

    具体实施方式

    下面结合具体实施例,进一步阐述本发明。应理解,这些实施例仅用于说明本发明而不用于限制本发明的范围。此外应理解,在阅读了本发明讲授的内容之后,本领域技术人员可以对本发明作各种改动或修改,这些等价形式同样落于本申请所附权利要求书所限定的范围。

    本发明提供的一种中文字词向量和方面词向量联合嵌入情感分析方法包括如下步骤:

    步骤一:载入中文商品评论语料库,并将语料库按比例进行分割,分为训练集和测试集。

    步骤二:利用jieba分词工具对训练集和测试集分别进行分词处理。

    步骤三:利用神经网络模型进行字词向量联合预训练,得到词语的初始化词向量和汉字的初始化字向量表示,即得到字词向量联合嵌入表示。在进行词向量训练的时候,讲词语中把组成词语的汉字单独抽取出来,和词语一起进行训练。这样就使那些共享汉字的词语之间产生了联系,词语中的汉字对词语的意思具有一定的表征作用。

    步骤四:利用LDA模型对主题(aspects)进行建模,提取商品评论中的方面词,并且线性的将方面词与词向量结合,得到词向量和方面词联合嵌入表示。应用主题模型算法(LDA)抽取评论分布的主题特征,得到主题特征,即此时需要的方面词。并将方面词和评论中的词向量线性组合,一起输入神经网络训练,这样方面词可能提高此时评论内容主题情感判断的准确度。

    步骤五:将步骤三中得到的字词向量联合嵌入输入到卷积神经网络提取出不同维度的特征,然后经过池化操作得到字词向量联合嵌入低维特征向量。采用卷积神经网络通过不同的滤波操作得到特征信息,通过权值共享和最大池化操作,可以将这些复杂的特征信息充分的提取出来,也可以为接下来情感分类步骤有效的减少计算量。

    步骤六:将步骤四中得到的词向量和方面词联合嵌入输入到卷积神经网络提取出不同维度的特征,然后经过池化操作得到词向量和方面词联合嵌入低维特征向量。采用卷积神经网络通过不同的滤波操作得到特征信息,通过权值共享和最大池化操作,可以将这些复杂的特征信息充分的提取出来。此时方面词信息作为最大的特征信息,已经有效的通过卷积神经网络提取出来,为接下来步骤中融入attention机制铺垫,有效的提升情感极性分类的准确度。

    步骤七:将步骤五得到的字词向量联合嵌入低维特征向量和步骤六得到的词向量和方面词联合嵌入低维特征向量组合加权。即分别将两个卷积神经网络得到的字词向量和方面词向量进行拼接建模。建模完成后作为输入层输入到LSTM神经网络中。

    步骤八:利用LSTM神经网络,将步骤七得到的字词向量和方面词向量进行拼接建模向量输入到LSTM中,利用LSTM的时序记忆功能对文本的特征进行排序,得到隐藏层当前的隐状态H。标准的LSTM无法检测句子每个部分的重要程度,通过加入attention机制,可以捕捉句子的关键部分。

    LSTM是循环神经网络的一种,是一种具有链状结构的特殊的循环神经网络,和普通的循环神经网络相比,LSTM的重复循环模块具有不同的结构,主要有四层神经网络组成,网络层之间的交互是复杂的。LSTM网络的核心是由每个传输单元的状态决定。LSTM的另一个优势就是可以对单元状态中信息的传输进行控制,并通过门限结构管理信息,门限的作用就是对信息进行选择,使其有选择性地通过。阈值的组成主要有sigmoid神经网络层和逐点乘法组成。输出表示信息传递的选择程度,0表示不允许任何信息通过,1表示都可以通过。LSTM一共有三个门限,分别为:输入门、遗忘门和输出门。通过这三种门限结构对单元状态进行控制和保护。

    步骤九:LSTM输出的隐层表示与aspect向量拼接后作为输入,经过一层神经网络得到的新的隐层表示,给当前的隐状态添加注意力机制,通过自动加权的方式决定输入文本需要关注的部分,分别得到句向量的概率分布。

    步骤十:最终的句子向量经过softmax函数判断情感类别的概率,得到情感结果。

    展开全文
  • Word Embeddings 基于TF-IDF 和 PPMI 的词向量是长而稀疏的,不利于存储和计算,现在常用的词向量是短而稠密的 Word Embeddings: short (length 50-1000) dense (most elements are non-zero) Word Embeddings ...

    小叽导读:13年 Word2vev 横空出世,开启了基于 word embedding pre-trained 的 NLP 技术浪潮,6年过去了,embedding 技术已经成为了 nn4nlp 的标配,从不同层面得到了提升和改进。今天,我们一起回顾 embedding 的理论基础,发现它的技术演进,考察主流 embedding 的技术细节,最后再学习一些实操案例。

    从实战角度而言,现在一般把 fastText 作为 word embedding 的首选,如果需要进一步的上下文信息,可以使用 ELMo 等 contextual embeddings。从18年开始,类似 ULMFiT、Bert 这样基于 pre-trained language model 的新范式越来越流行。

    Sentence embedding 方面,从15年的 Skip-Thought 到18年的 Quick-Thought,无监督 pre-trained sentence embedding 在工业界越来越多的得到使用。

    技术点脑图如下:

    Vector Semantics

    词语义从语言学角度讲可以细分为不同方面:

    同义词 (Synonyms): couch/sofa, car/automobile

    反义词 (Antonyms): long/short, big/little

    词相似性 (Word Similarity):cat 和 dog 不是同义词,但是它们是相似的。

    词相关性 (Word Relatedness):词和词之前可以是相关的,但不是相似的。coffee 和 cup 是不相似的,但是它们显然是相关的。

    语义域/主题模型(semantic field/topic models LDA): 一些词同属于某个 semantic domain,相互之间有强相关性,restaurant(waiter, menu, plate, food, chef),

    house(door, roof, kitchen, family, bed)

    语义框架和角色(Semantic Frames and Roles): 一些词同属于某个事件的角色,buy, sell, pay 属于一次购买的不同角色。

    上/下位词(hypernym/hyponym):一个词是另一个词的父类叫上位词(hypernym),反之叫下位词(hyponym), vehicle/car, mammal/dog, fruit/mango。

    情感/情绪/观点/评价词(connotations, emotions, sentiment, opinions):正负向情绪词happy/sad,正反向评价词(great, love)/(terrible, hate)。

    一个完美的 Vector Representation 是希望能刻画上面词语义的各个层面,但是显然是不现实的。到目前为止用于表示词语义最成功的模型是 Vector Semantics,它是 word embedding 技术的基础。Vector Semantics 有两部分组成:

    distributional hypothesis(所有语义向量的理论基础):Words that occur in similar contexts tend to have similar meanings,define a word by its distribution in texts。

    defining the meaning of a word w as a vector, a point in N-dimensional semantic space, which learns directly from their distributions in texts.

    使用 Vector 表示词语义,可以更加方便地计算 word similarity。

    Co-occurrence Matrix and Basic Vector Semantics models

    Vector Semantics Models 通常基于共现矩阵(co-occurrence matrix)构建,共现矩阵用来表示元素的共现规律,其实就是上文提到的 distributional hypothesis 的具体实现。根据元素的不同,主要有两种 co-occurrence matrix:Term-document matrix(多用于检索)和 word-word matrix (多用于词嵌入)。

    ■ Term-document matrix and TF-IDF model

    Term-document matrix:每一行是 vocabulary 中的一个词,每一列是文章集合中的一篇文章,每一个值代表该词(row)在该文章(column)中出现的次数。文章就可以表示成 column vector,两篇文章出现的词类似一般比较相似(all sports docs will have similar entries):

    Term-document matrix 在信息检索中使用比较多,用于寻找相似文章,但是基础的 Term-document matrix 有一个问题,直接使用共现次数那些高频出现的无意义词(stopwords)会有很大的权重,所以需要引入 TF-IDF model。

    TF-IDF(term frequency–inverse document frequency) 是 NLP 的基础加权技术,也是信息检索中主流的共现矩阵加权技术。它用于刻画一个词对于一篇文章的重要性,主要思想是某个词在一篇文章中出现的频率 TF 高,并且在其他文章中很少出现,则认为此词具有很好的类别区分能力。公式如下:

    所以可以改进 Term-document matrix 成 TF-IDF weighting matrix,抑制那些非常高频出现的无意义词(比如 good):

    实战话外音:计算 corpus 的各个 tfidf 值,直观的思路是先统计构建 Term-document matrix 然后计算 TF-IDF weighting matrix。

    ■ Word-word matrix and PMI model

    word-word matrix:和 Term-document matrix 类似,只是每一列变成 context word,每一个 cell 代表目标词(row)和 context 词(column)在语料中共现的次数。其中的 context 往往是这个词周围的一个窗口。word-word matrix 常常用于 count-based word embedding 的计算,能很好地捕捉 syntactic/POS 信息(小的 context 窗口)和 semantic 信息(大的 context 窗口):

    点互信息(Pointwise Mutual Information, PMI)是 NLP 中最重要的基础概念之一,能有效刻画两个词之间是否强相关( strongly associated ),计算的是在语料库中两个词共同出现的次数多于我们先验期望它们偶然出现的概率:

    实际中常使用下面的 Positive PMI(PPMI):

    word-word co-occurrence matrix 可以改写成 PPMI matrix,使用下面的公式:

    第一步把词共现次数改成下面的联合概率:

    第二步计算 PPMI 值,PPMI matrix 能很好地刻画词和词之间的关联性:

    ‍‍基础的 PPMI 公式有一个问题,会给予低频词很大的 PMI 值(分母越小值越大)。一个常用的办法是微调 p(c) 的计算逻辑,从而缩小低高频词之间的概率差距,其中α=0.75:

    关联思考:对于一个数字集合,softmax 是让大者更大,p(c) 是常规求概率,则是缩小大小数字之前的差距,下文会提到的 Negative sampling 技术也用到了这个。

    用 word-word co-occurrence matrix 产生的 vectors 有几个问题,高纬度、稀疏和模型不鲁棒。简单的方式可以做 co-occurrence matrix 的奇异值分解 (Singular Value Decomposition) 获得 Low dense dimensional vectors:

    代码示例:

    U, s, Vh = np.linalg.svd(X, full_matrices=False)

    实战话外音:计算 corpus 中各个词对的 PMI 值,直观的思路是先统计构建 word-word matrix 然后转换成联合概率矩阵,最后计算 PPMI matrix,如果想要用 vector 可以用 SVD先降维。

    Word Embeddings

    基于TF-IDF 和 PPMI 的词向量是长而稀疏的,不利于存储和计算,现在常用的词向量是短而稠密的 Word Embeddings:

    short (length 50-1000)

    dense (most elements are non-zero)

    Word Embeddings 基于 Vector Semantics 的理论基础:distributional hypothesis, a word’s meaning is given by the words that frequently appear close-by。

    It should learn to encode similarity in the vectors themselves。词嵌入的编码目标是把词相似性进行编码,所有优化的目标和实际的使用都围绕在 similarity 上。

    这里澄清两个术语:

    distributional representations: 代表了 distributional hypothesis 的思想,反面是类似 WordNet 地直接从独立的词构建关系。

    distributed representations:代表了词用 vector 表示,词含义分散在每个维度上,反面是 one-hot vector,只有一个离散的值。

    Word2vec

    最经典的词嵌入 Word2vec(Mikolov et al. 2013) 是一个计算词向量的框架,主要思想是:

    准备一个非常大的文本语料 corpus;

    每一个 vocabulary 中的词都表示成一个定长 vector;

    遍历 corpus 中的每个位置为 t的词,center word 为 c,context words 为 o

    基于词向量相似度,计算条件概率;

    不断调整词向量来最大化这个条件概率。

    ■ Objective Function

    Word2vec 的目标函数是 negative log likelihood:

    训练目标是最小化objective function,条件概率使用cosine similarity加softmax转成概率分布:

    其中o/c是vocabulary中的索引,根据c去预测o的概率是Word2vec的prediction function:

    ■ Train Word2vec

    Word2vec 模型包含的可训练参数如下:

    训练 Word2vec 需要计算所有 vector 的梯度:

    计算的偏导,先进行分解原式为2个部分:

    部分1推导:

    部分2推导:

    所以,综合起来可以求得,单词 o 和单词 c 的上下文概率对center向量的偏导:

    可以看到优化目标是让实际 向量逼近所有可能 context vector 的期望向量。

    实际训练的一些建议:

    每个词对应两个 vector 是为了优化方便,最后把两个vector取平均作为最终的词向量;

    原始 paper 有两种模型:

    Skip-grams (sg):用中心词预测周围词,sg比cbow 能更好地处理生僻字。

    Continuous Bag of Words (cbow):用周围词预测中心词,cbow比sg训练快。

    softmax 里面的分母部分 normalization factor 计算非常耗时,paper 中使用Negative sampling,用 logistic regressions 训练一个二分类区分真实的(center word, context word)词对和随机采样构造的假的(center word, random non-context word)词对,公式如下:

    改成和前文一致的 negative 形式:

    k个负采样词服从概率分布

    (Z指归一化)。修改词频概率分布

    ,是为了提高低频词被采样到的可能性,和PMI章节的优化技术有异曲同工之妙。

    实战话外音:训练 Word2vec,直观的思路是先从 corpus 中准备所有的词对包括有效的(c,o)和负采样到的(c,random),然后基于 cosine similarity 计算 loss function,再用 sgd 优化参数,最好把 center 和 context vectors 取平均作为最终的 embedding。

    Other Improved Embeddings

    ■ GloVe: Count-based plus Prediction-based

    Word embedding 的计算方式可以分成 count-based (PMI matrix) 和 prediction-based (Word2vec)。

    两者各有优点,count-based 充分利用了全局统计信息,训练也比较快,而 prediction-based 更能胜任海量数据,能捕捉更多词相似性之外的pattern。

    其实两者之间有很强的内在关联性,毕竟理论基础都是 distributional hypothesis,Skip-gram 模型的 center word matrices WW 和 context word matrices CC 点乘后的矩阵可以因式分解成 PMI matrix 减去一个和负采样数kk相关的常量(Levy and Goldberg 2014):

    Stanford 提出的 GloVe vector 结合 count-based 和 prediction-based 方法的优点,核心观点是共现条件概率的比率能更显著体现词的相似性:

    共现条件概率的比率可以表示成词向量空间的一个线性表示:

    最后的loss function是:

    关联思考:在有相互比较的场景中,很多时候具体的值意义不大,但是对比的 ratio更具统计意义。GloVe 的核心思想基础是这个,非常 strong 的 baseline tfidf 的优化版统计一个词对一个类别的重要性的特征提取算法NBSVM也是如此。

    ■ FastText:Sub-word Embeddings

    前面的 Embedding 产生方式都忽略了词的词形变化,每个词都是独立的 vector,对于处理 OOV 无能为力。FastText 是 Skip-gram 的改进版,使用 sub-word 信息,每个词都会表示成 bag of character n-grams,最终的词向量是各个 gram embedding 的求和。

    比如 where(n=3) 表示成加上词本身,分别代表词的开始和结束,用于区分子序列的位子。n-grams 集合中,一般使用3-6的 n-grams,需要说明的是和 tri-gram 的 her 是不同的。FastText 的优点是训练速度非常非常快,效果比 Word2vec 好,同时也可以计算 OOV 词的词向量,可以作为项目启动的第一候选词向量。

    Evaluating Embeddings

    ■ Intrinsic vs extrinsic

    词向量评估分为内在评估(Intrinsic)和外在评估(extrinsic),外在评估需要放到各种下游任务中去看实际效果,使用方式有 fixed pre-trained,fine-tuned pre-trained,multichannel 或者 concatenation 等,详见 textcnn paper。内在评估主要有几种:

    (1)Analogy:通过直观的语义类比问题评估,寻找 x 满足"a is to b, as x is to y"

    (2)通过可视化评估,常用技术有 PCA 和 t-SNE(non-linear projection)

    pca 和 t-SNE 的效果对比:

    (3)Categorization: 对训练好的 embeddings 聚类,根据标准分类集合或者人工验证,看每个聚类类别的好坏。

    ■ When are Pre-trained Embeddings Useful?

    简单来讲,当对特定任务的训练语料比较匮乏的时候更加有用,具体如下:

    非常有用:tagging, parsing, text classification

    不太有用:machine translation

    基本没用:language modeling

    Sentence Embeddings/Encoder

    Sentence Embeddings 和 Word Embeddings 非常类似,训练方式也可以粗略分为基于纯统计的 bag-of-words models 和基于句子维度的 distributional hypothesis 的 NN models。Sentence Representation 的作用:

    Sentence Classification 文本分类的特征输入;

    Paraphrase Identification 判断段落是否相似;

    Semantic Similarity 两个句子语义是否相似;;

    Natural Language Inference Entailment/Contradiction/Neutral;

    Retrieval 基于句向量的相似性检索。

    Baseline Bow Models

    Sentence Embedding 句嵌入的基础模型可以是上面提到的类似 TF-IDF weighting matrix 的基于统计的词袋模型,也可以是基于词向量的词袋模型。词向量的加权方式一般遵循一个准则:越常见的词权重越小。这里简单介绍一种,SIF(Smooth Inverse Frequency),一个简单但有效的加权词袋模型,其性能超过了简单的 RNN/CNN模型。SIF 的计算分为两步:

    对句子中的每个词向量,乘以一个权重

    ,其中 a 是一个常数(常取0.0001),p(w) 为全局语料中该词的词频,对于出现频率越高的词,其权重越小。

    计算句向量矩阵的第一个主成分 u,让每个句向量减去它在 u 上的投影(类似 PCA);

    完整算法流程如下:

    SIF 移除了和句义不太相关的高频词和句法结构,保留了对句义信息贡献最大的部分。

    Skip-Thought

    Skip-Thought Vector 使用类似 Word2vec/ 语言模型的思想,Sentence Embedding作为模型的副产品。给定一个三元组 表示3个连续的句子。模型使用 Encoder-Decoder 框架,训练时,由Encoder对进行编码,然后分别使用两个Decoder生成前一句和下一句,如下图:

    的 Decoder 是给定条件(

    的句子表示)的语言模型,每一个词的概率:

    Quick-Thought

    Quick-Thought 是 Skip-Thought 的升级版,上面给定一句话生成上一句和下一句的任务,被重新描述为一个分类任务:Decoder 作为分类器从一组候选句子中选择正确的上一个/下一个句子。Skip-Thought 可以理解为生成模型:

    Quick-Thought 则是一个分类模型:

    Skip-Thought 会被训练成去重构目标句子的表层结构(词的具体组合形式),导致模型不仅仅学会了预测句子语义,同时也预测了和语义无关的句子具体组成形式。同样的语义句子的表达可以有很多种,甚至表层结构完全不相似,这样的句子 Skip-Thought 模型就会认为不相似。

    Quick-Thought 则是把 loss function 直接定义在句子向量化后的语义空间,比Skip-Thought 直接定义在 raw data space 的效果更好,优化的目标更加聚焦。loss function 和 Skip-gram 模型类似,负采样之后,都是直接用 cosine similarity 定义相似度,用 softmax 归一化,只不过是多分类:

    顶层分类器的简化,是为了让底层 encoder 更多地学到和语义有关的表征。It should learn to encode similarity in the vectors themselves。可以很清楚的看到,Quick-Thought 是一个通用的句向量学习框架,原文底层 encoder 使用的 GRU,也可以换成别的,比如 Transformer 来增加表征能力。在实际预测阶段,把底层两个encoder 的输出拼接在一起作为最终的句向量表示:

    在我们实际工作中,也常用 Quick-Thought,因为它还有一个优点是训练速度比 Skip-Thought Vector 快很多,后者需要训练3个 RNN 模块。具体的一些实现细节:

    batch_size=400,即一个 batch 为400个连续的句子;

    context_size=3,即对给定句子,其上一句和下一句被认为是相似的(句子维度的distributional hypothesis);

    负采样:同一 batch 中除上下文句子外,均作为负例,实验证明这样简单的策略和其他常见随机负采样等策略效果类似;

    词向量或者整个 encoder 都可以使用 pre-trained,来加快训练速度。

    Other Sentence Embeddings

    上面提到的无监督通用句向量训练方式在工业界更加方便落地,学术界还有一些基于 supervised learning(InferSent) 和 multi-task learning(GenSen) 的句向量模型,性能能有一些提升,但是训练的数据并不是那么容易获得,一般可以使用迁移学习在工作中落地,这里简单介绍一下比较经典的几个。

    ■ InferSent (Facebook)

    InferSent 使用有监督的方法,在自然语言推理 (NLI) 数据集上训练 Sentence Embedding。paper 也证明了从 NLI 数据集上训练得到的句向量也适合迁移到其他 NLP 任务中。

    在 NLI 任务中,每个样本由三个元素构成

    ——其中 u 表示前提(premise),v 表示假设(hypothesis),l 为类标(entailment 1, contradiction 2, neutral 3),每个样本的 u 和 v 的地位不是等价的。InferSent 的网络结构如下:

    sentence encoder 可以根据具体需求选择,底层共享 encoder,输入 premise 和hypothesis 分别输出句子表征 u 和 v,然后使用匹配模型中非常常见的3种方式抽取两者之前的关系:向量拼接 (u,v) element-wise 相乘 u∗v,element-wise 相减取绝对值|u−v|。最后是一个三分类分类器,预测对应 l 的值。

    ■ GenSen (Microsoft)

    GenSen 的核心思想是为了能够推广到各种不同的任务,需要对同一句话的多个方面进行编码。简单来说,模型同时在多个任务和多个数据源上进行训练,但是共享相同的 Sentence Embedding。任务及数据集包括:

    Skip-Thought(预测上一句/下一句)—— BookCorpus

    神经机器翻译(NMT)—— En-Fr (WMT14) + En-De (WMT15)

    自然语言推理(NLI)—— SNLI + MultiNLI

    Constituency Parsing ——PTB + 1-billion word

    基础模型和 Skip-Thought Vector 类似,Encoder 部分为了速度使用 Bi-GRU,而Decoder 部分完全一致。

    SemAxis: Synonym Expansion

    训练获得 pre-trained 的词向量或者句向量之后,一个直接的应用是通过向量相似度来寻找近义词/近义句。这里介绍一种简单有效的近义词扩展方法 SemAxis (ACL 2018):

    准备 pre-trained 词向量;

    在词向量空间中,通过语义种子词词向量计算 semantic axis vector,

    代表正向词,

    代表负向词:

    在词向量空间中,映射其他词词向量

    到计算的 semantic axis

    上:

    方法示意图如下:

    在我们实际工作中用来扩展情感词效果如下,圈起来的是种子词,其他为扩展的:

    Reference:

    Books and Courses

    Jurafsky, Dan. Speech and Language Processing (3rd ed. 2019)

    CS224n: Natural Language Processing with Deep Learning, Winter 2019

    CMU11-747: Neural Nets for NLP, Spring 2019

    Goldberg, Yoav. Neural Network Methods for Natural Language Processing. (2017)

    Word Embedding Papers

    Tomas Mikolov, et al.: Efficient Estimation of Word Representations in Vector Space, 2013. (original Word2vec paper)

    Tomas Mikolov, et al.: Distributed Representations of Words and Phrases and their Compositionality, NIPS 2013. (negative sampling paper)

    Bojanowski, Piotr, et al. "Enriching word vectors with subword information." Transactions of the Association for Computational Linguistics 5 (2017): 135-146. (original fastText paper)

    Jeffrey Pennington, et al.: GloVe: Global Vectors for Word Representation, 2014. (original GloVe paper)

    Matthew E. Peters, et al.: Deep contextualized word representations, 2018. (original ELMo paper)

    Faruqui, Manaal, and Chris Dyer. "Improving vector space word representations using multilingual correlation." Proceedings of the 14th Conference of the European Chapter of the Association for Computational Linguistics. 2014.

    Schnabel, Tobias, et al. "Evaluation methods for unsupervised word embeddings." Proceedings of the 2015 Conference on Empirical Methods in Natural Language Processing. 2015.

    Levy, Omer, and Yoav Goldberg. "Neural word embedding as implicit matrix factorization." Advances in neural information processing systems. 2014.

    Arora, Sanjeev, et al. "A latent variable model approach to pmi-based word embeddings." Transactions of the Association for Computational Linguistics 4 (2016): 385-399.

    Yin, Zi, and Yuanyuan Shen. "On the dimensionality of word embedding." Advances in Neural Information Processing Systems. 2018.

    Wang, Sida, and Christopher D. Manning. Baselines and Bigrams: Simple, Good Sentiment and Topic Classification; ACL 2012.

    An, Jisun, Haewoon Kwak. "SemAxis: A Lightweight Framework to Characterize Domain-Specific Word Semantics Beyond Sentiment." (ACL 2018)

    Sentence Embedding Papers

    Arora, Sanjeev, Yingyu Liang, and Tengyu Ma. "A simple but tough-to-beat baseline for sentence embeddings." (ICLR 2016, original SIF paper)

    Kiros, Ryan, et al. "Skip-thought vectors." Advances in neural information processing systems. 2015. (original Skip-Thought paper)

    Lajanugen Logeswaran, Honglak Lee, An efficient framework for learning sentence representations. (ICLR 2018, original Quick-Thought paper, code)

    Conneau, Alexis, et al. "Supervised learning of universal sentence representations from natural language inference data." (ACL 2017, original InferSent paper)

    Subramanian, Sandeep, et al. "Learning General Purpose Distributed Sentence Representations via Large Scale Multi-task Learning." (ICLR 2018, original GenSen paper)

    Blogs

    Universal Word Embeddings and Sentence Embeddings

    awesome-sentence-embedding (up-to-date)

    展开全文
  • 向量在网络上已经有了大量的文章,但是,出于我们专栏的完整性系统性的考虑,笔者还是决定加上这样一个专题。计划用3-4次,彻底说清楚在自然语言处理中,词向量的由来,本质和训练。公众号专栏主要讲基本原理,...
  • 本节课程主要讲解的是词向量和Elmo。核心是Elmo,词向量是基础知识点。Elmo 是2018年提出的论文 《Deep contextualized word representtations》,在这篇论文中提出了很重要的思想Elmo,Elmo 是一种基于特征的语言...
  • 动态词向量算法—ELMo

    2020-12-19 17:10:05
    传统的词向量模型,例如 Word2Vec 和 Glove 学习得到的词向量是固定不变的,即一个单词只有一种词向量,显然不适合用于多义词。而 ELMo 算法使用了深度双向语言模型 (biLM),只训练语言模型,而单词的词向量是在输入...
  • 本文以QA形式对自然语言处理中的词向量进行总结:包含word2vec/glove/fastText/elmo/bert。2020年更新:NLP预训练模型的全面总结JayLou娄杰:史上最全!PTMs:NLP预训练模型的全面总结​zhuanlan.zhihu.com目录一、...
  • 输入的是one-hot向量,C就是通过查找矩阵C(词典中词语个数*向量维度)这样一个大小的矩阵将One hot的向量进行编码,注意这个C一开始是随机初始化的,中间的tanh层是包含K个上下文词语的embedding向量拼接,...
  • [1]Feng M,Xiang B,Glass M R,et al.Applying deep learning to answer selection:A study and an open task[C]//Proceeding of Automatic Speech Recognition and Understanding (ASRU),2015 IEEE Workshop on.IEEE...
  • 合并词向量预训练模型和自训练模型,其中的tokenizer来自上一篇文章。importnumpyasnpimportcodecsEMBEDDING_FILE='../glove.6B/crawl-300d-2M.vec'EMBEDDING_TRAIN='../glove.6B/vectors_train.txt'embed_size=300#...
  • oneVector2 = pd.DataFrame(data =np.random.random...按照“行”进行拼接: ccc = pd.concat([oneVector1,oneVector2],axis =0,ignore_index = True) 如何对列进行拼接呢? ccc = pd.concat([oneVector1,...
  • 如何融合深度学习特征向量

    千次阅读 2021-01-18 21:30:00
    文 | 土豆@知乎 本文已获作者授权,禁止二次转载 前言 在深度学习中,经常会存在需要特征融合的地方[1],而最基本的融合方法无非是:(1) 按点逐位相加(point-wise addition) 和 (2) 进行向量拼接(concatenate)。...
  • numpy数组拼接简单示例

    千次阅读 2021-01-16 20:07:42
    数组拼接方法一 思路:首先将数组转成列表,然后利用列表的拼接函数append()、extend()等进行拼接处理,最后将列表转成数组。 示例1: >>> import numpy as np >>> a=np.array([1,2,5]) >>> b=np.array([10,12,15])...
  • PyTorch中Tensor的拼接 PyTorch中Tensor的拼接方法:torch.cat() 、torch.stack() 【小提示:代码得到下面的图】 torch.cat() 我们用图+代码来举例 import torch x1 = torch.randn(1, 3) x2 = torch.randn(1, 3) ...
  • I need to multiply each matrix column by each vector element using Eigen C++ library. I tried colwise without success.Sample data:Eigen::Matrix3Xf A(3,2); //3x2A << 1 2,2 2,3 5;...
  • 1. 前言最近几天都耗在了词向量的训练以及可视化上,期间遇到了一些坑,也了解到一些容易忽略的知识点,在此一并记录下来,给自己也给大家一个警示。2. keras中的TensorBoardTensorBoard作为keras中回调函数...
  • ----------------------------大纲--------------------------1 随着模型不断更新2 直接使用预先训练好的词向量如word2vec, glove--------------------------------------------------------------省去数据读取以及...
  • 这篇文章主要介绍了numpy数组拼接简单示例,涉及对numpy数组的介绍,numpy数组的属性等内容,具有一定借鉴价值,需要的朋友可以参考下。NumPy数组是一个多维数组对象,称为ndarray。其由两部分组成:·实际的数据·...
  • 1.向量 >> a=[1,2,3]; >> b=[4,5,6]; >> c=[a;b] c = 1 2 3 4 5 6 >> d=[a,b] d = 1 2 3 4 5 6 2.矩阵 >> e=[1 2;3 4]; >> f=[5 6;7 8]; >> g=[e;f] g =
  • 如何堆叠形状n的逐列(x,)向量,其中x可以是任何数字?例如,from numpy import *a = ones((3,))b = ones((2,))c = vstack((a,b)) # c = vstack((a[:,newaxis],b[:,newaxis])) #hstack可以正常工作,但是沿着错误的...
  • 你在找^{}和^{}。(想想“column stack”和“row stack”(它们也是函数),但是使用的是matlab风格的范围生成。)另见^{}、^{}、^{}、^{}、np.row_stack、np.column_stack等例如:import numpy as npm = np.zeros((10, ...
  • 如何将n个矩阵化为列向量再合并

    千次阅读 2021-04-22 02:51:59
    p1=[1.13,1.45,1.23,1.58,1.34,2.34,2.34,2.23,2.12,2.56;... 这是我的数据,我该如何将这10个矩阵先分别化为100*1的列向量,再将列向量合并为100*10的矩阵呢?想利用循环,因为这只是一部分数据,还有很多的数据
  • Verilog 位拼接运算符{}语法要点总结

    千次阅读 2021-05-08 11:36:45
    Verilog 位拼接运算符语法要点总结Verilog位拼接运算符{}语法回顾要点总结 Verilog位拼接运算符{}语法回顾 verilog中{}运算符用于“拼接”多个变量或者常量,基本用法如下: 1、变量的拼接 wire a[3:0], b[4:0]; ...
  • torch维度拼接

    2021-07-12 17:09:42
    Torch里有单独的拼接函数 torch.cat torch.cat(inputs,dim=0)->Tensor 在给定维度上对输入的张量进行连接操作。 参数: inputs (sequence of Tensors) – 可以是任意相同Tensor 类型的python 序列 ...
  • 用Bert生成中文的字、词向量

    千次阅读 2020-12-24 16:07:20
    中文字、词Bert向量生成 利用Bert预训练模型生成中文的字、词向量,字向量是直接截取Bert的输出结果;词向量则是把词语中的每个字向量进行累计求平均(毕竟原生Bert是基于字符训练的),Bert预训练模型采用的是科大...
  • , -1)) # 沿着最后一个维度即沿着列做堆叠,返回3*4*3的张量 print(torch.stack([a1,a2,a3],0)) # 沿着第一个维度即沿着行做堆叠,返回3*3*4的张量 print(torch.cat([a1,a2,a3,a4],-1)) # 沿着最后一个维度做拼接,...
  • eigen Dense矩阵拼接

    2020-12-20 14:39:15
    矩阵拼接报错:/usr/include/eigen3/Eigen/src/Core/Block.h:141: Eigen::Block::Block(XprType&, Eigen::Block::Index, Eigen::Block::Index, Eigen::Block::Index, Eigen::Block::Index) [with XprType = ...
  • VHDL代码中数据拼接过程

    千次阅读 2021-01-12 09:25:38
    判断各个数据的位宽 w_e_data_func_par 为[0:77],w_e_data_func为[0:63],w_e_parity为[0:7],000000 全都转换为二进制 w_e_data_func为[0:63]:0000 0000 0000 0000 0000 0000 ...二级制拼接 0000 0000 0000 0...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 27,566
精华内容 11,026
关键字:

向量拼接