精华内容
下载资源
问答
  • 向量语义模型

    2021-02-05 12:43:14
    上下文(context)对于计算词(word)的相关性来说是一个很重要的概念。出现在相似上下文的词更倾向具有相似的含义。词的分布相似性和含义相似性之间的关联称为分布假设(distributional ...本文重点阐述向量语义(vector s

    上下文(context)对于计算词(word)的相关性来说是一个很重要的概念。出现在相似上下文的词更倾向具有相似的含义。词的分布相似性和含义相似性之间的关联称为分布假设(distributional hypothesis)。这个假设是于19世纪50年代语言学家们提出来的。他们发现同义词(如oculist和eye-doctor)更容易出现在相同环境中(附近的词如eye和examined)。并且(Harris,1954)认为两个词间的含义差异值大致等于其环境中的差异值。

    本文重点阐述向量语义(vector semantics)模型,通过从文本的分布中直接学习词义表示来实现分布假设。词表示(word representation)也是表示学习(representation learning)的一个例子,从输入文本中无监督地自动学习有用的表示,而不是借助特征工程(feature engeneering)手动创建这些表示。尽管特征工程也是近年来NLP研究的一个重要关注点。这种表示方法可以用在所有利用语义的NLP应用中,并且是更强大的contextualized word representations如ELMo和BERT的基础。下面首先介绍中词义(word sense)的本质是什么,从而更好理解向量语义(vector semantics)模型及其拓展。

    Mind Map

    所有NLP任务的首要共同点是我们将词进行表示作为模型的输入。大量早期的NLP工作都是将词看作原子性的符号。为了使NLP任务表现的更好,我们首先表示词之间的相同和不同。而通过词向量(word vectors/word embeddings)就可以很好的刻画出来。下面是本文所述内容(由于篇幅原因,除阴影部分外)。
    在这里插入图片描述

    Lexical Semantics

    **在许多传统的NLP应用中,单词的唯一表示形式是字符串,或者是词汇表中的索引。**这种表达方式与哲学中的传统并没有太大的不同,也许在逻辑入门课上见过,单词的意思通常只是用大写字母拼写单词;表示“dog”是DOG,“cat”是CAT的意思)。但是这远远不够,我们需要一个词义模型来刻画词义之间的关系,从而帮助处理含义相关(meaning-related)的工作,比如问题回答(question-answersing)、总结(summarization)、释义(paraphrase)、抄袭检测(plagiarism)和对话(dialogue)等。

    本部分详细地从语言学的角度去了解词义(word meaning)的相关研究结果,也就是lexical semantics。如果觉得本部分对于自己可以不用去了解,可以只粗看本部分列出的标题或者直接跳过就可以了。

    1. Lemmas and Senses
      mouse: 词条(lemma or citation form)
      mice: 词条的特殊形式如单复数、过去式等称为单词形式(wordforms)
      rodent/cursor control device: 一个词条可有多个词义(word sense)
    2. Relationships between senses
      同义词(synonyms): 我们都知道含义相同或基本相同为同义词。语言学中更正式的定义是两个词在任意句子中可相互替代且不改变句子的真值,则这两个词具有相同的命题含义(propositional meaning)。但事实上没有含义绝对相同的两个词。语义学中的一个基本原则叫对比原则(principle of contrast):语言形式的差异至少与含义上的差异有关。比如 H 2 H_2 H2O虽然和water都是“水”的意思,但前者更多用于科学资料中,用在某份远行指南中就不合适了。因此我们常说的同义词只是去通常描述词义大致相同的情况。
      反义词(antonym)
      上义词(hypernym)
      下义词(hyponym):和上义词一起,其实描述的是一种IS-A的词等级关系。
    3. Relationships between words
      ♦ Word Similarity
      尽管词没有很多同义词,但是大多数词都有很多相似词(similar words)。比如cat和dog虽然不是同义词但是却是相似词。从同义词到相似性,从讨论词义之间的关系(如同义词)到讨论词与词之间的关系(如相似性)是很有帮助的。处理单词时避免了对词义的特定表示,这将简化我们的任务。从词相似性到短语相似性到句子相似性,这对处理大型的语义任务是很有帮助的。
      词相似性描述共有某些特征(share some features)的词。
      比如在SimLex-999数据集中(Hill,2015)给出了0-10的范围值来判定词相似度。
      ♦ Word Relatedness
      词关联性描述
      共同出现在同一语境中或相同语义场(co-participate in a shared environment or the semantic field)中

      一个semantic field是一组包含特定语义域的词,它们之间具有结构化关系。比如hospital的语义场包含的词有surgeon、nurse、scalpel等。
      一个semantic frame是一组表示特定类型事件中的角度或语义框架参与者的单词。比如commercial transaction的semantic frame中包含的词有buyer、seller、goods、money等。
    4. Connotation
      即情感含义(affective meaning)。
      早期关于情感含义的研究(Osgood,1957)发现,词汇在情感含义的三个重要维度上是不同的——valence、arousal和dominance,定义如下:
      valence: the pleasantness of the stimulus
      arousal: the intensity of emotion provoked by the stimulus
      dominance: the degree of control exerted by the stimulus
      另外,Osgood还提出一个很有进展性的想法————可以用一串数字表示词的含义,并且可以表示为空间中的一个点。
      在这里插入图片描述

    Vector Semantics

    如何建立一个计算模型,成功地处理我们在上一部分中看到的单词含义的不同方面(word senses、word similarity and relatedness、lexical fields and frames、connotation)?
    找到一个完全处理上述每个层面的模型是很难的。但目前最好的是向量语义(vector semantics)模型。向量语义模型其实是结合了从1950s的语言学家们的分布假设和Osgood的向量假设。目前为止有很多实现形式的向量语义模型,每种都以不同的方式去定义向量中的数字,但每种都以某种程度上基于**临近词的计数(counts of neighboring words)**来定义的。向量语义模型是目前NLP中标准的词义表示方法

    Words and Vectors

    向量语义模型通常基于共现矩阵(co-occurrence matrix)来表示词共同出现的频数。

    1. document vectors
      其实就是以字典中的词作为行,语料库中的文档作为列构建的term-document co-occurrence matrix。最初用于文档信息检索中的查找相似文档的任务,两个相似的文档会有相似的单词,如果两个文档有相似的单词,它们的列向量也会相似。这时一个文档用一个列向量去表示。可以想见这种matrix是稀疏且庞大的。
      在这里插入图片描述

    2. word vectors
      以字典中的词作为行和列构建|V|*|V|term-context matrix,每个矩阵元素记录row(target) word和column(context) word在某训练语料中某一上下文中共同出现的次数。这时,一个词用一个行向量去表示。注意,向量的长度通常是字典的大小,通常是训练语料中最频繁的10000~50000词。同样,这种matrix也是稀疏和耗费存储空间的。
      在这里插入图片描述

    3. cosine for measuring similarity
      此方法是计算词向量相似度最常用的方法。
      向量点积(dot product)/内积(inner product)的计算公式为:
      v ⃗ ⋅ w ⃗ = ∑ i = 1 N v i w i = v 1 w 1 + v 2 w 2 + . . . + v N w N = ∣ v ⃗ ∣ ∣ w ⃗ ∣ c o s θ \vec{v}\cdot\vec{w}=\sum_{i=1}^Nv_iw_i=v_1w_1+v_2w_2+...+v_Nw_N=|\vec{v}||\vec{w}|cos\theta v w =i=1Nviwi=v1w1+v2w2+...+vNwN=v w cosθ
      因此,计算两个向量cosine相似性的公式为:
      c o s i n e ( v ⃗ , w ⃗ ) = v ⃗ ⋅ w ⃗ ∣ v ⃗ ∣ ∣ w ⃗ ∣ = ∑ i = 1 N v i w i ∑ i = 1 N v i 2 ∑ i = 1 N w i 2 cosine(\vec{v},\vec{w})=\frac{\vec{v}\cdot\vec{w}}{|\vec{v}||\vec{w}|}=\frac{\sum_{i=1}^Nv_iw_i}{\sqrt{\sum_{i=1}^Nv_i^2}\sqrt{\sum_{i=1}^Nw_i^2}} cosine(v ,w )=v w v w =i=1Nvi2 i=1Nwi2 i=1Nviwi
      也就是说,两个词向量的相似度可以用其cosine值来表示,在0~1之间。值越大,两向量距离越小,说明两个词向量越相似。举例如下:
      在这里插入图片描述

    TF-IDF:Weighing terms in the vector

    上述co-occurrence matrix记录的raw frequency不是词之间关系的最好表示方法,容易造成偏斜(very skewed)并且没有太大辨别性(not very discriminative)。因为频繁出现在context中的词比仅出现一次两次的词更重要,但太频繁出现的词是不重要的。比如如果一个关键词只在很少的文档中出现,通过它就容易锁定目标,它的权重也就应该大。反之,如果一个词在大量网页中出现,看到它仍然不很清楚要找什么内容,它的权重就应该小。再比如上述的term-document co-occurence matrix中,一般认为出现频率高的词对文章主题贡献度高(battle对Julius Caesar和Henry V的贡献度就比As you kike it高),但good这个词在4个文档中出现频率都很高。

    TF-IDF就是为了解决这个矛盾(paradox),度量关键词权重,且必须满足两个条件:一个词预测主题的能力越强,权重越大,反之,权重越小;通用词的权重为0;
    TF-IDF是一种用于信息检索与文本挖掘的常用加权技术,并公认为是信息检索中最重要的发明。tf-idf是一种统计方法,用以评估一个词对于一个文件集或一个语料库中的其中一份文件的重要程度。字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。

    1. 词频term frequency(Luhn,1957):the frequency of the word in the doc.
      t f w t , d = c o u n t ( w t , d ) c o u n t ( w , d ) tf_{w_t,d}=\frac{count(w_t,d)}{count(w,d)} tfwt,d=count(w,d)count(wt,d)
      其中, c o u n t ( w t , d ) count(w_t,d) count(wt,d)为词 w t w_t wt在文档d中出现的次数, c o u n t ( w , d ) count(w,d) count(w,d)为文档d的总词数。
    2. 逆文档频率inverse document frequency(Sparck Jones,1972)
      i d f w t = l o g ( D D w t + 1 ) idf_{w_t}=log(\frac{D}{D_{w_t}+1}) idfwt=log(Dwt+1D)
      其中,D为文档总数, D w t D_{w_t} Dwt为包含词 w t w_t wt的文档数。
      这里解释下为什么用对数:若是简单的取逆处理,通用词的权重会非常小,稀缺词权重过大,因此采用取对数。
    3. 计算tf-idf
      t f − i d f = t f w t , d × i d f w t tf-idf=tf_{w_t,d} \times idf_{w_t} tfidf=tfwt,d×idfwt

    ♦ 不足
    TF-IDF由于其简单结构造成对权值调整不是很好,精度并不是很高;此外在TF-IDF中并没有体现出单词的位置信息,把文档中的词都看作独立的个体进行处理,忽略了词的意义、词和词之间的关联关系。比如对于Web文档而言,权重的计算方法应该体现出HTML的结构特征。特征词在不同的标记符中对文章内容的反映程度不同,其权重的计算方法也应不同。因此应该对于处于网页不同位置的特征词分别赋予不同的系数,然后乘以特征词的词频,以提高文本表示的效果。(引自维基百科https://zh.wikipedia.org/wiki/Tf-idf)
    ♦ 注意
    计算TF-IDF的数学公式有不少其他的实现方法。

    Pointwise Mutual Information(PMI) or Positive PMI(PPMI)

    替代TF-IDF的另一个weighting function是PPMI(Positive Pointwise mutual information)。PPMI认为衡量两个单词之间的关联最好的方法是,这两个单词在我们的语料库中同时出现的次数比我们预期的偶然出现的次数多多少。

    1. PMI(Fano,1961)
      逐点互信息是NLP中最重要的概念之一,衡量的是两个事件x和y发生的频率,与它们独立时的期望值相比,即:
      I ( X , Y ) = l o g 2 P ( x , y ) P ( x ) P ( y ) I(X,Y)=log_2\frac{P(x,y)}{P(x)P(y)} I(X,Y)=log2P(x)P(y)P(x,y)
      于是,中心词(target word) w w w和上下文词(context word) c c c之间的逐点互信息(Church and Hanks 1989)定义为: P M I ( w , c ) = l o g 2 P ( w , c ) P ( w ) P ( c ) PMI(w,c)=log_2\frac{P(w,c)}{P(w)P(c)} PMI(w,c)=log2P(w)P(c)P(w,c)
      分子告诉我们观察到的两个单词同时出现的频率(假设我们使用MLE计算概率)。分母告诉我们,如果这两个单词各自独立出现,我们期望它们同时出现的频率;两个独立事件同时发生的概率是两个事件概率的乘积。因此,这个比例给了我们一个估计值,即这两个词同时出现的概率比我们预期的要高多少。PMI是找到强关联词的一个有用工具。
    2. PPMI(Church and Hanks 1989, Dagan et al.1993, Niwa and Nitta 1994)
      PMI的取值是( − ∞ , + ∞ -\infty,+\infty ,+)。首先,PMI取负值表示的是两个词同时出现的频率比我们期望它们同时出现的频率少。这个结果除非是语料库很大否则是很不可靠的。其次,PMI取负值说明的是两个词的不相关程度,我们还不清楚是否有可能用人类的判断来评估这种“不相关”的分数。所以,最常用的是Postive PMI(PPMI),也就是用0替代所有PMI的负值:
      P P M I ( w , c ) = m a x ( l o g 2 P ( w , c ) P ( w ) P ( c ) , 0 ) PPMI(w,c)=max(log_2\frac{P(w,c)}{P(w)P(c)},0) PPMI(w,c)=max(log2P(w)P(c)P(w,c),0)
      假如有 W W W行(words)和 C C C列(contexts)的共现矩阵 F F F f i j f_{ij} fij为中心词 w i w_i wi和上下文词 c j c_j cj同时出现的次数。转化为PPMI矩阵,其中 p p m i i j ppmi_{ij} ppmiij给出上下文词 c j c_j cj下中心词 w i w_i wi的PPMI值为:
      p i j = f i j ∑ i = 1 W ∑ j = 1 C f i j , p i ∗ = ∑ j = 1 C f i j ∑ i = 1 W ∑ j = 1 C f i j , p ∗ j = ∑ i = 1 W f i j ∑ i = 1 W ∑ j = 1 C f i j p_{ij}=\frac{f_{ij}}{\sum_{i=1}^W\sum_{j=1}^Cf_{ij}},p_{i*}=\frac{\sum_{j=1}^Cf_{ij}}{\sum_{i=1}^W\sum_{j=1}^Cf_{ij}},p_{*j}=\frac{\sum_{i=1}^Wf_{ij}}{\sum_{i=1}^W\sum_{j=1}^Cf_{ij}} pij=i=1Wj=1Cfijfij,pi=i=1Wj=1Cfijj=1Cfij,pj=i=1Wj=1Cfiji=1Wfij
      因此, P P M I i j = m a x ( l o g 2 p i j p i ∗ p ∗ j , 0 ) PPMI_{ij}=max(log_2\frac{p_{ij}}{p_{i*}p_{*j}},0) PPMIij=max(log2pipjpij,0)
    3. Example
      基于上文的term-context matrix,我们计算PPMI(w=information,c=data):
      P ( w = i n f o r m a t i o n , c = d a t a ) = 6 19 = . 316 P(w=information,c=data)=\frac{6}{19}=.316 P(w=information,c=data)=196=.316
      P ( w = i n f o r m a t i o n ) = 11 19 = . 579 P(w=information)=\frac{11}{19}=.579 P(w=information)=1911=.579
      P ( c = d a t a ) = 7 19 = . 368 P(c=data)=\frac{7}{19}=.368 P(c=data)=197=.368
      p p m i ( w = i n f o r m a t i o n , c = d a t a ) = l o g 2 ( . 316 / ( . 368 ∗ . 579 ) ) = . 568 ppmi(w=information,c=data)=log_2(.316/(.368*.579))=.568 ppmi(w=information,c=data)=log2(.316/(.368.579))=.568
      以此类推,可得
      在这里插入图片描述

    在这里插入图片描述

    1. Extensions:
      PMI存在着偏斜不频繁事件的问题;非常罕见的词汇往往具有非常高的PMI值。
      ♦ 减少这种倾向于低频率的事件的一个方法是稍微改变 P ( c ) P(c) P(c)的计算,使用不同的函数 P ( c ) P(c) P(c),提出了上下文 P α ( c ) P_{\alpha}(c) Pα(c):
      P P M I α ( w , c ) = m a x ( l o g 2 P ( w , c ) P ( w ) P α ( c ) , 0 ) PPMI_{\alpha}(w,c)=max(log_2\frac{P(w,c)}{P(w)P_{\alpha}(c)},0) PPMIα(w,c)=max(log2P(w)Pα(c)P(w,c),0)
      其中,
      P α ( c ) = c o u n t ( c ) α ∑ c c o u n t ( c ) α P_{\alpha}(c)=\frac{count(c)^{\alpha}}{\sum_{c}count(c)^{\alpha}} Pα(c)=ccount(c)αcount(c)α
      Levy(2015)发现α= 0.75时,在很多任务中表现有明显提高。因为α= 0.75增加概率分配到罕见的context上,因此降低了其PMI ( P α ( c ) P_{\alpha}(c) Pα(c)> P ©,当c是rare context)。
      ♦ 另一个可能的解决方法是拉普拉斯平滑(Laplace smoothing):在计算PMI之前,在每个计数中添加一个小的常数k(通常为0.1-3),收缩所有的非零值。k越大,非零值的折扣就越大。
      在这里插入图片描述
    展开全文
  • 一、词向量模型

    2021-03-24 23:28:09
    因为计算机不能理解词语,所以我们需要用词向量表示一个词。 词向量有一个发展历程。 1 one-hot 2 bag of words tf-idf binary weighting b-gram和n-gram 优点:考虑了词的顺序 缺点:词表膨胀,无法衡量向量...

    因为计算机不能理解词语,所以我们需要用词向量表示一个词。
    词向量有一个发展历程:从one-hot到word embedding。

    1 one-hot

    设词典的大小为n(词典中有n个词),假如某个词在词典中的位置为k,则设立一个n维向量,第k维置1,其余维全都置0。这个思想就是one-hot编码,中文叫独热编码(茫茫0海中有一个1,不就是孤独的热点吗)。

    比如这里有三句话,即三个样本:

    “我喜欢你”;

    “你喜欢你的狗狗”;

    “你是狗狗”。

    假设已经分词完成,那么如果我们要从这三个样本中挖掘信息的话,根据词袋模型的思想:

    首先就要将这些句子中出现过的词构建一个词典。这个词典依次包含[我,喜欢,你,的,是,狗狗]这六个词。根据one-hot编码,“我”就会被编码为[1,0,0,0,0,0],而“喜欢”就被编码为[0,1,0,0,0,0],以此类推。

    那么如何继续推进,利用one-hot编码来生成特征向量呢?

    一个样本的特征向量等于该样本中的每个单词的one-hot向量直接相加。这三个样本的特征向量便会表示为:

    我喜欢你:[1,1,1,0,0,0]

    你喜欢你的狗狗:[0,1,2,1,0,1]

    你是狗狗:[0,0,1,0,1,1]

    其中,第二个句子中“你”出现了两次,因此第三维的值为2。但是注意一下,在有的机器学习模型,比如贝努利分布的朴素贝叶斯模型中,仅考虑每个词出现与否,此时第二个句子的词袋模型就变成了[0,1,1,1,0,1]。

    看,特征向量构建完成啦,剩下的就交给机器学习吧
    (原文链接:https://blog.csdn.net/xixiaoyaoww/article/details/105459590)

    优点:思路简单。
    缺点:一般词库是一个很大的库。例如词库会达到30万,那就需要一个30万维度的向量表示一个词。这样计算量很大。同时整个矩阵会是一个稀疏矩阵。极大的浪费内存与计算力。

    2 TF-IDF

    第二种是使用词出现的频率,以及逆文档频率表示一个词。
    TF=某个词在文章中出现的频率/文章的总次数
    IDF=log{语料库的总文档数/出现该词的文档数}
    T F − I D F = T F ∗ I D F TF-IDF=TF*IDF TFIDF=TFIDF
    对于一句话,就是把句子中的词的TF-IDF拼起来,形成一个向量。

    优点:简单快速,结果比较符合实际
    缺点:单纯考虑词频,忽略了词与词的位置信息以及词与词之间的相互关系。

    3 bi-gram和n-gram

    优点:考虑了词的顺序
    缺点:词表膨胀,无法衡量向量之间的相似性

    4 word embedding

    用固定长度的向量表示一个词。
    这个向量需要能够保证相似的词,距离近;在不同语言中,空间分布很相似;向量能够做加减运算: V k i n g − V q u e e n + V w o m e n = V m a n V_{king}-V{queen}+V_{women}=V_{man} VkingVqueen+Vwomen=Vman

    流行的训练算法是Word2Vec。具体有两种形式:CBOW和skip-gram。它们很类似,这里介绍skip-gram。

    • skip-gram

    在这里插入图片描述

    用中心词预测周围单词。
    输入第t个词,用一层的神经网络,预测周围的词,也就是第t-2个,t-1个,t+1个,t+2个…。

    对于模型:
    输入:一个单词的int表示。假设词表大小为N。
    projection:将单词映射为一个词向量,维度是embedding_size.这里会产生一个形状为Nxembedding_size 的参数W。这个参数就是本次任务最重要的输出。作为词向量,提供给下游。
    output:将这个词向量做线性变化后,得到在每个单词上的概率。希望在周围词上的概率最大。

    在这里插入图片描述

    目标函数:找到在给定 w t w_t wt的情况下 w t + j w_{t+j} wt+j出现的概率: p ( w t + j ∣ w t ) p(w_{t+j}|w_t) p(wt+jwt),再对这个概率取log。对所有窗口范围内的概率log和取最大值。t是从1到T的,再对这所有和,取和。
    具体概率的计算方式是 u o u_o uo是输出的词向量, v c v_c vc是输入词向量。
    p ( o ∣ c ) = e x p ( u o T v c ) ∑ w = 1 W e x p ( u w T v c ) p(o|c)=\dfrac{exp(u_o^Tv_c)}{\sum_{w=1}^W exp(u_w^Tv_c)} p(oc)=w=1Wexp(uwTvc)exp(uoTvc)

    c:表示中心词
    o:表示周为此
    v c v_c vc表示输入词向量
    u o u_o uo表示输出词向量
    用两个词向量的点积表示o这个单词可能出现的概率: u o ∗ v c u_o*v_c uovc

    损失函数:上面的概率越大越好,作为损失函数,就是将该函数取反,求最小值。
    在这里插入图片描述

    这里最大的问题是p(o|c)的分母是很大的。要计算 v c v_c vc与词库中每一个单词的词向量的和。如果词库有50万个单词,那就要计算50万次。计算量很大。看损失函数的最后一项,也是一样的。

    可以采取的措施是负例采样。
    我们的输入input embeding是一个50万x100维的矩阵。(假设我们用100维的向量表示一个词)。输出output embedding是一个50万x100维的矩阵。

    我们把任务换一个角度。对于 w t w_t wt不要计算周围单词在整个词库上的概率。我们将词库的单词分为周围单词和非周围单词两类。这样就把一个50万分类问题变为2分类问题。如果单词 u k u_k uk w t w_t wt的周围单词,那就概率高一些。否则概率低一些。
    在这里插入图片描述

    用周为词向量点乘中心词向量,对结果做sigmoid,表示w是c的周围词的概率。对于需要连续计算m个周围词的概率的乘积,可以转为对概率求log和。因此出现了上面的公式。

    我们希望目标函数越大越好。
    对于负例我们从词库中采样一部分单词即可。采样后的概率做了一下变换才参与到计算中。
    最后对我们有用的数据是输入的embedding,这是词的稠密向量。可以很好的表示词之间的相关性。

    最后模型代码实现。

    class EmbeddingModel(nn.Module):
        def __init__(self, vocab_size, embed_size):
            super(EmbeddingModel, self).__init__()
            self.vocab_size = vocab_size
            self.embed_size = embed_size
    
            initrange = 0.5 / self.embed_size
            self.out_embed = nn.Embedding(self.vocab_size, self.embed_size, sparse=False)
            self.out_embed.weight.data.uniform_(-initrange, initrange)
    
            self.in_embed = nn.Embedding(self.vocab_size, self.embed_size, sparse=False)
            self.in_embed.weight.data.uniform_(-initrange, initrange)
    
        def forward(self, input_labels, pos_labels, neg_labels):
            # input_labels:[batch_size]
            # pos_labels:[batch_size, c-1]
            # neg_labels:[batch_size, (c-1)*K]
            batch_size = input_labels.size(0)
            input_embedding = self.in_embed(input_labels) # [batch_size,embedding_size]
            pos_embedding = self.out_embed(pos_labels) # [batch_size,c*2-1,embedding_size]
            neg_embedding = self.out_embed(neg_labels) # [batch_size,(c*2-1)*K,embedding_size]
    
            input_embedding = input_embedding.unsqueeze(2) # [batch_size,embedding_size,1]
            #  bmm((b×n×m), (b x m x p)) = (b x n x p)
            pos_dot = torch.bmm(pos_embedding, input_embedding) # [batch_size,c*2-1,1]
            neg_dot = torch.bmm(neg_embedding, -input_embedding)
    
            pos_dot = pos_dot.squeeze() # [batch_size,c*2-1]
            neg_dot = neg_dot.squeeze() # [batch_size,(c*2-1)*K]
    
            log_pos = F.logsigmoid(pos_dot).sum(1) # [batch_size]
            log_neg = F.logsigmoid(neg_dot).sum(1) # [batch_size]
            loss = log_pos + log_neg
    
            # 因为希望概率越大越好,所以损失就是越小越好,所以加负号。
            return -loss
    
        def input_embeddings(self):
            return self.in_embed.weight.data.cpu().numpy()
    
    展开全文
  • 1、非限制性VAR模型(高斯VAR模型),或简化式非限制性VAR模型设12(...)tttktyyyy为一k维随机时间序列,p为滞后阶数,12(...)tttktuuuu为一k维随机扰动的时间序列,且有结构关系(1)(1)(1)(2)(2)(2)...

    1

    、非限制性

    VAR

    模型(高斯

    VAR

    模型)

    ,

    或简化式非限制性

    VAR

    模型

    1

    2

    (

    ...

    )

    t

    t

    t

    kt

    y

    y

    y

    y

    为一

    k

    维随机时间序列,

    p

    为滞后阶数,

    1

    2

    (

    ...

    )

    t

    t

    t

    kt

    u

    u

    u

    u

    为一

    k

    维随机扰动的

    时间序列,且有结构关系

    (1)

    (1)

    (1)

    (2)

    (2)

    (2)

    1

    11

    1

    1

    12

    2

    1

    1

    1

    11

    1

    2

    12

    2

    2

    1

    2

    (

    )

    (

    )

    (

    )

    11

    1

    12

    2

    1

    1

    (1)

    (1)

    (1)

    (2)

    (2)

    2

    21

    1

    1

    22

    2

    1

    2

    1

    21

    1

    2

    22

    2

    2

    ...

    ...

    ...

    ...

    ...

    .

    t

    t

    t

    k

    kt

    t

    t

    k

    kt

    p

    p

    p

    t

    p

    t

    p

    k

    kt

    p

    t

    t

    t

    t

    k

    kt

    t

    t

    y

    a

    y

    a

    y

    a

    y

    a

    y

    a

    y

    a

    y

    a

    y

    a

    y

    a

    y

    u

    y

    a

    y

    a

    y

    a

    y

    a

    y

    a

    y

    (2)

    2

    2

    (

    )

    (

    )

    (

    )

    21

    2

    12

    2

    2

    2

    (1)

    (1)

    1

    1

    1

    ..

    ...

    ...

    .....................................................................................................................

    k

    kt

    p

    p

    p

    t

    p

    t

    p

    k

    kt

    p

    t

    kt

    k

    t

    k

    a

    y

    a

    y

    a

    y

    a

    y

    u

    y

    a

    y

    a

    (1)

    (2)

    (2)

    (2)

    2

    2

    1

    1

    1

    1

    2

    12

    2

    2

    1

    2

    (

    )

    (

    )

    (

    )

    1

    1

    2

    2

    ...

    ...

    ...

    ...

    t

    kk

    kt

    k

    t

    t

    k

    kt

    p

    p

    p

    k

    t

    p

    k

    t

    p

    kk

    kt

    p

    kt

    y

    a

    y

    a

    y

    a

    y

    a

    y

    a

    y

    a

    y

    a

    y

    u

    1,2,...,

    t

    T

    (

    7

    1

    1

    )

    若引入矩阵符号,记

    展开全文
  • 本文介绍了向量的定义、向量、负向量、单位向量、零向量以及向量加减法的三种实现方法。

    ☞ ░ 老猿Python博文目录

    一、向量

    1.1、向量定义

    向量也称为欧几里得向量、几何向量、矢量,指具有大小(magnitude)和方向的量。它可以形象化地表示为带箭头的线段。箭头所指:代表向量的方向;线段长度:代表向量的大小。与向量对应的量叫做数量(物理学中称标量),数量(或标量)只有大小,没有方向。

    1. 在物理学和工程学中,几何向量更常被称为矢量。
    2. 一般印刷用黑体的小写英文字母(a、b、c等)来表示,手写用在a、b、c等字母上加一箭头(→)表示,如 :
      在这里插入图片描述
      也可以用大写字母AB、CD上加一箭头(→)等表示。但由于输入法不支持,本文后面的向量表示就不输箭头,如直接叫向量a、b、c。

    定义
    n个有顺序的数a1,a2,…,an组成的数组:
    a=(a1,a2,…,an)
    叫做n维向量,a1,a2,…,an叫做a的分量,ai叫做a的第i个分量。分量都是0的向量叫零向量

    两个向量相等当且仅当它们分量数量相同,且各分量都相等。

    1.2、向量的模和范数

    向量的模就是向量的大小,也就是向量的长度,表示符号为在向量两侧各加一竖线,如向量AB记作:
    在这里插入图片描述
    为了输入方便,以后老猿记为|向量AB|

    对于二维平面向量(x,y),其模长即为原点到该点的距离,大小为:
    在这里插入图片描述
    对于三维立体空间的向量(x,y,z),其模长为:
    在这里插入图片描述
    对于n维空间向量x(V1,V2,…,Vn),其模长为:
    在这里插入图片描述

    模是绝对值在二维和三维空间的推广,可以认为就是向量的长度。推广到高维空间中称为范数。

    范数,是具有“长度”概念的函数。在线性代数、泛函分析及相关的数学领域,范数是一个函数,是矢量空间内的所有矢量赋予非零的正长度或大小。

    1.3、向量的属性及自由向量

    • 向量规定了方向和大小,常用一条有向线段来表示,有向线段的长度表示向量的大小,箭头所指的方向表示向量的方向。
    • 长度相等且方向相同的向量叫做相等向量,向量a与b相等,记作a=b。 零向量与零向量相等。
    • 当用有向线段表示向量时,起点可以任意选取。任意两个相等的非零向量,都可用同一条有向线段来表示,并且与有向线段的起点无关.同向且等长的有向线段都表示相同向量。
    • 一个向量只要不改变它的大小和方向,它的起点和终点可以任意平行移动的向量,叫做自由向量。自由向量可以平移至空间任意点,这样一来,若已知向量的大小和方向,则向量就算给出。例如物体运动时的速度和加速度就是自由向量,在数学中把自由向量,简称为向量。数学中只研究自由向量。
    • 因为方向不能比较大小,所以向量也就不能比较大小。对于向量来说“大于”和“小于”的概念是没有意义的。

    1.4、单位向量

    长度为一个单位(即模为1)的向量,叫做单位向量。与a同向,且长度为单位1的向量,叫做a方向上的单位向量。一个非零向量除以它的模,可得所需单位向量。记作:
    在这里插入图片描述

    关于等式右边的含义,请参考下节关于向量点积的介绍:《https://blog.csdn.net/LaoYuanPython/article/details/112411742 人工智能数学基础-线性代数2:向量的点积、內积、数量积和外积》。

    1.5、负向量

    如果向量AB与向量CD的模相等且方向相反,那么我们把向量AB叫做向量CD的负向量,也称为相反向量。

    1.6、零向量

    长度为0的向量叫做零向量,记作0。零向量的始点和终点重合,所以零向量没有确定的方向,或说零向量的方向是任意的。

    规定:所有的零向量都相等。

    1.7、固定向量

    固定向量也叫做胶着向量。在数学上指的是确定方向与大小、以及起点位置的向量。力学中的作用力就是固定向量。数学上不研究固定向量,只研究自由向量。

    1.8、滑动向量

    凡有大小及方向且需沿某一特定直线作用之向量,称之为滑动向量。

    滑动向量的起点在空间内固定的一条直线上,而固定向量是起点位置固定,而自由向量则什么都没有固定。

    1.9、位置向量

    对于坐标平面(原点O)内的任意一点P,我们把向量OP叫做点P的位置向量,记作:向量P。

    1.10、方向向量

    方向向量(direction vector)是一个数学概念,空间直线的方向用一个与该直线平行的非零向量来表示,该向量称为这条直线的一个方向向量。

    1.11、平行向量、共线向量

    方向相同或相反的非零向量叫做平行(或共线)向量。向量a、b平行(共线),记作a∥b。零向量长度为零,是起点与终点重合的向量,其方向不确定。我们规定:零向量与任一向量平行。平行于同一直线的一组向量是共线向量。

    1.12、 两向量共线

    两平行向量 a与 b,可以平移至同一条与它们平行的直线上,故称此二向量a与b共线,也称向量a与b线性相关,否则,即 a不平行于b 时,称a与b线性无关。

    1.13、共面向量

    平行于同一平面的三个(或多于三个)向量叫做共面向量。
    空间中的向量有且只有以下两种位置关系:⑴共面;⑵不共面。
    注意:只有三个或三个以上向量才谈共面不共面。

    1.14、法向量

    法向量,是空间解析几何的一个概念,垂直于平面的直线所表示的向量为该平面的法向量。法向量适用于解析几何。由于空间内有无数个直线垂直于已知平面,因此一个平面都存在无数个法向量(包括两个单位法向量)。

    二、向量的加减法

    向量的加法、减法以及向量与数的乘法都称为向量的线性运算

    向量是将几何问题转化为代数问题的桥梁,向量的加减则是用代数方法进行几何运算。向量的加减法有几种方法。

    2.1、分量加减法

    向量的加减法就是对向量各个分量进行加减,假设有向量A(a1,a2,…,an)、向量B(b1,b2,…,bn),则:

    向量A+向量B = (a1+b1,a2+b2,...,an+bn) 
    向量A-向量B = (a1-b1,a2-b2,...,an-bn)
    

    2.2、头尾相接法(三角形定则)

    对n维空间的向量A1、A2、…、An,各向量在n维空间表现为一原点到对应向量点的有向线段,起点为原点,终点为向量对应坐标点。当A1、A2、…、An各向量按顺序相加时,A1对应线段保持位置不变,其他向量对应线段的长度和方向保持不变,但将平移到其起点与前一向量线段的终点重合,如此将所有相加的向量首尾相接,最后构成的图形中,原点到最后一个向量终点的线段即为所有向量相加的结果。

    如果是二维空间,则向量A1+向量A2+向量A3的过程及结果如下图左边:
    在这里插入图片描述

    如果只有两个向量相加,则两个相加的向量和最终的结果向量构成一个三角形,如上图右边。因此这种方法又叫三角形定则。当超出三个的多个向量相加时,可以采用先将第一个和第二个向量相加得到的结果再与第三个向量相加,然后其结果再与第四个向量相加,…,以此类推,直到获得最后的结果。

    以上方法,似乎只能用于求向量和,无法求向量差,其实向量减法也可以通过上述方法进行,将减去某个向量看成加上某个负向量,负向量与原向量的线段相同,只是箭头方向相反,即起点和终点相反,下图是 向量A1+向量A2向量A1-向量A2 三角形定则法计算过程及结果图:
    在这里插入图片描述

    2.3、平行四边形定则

    平行四边形定则只适用于两个非零非共线向量的加减。

    平行四边形定则解决向量加法的方法:将两个向量平移至公共起点,以向量的两条边作平行四边形,结果为公共起点的对角线。下图为两个向量相加的三角形定则和平行四边形定则的对比,可以看到结果相同。
    在这里插入图片描述

    平行四边形定则解决向量减法的方法:将两个向量平移至公共起点,以向量的两条边作平行四边形,结果由减向量的终点指向被减向量的终点。下图为向量加减法的三角形定则法和平行四边形定则法的运算过程及结果对比:
    在这里插入图片描述
    当将以上两个图中右边图形的线条改成虚线,将二者原点重合,可以得到如下图:
    在这里插入图片描述
    可以看到两种方法得到的加法结果向量完全重叠,而减法向量为平行四边形的对边,只是起点不同。

    三、向量数乘

    3.1、定义

    数乘向量(scalar multiplication of vectors)是与一个实数和一个向量有关的一种向量运算,即数量与向量的乘法运算。n个相等的非零向量a相加所得的和向量,叫作正整数n与向量a的积,记为na。

    数乘向量的定义:一个数m乘一个向量a,结果是一个向量ma,称为数乘向量的积,其模是|m||a|,当m>0时,ma与a同向,当m<0时,ma与a反向,当m=0时,0a=0。

    这个定义可以形象地理解为,把向量a伸缩|m|倍,再由m的符号确定是否调向。

    3.2、相关规则

    • 向量的数乘实际上是加法的乘法表示,因此向量数乘m等于向量的各分量都乘以m
    • 对于任意向量a、b和任意实数λ,μ,有如下规则:
    1. 结合律:λ(μa) = (λμ)a
    2. 第一分配律:(λ+μ)a=λa+μa
    3. 第二分配律:λ(a+b)=λa+λb。

    四、小结

    本文介绍了向量的定义、向量的模、负向量、单位向量、零向量以及向量加减法的三种实现方法。

    参考资料:

    百度百科向量介绍

    写博不易,敬请支持:

    如果阅读本文于您有所获,敬请点赞、评论、收藏,谢谢大家的支持!

    更多人工智能数学基础的介绍请参考专栏《人工智能数学基础 》
    专栏网址https://blog.csdn.net/laoyuanpython/category_10382948.html

    关于老猿的付费专栏

    1. 付费专栏《https://blog.csdn.net/laoyuanpython/category_9607725.html 使用PyQt开发图形界面Python应用》专门介绍基于Python的PyQt图形界面开发基础教程,对应文章目录为《 https://blog.csdn.net/LaoYuanPython/article/details/107580932 使用PyQt开发图形界面Python应用专栏目录》;
    2. 付费专栏《https://blog.csdn.net/laoyuanpython/category_10232926.html moviepy音视频开发专栏 )详细介绍moviepy音视频剪辑合成处理的类相关方法及使用相关方法进行相关剪辑合成场景的处理,对应文章目录为《https://blog.csdn.net/LaoYuanPython/article/details/107574583 moviepy音视频开发专栏文章目录》;
    3. 付费专栏《https://blog.csdn.net/laoyuanpython/category_10581071.html OpenCV-Python初学者疑难问题集》为《https://blog.csdn.net/laoyuanpython/category_9979286.html OpenCV-Python图形图像处理 》的伴生专栏,是笔者对OpenCV-Python图形图像处理学习中遇到的一些问题个人感悟的整合,相关资料基本上都是老猿反复研究的成果,有助于OpenCV-Python初学者比较深入地理解OpenCV,对应文章目录为《https://blog.csdn.net/LaoYuanPython/article/details/109713407 OpenCV-Python初学者疑难问题集专栏目录 》。

    前两个专栏都适合有一定Python基础但无相关知识的小白读者学习,第三个专栏请大家结合《https://blog.csdn.net/laoyuanpython/category_9979286.html OpenCV-Python图形图像处理 》的学习使用。

    对于缺乏Python基础的同仁,可以通过老猿的免费专栏《https://blog.csdn.net/laoyuanpython/category_9831699.html 专栏:Python基础教程目录)从零开始学习Python。

    如果有兴趣也愿意支持老猿的读者,欢迎购买付费专栏。

    跟老猿学Python!

    ☞ ░ 前往老猿Python博文目录 https://blog.csdn.net/LaoYuanPython

    展开全文
  • 第1节:零向量 1.零向量的概念  对于任意向量x,都有x+y=x,则x被称为零向量。例如,3D零向量为[0 0 0]。零向量非常特殊,因为它是唯一大小为零的向量,并且唯一一个没有方向的向量。 第2节:负向量 1.负向量的...
  • 叉乘向量有如下关系:|C| = |A| * |B| * sinC 的= A, B 的乘积乘以A,B夹角的Sine值。由此可见,由于A,B夹角的不确定导致A的不确定。只要A满足:A垂直于B 的分量=|C|/|B|就是本题的解。3 假设我们现在让...
  • 在Keras模型中使用预训练的词向量文章信息通过本教程,你可以掌握技能:使用预先训练的词向量和卷积神经网络解决一个文本分类问题本文代码已上传到Github本文作者:Francois Chollet什么是词向量?”词向量”(词嵌入)...
  • 本节课程主要讲解的是词向量和Elmo。核心是Elmo,词向量是基础知识点。Elmo 是2018年提出的论文 《Deep contextualized word representtations》,在这篇论文中提出了很重要的思想Elmo,Elmo 是一种基于特征的语言...
  • 将得到的隐层向量1∗NW’相乘(矩阵W‘是矩阵W的转置),并且用softmax处理,得到1∗V的向量,此向量的每一维代表词库中的一个单词。概率中最大的index所代表的单词为预测出的中间词。 词语(Word)中的独热...
  • 支持向量机(Support vector machine, SVM)是一种二分类模型,是按有监督学习方式对数据进行二元分类的广义线性分类器。 支持向量机经常应用于模式识别问题,如人像识别、文本分类、手写识别、生物信息识别等领域。...
  • 2.基于空间向量的余弦算法2.1算法步骤预处理→文本特征项选择→加权→生成向量空间模型后计算余弦。2.2步骤简介2.2.1预处理预处理主要是进行中文分词和去停用词,分词的开源代码有:ICTCLAS。然后按照停用词表中的...
  • 向量空间

    2021-06-26 11:20:41
    在解析几何里引入向量概念后,使许多问题的处理变得更为简洁和清晰,在此基础上的进一步抽象化,形成了域相联系的向量空间概念。譬如,实系数多项式的集合在定义适当的运算后构成向量空间,在代数上处理是方便的。...
  • 向量的点乘叉乘

    2021-03-18 18:53:48
    简要介绍了向量的点乘和叉乘
  • 向量在网络上已经有了大量的文章,但是,出于我们专栏的完整性系统性的考虑,笔者还是决定加上这样一个专题。计划用3-4次,彻底说清楚在自然语言处理中,词向量的由来,本质和训练。公众号专栏主要讲基本原理,...
  • SVM(支持向量机)LDA(线性判别分析)

    千次阅读 2021-11-10 22:02:21
    支持向量机(support vector machines)是一种二分类模型,它的目的是寻找一个超平面来对样本进行分割,分割的原则是间隔最大化,最终转化为一个凸二次规划问题来求解。由简至繁的模型包括: 当训练样本线性可分时...
  • Vector Semantics 有两部分组成: distributional hypothesis(所有语义向量的理论基础):Words that occur in similar contexts tend to have similar meanings,define a word by its distribution in texts。...
  • 右图中经过y坐标值放大两倍的变换后,法向量N=(1,2),而向量T'=A-B=(-1,2),法向量N’不再线段AB垂直。 同理可以知道,如果model变换中,XYZ轴进行了不同比例的缩放,原来的法向量可能不再切平面垂直。.
  • (下面以A(T)表示A的转置.)先从奇异值说起.我个人的理解,奇异值是特征值的一种推广.因为只有方阵才可能具有特征值,对于实际遇到的一些问题(比如最小二乘问题),往往遇上长方阵,长方阵根本没有特征值.因而就有必要对...
  • 对于列向量a,b∈Rna,b\in R^na,b∈Rn,其内积(点积)表示为: a⋅b=aTb=bTa=∑i=1naibi a \cdot b = a^Tb=b^Ta=\sum_{i=1}^n a_ib_i a⋅b=aTb=bTa=i=1∑n​ai​bi​ 向量的外积 这里仅讨论三维向量空间中的外积。 ...
  • 3、线性相关线性无关 (1)线性相关 假设有这么一个矩阵 我们对其按行分块,则有向量: 如果用行向量 α1, α2, α3, … , αn 来表示的矩阵A经过初等行变换后,某行(即某个向量αi)的元素全变为0, 那么则称 α...
  • 二、Matlab中最基本的向量与矩阵运算知识 1、对向量的操作 1)向量的基本运算: 定义一个向量 创建一个列向量,元素元素之间用分号(;)隔开,如 a = [2; 1; 4]; 创建一个行向量,元素元素之间用空格(space)或者...
  • 计算几何是算法竞赛的一大块,而叉积是计算机和的基础。...叉积求面积: (b.x - a.x) * (c.y - a.y) - (b.y - a.y)*(c.x - a.x)[cpp] view plaincopyprint? struct Point { double x,y; Point(double x=0,doubl...
  • 线性代数学习之特征值特征向量

    千次阅读 2021-10-22 17:02:44
    什么是特征值和特征向量: 在上一次线性代数学习之行列式 - cexo - 博客园学习了行列式相关的一些概念,其中也多次提到学好行列式是为了学习“特征值和特征向量”的基础,所以此次就正式进入这块内容的学习,也是...
  • 两个向量叉积的几何意义是指以两个向量模的乘积为,方向和两个 向量构成右手坐标系的向量向量的叉乘不可交换。在 MATLAB 中函数 cross 用于实现向量的叉乘。 向量的混合积 向量的混合积的几何意义是:它的绝对值...
  • GENSIM官方教程(4.0.0beta最新版)-词向量模型回顾:词袋模型简介:词向量模型词向量模型训练实例训练一个你自己的模型储存和加载模型训练参数内存相关的细节模型评估在线学习计算训练损失基准测试词嵌入可视化 ...
  • $$cos(\vec a, \vec b)=\frac {\vec a*\vec b}{||\vec a||*||\vec b||}$$因此,用向量来表示文档,然后就可以用余弦来计算两篇文章之间的相似度了。###2. 词袋模型一篇文档里面有很多很多句子,每个句子...
  • 本文仅供自己日后复习所用,参考了很多博客和知乎回答... Word2vec引入CBOW和Skip-GramCBOW最简单的情况:One-word context推广至Multi-word contextWord2vec得到的词向量向量的性能探究几个优化方法Hierarchical So
  • 3-D空间中的基变换坐标变换-Twinsen编写-本人水平有限,疏忽错误在所难免,还请各位数学高手、编程高手不吝赐教-我的Email-address:popyy@netease.com一、空间坐标系的基和基矩阵在3-D空间中,我们用空间坐标系来...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 102,862
精华内容 41,144
关键字:

向量a与向量a的模的关系