1 | 原来这也叫Dependency Parsing

大家好,欢迎来到Derf the Reviewer的吐槽现场。大家投完EMNLP可以来找点乐子。

虽然匿名给了我吐槽的安全感,但我仍然希望读者能够分清楚吐槽文章和吐槽作者的区别。被我吐槽的文章仅仅是文章有槽点,也不一定是大家痛恨的灌水网红,希望大家不要过度引申到作者身上去。谁没有点黑历史嘛(别太多就行了)。

第一期吐槽拾Yoav Goldberg牙慧,光环献给ACL 2020新文章
Named Entity Recognition as Dependency Parsing
Juntao Yu, Bernd Bohnet, Massimo Poesio
arxiv.org/pdf/2005.0715

为什么呢?我最近在做的项目和结构化预测有点相关,其实也没太多相关,只是看着玩玩。说起结构化预测,怎么能不谈句法分析(parsing)?说起来,近10年的句法分析几乎已经特指依存分析(dependency parsing)了(证据:arxiv.org/abs/1910.0016)。也就是说,成分句法分析(constituency parsing)处于几乎被主流句法分析圈抛弃的状态(也不完全是:Dan Klein组就几乎以每年一篇ACL的速度更新他们的成分句法分析器,Hai Zhao老师组也在ACL 2019发过简化的HPSG分析器)。为什么呢?我也不知道,一个可能的猜想是因为CKY是O(N^3)的太慢了,而O(N)的shift-reduce相比之下快很多——那么问题来了,成分句法分析也可以shift-reduce啊。欢迎懂得个中曲折的朋友指教原因。

当然了,句法分析也处于即将被NLP圈抛弃的状态。很多小朋友们都觉得,深度模型那么好用,画人都看不懂的树和图干嘛?

我看到这篇文章的标题也是有点点好奇的,Named Entity Recognition as Dependency Parsing!意思是把命名实体识别(named entity recognition; NER)这个任务的数据表示成依存分析,然后再训练个依存分析模型吗?

作者:不好意思,您想多了。我们的模型是做完word embeddings(BERT+char embedding),扔进BiLSTM编码一下,然后用biaffine(双仿射)模型给每个区间打个分,就像依存分析的模型一样。打出来的分也对应了log likelihood,训练的损失函数自然就是最大化log likelihood,解码的时候分嵌套NER和无嵌套NER分别使用不同限制就好了。

[小小的吐槽:如果我是审稿人,我就会问问作者为什么要把BERT+char embeddings喂进biLSTM而不是Transformer,像这篇文章一样arxiv.org/pdf/1805.0105 不知道三位ACL审稿人问了没有;如果我是作者,我会对比BiLSTM和Transformer,短文写不下的话会放进附加材料。]

双仿射模型,确实是为了依存分析提出来的(arxiv.org/pdf/1611.0173)。可什么时候双仿射模型=依存分析了?

所以什么是双仿射模型?很简单,
线性(linear)模型: \bm{W}\bm{x}^\top (\bm{x} \in \mathbb{R}^{1\times d_1}, \bm{W} \in \mathbb{R}^{d \times d_1})
双线性(blinear)模型: \bm{x}\bm{W}\bm{y}^\top (\bm{x} \in \mathbb{R}^{1\times d_1}, \bm{y} \in \mathbb{R}^{1\times d_2}, \bm{W} \in \mathbb{R}^{d_1\times d_2})
仿射(affine)模型: \bm{W}\bm{x}^\top + \bm{b} ~(\bm{x} \in \mathbb{R}^{1\times d_1}, \bm{W} \in \mathbb{R}^{d \times d_1}, \bm{b}\in \mathbb{R}^{d\times 1}) ,或者也可以写作 \bm{W}[\bm{x};1]^\top (\bm{x} \in \mathbb{R}^{1\times d_1}, \bm{W} \in \mathbb{R}^{d \times (d_1+1)}) ,也就是把b写进W里。
考验人类泛化能力的时刻到了,那什么是双仿射模型呢?当然是
[\bm{x};1]\bm{W}[\bm{y};1]^\top (\bm{x} \in \mathbb{R}^{1\times d_1},\bm{y} \in \mathbb{R}^{1\times d_2}, \bm{W} \in \mathbb{R}^{(d_1+1) \times (d_2+1)})

