12 Sep

【中文分词系列】 5. 基于语言模型的无监督分词

迄今为止,前四篇文章已经介绍了分词的若干思路,其中有基于最大概率的查词典方法、基于HMM或LSTM的字标注方法等。这些都是已有的研究方法了,笔者所做的就只是总结工作而已。查词典方法和字标注各有各的好处,我一直在想,能不能给出一种只需要大规模语料来训练的无监督分词模型呢?也就是说,怎么切分,应该是由语料来决定的,跟语言本身没关系。说白了,只要足够多语料,就可以告诉我们怎么分词。

看上去很完美,可是怎么做到呢?《2.基于切分的新词发现》中提供了一种思路,但是不够彻底。那里居于切分的新词发现方法确实可以看成一种无监督分词思路,它就是用一个简单的凝固度来判断某处该不该切分。但从分词的角度来看,这样的分词系统未免太过粗糙了。因此,我一直想着怎么提高这个精度,前期得到了一些有意义的结果,但都没有得到一个完整的理论。而最近正好把这个思路补全了。因为没有查找到类似的工作,所以这算是笔者在分词方面的一点原创工作了。

语言模型

首先简单谈一下语言模型。

点击阅读全文...

14 Oct

【理解黎曼几何】2. 从勾股定理到黎曼度量

黎曼度量

几何,英文名是Geometry,原意是大地测量。既然是测量,就必须有参考物,还有得知道如何计算距离。

有了参照物,我们就可以建立坐标系,把每个点的坐标都写下来,至于计算距离,我们有伟大的勾股定理:
$$ds^2 = dx^2 + dy^2 \tag{1} $$
但这里我们忽略了两个问题。

第一个问题是,我们不一定使用直角坐标系,如果使用极坐标,那么应该是
$$ds^2 = dr^2 + r^2 d\theta^2 \tag{2} $$
因此可以联想,最一般的形式应该是
$$ds^2 = E(x^1, x^2)(dx^1)^2 + 2F(x^1, x^2)dx^1 dx^2 + G(x^1, x^2)(dx^2)^2 \tag{3} $$
这里的$x^1,x^2$是广义坐标,使用上标而不是下标来标记序号,是为了跟传统的教材记号一致。那这公式是什么意思呢?其实很简单,正如我们没理由要求全世界都使用人民币一样,我们没必要要求世界各地都使用同一个坐标系,而更合理的做法是,每一处地方都使用自己的坐标系(局部坐标系),然后给出当地计算距离的方法。因此,上述公式正是说,在位置$(x^1, x^2)$处计算向量$(dx^1, dx^2)$的长度的公式(当地的勾股定理)是$ds^2 = E(x^1, x^2)(dx^1)^2 + 2F(x_1, x_2)dx^1 dx^2 + G(x^1, x^2)(dx^2)^2$。

点击阅读全文...

18 Oct

【理解黎曼几何】5. 黎曼曲率

现在我们来关注黎曼曲率。总的来说,黎曼曲率提供了一种方案,让身处空间内部的人也能计算自身所处空间的弯曲程度。俗话说,“不识庐山真面目,只缘身在此山中”,还有“当局者迷,旁观者清”,等等,因此,能够身处空间之中而发现空间中的弯曲与否,是一件很了不起的事情,就好像我们已经超越了我们现有的空间,到了更高维的空间去“居高临下”那样。真可谓“心有多远,路就有多远,世界就有多远”。

如果站在更高维空间的角度看,就容易发现空间的弯曲。比如弯曲空间中有一条测地线,从更高维的空间看,它就是一条曲线,可以计算曲率等,但是在原来的空间看,它就是直的,测地线就是直线概念的一般化,因此不可能通过这种途径发现空间的弯曲性,必须有一些迂回的途径。可能一下子不容易想到,但是各种途径都殊途同归后,就感觉它是显然的了。

怎么更好地导出黎曼曲率来,使得它能够明显地反映出弯曲空间跟平直空间的本质区别呢?为此笔者思考了很长时间,看了不少参考书(《引力与时空》、《场论》、《引力论》等),比较了几种导出黎曼曲率的方式,简要叙述如下。

点击阅读全文...

19 Oct

【理解黎曼几何】6. 曲率的计数与计算(Python)

曲率的独立分量

黎曼曲率张量是一个非常重要的张量,当且仅当它全部分量为0时,空间才是平直的。它也出现在爱因斯坦的场方程中。总而言之,只要涉及到黎曼几何,黎曼曲率张量就必然是核心内容。

已经看到,黎曼曲率张量有4个指标,这也意味着它有$n^4$个分量,$n$是空间的维数。那么在2、3、4维空间中,它就有16、81、256个分量了,可见,要计算它,是一件相当痛苦的事情。幸好,这个张量有很多的对称性质,使得独立分量的数目大大减少,我们来分析这一点。

