Stemmers vs Lemmatizers
自然语言处理(NLP),特别是英语的自然语言处理已经发展到如果存在“完美”的问题,词干将成为一个古老的技术的阶段。 这是因为词干改变词汇/标记的表面forms变成一些毫无意义的词干。
然后,“完美”的lemmatizer的定义是有问题的,因为不同的NLP任务将需要不同程度的lemmatization。 例如在动词/名词/形容词forms之间转换单词 。
词干
[in]: having [out]: hav
Lemmatizers
[in]: having [out]: have
-
所以现在的问题是,英文词干今天有用吗? 因为我们有大量的英语推理工具
-
如果不是,那么我们应该如何build立强大的可以接受
nounify
,verbify
,adjectify
和adverbify
预处理的adverbify
? -
如何将词形化任务轻松地缩放到与英语具有相似形态结构的其他语言?
Q1:“[…]英文词干今天有用吗?因为我们有大量的英语词汇化工具”
是。 Stemmers比Lemmatizers更简单,更小,速度更快,对于许多应用来说,它们的结果足够好。 使用lemmatizer这是浪费资源。 例如,考虑信息检索中的维度降低。 在search到的文档和查询中,您可以用驱动器replace所有的驱动器/驱动器 。 你不关心它是驱动还是驱动或x17a $ ,只要它把与拐点相关的单词聚集在一起。
问题2:“[…]我们应该如何继续build立强大的lemmatizers,可以承担名词化,动词化,adjectify和副词preprocesses?
引理的定义是什么?它包括派生( 驱动 – 驱动 )还是只有变化( 驱动 – 驱动 – 驱动 )? 它是否考虑到了语义?
如果你想包括派生 (大多数人会说包括名词等等),那么请记住,派生比变元更不规则。 有很多idiosincracies,缺口等。你真的想要改变 ( 改变火车 )和改变 (作为硬币)有相同的引理? 如果不是,你在哪里绘制边界? 神经 – 神经 , 地球 – 发现 – 地球 ,这真的取决于应用。
如果考虑到语义 ( 银行会根据上下文将其标记为银行货币或银行河stream ),那么您有多深?(您是否将银行与银行作为build筑物区分开来)? 有些应用程序可能根本就不在乎,有些应用程序可能需要区分基本语义,有些应用程序可能需要对其进行细化。
问题3:“词形化任务如何轻松地缩放到与英语具有相似形态结构的其他语言?”
你的意思是“像英语一样的形态结构”? 英语有很less的屈折形态。 对于其他形态types的语言(真正的变形,凝集,模板,…),有很好的lemmatizers。
除了粘着语言可能的例外,我会争辩说,一个查找表 (如压缩trie)是最好的解决scheme。 (可能有一些未知单词的备份规则,如专有名称)。 查找之后是一些消歧(从微不足道 – 从第一个开始,或者将第一个与POS标签一致)更加复杂。 更复杂的消歧通常是监督随机algorithm(如TreeTagger或更快 ),虽然机器学习和手动创build规则的组合也已完成(见这样 )。
显然,对于大多数语言你不想手工创build查找表,而是从该语言的形态描述中生成它。 对于屈折语言,你可以用捷克的工程方式或者俄罗斯的Mikheev工程方式,或者如果你胆大的话,你可以用两级的形态。 或者你可以在两者之间做一些事情,比如Hana (我自己)(请注意,这些都是包含词形变化的完整形态分析器)。 或者,您可以以无人监督的方式学习la Yarowsky和Wicentowski ,可能需要手动后期处理,纠正最频繁的单词。
有太多的select,这一切都取决于你想要做的结果。
词干或词形化的一个经典应用是search引擎结果的改进:通过将词干(或词形化)应用于查询以及(在索引之前)所有索引的索引,search例如“有”的用户能够find含有“有”的结果。
(可以说,在大多数search查询中,动词是不常见的,但是同样的原则适用于名词,特别是在具有丰富的名词形态的语言中。
为了提高search结果的目的,词干(或词条)是否有意义(“有”)与否(“HAV”)并不重要。 它只需要能够代表所涉及的单词及其所有的折点forms。 事实上,一些系统使用数字或其他types的idstring,而不是词干或词条(或基本forms或任何可能被称为)。
因此,这是一个应用程序的例子,其中stemmers(根据你的定义)和lemmatizers一样好。
但是,我不太相信你的(暗示的)“stemmer”和“lemmatizer”的定义是普遍接受的。 我不确定这些术语是否有普遍接受的定义,但是我对它们的定义方式如下:
Stemmer:使用已知后缀的规则和列表,将变形forms缩减为词干或基本forms的函数。
Lemmatizer:一个function,执行相同的减less,但使用一个全面的全forms字典能够处理不规则的forms。
基于这些定义,一个lemmatizer本质上是一个更高质量(更昂贵)的stemmer版本。
答案在很大程度上取决于我们正在谈论的自然语言处理(NLP)中的任务或特定研究领域。
值得指出的是,已经certificate,在一些特定的任务中,如情感分析 (这是NLP中最喜欢的子场),在系统开发中使用Stemmer或Lemmatizer作为特征(训练机器学习模型)对模型的准确性没有显着的影响,不pipe这个工具有多棒。 尽pipe它使性能稍微好一点,但还有更重要的function,如依赖分析 ,在这样的系统中有相当大的潜力。
重要的是要提到我们正在着手的语言的特点也应该被考虑在内。