[多句嘴:双线性模型,以及对数双线性(log-bilinear)模型,在深度学习时代到来前的结构化预测圈子可真的遍地都是。证据:aclweb.org/anthology/se]

如果说这篇文章可以叫NER as Dependency Parsing的话,我给大家提供一个可以发文章的参考选项:
- Semantic Role Labeling as Dependency Parsing
- Part of Speech Tagging as Dependency Parsing
- Unlabeled Constituency Parsing as Dependency Parsing
- Labeled Constituency Parsing as Dependency Parsing
- Head-Driven Phrase Structure Grammar Parsing as Dependency Parsing
- Combinatory Categorial Grammar Parsing as Dependency Parsing
- Event Detection as Dependency Parsing
- Grammar Error Detection as Dependency Parsing
- Masked Language Modeling as Dependency Parsing
- ......
(如果真的发了这些文章请acknowledge一下我,当然不acknowledge我也没处说理去)

我们在写文章的时候呀,还是要多学习一些知识,不能张口就来。不然标题党吸引眼球的目的没达到,还得被我这种刻薄的人吐槽。这个故事告诉我们,尽量还是别标题党的好。

我们继续来吐槽,如果这个做法可以被称作“named entity recognition as dependency parsing”,那么我做一个基于相似度的自动同义表达匹配(paraphrase alignment),也可以叫“paraphrase alignment as speech recognition”。后者听起来是不是很好笑?

我为什么这么说呢?那就得从传统的语音识别说起。有个经典的语音识别算法叫做动态时间规整(dynamic time warping; DTW)。或者说,DTW是为了语音识别而设计的算法。别着急,你就算没听过这个算法名字也肯定知道算法本身。大概意思就是,给定两个时间序列a[1..n]和b[1..m],还有一个n*m的相似度矩阵S,S[i,j]表示a[i]和b[j]之间的相似度。序列中每个元素可以匹配另一个序列中的0或1个元素,要求相似度之和最大的序列匹配。

怎么样?是不是算法课上学习动态规划的时候的经典问题?当然DTW比这个描述更灵活、包含的种类更多,但大意不变。
f[i,j] = max(f[i-1,j], f[i, j-1], f[i-1,j-1]+S[i,j])
再做一个回指的指针记录路径就好了。

如果有了标准词的语音模板和现成语音片段相似度的计算方法,读者是不是能想象一个简单的语音识别算法?非常自然地,DTW也可以用到同义表达匹配上,那我们能管它叫paraphrase alignment as speech recognition吗?好像不能对不对?是不是paraphrase alignment with DTW比较合适呢?那么原文章,是不是叫做named entity recognition with a biaffine model比较合适呢?

回头说来啊,除了标题党失败之外,这篇文章贡献还是不错的,为我们提供了一个更好的NER模型,也够得上目前的ACL平均水准,相对于那些做故事结尾生成(story ending generation)的文章不知道好到哪里去了。一方面,您生成故事结尾,怎么不给个故事结尾生成故事开头和剧情呢?是准备再发一篇文章吗?另一方面,做这有什么用啊?对肥皂剧和动画片的HE不满意非要把它改成BE吗?最重要的,写故事的人想传达的是思想,您当谁会愿意看您用电脑生成的故事啊?吐槽故事结尾生成没啥特殊的原因,只是脑子里第一个想起来吐槽的是它,还有好多类似的东西,留待以后吐槽。



下期预告:
You collect your dataset.
They collect their dataset.
I collect all of them, and call it my dataset.
无奖竞猜我要吐槽谁和什么?

编辑于 2023-04-23 16:29・IP 属地美国