首先我们来导出黎曼曲率张量的一些对称性质,这部分内容是跟经典教科书是一致的。定义
$$R_{\mu\alpha\beta\gamma}=g_{\mu\nu}R^{\nu}_{\alpha\beta\gamma} \tag{50} $$
定义这个量的原因,要谈及逆变张量和协变张量的区别,我们这里主要关心几何观,因此略过对张量的详细分析。这个量被称为完全协变的黎曼曲率张量,有时候也直接叫做黎曼曲率张量,只要不至于混淆,一般不做区分。通过略微冗长的代数运算(在一般的微分几何、黎曼几何或者广义相对论教材中都有),可以得到
$$\begin{aligned}&R_{\mu\alpha\beta\gamma}=-R_{\mu\alpha\gamma\beta}\\
&R_{\mu\alpha\beta\gamma}=-R_{\alpha\mu\beta\gamma}\\
&R_{\mu\alpha\beta\gamma}=R_{\beta\gamma\mu\alpha}\\
&R_{\mu\alpha\beta\gamma}+R_{\mu\beta\gamma\alpha}+R_{\mu\gamma\alpha\beta}=0
\end{aligned} \tag{51} $$

点击阅读全文...

4 Nov

【外微分浅谈】2. 反对称的威力

内积与外积

向量(这里暂时指的是二维或者三维空间中的向量)的强大之处,在于它定义了内积和外积(更多时候称为叉积、向量积等),它们都是两个向量之间的运算,其中,内积被定义为是对称的,而外积则被定义为反对称的,它们都满足分配律。

沿着书本的传统,我们用$\langle,\rangle$表示内积,用$\land$表示外积,对于外积,更多的时候是用$\times$,但为了不至于出现太多的符号,我们统一使用$\land$。我们将向量用基的形式写出来,比如
$$\boldsymbol{A}=\boldsymbol{e}_{\mu}A^{\mu} \tag{1} $$
其中$\boldsymbol{e}_{\mu}$代表着一组基,而$A^{\mu}$则是向量的分量。我们来计算两个向量$\boldsymbol{A},\boldsymbol{B}$的内积和外积,即
$$\begin{aligned}&\langle \boldsymbol{A}, \boldsymbol{B}\rangle=\langle \boldsymbol{e}_{\mu}A^{\mu}, \boldsymbol{e}_{\nu}B^{\nu}\rangle=\langle\boldsymbol{e}_{\mu},\boldsymbol{e}_{\nu}\rangle A^{\mu}A^{\nu}\\
&\boldsymbol{A}\land \boldsymbol{B}=(\boldsymbol{e}_{\mu}A^{\mu})\land (\boldsymbol{e}_{\nu}B^{\nu})=\boldsymbol{e}_{\mu}\land\boldsymbol{e}_{\nu} A^{\mu}B^{\nu}
\end{aligned} \tag{2} $$

点击阅读全文...

16 Nov

为什么勒贝格积分比黎曼积分强?

学过实变函数的朋友,总会知道有个叫勒贝格积分的东西,号称是黎曼积分的改进版。虽然“实变函数学十遍,泛函分析心泛寒”,在学习实变函数的时候,我们通常都是云里雾里的,不过到最后,在老师的“灌溉”之下,也就耳濡目染了知道了一些结论,比如“黎曼可积的函数(在有限区间),也是勒贝格可积的”,说白了,就是“勒贝格积分比黎曼积分强”。那么,问题来了,究竟强在哪儿?为什么会强?

黎曼

黎曼

勒贝格

勒贝格

这个问题,笔者在学习实变函数的时候并没有弄懂,后来也一直搁着,直到最近认真看了《重温微积分》之后,才有了些感觉。顺便说,齐民友老师的《重温微积分》真的很赞,值得一看。

本是同根生,相煎何太急?

点击阅读全文...

25 Nov

三顾碎纸复原:基于CNN的碎纸复原

赛题回顾

不得不说,2013年的全国数学建模竞赛中的B题真的算是数学建模竞赛中百年难得一遇的好题:题目简洁明了,含义丰富,做法多样,延伸性强,以至于我一直对它念念不忘。因为这个题目,我已经在科学空间写了两篇文章了,分别是《一个人的数学建模:碎纸复原》《迟到一年的建模:再探碎纸复原》。以前做这道题的时候,还只有一点数学建模的知识,而自从学习了数据挖掘、尤其是深度学习之后,我一直想重做这道题,但一直偷懒。这几天终于把它实现了。

如果对题目还不清楚的读者,可以参考前面两篇文章。碎纸复原共有五个附件,分别代表了五种“碎纸片”,即五种不同粒度的碎片。其中附件1和2都不困难,难度主要集中在附件3、4、5,而3、4、5的实现难度基本是一样的。做这道题最容易想到的思路就是贪心算法,即随便选一张图片,然后找到与它最匹配的图片,然后继续匹配下一张。要想贪心算法有效,最关键是找到一个良好的距离函数,来判断两张碎片是否相邻(水平相邻,这里不考虑垂直相邻)。

点击阅读全文...

29 Nov

轻便的深度学习分词系统:NNCWS v0.1

好吧,我也做了一回标题党...其实本文的分词系统是一个三层的神经网络模型,因此只是“浅度学习”,写深度学习是显得更有吸引力。NNCWS的意思是Neutral Network based Chinese Segment System,基于神经网络的中文分词系统,Python写的,目前完全公开,读者可以试用。

闲话多说

这个程序有什么特色?几乎没有!本文就是用神经网络结合字向量实现了一个ngrams形式(程序中使用了7-grams)的分词系统,没有像《【中文分词系列】 4. 基于双向LSTM的seq2seq字标注》那样使用了高端的模型,也没有像《【中文分词系列】 5. 基于语言模型的无监督分词》那样可以无监督训练,这里纯粹是一个有监督的简单模型,训练语料是2014年人民日报标注语料。

点击阅读全文...