精华内容
下载资源
问答
  • 复杂对什么相应的词
    千次阅读
    2019-06-28 11:15:21





    一. 命题 概念




    1. 命题 概念



    ( 1 ) 命题逻辑的主要内容 ( 逻辑 推理 命题 | 最小单位 | 最简单最基本部分 )


    命题逻辑的主要内容 :

    • 1.逻辑, 推理 与 命题 关系 : 逻辑 主要研究 推理过程 , 推理过程 必须 依靠 命题 来表达 ;
    • 2.最小单位 : 命题逻辑中 , 命题 是 最小单位 ;
    • 3.最简单部分 : 命题 是 数理逻辑中 最基本 , 最简单的部分 ;



    ( 2 ) 什么是命题 ( 陈述句 | 真假 必居 且 只居 其一 )


    什么是命题 :

    • 1.命题概念 : 命题 是 陈述客观 外界发生事情的陈述句 ;
    • 2.真假其一 : 命题是 或为真 或为假陈述句 ;
    • 3.命题特征 : ① 陈述句 ; ② 真假必居其一 , 只居其一 ;
    • 4.命题判定的说明 : 以下两种情况是命题 ;
      • ① 针对将来发生的事 : 只要是 真假只居其一 , 并且是陈述句 , 那么这就是命题 , 虽然现在不知道是真是假 , 但是必定是 非真既假 ;
      • ② 未证明的定理 :哥德巴赫猜想 , 我们 不知道其真假 , 但是其 如果证明出来 必定是非真既假陈述句 , 因此也是命题 ;



    2. 命题 举例



    ( 1 ) 命题举例 ( 非真即假 | 将来会知道 必是真假 | 将来会证明 必是真或假 )


    下面句子都是命题 :

    • 1.( 8小于10 ; ) : 陈述 8 和 10 之间的关系 , 是 真命题 ; 这件事已经发生了 ;
    • 2.( 8大于10 ; ) : 陈述 8 和 10 之间的关系 , 陈述错了 , 是个假命题 ; 这件事是不可能发生的 ; 但其是 陈述句 并且 非真既假 ;
    • 3.( 二十一世纪末 , 人类将住在太空 ; ) : 是陈述句 , 还没有发生 , 但肯定是非真即假 , 将来是否发生 不确定 , 但是 我们不知道 不代表不存在 , 在某个时间就会知道 , 如 二十一世纪末最后 1 秒 ;
    • 4.( 任一个 > 5 的偶数可表成两个素数的和 - 哥德巴赫猜想 ) : 皇冠上的明珠 , 是一个命题 , 是陈述句 , 但现在不知道真假 ; 但是终究会证明这个猜想 ;
    • 5.( 2 \sqrt{2} 2 的小数展开式中 12345 出现偶数多次 ; ) : 有真假 , 但是真假不知道什么时候知道 ;



    ( 2 ) 不是命题举例 ( 不是陈述句 | 没有做出判断 | 真假不确定 | 悖论 )


    不是命题 :

    • 1.( 8 大于 10 吗 ? ) : 不是陈述句 , 是 疑问句 ;
    • 2.( 请勿吸烟 ! ) : 不是陈述句 , 是 祈使句 , 没有做出判断 , 真假不确定 ;
    • 3.( X 大于 Y . ) : 是陈述句 , 但是 真假 不确定 ;
    • 4.( 我正在撒谎 . - 悖论 ) : 是陈述句 , 但属于悖论 ;
      • ① 外层含义 : 如果 我在撒谎 , 这个命题为假 ; 如果 我没撒谎 , 这个命题为真 ;
      • ② 如果命题为真 : 说明我在撒谎 , 含义是 这个命题是假 , 出现了矛盾 ;
      • ③ 如果命题为假 : 说明我没有撒谎 , 含义是 这个命题是真的 , 出现了矛盾 ;





    二. 复合命题 与 命题符号化




    1. 联结词 和 复合命题



    ( 1 ) 复杂命题 引入 ( 复合命题真假由其组成的小命题的真假进行判断 )


    复杂命题 :简单命题 能 构造 更加 复杂的命题 ;

    • 1.期中考试 , 张三 没有 考及格 ;
    • 2.其中考试 , 张三和李四 考及格了 ;
    • 3.其中考试 , 张三和李四中 有人 考了90分 ;
    • 4.如果 张三能考 90 分 , 那么李四 能考 90 分 ;
    • 5.张三能考 90 分 当且仅当 李四 也能考 90 分 ;



    ( 2 ) 联结词 和 复合命题


    联结词 和 复合命题 :

    • 1.联结词 : 上述 没有 , 如果 那么 , 等连词 成为 联结词 ;
    • 2.复合命题 : 由联结词 和 命题 连接而成的 更加复杂命题 成为 复合命题 ;
    • 3.简单命题 : 相对地 , 不能分解成 更简单 的命题 成为简单命题 ;
    • 4.复合命题真假 : 复合命题 的 真假 完全 由 构成它 的简单命题 的 真假决定 ;
    • 5.简单命题 和 复合命题 的划分 是 相对的 ;




    2. 命题符号化



    ( 1 ) 命题符号化


    命题符号化 :

    • 1.命题符号化 : 将 命题 符号化 , 记为 p , q , r , ⋯ p , q , r , \cdots p,q,r, , 类似于 代数 中 使用 a a a 代表 1 数字一样 ;

    • 2.符号是变量 :

      • ① 代表数字 : 在代数中 , 使用字母 a a a 代替 数字 , 具体代表哪个数字 并不确定 , 只知道这是个数字即可 ;
      • ② 代表命题 : 同理 , 命题符号 p , q , r p, q, r p,q,r 代替 命题 , 具体代表哪些命题 也不确定 , 只知道这是个命题即可 ;
    • 3.常元 和 变元 :

      • ① 常元 : 代数中 字母 a 确定的表示某个数字时 , 称为 常元 ;
      • ② 变元 : 代数中 字母 a 表示不确定的数字时 , 称为 变元 ;
    • 4.命题常元 和 命题变元 :

      • ①命题常元 : 命题 p p p 代表 确定 的命题时 , 称为 命题常元 ;
      • ②命题变元 : 命题 p p p 代表 不确定 的命题时 , 称为 命题常元 ;



    ( 2 ) 命题符 取值 号化


    命题 真假值 符号化 :

    • 1.真 ( True ) : 记为 1 1 1 T T T ;
    • 2.假 ( False ) : 记为 0 0 0 F F F ;
    • 3.命题取值 : 命题变元 p 取值取值 0 0 0 1 1 1 , 取值 0 0 0 表示 p p p 是真命题 , 取值 1 1 1 表示 p p p 是假命题 ;





    三. 联结词



    ( 1 ) 否定联结词


    否定联结词 :

    • 1.定义 : 设 p 为 一个命题 , 复合命题 非p 称为 p 的否定式 , 记为 ¬ p \lnot p ¬p ; ¬ \lnot ¬ 成为否定联结词 ;
    • 2.真值表 : ¬ p \lnot p ¬p 为真 此时 p 为假 ;
    p ¬ p \lnot p ¬p
    01
    10


    ( 3 ) 合取联结词


    合取联结词 :

    • 1.定义 : 设 p , q 为 两个命题 , 复合命题 " p 而且 q " 称为 p , q 的合取式 , 记为 p ∧ q p \land q pq , ∧ \land 称为 合取联结词 ;
    • 2.真值表 : p ∧ q p \land q pq 真 当且仅当 p 与 q 同时真 ;
    pq p ∧ q p \land q pq
    000
    010
    100
    111


    ( 3 ) 析取联结词


    析取联结词 :

    • 1.定义 : 设 p , q 为 两个命题 , 复合命题 " p 或者 q " 称为 p , q 的析取式 , 记为 p ∨ q p \lor q pq ; ∨ \lor 称作 析取联结词 ;
    • 2.真值表 : p ∨ q p \lor q pq 为真 , 当且仅当 p 与 q 至少有一个为真 ;
    pq p ∨ q p \lor q pq
    000
    011
    101
    111
    • 3.举例 : 其中考试 , 张三和李四中有人考了90分 ;
      • ① p 代表 张三 考了 90分 ;
      • ② q 代表 李四考了 90 分 ;
      • p ∨ q p \lor q pq 代表 : 张三 和 李四中有人考了90分 ;



    ( 4 ) 蕴含联结词


    蕴含联结词 :

    • 1.定义 : 设 p , q 为 命题 , 复合命题 " 如果 p , 则 q " 称为 p 对 q 的 蕴涵式 , 记做 p → q p \to q pq , 其中 又称 p 为 此蕴涵式 的 前件 , 成 q 为 此蕴涵式 的 后件 ; → \to 为 蕴涵联结词 ;
    • 2.真值表 : p → q p \to q pq 假 当且仅当 p 真 而 q 假 ;
    pq p → q p \to q pq
    001
    011
    100
    111
    • 3.举例 : 如果张三能考 90 分 , 那么李四也能考 90 分 ;


    ( 5 ) 等价联结词


    等价联结词 :

    • 1.定义 : 设 p , q 为 命题 , 复合命题 " p 当且仅当 q " 称作 p , q 的等价式 , 记做 p ↔ q p \leftrightarrow q pq , ↔ \leftrightarrow 记做等价联结词 ;
    • 2.真值表 : p ↔ q p \leftrightarrow q pq 真 当且仅当 p , q 同时为真 或 同时为假 ;
    pq p ↔ q p \leftrightarrow q pq
    001
    010
    100
    111
    • 3.举例 : 张三能考 90 分 当且仅当 李四 也能考 90 分





    三. 命题符号化示例



    ( 1 ) 命题符号化 ( 仔细看三个例子 )


    命题符号化 :

    • 1.铁 和 氧 化合 , 但 铁 和 氮 不化合 ;

      • ① 命题 p : 铁和氧化合 ;
      • ② 命题 q : 铁和氮化合 ;
      • ③复合命题 : p ∧ ( ¬ q ) p \land ( \lnot q ) p(¬q) ;
    • 2.如果我下班早 , 就去商店看看 , 除非我很累 ;

      • ① 命题 p : 我下班早 ;
      • ② 命题 q : 去商店看看 ;
      • ③ 命题 r : 我很累 ;
      • ④ 复合命题 : ( ( ¬ r ) ∧ p ) → q ( ( \lnot r ) \land p ) \to q ((¬r)p)q : 去商店的前提 是 不累 并且 下班早 ;
    • 3.李四是计算机系的学生 , 他住在312室 或 313 室 ;

      • ① 命题 p : 李四是计算机系学生 ;
      • ② 命题 q : 李四住在 312 室;
      • ③ 命题 r : 李四住在 313 室 ;
      • ④ 复合命题 : p ∧ ( ( q ∨ r ) ∧ ( ¬ ( q ∧ r ) ) ) p \land ( ( q \lor r ) \land ( \lnot ( q \land r ) ) ) p((qr)(¬(qr))) ;注意 这里 李四 只能住在 312 或者 313 之间的一个, 不能都住进入, 因此需要将 q ∧ r q \land r qr 的情况排除 , ¬ ( q ∧ r ) \lnot ( q \land r ) ¬(qr) ;
      • ⑤ 复合命题 : p ∧ ( ( q ∧ ( ¬ r ) ) ∨ ( ( ¬ q ) ∧ r ) ) p \land ( ( q \land ( \lnot r ) ) \lor ( ( \lnot q ) \land r ) ) p((q(¬r))((¬q)r)) ; 这里 李四 住在 312 不住在 313, 李四住在 313 不住在 312 只能取其中一种情况 ;


    ( 2 ) 命题符号化 注意点 ( ① 联结词 与 日常词汇不一致 | ② 命题真假根据定义理解 | ③ 不能对号入座 | ④ 有些词也可以表示为五个联结词 )


    命题符号化注意点 :

    • 1.联结词与日常词汇不完全一致 : 上述 五个联结词 非 , 析取 , 合取 , 蕴涵 , 等价 , 来源于 日常使用的 相应词汇 , 但是不完全一致 ;
    • 2.命题真假根据定义理解 : 联结词组成的复合命题的真假值 要根据 它们 的 定义 去理解 , 不能根据日常语言的含义去理解 , 如 肉夹馍之类的 日常含义 ;
    • 3.不能对号入座 : 不要 见到 或 就表示成 ∨ \lor 析取 , 如上面的住在 312 或 313 的情况 , 要考虑 只住在 312 , 只住在 313 , 同时住在 312 和 313 的情况 ;
    • 4.有些词也可以表示为这五个联结词 : 如 “但是” 可以表示成 “ ∧ \land ;

    更多相关内容
  • 自然语言是一套用来表达含义的复杂系统。在这套系统中,是表义的基本单元。在机器学习中,如何使用向量表示? 顾名思义,向量是用来表示的向量,通常也被认为是的特征向量。近年来,向量已逐渐成为自然...

    词向量简介

    自然语言是一套用来表达含义的复杂系统。在这套系统中,词是表义的基本单元。在机器学习中,如何使用向量表示词?

    顾名思义,词向量是用来表示词的向量,通常也被认为是词的特征向量。近年来,词向量已逐渐成为自然语言处理的基础知识。

    一种最简单的词向量方式是one-hot representation,就是用一个很长的向量来表示一个词,向量的长度为词典的大小,向量的分量只有一个 1,其他全为 0,1 的位置对应该词在词典中的位置。比如:

    '中国'表示为 [00010000000......]

    '美国'表死为[0000000010000...]

    每个词都是茫茫 0 海中的一个 1。这种 One-hot Representation 如果采用稀疏方式存储,会是非常的简洁:也就是给每个词分配一个数字 ID。比如刚才的例子中,中国记为 3,美国记为 8(假设从 0 开始记)。如果要编程实现的话,用 Hash 表给每个词分配一个编号就可以了。这么简洁的表示方法配合上最大熵、SVM、CRF 等等算法已经很好地完成了 NLP 领域的各种主流任务。

    但这种词表示有两个缺点:

    (1)容易受维数灾难的困扰,尤其是将其用于 Deep Learning 的一些算法时;

    (2)不能很好地刻画词与词之间的相似性(术语好像叫做“词汇鸿沟”):任意两个词之间都是孤立的。光从这两个向量中看不出两个词是否有关系,哪怕是丈夫和老公这样的同义词也不能幸免于难。

    个人认为,主要原因在于one-hot编码是把不适合欧式距离度量的类别数据,转换到欧式空间,适合距离度量,而文本分析中,更常用的是余弦距离,此时one-hot编码体现不出角度概念,因为余弦距离将距离归一化了

    另一种就是Distributed Representation 这种表示,它最早是 Hinton 于 1986 年提出的,可以克服 one-hot representation 的缺点。它的思路是通过训练,将每个词都映射到一个较短的词向量上来。所有的这些词向量就构成了向量空间,进而可以用普通的统计学的方法来研究词与词之间的关系。这就是word embedding,即指的是将词转化成一种分布式表示,又称词向量。分布式表示将词表示成一个定长的连续的稠密向量,这个较短的词向量维度是多大呢?这个一般需要我们在训练时自己来指定。这种向量一般长成这个样子:[0.792, −0.177, −0.107, 0.109, −0.542, ...],也就是普通的向量表示形式。维度以 50 维和 100 维比较常见。当然在实际情况中,我们并不能对词向量的每个维度做一个很好的解释。

    分布式表示优点: 
    (1)词之间存在相似关系: 
    是词之间存在“距离”概念,这对很多自然语言处理的任务非常有帮助。 
    (2)包含更多信息: 
    词向量能够包含更多信息,并且每一维都有特定的含义。在采用one-hot特征时,可以对特征向量进行删减,词向量则不能

    当然一个词怎么表示成这么样的一个向量是要经过一番训练的,训练方法较多,word2vec是其中一种,在后面会提到,这里先说它的意义。还要注意的是每个词在不同的语料库和不同的训练方法下,得到的词向量可能是不一样的。

    由于是用向量表示,而且用较好的训练算法得到的词向量的向量一般是有空间上的意义的,也就是说,将所有这些向量放在一起形成一个词向量空间,而每一向量则为该空间中的一个点,在这个空间上的词向量之间的距离度量也可以表示对应的两个词之间的“距离”。所谓两个词之间的“距离”,就是这两个词之间的语法,语义之间的相似性。

    一个比较实用的场景是找同义词,得到词向量后,假如对于词老婆来说,想找出与这个词相似的词,这个场景对人来说都不轻松,毕竟比较主观,但是对于建立好词向量后的情况,对计算机来说,只要拿这个词的词向量跟其他词的词向量一一计算欧式距离或者cos距离,得到距离小于某个值那些词,就是它的同义词。

    这个特性使词向量很有意义,自然会吸引很多人去研究,google的word2vec模型也是基于这个做出来的。

    如何生成词向量

    本小节来简单介绍词向量的生成技术。生成词向量的方法有很多,这些方法都依照一个思想:任一词的含义可以用它的周边词来表示。生成词向量的方式可分为:基于统计的方法和基于语言模型(language model)的方法。

    1. 基于统计方法


    1.1 共现矩阵
    通过统计一个事先指定大小的窗口内的word共现次数,以word周边的共现词的次数做为当前word的vector。具体来说,我们通过从大量的语料文本中构建一个共现矩阵来定义word representation。 
    例如,有语料如下: 
    I like deep learning. 
    I like NLP. 
    I enjoy flying. 
    则其共现矩阵如下:

    矩阵定义的词向量在一定程度上缓解了one-hot向量相似度为0的问题,但没有解决数据稀疏性和维度灾难的问题。

    1.2 SVD(奇异值分解)
    既然基于co-occurrence矩阵得到的离散词向量存在着高维和稀疏性的问题,一个自然而然的解决思路是对原始词向量进行降维,从而得到一个稠密的连续词向量。 
    对1.1中矩阵,进行SVD分解,得到矩阵正交矩阵U,对U进行归一化得到矩阵如下:

    SVD得到了word的稠密(dense)矩阵,该矩阵具有很多良好的性质:语义相近的词在向量空间相近,甚至可以一定程度反映word间的线性关系。

    2.基于语言模型(language model)


    语言模型生成词向量是通过训练神经网络语言模型NNLM(neural network language model),词向量做为语言模型的附带产出。NNLM背后的基本思想是对出现在上下文环境里的词进行预测,这种对上下文环境的预测本质上也是一种对共现统计特征的学习。 较著名的采用neural network language model生成词向量的方法有:Skip-gram、CBOW、LBL、NNLM、C&W、GloVe等。接下来,以word2vec为例,讲解基于神经网络语言模型的词向量生成。

    word2vec

    2013年,Google团队发表了word2vec工具。word2vec工具主要包含两个模型:跳字模型(skip-gram)和连续词袋模型(continuous bag of words,简称CBOW),以及两种高效训练的方法:负采样(negative sampling)和层序softmax(hierarchical softmax)。值得一提的是,word2vec词向量可以较好地表达不同词之间的相似和类比关系。

    这里skip-gram和CBOW是word2vec架构的两种类型,可以理解为两种实现方式,不是说,word2vec包含这两个模型。

    word2vec自提出后被广泛应用在自然语言处理任务中。它的模型和训练方法也启发了很多后续的词向量模型。本节将重点介绍word2vec的模型和训练方法。

    在word2vec出现之前,已经有用神经网络DNN来用训练词向量进而处理词与词之间的关系了。采用的方法一般是一个三层的神经网络结构(当然也可以多层),分为输入层,隐藏层和输出层(softmax层)。这个模型是如何定义数据的输入和输出呢?一般分为CBOW(Continuous Bag-of-Words 与Skip-Gram两种模型。

    CBOW模型的训练输入是某一个特征词的上下文相关的词对应的词向量(单词的one-hot编码),而输出就是这特定的一个词的词向量(单词的one-hot编码)。比如下面这段话,我们的上下文大小取值为4,特定的这个词是"Learning",也就是我们需要的输出词向量(单词Learning的one-hot编码),上下文对应的词有8个,前后各4个,这8个词是我们模型的输入(8个单词的one-hot编码)。由于CBOW使用的是词袋模型,因此这8个词都是平等的,也就是不考虑他们和我们关注的词之间的距离大小,只要在我们上下文之内即可。

    这样我们这个CBOW的例子里,我们的输入是8个词向量(8个单词的one-hot编码),输出是所有词的softmax概率(训练的目标是期望训练样本特定词(中心词)对应的softmax概率最大),对应的CBOW神经网络模型输入层有8个神经元,输出层有词汇表大小个神经元。隐藏层的神经元个数我们可以自己指定。通过DNN的反向传播算法,我们可以求出DNN模型的参数,同时得到所有的词对应的词向量。这样当我们有新的需求,要求出某8个词对应的最可能的输出中心词时,我们可以通过一次DNN前向传播算法并通过softmax激活函数找到概率最大的词对应的神经元即可。    
    Skip-Gram模型和CBOW的思路是反着来的(互为镜像),即输入是特定的一个词的词向量(单词的one-hot编码),而输出是特定词对应的上下文词向量(所有上下文单词的one-hot编码)。还是上面的例子,我们的上下文大小取值为4, 特定的这个词"Learning"是我们的输入,而这8个上下文词是我们的输出。

    这样我们这个Skip-Gram的例子里,我们的输入是特定词, 输出是softmax概率排前8的8个词,对应的Skip-Gram神经网络模型输入层有1个神经元,输出层有词汇表大小个神经元。隐藏层的神经元个数我们可以自己指定。通过DNN的反向传播算法,我们可以求出DNN模型的参数,同时得到所有的词对应的词向量。这样当我们有新的需求,要求出某1个词对应的最可能的8个上下文词时,我们可以通过一次DNN前向传播算法得到概率大小排前8的softmax概率对应的神经元所对应的词即可。

    以上就是神经网络语言模型中如何用CBOW与Skip-Gram来训练模型与得到词向量的大概过程。但是这和word2vec中用CBOW与Skip-Gram来训练模型与得到词向量的过程有很多的不同。

    word2vec为什么 不用现成的DNN模型,要继续优化出新方法呢?最主要的问题是DNN模型的这个处理过程非常耗时。我们的词汇表一般在百万级别以上,这意味着我们DNN的输出层需要进行softmax计算各个词的输出概率的的计算量很大。有没有简化一点点的方法呢?

    所以,只要简单理解为CBOW与Skip-Gram互为镜像,输入/输出都是词的one-hot编码,训练上下文->中心词/中心词->上下文词的关系权重就可以了

    word2vec基础之霍夫曼树 

    word2vec也使用了CBOW与Skip-Gram来训练模型与得到词向量,但是并没有使用传统的DNN模型。最先优化使用的数据结构是用霍夫曼树来代替隐藏层和输出层的神经元,霍夫曼树的叶子节点起到输出层神经元的作用,叶子节点的个数即为词汇表的小大。 而内部节点则起到隐藏层神经元的作用。

    具体如何用霍夫曼树来进行CBOW和Skip-Gram的训练我们在下一节讲,这里我们先复习下霍夫曼树。

    霍夫曼树的建立其实并不难,过程如下:

    输入:权值为(w1,w2,...wn)的n个节点

    输出:对应的霍夫曼树

    1)将(w1,w2,...wn)看做是有n棵树的森林,每个树仅有一个节点。

    2)在森林中选择根节点权值最小的两棵树进行合并,得到一个新的树,这两颗树分布作为新树的左右子树。新树的根节点权重为左右子树的根节点权重之和。

    3) 将之前的根节点权值最小的两棵树从森林删除,并把新树加入森林。

    4)重复步骤2)和3)直到森林里只有一棵树为止。

    下面我们用一个具体的例子来说明霍夫曼树建立的过程,我们有(a,b,c,d,e,f)共6个节点,节点的权值分布是(20,4,8,6,16,3)。

    首先是最小的b和f合并,得到的新树根节点权重是7.此时森林里5棵树,根节点权重分别是20,8,6,16,7。此时根节点权重最小的6,7合并,得到新子树,依次类推,最终得到下面的霍夫曼树。

    那么霍夫曼树有什么好处呢?一般得到霍夫曼树后我们会对叶子节点进行霍夫曼编码,由于权重高的叶子节点越靠近根节点,而权重低的叶子节点会远离根节点,这样我们的高权重节点编码值较短,而低权重值编码值较长。这保证的树的带权路径最短,也符合我们的信息论,即我们希望越常用的词拥有更短的编码。如何编码呢?一般对于一个霍夫曼树的节点(根节点除外),可以约定左子树编码为0,右子树编码为1.如上图,则可以得到c的编码是00。注意,是从左到右,从上到下(根节点除外)的顺序开始编码。

    在word2vec中,约定编码方式和上面的例子相反,即约定左子树编码为1,右子树编码为0,同时约定左子树的权重不小于右子树的权重。

    补充:其实,这里有一句话,看似简单但很重要没有说明,word2vec的输出层对应一颗二叉树,它是以语料中出现的词当作叶子节点,以各词在语料中出现的次数作为权值构造霍夫曼树的。然后,你会发现就通了。

    Hierarchical Softmax

    由于word2vec有两种改进方法,一种是基于Hierarchical Softmax的,另一种是基于Negative Sampling的。

    基于Hierarchical Softmax的模型概述

    https://zhuanlan.zhihu.com/p/56139075 看这个吧,好理解。

    我们先回顾下传统的神经网络词向量语言模型,里面一般有三层,输入层(词向量),隐藏层和输出层(softmax层)。里面最大的问题在于从隐藏层到输出的softmax层的计算量很大,因为要计算所有词的softmax概率,再去找概率最大的值。这个模型如下图所示。其中VV是词汇表的大小, 

    word2vec对这个模型做了改进,首先,对于从输入层到隐藏层的映射,没有采取神经网络的线性变换加激活函数的方法,而是采用简单的对所有输入词向量求和并取平均的方法。比如输入的是三个4维词向量:(1,2,3,4),(9,6,11,8),(5,10,7,12),那么我们word2vec映射后的词向量就是(5,6,7,8)。这里是从多个词向量变成了一个词向量。

    第二个改进就是从隐藏层到输出的softmax层这里的计算量个改进。为了避免要计算所有词的softmax概率,word2vec采样了霍夫曼树来代替从隐藏层到输出softmax层的映射。我们在上一节已经介绍了霍夫曼树的原理。如何映射呢?这里就是理解word2vec的关键所在了。

    由于我们把之前所有都要计算的从输出softmax层的概率计算变成了一颗二叉霍夫曼树,那么我们的softmax概率计算只需要沿着树形结构进行就可以了。如下图所示,我们可以沿着霍夫曼树从根节点一直走到我们的叶子节点的词w2。

    和之前的神经网络语言模型相比,我们的霍夫曼树的所有内部节点就类似之前神经网络隐藏层的神经元,其中,根节点的词向量对应我们的映射后的词向量,而所有叶子节点就类似于之前神经网络softmax输出层的神经元,叶子节点的个数就是词汇表的大小。在霍夫曼树中,隐藏层到输出层的softmax映射不是一下子完成的,而是沿着霍夫曼树一步步完成的,因此这种softmax取名为"Hierarchical Softmax"。

    如何“沿着霍夫曼树一步步完成”呢?在word2vec中,我们采用了二元逻辑回归的方法,即规定沿着左子树走,那么就是负类(霍夫曼树编码1),沿着右子树走,那么就是正类(霍夫曼树编码0)。判别正类和负类的方法是使用sigmoid函数,输入是当前内部节点的词向量,训练逻辑回归参数。

    使用霍夫曼树有什么好处呢?首先,由于是二叉树,之前计算量为V,现在变成了log2V。第二,由于使用霍夫曼树是高频的词靠近树根,这样高频词需要更少的时间会被找到,这符合我们的贪心优化思想。

    依据内部节点的逻辑回归值(即概率)来分配为左右子树。

    回到基于Hierarchical Softmax的word2vec本身,我们的目标就是找到合适的所有节点的词向量和所有内部节点θ, 使训练样本达到最大似然。那么如何达到最大似然呢?

    基于Hierarchical Softmax的模型梯度计算

    我们使用最大似然法来寻找所有节点的词向量和所有内部节点θθ。先拿上面的w2w2例子来看,我们期望最大化下面的似然函数:

    对于所有的训练样本,我们期望最大化所有样本的似然函数乘积。

    为了便于我们后面一般化的描述,我们定义输入的词为w,其从输入层词向量求和平均后的霍夫曼树根节点词向量为xw, 从根节点到w所在的叶子节点,包含的节点总数为lw w在霍夫曼树中从根节点开始,经过的第i个节点表示为pwi,对应的霍夫曼编码为dwi∈{0,1},其中i=2,3,...lw。而该节点对应的模型参数表示为θwi, 其中i=1,2,...lw−1,没有i=lwi是因为模型参数仅仅针对于霍夫曼树的内部节点。

    定义ww经过的霍夫曼树某一个节点j的逻辑回归概率为P(dwj|xw,θwj−1),其表达式为:

    那么对于某一个目标输出词ww,其最大似然为:

    在word2vec中,由于使用的是随机梯度上升法,所以并没有把所有样本的似然乘起来得到真正的训练集最大似然,仅仅每次只用一个样本更新梯度,这样做的目的是减少梯度计算量。这样我们可以得到w的对数似然函数L如下: 

    要得到模型中w词向量和内部节点的模型参数θ, 我们使用梯度上升法即可。首先我们求模型参数θwj−1的梯度: 

    同样的方法,可以求出xwxw的梯度表达式如下:

    有了梯度表达式,我们就可以用梯度上升法进行迭代来一步步的求解我们需要的所有的θwj−1和xw。 

    所以,word2vec 使用Hierarchical Softmax对CBOW和Skip-Gram损失结构进行了改进,同时,又利用负采样方式,改进了模型训练。

    在讲基于Negative Sampling的word2vec模型前,我们先看看Hierarchical Softmax的的缺点。的确,使用霍夫曼树来代替传统的神经网络,可以提高模型训练的效率。但是如果我们的训练样本里的中心词ww是一个很生僻的词,那么就得在霍夫曼树中辛苦的向下走很久了。能不能不用搞这么复杂的一颗霍夫曼树,将模型变的更加简单呢?

    Negative Sampling就是这么一种求解word2vec模型的方法,它摒弃了霍夫曼树,采用了Negative Sampling(负采样)的方法来求解,下面我们就来看看Negative Sampling的求解思路。

    https://zhuanlan.zhihu.com/p/39684349 这里有个通俗的解释!

    既然名字叫Negative Sampling(负采样),那么肯定使用了采样的方法。采样的方法有很多种,比如之前讲到的大名鼎鼎的MCMC。我们这里的Negative Sampling采样方法并没有MCMC那么复杂。

    比如我们有一个训练样本,中心词是w,它周围上下文共有2c个词,记为context(w)。由于这个中心词w,的确和context(w)相关存在,因此它是一个真实的正例。通过Negative Sampling采样,我们得到neg个和w不同的中心词wi,i=1,2,..neg,这样context(w)和wi就组成了neg个并不真实存在的负例。利用这一个正例和neg个负例,我们进行二元逻辑回归,得到负采样对应每个词wi对应的模型参数θi,和每个词的词向量。从上面的描述可以看出,Negative Sampling由于没有采用霍夫曼树,每次只是通过采样neg个不同的中心词做负例,就可以训练模型,因此整个过程要比Hierarchical Softmax简单。

    现在我们来看看如何进行负采样,得到neg个负例。word2vec采样的方法并不复杂,如果词汇表的大小为V,那么我们就将一段长度为1的线段分成V份,每份对应词汇表中的一个词。当然每个词对应的线段长度是不一样的,高频词对应的线段长,低频词对应的线段短。每个词w的线段长度由词的个数占比确定:

    在采样前,我们将这段长度为1的线段划分成M等份,这里M>>V,这样可以保证每个词对应的线段都会划分成对应的小块。而M份中的每一份都会落在某一个词对应的线段上。在采样的时候,我们只需要从M个位置中采样出neg个位置就行,此时采样到的每一个位置对应到的线段所属的词就是我们的负例词。

    在word2vec中,MM取值默认为10^8

    负采样补充

    我们以跳字模型为例讨论负采样。

    词典V大小之所以会在目标函数中出现,是因为中心词w c生成背景词w o的概率P ( w o ∣ w c )使用了softmax,而softmax正是考虑了背景词可能是词典中的任一词,并体现在softmax的分母上。

    我们不妨换个角度,假设中心词wc生成背景词w o由以下相互独立事件联合组成来近似中心词 w c 和背景词 w o 同时出现在该训练数据窗口中心词 w c 和第1个噪声词 w 1 不同时出现在该训练数据窗口(噪声词 w 1 按噪声词分布 P ( w ) 随机生成,假设一定和 w c 不同时出现在该训练数据窗口)…中心词 w c 和第k个噪声词 w K 不同时出现在该训练数据窗口(噪声词 w K 按噪声词分布 P ( w ) 随机生成,假设一定和 w c 不同时出现在该训练数据窗口)

    我们可以使用σ ( x ) = 1 / ( 1 + exp ( − x ) )函数来表达中心词w c和背景词w o同时出现在该训练数据窗口的概率:

    当我们把K取较小值时,每次随机梯度下降的梯度计算开销将由O ( | V | )降为O ( K )。

    同样地,当我们把K取较小值时,每次随机梯度下降的梯度计算开销将由O ( | V | )降为O ( K )。

    层序softmax补充

    层序softmax利用了二叉树。树的每个叶子节点代表着词典V中的每个词。每个词w i相应的词向量为v i。我们以下图为例,来描述层序softmax的工作机制。

    假设l( w )为从二叉树的根到代表词w的叶子节点的路径上的节点数,并设n( w , i )为该路径上第i个节点,该节点的向量为u n ( w , i )。以上图为例,l( w 3 ) = 4。那么,跳字模型和连续词袋模型所需要计算的任意词w i生成词w的概率为:

    我们可以使用随机梯度下降在跳字模型和连续词袋模型中不断迭代计算字典中所有词向量v和非叶子节点的向量u。每次迭代的计算开销由O ( | V | )降为二叉树的高度O ( log | V | )。

    补充:

    -cbow 0表示不使用cbow模型,默认为Skip-Gram模型

    -size 表示词向量维数:经验是不超过1000,超过1000基本都没有效果,我感觉是可以取  sqrt(dict_size)/2 的样子,不过最好多试几个
    -window 上下文窗口,是训练词向量的时候,取上下文的大小,感觉这个一般都是5比较好

    -sample 表示采样参数,是一个经验忽视掉频率过高的词的参数,一般也用默认的就行。

    -sampe指的是采样的阈值,如果一个词语在训练样本中出现的频率越大,那么就越会被采样。

    -negative 表示负采样参数,每有一个正样本,选择几个负样本的参数,一般也是用默认的。

    -binary为1指的是结果二进制存储,为0以文本形式进行存储。
    上面这两个参数试过很多个,感觉就是默认的比较好用。

    -hs 做不做层次的softmax,是1的时候效果比较好,但是训练会慢一点
    -min-count 控制词典大小的参数,如果只想要高频词的话就设置高一点。

        架构:skip-gram(慢、对罕见字有利)vs CBOW(快)

    ·         训练算法:分层softmax(对罕见字有利)vs 负采样(对常见词和低纬向量有利)

    ·         欠采样频繁词:可以提高结果的准确性和速度(适用范围1e-3到1e-5)

    ·         文本(window)大小:skip-gram通常在10附近,CBOW通常在5附近

    展开全文
  • 注意,辅助任务(基于什么类型的上下文,预测什么)的选择相对用来训练的学习方法,结果向量的影响大得多。这方面在嵌入算法后面介绍。 2. 向量训练算法 将视作连续空间中的一个点,即的连续表示...

    前段时间一口气读完了 NN4NLP,很是畅快,非常喜欢作者行文讲解的口吻和逻辑。大概两周读完,每页都有收获,读完后反而担心有所疏漏,知识太多留不住,索性从头来一遍,把学习过程的知识点和思考记录下来,也算精简版供自己今后查阅。
    感兴趣的,可以一起学习讨论,真的很推荐这本书。

    大致介绍下该书。NN4NLP 由 Goldberg 撰写,是 CMU CS11-747 课程的教材,配合公开课食用更佳,公开课链接。本书并非系统介绍 NN 和 NLP,而是聚焦 NN 在 NLP 领域的具体应用,所以分成了四大部分:NN 中前馈神经网络的入门,前馈神经网络在 NLP 中的应用,RNN 等特殊结构在 NLP 中的应用,部分前沿方向介绍。
    因此,本博客也打算分成多篇进行总结,其他篇章请自行搜索本博客。


    自然语言数据

    三、语言模型

    语言模型,即针对某种语言给定句子们分配概率值的任务,或者针对一串单词后跟一个词或者词串的可能性分配概率值的任务,实际这两个任务是等价的,可转换。语言模型在机器翻译和自动语音识别中具有重要作用,即对系统产生的多个翻译或者转录假设进行评分。

    形式上,语言模型的任务是针对任意序列的词串分配概率,利用概率的链式规则,可写作

    这里写图片描述
    添加马尔科夫假设后,可以大大降低计算复杂度,这里用 k 阶马尔科夫假设,即下一个词仅依赖于该词和更前面的 k 个词,可以近似为
    这里写图片描述
    虽然马尔科夫假设明显不合理,但大大降低了计算复杂度,得到的结果也还不错,因此流行了数十年。

    有几个评估语言模型的指标,常见的是以应用为中心的方式,即在具体应用中以更高层级的指标进行评估。
    更本质的方式应该是使用困惑度(perplexity)指标。

    语言模型的传统方式

    传统方式基于 k 阶 markov 假设来 model
    这里写图片描述
    利用最大似然估计,有
    这里写图片描述
    虽然有效,但最大缺点在于存在零事件,即由于训练数据有限导致上式分子经常为0。
    解决方法一是,采用平滑技术。
    解决方法二是,采用 back-off 技术,即如果 k gram 不存在,就用 k-1 gram 来近似。
    目前,非 NN 的最先进技术是使用修正 Kneser-Ney 平滑。

    上述基于平滑 MLE 估计的方法虽然方便训练、实际工作也不错,但有几个重要缺陷:
    ① 平滑技术本身比较复杂,且基于 back-off 到低阶事件。
    ② 很难应用到较大的 n-grams 场景。
    ③ 对上下文基本没有泛化能力,如观察到 black car 和 blue car 对估计未见过的 red car 基本没有影响

    语言模型的 NN 方式

    相应地,基于非线性 NN 的语言模型方法解决了传统语言模型的几个缺陷,即仅以参数数量的线性增长就可以处理较大的上下文尺寸,避免了手工设计 backoff 阶的必要,支持对不同上下文的泛化。

    此时,NN 的输入是 k-gram 的词串,输出是该词串下一个词的预测概率分布。这 k 个词形成一个词窗,每个配以嵌入向量,然后所有串联形成输入向量。如下式
    这里写图片描述
    其中,E 就是嵌入矩阵。

    (1)训练

    通常使用交叉熵损失,但此时要使用较费时的 softmax 操作,从而使得 NN 语言模型难以拓展到大规模词典情况。
    总而言之,扩大 n-gram 在计算复杂度上更好接受,但扩大 vocabulary 更难接受。
    因此,处理在较大 vocabulary 上计算 softmax 而面临的大规模输出空间问题,主流方法有
    ① Hierarchical softmax,即将 softmax 计算构造为树遍历形式
    ② Self-normalizing 方法
    ③ Sampling 方法

    (2)优点

    虽然有上面那个限制,但 NN 语言模型优点还是很多的,至少性能比目前最好的传统语言模型要好。此外,除了对 k-gram 阶数更自由,还能对上下文进行泛化。

    (3)缺点

    比传统语言模型在预测时开销更大;
    难以应用到大规模 vocabulary。

    在机器翻译系统中,神经语言模型并不比 Kneser-Ney 平滑语言模型表现更好,但当两者结合时,系统性能却得到了提升。
    实际上,两者可以互相补充:神经语言模型对未知事件泛化更好,但有时这种泛化却伤害了性能,此时僵化的传统模型反而更好。

    此外,神经语言模型带来了一个很有用的副产品,词向量,即上式中矩阵 E 的行和 W^2 的列,可以用来表征词。

    四、词向量

    1、预训练词向量

    初始化 embedding 向量的方式通常为随机初始化方法:初始化为均匀抽样随机数,即 word2vec 采用的,或者前面讲过的 xavier 初始化方法。
    实际中,通常对普遍出现的特征可以用随机初始化方法,如 pos 或字母。对于出现较少的特征如词,一般用监督或者无监督的预训练方式来初始化。

    (1)监督预训练方式

    假设我们感兴趣的任务 A 只有有限的标注数据,如句法分析任务,同时有一个标注数据充分的辅助任务 B ,如 pos 标注任务。
    此时,我们可以通过预训练词向量以在任务 B 上取得好的预测表现,然后用这个训练好的词向量再来训练任务 A。这样可以充分利用任务 B 上的大量标注数据。
    当训练任务 A 时,可以把预训练词向量固定,或者针对任务 A 继续训练。
    当然,还有种方式是两个目标结合起来进行,这在后面的博文中再介绍吧。

    (2)无监督预训练方式

    可惜的是,通常找不到拥有大量标注数据的辅助任务 B(或者我们想用更好的向量来引导辅助任务 B 的训练),这时就需要无监督辅助任务了,即在大量未标注文本上进行训练,实际即从原始文本中创造无限量的监督训练样本。
    一大好处是可以提供监督训练集中未出现词的词向量。

    无监督预训练方法的关键思想在于,期待相似词的嵌入向量具有相似的向量。
    但词的相似性很难定义,通常是任务相关的。目前主流思路来源于 distributional hypothesis,即出现在相似上下文的词就相似。

    前面提到词向量是语言模型的副产品,实际上,语言模型可以被视为无监督方法,即基于给定词的前 k 个词构成的上下文来预测该词。下面我们介绍具体的词嵌入算法。

    注意,辅助任务(基于什么类型的上下文,预测什么)的选择相对用来训练的学习方法,对结果向量的影响大得多。这方面在词嵌入算法后面介绍。

    2. 词向量训练算法

    将词视作连续空间中的一个点,即词的连续表示,也可以分为两种:分布式表示(Distributional Representations),分散式表示(Distributed Representations)。
    分布式表示,即通过共现矩阵的方式来进行词的表示,词的意义来源于其在语料中的分布。算法学习的是共现模式。
    离散式表示,即将语言表示为稠密、低维、连续的向量,每个词被表示为“a pattern of activations”值构成的向量,词的意义以及与其他词之间的关系通过向量中的激活值和向量之间的相似性来反映。算法学习的是激活模式。

    这两种表征看起来相距甚远,也就产生了不同族的算法和思考方式,但深层次上有关联关系,后面再讲。

    (1)分布式表示

    分布式表示使用 word-context 矩阵来捕捉词的分布式特性,表示为 M,其元素表示一个词和一个 context 之间的信息强度,通常用 PMI 计算。
    从而,词向量可以用矩阵 M 的行来表示。

    word-context 矩阵的一大缺点是数据稀疏和高维度。通常用 SVD 分解为低阶矩阵来表征。(这里讲到的 SVD 分解提到了一些近似理论,很有趣,有空再记录下)

    (2)离散式表示

    离散式表示中,词的含义不仅蕴含在整个词向量的所有维度里,还蕴含在其他词向量的维度中,即离散表示的向量维度是不可解释的,特定维并不对应特定概念。

    前面提到的语言模型的表达式中,矩阵 W^2的列向量或者嵌入矩阵 E 的行向量即词的离散式表示。
    但这毕竟是语言模型任务的副产品,有两个重要要求:
    ① 计算所有词的概率分布,即需要计算涉及词表中所有词的正则化项,计算开销太大
    ② 根据上下文去计算句子级的概率估计,即需要依据链式规则进行分解,从而限制了根据上下文处理 k-grams

    如果只关注结果的词表示,则可完全解决这两个限制。
    Collobert and Weston 与2008提出的模型解决了这个问题,Bengio 在2009又进行了深入处理。
    用 w 表示目标词,c(1:k)表示有序词串,对于只有一个隐层的 MLP,输入是串联 w 和 c(1:k) 的向量表示,输出时对这对 word-context 的打分,如下式:
    这里写图片描述
    训练采用基于豁余的排序损失,以保证对正确 word-context 对的打分高于错误 word-context 对的打分至少豁余量1。即表示为
    这里写图片描述
    其中,w’是词表中的随机词。
    训练过程就是重复处理语料中的 word-context 对,每次都是:随机抽样词 w’,计算 L,更新 U、v 和词、context 的 embedding 来最小化 loss。
    这里提到的随机抽样 word 形成错误的 word-context 对的 negative sampling 法来进行优化,在 word2vec 中也有使用。

    这里介绍下 word2vec,实际上它算一个工具包,实现了两种不同的 context 表征方式(CBOW 和 Skip-Gram),以及两种不同的优化目标(Negative-sampling 和 Hierarchical Softmax)。
    这里介绍下基于Negative-sampling目标的吧。

    类似于Collobert and Weston的方法,也是让网络学着区分好的和差的word-context 对,但 word2vec 做了些改变:将基于豁余的排序损失换成基于 sigmoid 的概率表示;大幅简化了word-context 对的打分定义。
    如基于 CBOW 的 word2vec 实现直接将 context 所有词的 embedding 向量的加和表示为 context 向量,然后 s(w,c)=wc。这样虽然损失了 context 中词序信息,但使得变长 context 成为可能。
    基于 Skip-gram 的 word2vec 实现进一步解耦了 context 中词之间的依赖,虽然解耦很彻底,但实践表现性能很好。

    (3)两者关联

    分布式方法和离散式方法,都是基于 Distributional hypothesis 的,都尝试从词所出现的 context 的相似性上来捕获词的相似性。
    word2vec 训练会得到两个嵌入矩阵,E^W ∈ R^(|V_W × d_emb|) 和 E^C ∈ R^(|V_C × d_emb|),分别表示 word 和 context。一般舍弃 E^C 留下E^W。实际上 E^W × (E^C)^T = M’ ,可以发现,word2vec 隐式分解了word-context 矩阵 M’。

    (4)其他类型算法

    除了上面提的,还有不少 word2vec 算法的变种,目前还未能定性或定量分析他们的性能差异。包括 NCE 和 GloVe。

    3. context 的选择

    预测 word 所用的 context 的选择,对所得的词向量和对相似度的编码具有重要的影响。

    (1)最常用的划窗法,即目标词和前 m 个词以及后 m 个词。
    更大的窗口,倾向于产生更局部的相似性,如dog、bark、leash更可能聚到一起,walked、walking、run 更可能聚到一起。
    更小的窗口,倾向于产生高跟功能性或语义层面的相似性,如 poodle、pitbull、rittweiler,walking、running、approaching。
    如果倾向于更语义层面的相似性,除了小窗口,还可以配合加入 context 的位置信息。

    (2)用目标词所在的句或段的所有词来做 context。
    其实相当于非常大尺寸的窗口。

    (3)用语义窗口来代替词窗口。
    这种方式能产生高度功能性的相似性,即集合起那些能在句子里充当相同角色的词。

    4. 预训练词向量的使用

    使用预训练词向量时,有些选择需要考量。

    (1)预处理
    即使用时直接用还是讲每个向量归一化到单位长度?

    在很多词嵌入算法中,词向量的范数和词频有关,对词向量进行归一化会损失掉频率信息,这可能算是一致性的需要,也可能是一种不该有的信息损失。这和具体任务有关。

    (2)再训练
    即针对目标任务是否以及如何对预训练词向量再精细化训练?

    考量词嵌入矩阵 E ∈ R^|V|×d。

    ① 将 E 视为模型参数,和网络其他参数一样进行更新训练。
    虽然表现不错,但可能由于带来不像要的副作用,即训练数据中存在的词的 representation 将改变,而原有的和其相似的词却没变,这将损害预训练词向量中的泛化能力。

    ② 保持 E 不变。
    虽然保留了预训练词向量的泛化能力,但缺失了对给定任务的适应性。

    ③ 保持 E 不变,但训练一个变换矩阵 T ∈ R^d×d,词向量不再从 E 中查行向量而是矩阵 E’=ET 的行向量。
    T 可以使得预训练向量的某些方面关于给定任务得到再训练。但是,通常任务相关的适配应该是针对所有词的线性变化,而非只是训练数据中出现的那些词。这个方法的缺点就是只能针对那些训练数据中存在的词进行线性变换。

    ④ 保持 E 不变,但训练一个变换矩阵 A ∈ R^|d|×d,词向量不再从 E 中查行向量而是矩阵 E’=E+A 或者 E’=ET+A 的行向量。
    矩阵 A 初始化为零向量,并随着网络进行训练,可以学习到特定词的加性变化。

    5. 基于 Distributional hypothesis 的局限性

    (1)相似性在实践中有很多方面,基于 Distributional hypothesis 的上述方法完全没法控制它们学习到的相似性,只有对 context 进行有条件的筛选能稍微起点控制的作用。

    (2)词所蕴含的很多更细节的性质可能没有反映在文本中,自然也就没法被 representation 捕获。不过这是由于语言文本的 well-documented bias 导致的,自然误导了基于 Distributional hypothesis 的上述方法。

    (3)反义词由于常出现在相同的 context 中,从而认为是相似的。

    (4)基于 Distributional hypothesis 的上述方法得到的最终词向量是和 context 无关了,但实际上词的含义和其 context 有关,即一词多义。显然对一个词在所有使用场景都使用一样的向量是不合理的。

    6. 应用

    (1)获取词向量

    直接使用预训练词向量,要注意应用场景是否一致,毕竟应使用的训练集很可能不一致。
    网上有修改过的 word2vec 二进制文件,可以根据需要修改 context 方式。
    Polyglot project 提供了多语种的预训练词向量。

    (2)词的相似度

    一般用两个词向量的 cosine 相似度。

    (3) 词聚类

    聚好的类可以作为后续学习算法的离散特征使用。

    (4)检索相似的词

    简单的矩阵乘法 s=Ew 得到的就是所有词和词 w 之间的相似度,然后按值取前 k 个最大值即可。

    (5)寻找一组词的最相似词

    (6)剔除最差异的词

    (7)短文本相似度

    短文本计算相似度特别适合使用词向量。通常定义为
    这里写图片描述
    对于归一化了的词向量,可以直接写作
    这里写图片描述

    当然,上述方法表现不错,一般作为很不错的 baseline,但当有训练数据时,用上监督学习可以进一步提升表现,如 Parikh2016 为 SNLI 语义推理任务所提的网络结构

    (8)词的类推

    (9)改造

    当我们找到一个规模更大更有代表性的词对集,比预训练的词向量更能反映想要的相似性,Faruqui2015提出的 retrofitting 方法可以利用这些数据来提高词向量矩阵的质量。主要思想描述如下:
    ① 假设矩阵 E 为预训练词向量矩阵,图 G 用来编码词和词之间的二进制相似性——图上的节点为词,如果两个词相似则用边相连(显然在边上加上权重就实现0-1连续相似性),很简单可以吧上述词对集表征为图 G。
    ② 构造OP:寻找新的词向量矩阵 E’,其中行向量不仅与 E 中相应行相似还和图 G 中相应邻居们的行相似,目标函数表示为
    这里写图片描述

    (10)映射

    当我们拥有两个预训练词向量矩阵,一个词表较小,一个词表较大,两个是分开训练的因此不相容。也许较小词表的矩阵反而是用更复杂的算法训练的,而较大词表的矩阵是从网上下载的。一般这两个词表彼此有重叠的部分,我们期望用较大矩阵 E^L 中的词向量来表示较小矩阵 E^S 中不存在的词的向量。这两个嵌入空间的桥接就需要用到 Kiros2015、Mikolov2013 提出的线性映射方法。主要思想描述如下:
    ① 训练目标是寻找一个好的映射矩阵 M ,对那些两个词表公有的词,将 E^L 相应行更近地映射到 E^S 的相应行,即表示为
    这里写图片描述
    ② 学好的矩阵 M 也可以用来从 E^L 映射 E^S 中没有的相应行。该方法被 Kiros2015用来增加基于 LSTM 句子编码器的词表扩展。

    展开全文
  • 向量算法

    千次阅读 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

    展开全文
  • 最近要实现的一些功能需要让ES的同义、扩展、停止能够热更新,达到让搜索更精确的目的。在网上看了很多相关的博客,现在热更新的方案已经实施成功,现在来总结一下。 ES版本:5.5.2 IK分词器版本:5.5.2 ...
  • 基于情感词典的文本情感分类

    千次阅读 2017-08-29 09:36:50
    基于情感词典的文本情感分类 传统的基于情感词典的文本...然后,我们再输入的句子进行最直接的拆分,看看我们所记忆的词汇表中是否存在相应的词语,然后根据这个词语的类别来判断情感,比如“我喜欢数学”,“喜
  • 在处理后数据当中,包含相应嵌入模型。 原始数据下载地址:BeerAdvocate–Source 处理后数据下载地址:BeerAdvocate–Preprocess 1.5 NLPCC2014评估任务2_基于深度学习的情感分类 该语料共包含中文和英文两...
  • ... 在网上总能发现一些感兴趣的东西,从前是直接转载过来,现在...0. 向量是什么 1. 向量的来历 2. 向量的训练   2.0 语言模型简介   2.1 Bengio 的经典之作   2.2 C&W 的 SENNA   2.3 M...
  • 向量

    千次阅读 2018-07-31 20:18:25
    向量的来历 Distributed representation 最早是 Hinton 在 1986 年的论文《Learning distributed representations of concepts》中提出的。Distributed representation的意思是分布式表示,通常被称为“Word ...
  • 文章均从个人微信公众号“AI牛逼顿”转载,文末扫码,欢迎关注! word embedding的出现提升了自然...土豪公司利用大量数据、构造复杂深层的网络结构能够训练出高质量的向量,然后把结果开放,可以直接拿来用。...
  • 复杂性研究面临的难题

    千次阅读 2018-01-02 00:00:00
    一、什么复杂性目前无法表述清楚 在汉语中“复杂”一的意思为“事物的种类、头绪等多而杂”。在《朗文当代英语词典》中,形容complex被解释为:(1)难于理解、解释或处理,不清楚或不简单; (2)由许多密切...
  • 原代码: def natural_language_processing(self,response): #所抓取的预料进行自然语言处理 title = response.meta['title'] #print title content = response.meta['content'] #print cont...
  • 嵌入来龙去脉 word embedding、word2vec

    万次阅读 多人点赞 2017-08-14 21:57:45
    0嵌入来龙去脉 NLP的核心关键语言表示Representation NLP的表示方法类型 1的独热表示one-hot representation 2的分布式表示distributed representation NLP语言模型 的分布式表示 1基于矩阵的分布表示 2...
  • 本文作者推出了一种新的基于深度学习框架的向量表征模型,这种模型不仅能够表征词汇的语法和语义层面的特征,也能够随着上下文语境的变换而改变。简单来说,本文的模型其实本质上就是基于大规模语料训练后的双向...
  • 向量—Word2Vec入门及Gensim实践

    千次阅读 2018-08-08 18:10:57
    在机器学习领域,语音识别和图像识别都比较容易做到。语音识别的输入数据可以是音频频谱...Word2vec是google在2013年推出的一个向量实现工具(注意,不是向量模型),它的特点是将所有的向量化,这样之...
  • 德语语法笔记——形容综述

    千次阅读 2018-08-11 20:43:49
    形容是一个比较复杂的词类,它可用作定语、表语和状语。形容用作定语时,先要进行词尾变化。其次,形容有原级、比较级和最高级三种等级形式。在这些词尾变化和等级比较中又有许多规则。此外,形容还支配各种...
  • 向量Word2Vec(深度细致分析)

    千次阅读 2019-09-04 19:24:44
    向量方法是无监督学习的少数几个成功应用之一优点在于不需要人工进行语料的标注,直接使用未标注的文本训练集作为输入,输出的向量可以用于下游的业务处理,word2vec可以认为时应用最广泛的向量转换技术。...
  • 深度学习:嵌入之word2vec

    千次阅读 2017-07-26 15:24:57
    word2vec简介 深度学习在自然语言处理中第一个应用:训练嵌入。Google 的 Tomas Mikolov 在《Efficient Estimation of Word Representation in Vector Space》和《Distributed ...
  • 华为C语言编程规范(精华总结)

    万次阅读 多人点赞 2020-03-24 09:48:55
    物理层,无论使用什么样的目录或者名字空间等,需要把函数用一种标准的方法组织起来。例如:设计良好的目录结构、函数名字、文件组织等,这样可以方便查找。 1、一个函数仅完成一件功能 一个函数实现多个功能给开发...
  • 基于word2vec的中文向量训练

    万次阅读 2017-11-24 11:16:52
    基于word2vec的中文向量训练 使用katex解析的数学公式,csdn好像不支持 word2vec来源 Google开源 可以在百万数量级的词典和上亿的数据集上进行高效地训练 该工具得到的训练结果– 向量(word embedding),可以...
  • 【NLP】向量的惊人力量

    千次阅读 2018-08-27 16:03:36
    在谷歌有效的矢量表示的单词(以及你可以用它们做什么)。论文是: 向量空间中表示的有效估计 - Mikolov等。2013 单词和短语的分布式表示及其组合性 - Mikolov等。2013 连续空间表示中的语言规律 - ...
  • 中文停用列表

    千次阅读 2018-09-06 12:50:27
    中文停用分享 ! ” # $ % & ’ ( ) * + , – . .. … …… ………………. ./ .一 .数 .日 / // 0 1 2 3 4 5 6 7 8 9 : :// :: ; < > &...
  • 【NLP】之 Word2vec(将评论转为向量)

    万次阅读 2020-04-26 22:25:47
    Word2vec,为一些用来产生向量的有关模型。这些模型是浅层的神经网络,经过训练可以重新建立语言文本。网络用文字表示,有必要猜测相邻位置的输入字。 训练完成后,word2vec模型可用于将每个单词映射到矢量,该...
  • 什么编译原理被称为龙书?

    千次阅读 多人点赞 2020-07-17 08:32:21
    什么这本书叫做 龙书(Dragon book)? 这本书很有意思,它的书名是 《Compilers: Principles, Techniques, and Tools》,也就是编译器的原则、技术和工具。但它却画出了一个恐龙和骑士,恐龙身上写的是 Complexity...
  • Oracle创建同义及dblink

    千次阅读 2018-12-25 15:36:18
    一、定义同义顾名思义,是数据库方案对象的一个别名。这里的数据库方案对象指表、视图、序列、存储过程、包等。Oracle对象知识:同义(Synonym)创建删除,同义(Synonym)是数据库对象的一个别名,Oracle可以为...
  • pyhanlp 停用与用户自定义词典

    千次阅读 2018-09-20 21:35:02
    之前我们看了hanlp的词性标注,现在我们就要使用自定义词典与停用功能了,首先关于HanLP的词性标注方式具体请看HanLP词性标注集。 其核心词典形式如下: 自定义词典 自定义词典有多种添加模式,首先是展示的一个...
  • 这个观察提出了一个自然的问题:为什么许多自然系统具有临界系统的特性?一个可能的答案是自组织临界性(SOC),这是一些系统向临界状态演化并保持它的趋势。 在本章中,我将介绍沙堆模型,这是第一个展示 SOC 的...
  • 什么是“划高亮”?  有些同学可能不太清楚“划高亮”是指什么,下面就是一个典型的“划高亮”:  用户选择一段文本(即划),即会自动将这段选取的文本添加高亮背景,用户可以很方便地为网页添加...
  • 嵌入算法

    千次阅读 2018-08-27 01:06:42
    主要通过神经网络上下文,以及上下文和目标之间的关系进行建模,之所以神经网络可以进行建模,主要是由于神经网络的空间非常大,所以这种方法可以表达复杂的上下文关系。 1. 向量 nlp中最常见的第...
  • 【Python】中文分词并过滤停用

    千次阅读 多人点赞 2018-10-25 09:51:42
    中文分词并过滤停用,python代码如下。 #coding=utf-8 import jieba input_path='../data/train_pos_100.txt' output_path='../data/train_pos_100_seg.txt' stopwords_path='../data/stopwords1893_cn.txt' ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 102,415
精华内容 40,966
关键字:

复杂对什么相应的词