ml3
1、zero-shot Learning
定义:模型通过训练集和类别描述,要能将未知的类别识别出来(网络能够推理了!)
核心思想:先得到类别(如狗)和语义向量的一一对应关系,语义向量的每个维度就是类别描述(如颜色,大小),这样就从特征x--->类别y,转换成从特征x--(w)-->语义向量y,训练集训练完毕后,输入测试集,得到模型预测的语义向量y',看y’和 所有类别的语义向量以及未知类别的描述向量 哪个最接近,知道了哪个语义向量最近就知道了属于哪个类别。
存在的问题:领域漂移问题,语义向量的某个维度并没有完全表示好该属性信息,如马和猪的有无尾巴属性都是1,但2者的尾巴又完全不一样,以至于模型无法精准区分。
损失函数公式:
2、远程监督
定义:利用知识图谱已有的实体间关系对未标注的文本进行标注;
核心思想:假设如果从知识图谱中可获取三元组R(E1,E2)(注:R代表关系,E1、E2代表两个实体),且E1和E2共现于句子S中,则S表达了E1和E2间的关系R,标注为训练正例,每一个关系对应的所有句子打个包,称作一个bag,一个bag打上一个关系标签;
缺点:远程监督的数据里存在大量的噪声(例如乔布斯是苹果的创始人,和乔布斯吃了一个苹果,表达的完全不是一个关系),这个噪声问题被叫做wrong label 问题。
优化:动态转移矩阵、规则学习、thunlp-NRE
4、TF-IDF
功能:以"词频"衡量一个词的重要性,从而找到一篇文章最重要的几个词
公式:
第一步,计算词频TF:
考虑到文章有长短之分,为了便于不同文章的比较,进行"词频"标准化。
或者
第二步,计算逆文档频率 IDF:
这时,需要一个语料库(corpus),用来模拟语言的使用环境。
如果一个词越常见,那么分母就越大,逆文档频率就越小越接近0。分母之所以要加1,是为了避免分母为0(即所有文档都不包含该词)
第三步,计算TF-IDF:
如果文档某个词的TF-IDF很大,则说明它在这篇文档里面很重要
5、伽马函数
伽马函数可以当成是阶乘在实数集上的延拓,具有如下性质:
6、Digamma 函数
7、后验概率:已知结果,推测原因发生的可能性;先验概率:原因发生的概率
9、基于TF-IDF计算文档相似度
1️⃣先得到所有文档的词汇,term1,term2...termN,词汇顺序不变,如果词汇太多,可以每个文档取20个关键词(根据TF-IDF降序),然后将所有文档的自己的20个关键词汇总再排序:term1,term2...termM
2️⃣计算每个文档向量:(term1的tf-idf,term2的tf-idf,...termN的tf-idf)
3️⃣用向量之间的余弦相似度表示文档之间的相似度
10、pagerank
功能:用于计算有向图中的节点影响力=最终走到该节点的概率
公式:
右边表示用户通过有向边来到该点,比如通过某个页面里面的链接跳过来:u 为待评估的页面,Bu 为页面 u 的入链集合。L(v): v 页面的出链数量,阻尼因子 d,通常可以取一个固定值 0.85,
左边表示用户直接访问该点,比如直接输入网址。N 为节点总数,因为加入了阻尼因子 d,一定程度上解决了等级泄露(如果一个节点没有出链,就像是一个黑洞一样,吸收了其他网页的影响力而不释放,最终会导致其他网页的 PR 值为 0)和等级沉没(如果一个网页只有出链,没有入链,会导致这个网页的 PR 值为 0)的问题。
该公式需要不断迭代,直到PR收敛。
14、Node embeddings
【DeepWalk】
通过随机游走对图上的节点进行采样,得到一个节点构成的序列,随机游走得到的节点序列与word2vec方法中的句子相当。使用skip-gram模型通过预测周围节点进行训练和学习,最后得到每个节点的向量
使用随机游走有两个好处:
并行化,随机游走是局部的,对于一个大的网络来说,可以同时在不同的顶点开始进行一定长度的随机游走,多个随机游走同时进行,可以减少采样的时间。
适应性,可以适应网络局部的变化。网络的演化通常是局部的点和边的变化,这样的变化只会对部分随机游走路径产生影响,因此在网络的演化过程中不需要每一次都重新计算整个网络的随机游走。
【Node2vec】
Node2vec是DeepWalk的改进版,通过控制节点间的跳转概率来控制随机游走的路径,仍然用skip gram去训练,该算法引入了参数P和Q,参数Q控制着游走是向外还是向内: 若Q>1,随机游走倾向于访问接近的顶点(偏向BFS); 若Q<1,倾向于访问远离的顶点(偏向DFS)。参数P控制了随机游走返回到前一个节点的概率。不同的路径就有不同的同质性和结构性,网络的“同质性”指的是距离相近节点的embedding应该尽量近似,“结构性”指的是结构上相似的节点的embedding应该尽量接近,如2个节点都是各自局域网络的中心节点,结构上相似
15、分层softmax
分层 softmax采用霍夫曼树,该树根据词频构造,每一个叶子节点对应一个词(类别),每个词一一对应一个编码,一一对应一条路径,根据哈夫曼树的性质,靠近树根的节点是更加高频的词汇,离树根较远的节点是出现次数较少的词汇,这样就使得走到高频词汇(类别)所需要的花费的路径和时间更少,由于哈夫曼树是二叉树,所以走到叶子节点的时间复杂度是 log2V。对于原本要超多分类的模型,分层 softmax计算量减少很多。
哈夫曼树中每个分叉有1个theta参数向量,sigmoid(x*theta) 表示该分叉中走向左/右支的概率,1减去它就是相反方向。先根据标签集构造树,若词a的标签是词b,那就计算词 b 路径上的所有点的概率积,要让它最大,然后采用极大似然来更新参数。然后再计算下一个样本。预测一个样本时:就看哪个分支的概率大就往哪里走,这样只用走1条路,不用管别的单词了,直接走到预测的类别(词)
例子:先根据标签集构造树,此时一个词对应1个编码,对应1条路径,假定特征是单词a,标签是单词b,a通过embedding层得到词向量x,因为b对应的编码是001,所以现在从根节点走就得是左左右
反向传播更新theta,接着第二个样本…
11、句子向量
【词典库+词频】
【词典库+tf-idf】
【doc2vec】
doc2vec 能将句子映射为向量,通常采用Distributed Memory Model of Paragraph Vectors(PV-DM)方法,它能考虑到句子的词序。
训练阶段:每个词的向量和句子的向量随机初始化,对于句子a,将句子a的向量和a中的某个词向量a1作为网络的输入,该词附近的词向量a2作为标签,这是一个样本,第二个样本还用句子a,只是词往下滑动,直到这个句子a的词都用完了,然后是句子b,用这些样本来训练网络,更新所有参数和向量
预测阶段:固定网络参数和词向量,将新句子向量x随机初始化,采用滑动思想继续生成1堆样本,输入网络去训练,此时只更新句子向量,其他都不更新,最后就得到了句子x的向量
【textCNN】
卷积层的输出结果
12、泛在计算是给世界所有物体插入芯片,通过网络连接,创造电脑“无处不在”的环境,并进行计算的方式
13、BPE
传统构造词表的方法,是先对各个句子进行分词,然后再统计并选出频数最高的前N个词组成词表。
这种方法构造的词表存在着如下的问题:
- 实际应用中,模型预测的词汇是开放的,对于未在词表中出现的词(Out Of Vocabulary, OOV),模型将无法处理及生成;
- 词表中的低频词/稀疏词在模型训练过程中无法得到充分训练,进而模型不能充分理解这些词的语义;
- 一个单词因为不同的形态会产生不同的词,如由"look"衍生出的"looks", "looking", "looked",显然这些词具有相近的意思,但是在词表中这些词会被当作不同的词处理,一方面增加了训练冗余,另一方面也造成了大词汇量问题。
于是需要改进:Byte Pair Encoding (BPE)是目前构造词表有一种主流方法:
BPE能够拆分出单词的后缀,如['loved', 'loving', 'loves']
这三个单词。BPE算法通过训练,能够把上面的3个单词拆分成["lov","ed","ing","es"]
几部分,这样可以把词的本身的意思和时态分开,有效的减少了词表的数量。
BPE获得subword的步骤:
假设有语料集经过统计后表示为{'low':5,'lower':2,'newest':6,'widest':3},其中数字代表的是对应单词在语料中的频数。
1) 拆分单词成最小单元,并初始化词表。这里,最小单元为字符,因而,可得到
需要注意的是,在将单词拆分成最小单元时,要在单词序列后加上”</w>”(具体实现上可以使用其它符号)来表示中止符。
停止符</w>
的意义在于表示subword是词后缀。举例来说:st
不加</w>
可以出现在词首,如st ar
;加了</w>
表明改字词位于词尾,如wide st</w>
,二者意义截然不同
在子词解码时,中止符可以区分单词边界。
2) 统计相邻单元的频数。这里,最高频连续子词对"e"和"s"出现了6+3=9次,将其合并成"es",有
由于语料中不存在's'子词了,因此将其从词表中删除。同时加入新的子词'es'。一增一减,词表大小保持不变。
3) 继续统计相邻子词的频数。此时,最高频连续子词对"es"和"t"出现了6+3=9次, 将其合并成"est",去掉es和t
4) 接着,最高频连续子词对为"est"和"</w>",去掉est,有
5) 继续上述迭代直到达到预设的Subword词表大小或下一个最高频的字节对出现频率为1。
此时语料库的每个单词就可以由词表里面的subword来组合表示了,也就是编码,步骤:
对subword词表按照字符个数由多到少排序。编码时,对于每个单词,遍历排好序的子词词表寻找是否有token是当前单词的子字符串,如果有,则该token是表示单词的tokens之一
我们从最长的token迭代到最短的token,尝试将每个单词中的子字符串替换为token。 最终,我们将迭代所有tokens,并将所有子字符串替换为tokens。 如果仍然有子字符串没被替换但所有token都已迭代完毕,则将剩余的子词替换为特殊token,如<unk>
15、知识图谱本质上,是一种揭示实体之间关系的语义网络
16、LTP
LTP提供了一系列中文自然语言处理工具,用户可以使用这些工具对于中文文本进行分词、词性标注、句法分析等等工作。
17、数学知识点补充
期望E(X):最能代表X的值,是一种值的加权和,类似的,E(f(X)):最能代表f(X)的值
对于n个随机变量,协方差矩阵的每个元素是两两随机变量的协方差
极大似然估计是已知结果,寻求使该结果出现的可能性最大的参数
多元高斯分布概率密度函数:
条件概率公式:
马氏距离:
正定和半正定矩阵:
二次型X'AX的正定性和它的矩阵的正定性是一致的
正定 <=> 特征值全为正 <=> 各阶顺序主子式都为正(实对称是前提)
半正定《=》特征值都>=0(实对称是前提)
顺序主子式:
方阵A可以进行特征值分解,Q的每列是特征向量,对角阵的每个元素是相应的特征值:
若A对称:
特征值和特征向量:设 A 是n阶方阵,如果存在数m和非零n维列向量 x,使得 Ax=mx 成立,则称 m 是矩阵A的一个特征值,x是相应的特征向量
实对称矩阵A的不同特征值对应的特征向量是正交的,特征值也都是实数
Q是正交矩阵《=》
任意m*n的矩阵都可以分解(奇异值分解):
其中,矩阵的大小为,列向量是的特征向量,也被称为矩阵的左奇异向量(left singular vector);
矩阵的大小为,列向量是的特征向量,也被称为矩阵的右奇异向量(right singular vector);
矩阵大小为,矩阵大小为,两个矩阵对角线上的非零元素相同(即矩阵和矩阵的非零特征值相同);
矩阵的大小为,位于对角线上的元素被称为奇异值(singular value),除了主对角线上的元素以外全为0,主对角线元素>=0,是唯一的,降序排列,它的平方=特征值
P、Q是正交矩阵,来源于:
,
和的都是对称矩阵
谱图理论:
的拉普拉斯算子:
从几何角度上可以视作:所有自由度上进行微小变化后所获得的函数增益,或者各个自由度的函数增益之和
类似的,可以在图里面定义节点的增益是它和各个邻居节点的增益和,并把这个和叫做拉普拉斯算子在节点 处的值
那两个节点的增益怎么定义呢?
在网络中,节点 i 和邻居 j 之间的增益定义为 ,考虑进边的权重,增益就定义为 ,记为
其中 表示网络中节点 的值, 包含所有节点的值:
若是加权图,则图中的点 的度 并不是和该点相连的点的数量,而是和其相连的边的权重之和,也就是邻接矩阵的每一行的值加起来,即:
所以对于节点 来说,它从它的每个邻居节点所获得的总增益就是拉普拉斯算子在节点 处的值:
拉普拉斯算子在所有的节点上的作用结果就是:
就是图的拉普拉斯矩阵(Graph Laplacian),记作 ,W是邻接矩阵,或者记为A,D是度矩阵。所以图拉普拉斯算子作用在由图节点信息构成的向量 上得到的结果等于图拉普拉斯矩阵 * 向量 。拉普拉斯矩阵是实对称阵,所以可以对角化,且存在正交矩阵U,使得:
因为对于任意向量 ,有:
所以拉普拉斯矩阵是半正定的(或者通过证明瑞雷商>=0),并且其最小的特征值为
当 f 为图节点的标签向量时,该式子还可以刻画图的平滑度。
再定义拉普拉斯矩阵L的对称规范化Lsym:
同样根据瑞雷商可以证明拉普拉斯矩阵的对称规范化Lsym的特征值在[0,2]之间
FFT:
次多项式上 个不同的点能唯一确定这个多项式
两个多项式 的点值表示法分别为
则
于是多项式的乘法在点值表示法下可以以 的复杂度计算
快速傅里叶变换能够快速求得2个多项式乘积的系数:分别计算2个多项式在单位根的值(用单位根表示2个多项式的点值法),然后对应相乘,再反过来求系数
周期函数可展开为傅里叶级数:
等价于:
若是周期函数,周期为T,则(在 f 的连续点)
,称为基频率
欧拉公式:
带入欧拉公式,可把周期函数 f :
对任意函数(连续非周期函数),的傅里叶变换:
傅里叶变换的逆变换:
其中, 是傅里叶变换的基函数, 表示函数 在这个基函数上的坐标
物理学中亥姆霍兹方程的公式为:
为特征函数, 为特征值
因为
因此傅里叶变换的基函数是拉普拉斯算子的特征函数, 就代表了拉普拉斯算子的特征值
定义卷积:
卷积定理:两个信号的卷积的傅立叶变换是他们的傅立叶变换的点积,换句话说就是时域卷积等于频域相乘:
因为他俩很像:
其中 和 分别表示拉普拉斯矩阵的特征值和特征向量
所以图傅里叶变换是使用类比的方式直接定义的:拉普拉斯矩阵之于网络就相当于拉普拉斯算子之于函数,拉普拉斯算子的特征函数相当于拉普拉斯矩阵的特征向量,拉普拉斯算子的特征值相当于拉普拉斯矩阵的特征值
既然对于函数来说拉普拉斯算子的特征值和特征函数能够用于函数的傅里叶变换,那么对于网络来说拉普拉斯矩阵的特征值和特征向量就能够用于网络的傅里叶变换。
因此图傅里叶变换(k时的坐标)定义为:
用 来表示 经过图傅里叶变换后的坐标,那么图傅里叶变换可以表示成矩阵形式:
我们也可以得到图傅里叶变换的逆变换:
其中的每一列都是的特征向量
指数族分布的pdf都满足(右边的一维高斯分布就属于指数族分布,它的参数和统计量都是多维的):
有了充分统计量就对于后续求各种参数足够了,不再需要样本X1,X2,..XN信息了
信息量:-log p,它与事件发生的概率p成反比,熵H(p)就是信息量的期望,是对可能性的 衡量,在没有其他条件下,最大熵等价于事件等可能发生:
若要满足最大熵,则样本分布属于指数族分布
10、贝叶斯网络
贝叶斯网络也称为信念网,借助有向无环图来刻画随机变量之间的依赖关系,简化了联合概率分布的计算,每个节点是一个随机变量,网络蕴含条件独立性,等价于因子分解数学表达(如果没有父亲,就是它自己了):
因此:
如上图:
三种典型的结构蕴含的条件独立性:
- 同父结构:给定父结点 的取值(x1被观测到了),则 和 相互独立
- V型结构:也称冲撞结构,给定 的取值, 和 不独立;若 未知, 和 相互独立
- 顺序结构:给定x的值,y和z条件独立
上面是找节点之间的独立性的方法,判断集合的话(更广义的话)用D-separation(全局马尔科夫性),如若集合A->B->C,则集合B如果全部被观测了,则A和C独立
贝叶斯网络分类:
12、马尔科夫链
随机过程就是一堆随机变量的序列:X1,X2,Xt....,Xt表示时刻 t 的状态,该状态可能取状态1,状态2,...
马尔科夫链具有马尔科夫性质,马尔科夫性质:今天的状态只和昨天的状态有关,和大前天、大大..的状态无关,假定此处状态有三个值:牛、熊、横
因此可以写出状态转移矩阵:
状态转移矩阵中:横行对应的是牛市、熊市、横盘,从牛到熊的概率是0.075,从牛到横的概率是0.025,从熊到横是0.05
14、团:无向图中节点的集合,其中节点直接都连着,最大图:不能再大的团
随机场:随机场是一种图模型,结点表示一个随机变量,而边表示随机变量之间的依赖关系。
条件独立:如果P(X,Y|Z)=P(X|Z)P(Y|Z),或等价地P(X|Y,Z)=P(X|Z),则称事件X,Y对于给定事件Z是条件独立的
15、马尔可夫随机场=马尔科夫网络
无向图 且 满足成对、局部或全局马尔可夫性(这三者等价,也等价于因子分解):
1. 成对马尔可夫性(pairwise Markov property)
设无向图 G 中的任意两个没有边连接的节点 u 、v ,其他所有节点为 O ,成对马尔可夫性指:给定 <span id="MathJax-Span-17" class="mrow"><span id="MathJax-Span-18" class="msubsup"><span id="MathJax-Span-19" class="mi">Y<span id="MathJax-Span-20" class="mi">O的条件下,<span id="MathJax-Span-22" class="mrow"><span id="MathJax-Span-23" class="msubsup"><span id="MathJax-Span-24" class="mi">Y<span id="MathJax-Span-25" class="mi">u和 <span id="MathJax-Span-27" class="mrow"><span id="MathJax-Span-28" class="msubsup"><span id="MathJax-Span-29" class="mi">Yv<span id="MathJax-Span-30" class="mi"> 条件独立
2. 局部马尔可夫性(local)
设无向图 G 的任一节点 v ,W 是与 v 有边相连的所有节点,O 是 v 、W 外的其他所有节点,局部马尔可夫性指:给定 <span id="MathJax-Span-75" class="mrow"><span id="MathJax-Span-76" class="msubsup"><span id="MathJax-Span-77" class="mi">Y<span id="MathJax-Span-78" class="mi">W的条件下,<span id="MathJax-Span-80" class="mrow"><span id="MathJax-Span-81" class="msubsup"><span id="MathJax-Span-82" class="mi">Y<span id="MathJax-Span-83" class="mi">v和 <span id="MathJax-Span-85" class="mrow"><span id="MathJax-Span-86" class="msubsup"><span id="MathJax-Span-87" class="mi">Y<span id="MathJax-Span-88" class="mi">O 条件独立
3. 全局马尔可夫性(global)
设节点集合 A 、B 是在无向图 G 中被节点集合 C 分开的任意节点集合,全局马尔可夫性指:给定 <span id="MathJax-Span-221" class="mrow"><span id="MathJax-Span-222" class="msubsup"><span id="MathJax-Span-223" class="mi">Y<span id="MathJax-Span-224" class="mi">C的条件下,<span id="MathJax-Span-226" class="mrow"><span id="MathJax-Span-227" class="msubsup"><span id="MathJax-Span-228" class="mi">Y<span id="MathJax-Span-229" class="mi">A和 <span id="MathJax-Span-231" class="mrow"><span id="MathJax-Span-232" class="msubsup"><span id="MathJax-Span-233" class="mi">Y<span id="MathJax-Span-234" class="mi">B 条件独立
因子分解:
那么概率无向图的联合概率分布可以在因子分解下表示为:
举例:
13、HMM
HMM是有向图模型,求得是联合概率,是生成模型
HMM有2个假定:齐次( 状态转移概率不随时间而变)马尔科夫假设(隐状态序列为马尔科夫链)
+
观测独立性假设(任意时刻的观测状态只仅仅依赖于当前时刻的隐藏状态)
HMM定义:
因此Q={牛、熊、横},V={上涨0、下跌1、不变2},it:t 时刻的隐状态,ot:t 时刻的观测状态
此处隐状态有三个值:牛、熊、横;观测状态值:上涨0...
如果有了初始状态和状态转移矩阵可以知道 t 时刻隐状态为X的概率,再知道了观测状态生成矩阵=发射矩阵,可以知道:t 时刻观测状态为Y的概率,采用前向算法就可以计算出现当前观测序列的概率
通过极大似然估计+EM算法可以求出模型的参数π、A、B,随后就可以通过维特比算法预测出隐状态序列
举例:
详细:https://www.bilibili.com/video/BV13C4y1W7iB?spm_id_from=333.337.search-card.all.click
最大熵马尔可夫模型MEMM
有向图模型,是判别模型,右边是它的模型,左边是hmm(MEMM只写上面或者只写下面都行),MEMM打破了观测独立性假设,t 时刻隐状态标注 yt 不仅跟当前状态 xt 相关,而且还跟前面的 yt-1 相关,比如词性。但是由于局部归一化造成了 label bias problem标记偏置问题,即对观测值的注意力降低,主要通过词性去预测后面的词性,
CRF
它是无向图模型,判别是模型,CRF把隐状态的有向转为无向,归一化因子会在全局范围内进行归一化,从而解决了局部归一化带来的标注偏置问题。它没有HMM那样严格的独立性假设条件,因而可以容纳任意的上下文信息。
详细:https://zhuanlan.zhihu.com/p/37163081
https://zhuanlan.zhihu.com/p/97676647
11、推断
12、平稳分布:每个Xt的概率分布都一样