美文网首页
机助翻译课程大作业

机助翻译课程大作业

作者: jeffbourbaki | 来源:发表于2018-12-26 01:50 被阅读0次

    1.语言学研究的特点和困境

    我们首先要明确,到今天,纯语言学研究对实用的意义极其有限,甚至它们根本的导向就不在于应用,尤其是语言学诸边缘学科,如文化语言学、心理语言学。这些研究者更乐于解释特定的现象而并不关心或没有能力关心更普遍的规律。

    尽管诸如pku等校在本科也开设语言学专业,所谓“应用语言学”的反倒显得不那么实用。语言学和NLP无论从学科、发展走向、工业界分工上都已经分道扬镳。统计机器学习逐渐剔去、抛弃了纯语言学模型,语言学也更着眼于统计方法无法替代的方面。

    研究语流音变,研究历史、文化、民族迁移或融合造成的语音变化是十分浅显的例子,这些除了帮我们了解变迁,并不能提供更多语言学知识。若用统计建模,类似于研究城市扩张、流行病传播或者道路网生长的方式,就成了社会建模,并不能让我们更深刻地了解语言。

    对于机器翻译或多音字情形的tts等一系列NLP下游实务,语言学的一部分部门能够提供基于规则的方法,比如Chomsky生成语法树,比如依存句法。形式语法学家可以提供多种多样的方案用作parsing,然而模型越精细、规则越复杂,拟合效果必然越差。

    这不是偶然的。基于规则的方案至少有三类致命缺点:

    首先,理想的规则需要满足完备性和相容性。
    即对任意一个句子,都可以判断是否合理,或者分析得出唯一结果;且规则之间不能产生矛盾。但自然语言毕竟不是数学公理体系,冲突的规则数不胜数。那么发生冲突后如何取舍呢?难道建立新规则判定规则后的取舍问题?这仅仅算是小修补,无法从根本上解决缺陷。就比如音节划分公认至少有音节首最大化原则MOR和序列-词边界原则WEL,这两者在具体判定中常常是矛盾的。存在规则无法分析的例子最简单的就是未登录词。不断更新的词汇和漂移的词义是基于规则下词法无法囊括的。

    第二点便是人类无法给规则分配合理的权重。
    规则提出的多了,便免不了冲突,冲突的解决方案可能是设置优先级(比如单独满足1或单独满足2为真,规定满足1不满足2认为为真,满足2不满足1时为假)。还有可能需要按照规则适用的比例分配权重。不经过统计学习方法提供参数,单纯的基于规则会将重要与否,优先与否的规则等同对待,显然是不合理的。

    第三,语言中不符合规则的例子实在太多。
    显然特定情况下的省略或倒装,若上升成孤立的规则,并不太合理 。
    若想涵盖所有语言现象,模型会无限庞大无限复杂,且预测效果一定会差。何况随着语言的演变,规则需要不断的更新,如此不稳定不成体系的规则集怎么能代表语言的本质呢?只有更抽象更深层的语言模型,或者学习规则的方法才是真正有意义的。(学习规则的方法无非就是ML算法,学习出的规则无非就是模型的参数,人类没必要了解具体的model文件,换言之,具体的语言规则)

    稍微解释一下为什么规则多会使模型变差。这是由语言现象的长尾性决定的。举个例子,大名鼎鼎的zipf定律告诉我们词频的分布就是长尾的,我们往往设置一个门限过滤掉频率过低的单词。因为对于这类单词,样本过小会使这些单词特征受随机误差干扰严重,更关键的是,稍微学过回归分析都会知道,不足够必要的参数增多会使模型的Variance急剧增加。

    一个猜想:
    一切语言学规则都可以对应于一种聚类。人类能够提出的规则必然区分度足够明显,且unlabelled。既然是聚类,有例外也正常。规则不相容之处本就是模糊地带。每一种聚类方式即是一个角度,一个衡量和分类标准,一个关于语言的切片。规则,或聚类的累加在文本空间如此高维的情况下必然无法还原全部信息。我们需要更精细,比如用word2vec。

    但这些并不是说纯粹语言学不再有重要作用。正如随机动力学建模相较于统计建模,牺牲了优良的预测性和应用性,却换来更深刻的可解释的结果。做出结果是一码事,设法解释相关和因果又是另一回事了。

    一个直观的例子是SVO与SOV近乎各占一半的比例。这对我们中很多人是件不可思议的事,本觉得汉语英语中的SVO是天经地义的。


    SVO和SOV的占比
    SVO和SOV的分布

    资料来自wals.info:
    (不少汉语方言的数据要归功于赵元任先生)
    https://wals.info/feature/81A#2/18.0/153.1

    自然语言毕竟不同于编程语言,要求高效率、极小语料、消除歧义。自然语言中省力往往是用机器看来更麻烦的方法:多义词、歧义句、牺牲句子结构完整的省略等等。以前想不通为什么不把语序写成Chomsky生成语法树的先中后序遍历来消除歧义,后来发现有些句子的生成语法树都不唯一。在人类看来,许多有歧义的句子反而表达和理解起来省力。word embedding的一部分困难也来自多义词,多义词在人类看来却是经济的,至少在语言的进化选择中大量被留下。

    2.词向量

    正式介绍原理之前,先看几个例子


    性别-等级

    在线实验室:
    https://lamyiowce.github.io/word2viz/?spm=a2c4e.11153940.blogcont69784.7.5235b432EIThK8

    我们知道这里的坐标相当于词向量在(he-she)-(queen-woman)平面上的投影。he-she向量代表性别轴,横坐标即是vector在性别方向上的分量。queen-woman向量代表级别轴,与性别轴基本正交。这在直观上表现为性别变化总体上不会影响到级别,二者基本独立。

    如图,aunt-uncle,actress-actor等词向量的差基本与横轴平行,代表它们级别相同,性别不同。但请看我自己添加的例子doctor-nurse,纵向分量并不显著,这显然与真实情况不符。因此词向量的结果并不一定就能够用现实解释。毕竟语言现象和真实世界存在相对的独立性。

    我们很容易在投影的子空间上验证著名的词向量等式:
    queen-woman=king-man,考虑到图中连线近乎平行。

    再看一个例子:


    原级-比较级-最高级

    这幅图反映出的结论要有趣的多。

    问个问题:形容词的原级、比较级、最高级是否程度递增?

    大多数会不暇思索的回答“是”对吧。

    直到看见这个反常的结论前,我也是这么想的。但这幅图显示,比较级单词在原级-最高级方向上中间偏原级;原级单词在比较级-最高级方向上中间偏比较级。

    画图解释一下几何意义。



    比较级和原级距离更近,而最高级-原级与最高级-比较级方向更相似。原级与比较级相对于最高级而言并不是程度上的差别,而是根本不共线,是衡量角度的区别。这也难怪,比较级其实并不含有绝对程度的信息,仅仅是A比B如何。相较于原级-最高级可明显表达成程度,比较级-最高级又是另一种衡量方式了。

    词向量的训练:

    词向量,又称word embedding,是指将词嵌入一个线性空间。我们常说的word2vec是训练词向量方式的一种,基本模型是一个简化的神经网络。我们也有传统的统计方法,比如通过共现矩阵的奇异值分解(“共现”的意思会在后文解释)。了解一些回归分析会知道奇异值分解无非是一种保留主要因素降维手段,可以用来求主成分分析。

    鉴于传统统计方法抽取特征的能力并不突出,这里所说的词向量生成就是word2vec。训练词向量的基本方法有两种:连续词袋模型CBOW和Skip-gram模型。通俗地讲,CBOW模型是用上下文预测中间空缺单词的分布,类似于做完形填空;Skip-gram是用中心词来预测context的分布。

    简单起见,我们将只介绍Skip-gram模型。

    首先要明确,词向量的获得总是以训练语言模型为目标而得到的副产品。如果我们仅仅为了训练词向量来做下游任务,需要提供假任务。在对目标函数不断的优化中,我们得到中间结果--词向量。

    假设训练的语料集是ABAACDBC,每个大写字母代表一个单词。我们生成每个单词所谓的one-hot向量,即
    A=(1 0 0 0),B=(0 1 0 0),
    C=(0 0 1 0),D=(0 0 0 1)。
    它们构成dim为4的线性空间。
    自然,对于一个含n个单词的文本,它生成一个n维线性空间。n充分大时会造成维数灾难和数据稀疏。

    我们需要找一个线性变换,对所有的one-hot向量降维。设这个线性变换为n*m矩阵A,(0 0 ... 1 ... 0)A的结果即是A的第i行 。于是第i分量是1,其余分量是0的one-hot向量被映射到了A的第i行这个行向量,这是个m维线性空间中的向量。

    因此A的行向量即是词向量,n个行向量构成的行向量组组即是词向量组。求语料中所有单词的word2vec只需求得矩阵A。

    那么,我们需要决定A中n*m个参数的选取。如何优化这些参数呢?我们需要给出一个标准。基本思想是让相似单词的欧式距离或夹角余弦尽量小。而相似单词又是以“共现”作为衡量标准的。

    展开来讲,单词W,V“共现”就是指确定单词W,P(V在窗口内|W)较大。以常用的窗口距离2为例,若我们确定__ __ W__ __空中单词的分布,即各单词在W左或右两个单词以内出现的相对频率,就可以找出排名前几的W的共现词,然后做线性变换适当拉近它们的距离。

    在实务中,词向量是被随机初始化的,优化方案几乎也没有真如上述的排出W的共现词,而是随机选取词V,判断W,V的共现程度决定调整其相对位置。

    考虑句子:The quick brown fox jumps over lazy dog


    输入与输出

    对这句话而言,输入是每个固定词对应的窗口。如the对应(The,quick,brown),quick对应(The,quick,brown,fox)。输出是一个tuple,即二元组(中心词,窗口内某词),如the窗口对应输出(the,quick)和(the,brown),quick窗口对应输出(quick,the),(quick,brown),(quick,fox)。

    自然我们可以把输出二元组汇总,并给每个tuple以相等权重。统计(the,X)的分布就得到了单词the的context信息。

    这样,假设输入的文本有10000个单词,即one-hot向量构成10000维的线性空间,取出单词the,比如是(0 0 ... 1 ... 0)作为输入,我们就可以得到10000个分量的输出向量,第一个分量值代表tuple中单词(1 0 ... 0)出现的概率,第二个分量值代表tuple中单词(0 1 0 ... 0)出现的概率,以此类推。

    那么问题来了,估计这个离散型分布直接用频率替换概率不就行了,关神经网络什么事?

    不妨回顾一下整个流程。我们目标确实是输入一个one-hot向量,输出一个10000维的向量,各分量的值代表了各单词与给定单词的共现概率。但这是个假任务!!我们必须把one-hot中的信息进行降维、加工、汇总,生成一个低维的特征向量,再利用这个特征向量作为分类器的输入,给出分入各类(即与各单词共现)的概率。中间层的副产品才是我们要的词向量!它集中了单词的特征。

    假任务:输入-隐层-输出

    上图中的中间层才是我们要的词向量。假如我们想用300个特征来表示单词,词向量就是300维的。通过隐层的线性神经网络学习到一个合适的线性变换,矩阵表示为A,那么(0 0 ... 1 ... 0)A就得到了词向量。

    隐层到输出层的环节是一个softmax分类器。对这个词陌生的话也不要紧,这就是一个多分类版本的Logistic回归。它将给出词向量属于不同类别的相对概率。

    相关文章

      网友评论

          本文标题:机助翻译课程大作业

          本文链接:https://www.haomeiwen.com/subject/pljqlqtx.html