Stemmers vs Lemmatizers

Posted

技术标签:

【中文标题】Stemmers vs Lemmatizers【英文标题】: 【发布时间】:2013-06-23 10:27:20 【问题描述】:

自然语言处理 (NLP),尤其是英语,已经发展到如果存在“完美”词形还原器,词干提取将成为一种古老技术的阶段。这是因为词干分析器将单词/标记的表面形式更改为一些无意义的词干。

然后,“完美”词形还原器的定义又是值得怀疑的,因为不同的 NLP 任务需要不同级别的词形还原。例如。 Convert words between verb/noun/adjective forms。

词干

[in]: having
[out]: hav

Lemmatizers

[in]: having
[out]: have

所以问题是,英语词干分析器今天有用吗?由于我们有大量的英语词形还原工具

如果不是,那么我们应该如何继续构建强大的词形还原器 可以接nounifyverbifyadjectifyadverbify 预处理?

如何轻松地将词形还原任务扩展到其他语言 与英语的形态结构相似?

【问题讨论】:

您有什么特别的任务吗?在上下文中回答 NLP 问题总是更容易。 为任何需要不同抽象级别的 NLP 任务创建灵活的词形还原器 =) 另见:what is the true difference between lemmatization vs stemming? 【参考方案1】:

Q1:“[..] 英语词干分析器今天有用吗?因为我们有大量的英语词形还原工具”

是的。 词干提取器比词形还原器更简单、更小并且通常更快,并且对于许多应用程序,它们的结果足够好。为此使用词形还原器是一种资源浪费。例如,考虑信息检索中的降维。在搜索的文档和查询中,您将所有 drive/driving 替换为 drive。你不在乎它是 drive 还是 driv 还是 x17a$ 只要它将屈折相关的词聚集在一起。

Q2:“[..]我们应该如何继续构建能够进行名词化、动词化、形容词化和副词化预处理的强大词形还原器?

您对引理的定义是什么, 它是包括派生(drive - driver)还是仅包括变形(drive - 驱动器 - 驱动器)?是否考虑语义?

如果您想包含派生(大多数人会说包括动词名词等),请记住派生远比屈折变化不规则。有许多特质、差距等。你真的希望 tochangechange trains)和 change(作为硬币)拥有同样的引理?如果不是,你在哪里划界? nerve - unnerve, earth - unearth - earthling, .. . 这真的取决于应用程序。

如果您考虑到 语义bank 将被标记为 bank-moneybank-river取决于上下文),你走多远(你区分 bank-institutionbank-building)?有些应用可能根本不关心这一点,有些可能想要区分基本语义,有些可能想要细粒度。

Q3:“如何将词形还原任务轻松扩展到具有与英语相似形态结构的其他语言?”

“与英语相似的形态结构”是什么意思?英语几乎没有屈折形态。对于其他形态类型的语言(真正的屈折、粘着、模板等),有很好的词形还原器。

除了凝集性语言之外,我认为查找表(比如压缩树)是最好的解决方案。 (可能有一些未知词的备份规则,例如专有名词)。查找之后是某种消歧(范围从微不足道的 - 取第一个,或取第一个与词 POS 标签一致的,到更复杂的)。更复杂的消歧通常是有监督的随机算法(例如TreeTagger 或Faster),尽管也已经完成了机器学习和手动创建规则的组合(参见例如this)。

显然,对于大多数语言,您不想通过以下方式创建查找表 手,而是从形态的描述中生成它 那种语言。对于屈折语言,你可以去工程 捷克的 Hajic 方式或俄罗斯的 Mikheev 方式,或者,如果你有胆量, 你使用两级形态。或者你可以在两者之间做点什么, 比如Hana(我自己)(注意这些都是满的 包括词形还原的形态分析器)。或者你可以学习 lemmatizer 以无人监督的方式 a la Yarowsky and Wicentowski,可能使用手动后处理,更正 最常用的词。

选项太多了,这完全取决于你想对结果做什么。

【讨论】:

user2543968 在我的回答中添加了以下内容。我把它移到这里,因为我不确定它们是如何相关的,尤其是与我在那个地方回答的两个子问题无关 - 有一些工具试图解决这些问题,例如著名的 TreeTagger,还有层数可以像 [Faster] [3] 一样改进它。我们在这里使用了机器学习和基于规则的系统。 user2543968 的另一个补充: - 词干化和词形化有时可以具有相同的目标:提高搜索速度 - 索引速度、分类和减小搜索索引大小这些。一个很好的问题也是,如何提高这些点?如果您在词形化过程中添加更多语义,您可能会降低速度。如果您添加更多详细信息,您可能会获得更大的索引。 lematizer 是一种平衡工具。【参考方案2】:

词干提取或词形还原的一个经典应用是改进搜索引擎结果:通过将词干提取(或词形还原)应用于查询以及(在索引之前)对所有被索引的标记,用户搜索,例如,“有" 能够找到包含 "has" 的结果。

(可以说,动词在大多数搜索查询中并不常见,但同样的原则也适用于名词,尤其是在名词形态丰富的语言中。)

为了改进搜索结果,词干(或引理)是否有意义(“have”)与否(“hav”)实际上并不重要。它只需要能够表示所讨论的单词及其所有屈折形式。事实上,一些系统使用数字或其他类型的 id 字符串来代替词干或引理(或基本形式或任何可能被称为的形式)。

因此,这是一个应用示例,其中词干分析器(根据您的定义)与词形还原器一样好。


但是,我不太相信您对“stemmer”和“lemmatizer”的(隐含)定义被普遍接受。我不确定这些术语是否有任何普遍接受的定义,但我定义它们的方式如下:

词干:使用规则和已知后缀列表将屈折形式减少为词干或基本形式的功能。

Lemmatizer:执行相同归约的函数,但使用全面的全格式字典能够处理不规则形式。

根据这些定义,词形还原器本质上是词干分析器的更高质量(也更昂贵)版本。

【讨论】:

【参考方案3】:

答案在很大程度上取决于我们所讨论的自然语言处理 (NLP) 中的任务或特定研究领域。

值得指出的是,已经证明在某些特定任务中,例如情感分析(这是 NLP 中最喜欢的子领域),使用 StemmerLemmatizer 作为系统开发(训练机器学习模型)中的一项功能,无论工具多么出色,都不会对模型的准确性产生明显影响。尽管它使性能稍微好一点,但还有一些更重要的功能,如 依赖解析,在此类系统中具有相当大的潜力。

值得一提的是,我们正在研究的语言的特性也应该被考虑在内。

【讨论】:

@alvas @alvas 这个article 是清楚显示我之前所说的那些研究之一。问候,【参考方案4】:

词干只是删除或词干单词的最后几个字符,通常会导致不正确的含义和拼写。 Lemmatization 考虑上下文并将单词转换为其有意义的基本形式,称为引理。有时,同一个词可以有多个不同的引理。我们应该在该特定上下文中识别单词的词性 (POS) 标签。以下是说明所有差异和用例的示例:

    如果您将单词“Caring”进行词形还原,它将返回“Care”。如果你停止,它将返回 'Car',这是错误的。 如果您在动词上下文中对单词“Stripes”进行词形还原,它将返回“Strip”。如果您在 名词 上下文中对其进行词形还原,它将返回“Stripe”。如果你只是阻止它,它只会返回 'Strip'。 无论您将walking、running、swim...等词词元化或词干化为walk、run、swim等,都会得到相同的结果。 词形还原的计算成本很高,因为它涉及查找表等等。如果您有大型数据集并且性能存在问题,请使用 Stemming。请记住,您还可以将自己的规则添加到词干。如果准确性至关重要且数据集不是很庞大,请使用词形还原。

【讨论】:

以上是关于Stemmers vs Lemmatizers的主要内容,如果未能解决你的问题,请参考以下文章

Java世界中的类vs包vs模块vs组件vs容器vs服务vs平台[关闭]

VS2005和VS2008做的项目有啥区别

性能测试 - 响应 vs 延迟 vs 吞吐量 vs 负载 vs 扩展性 vs 压力 vs 健壮性

VS2010怎样打开VS2013或者VS2015建立的工程

Atitit. visual studio vs2003 vs2005 vs2008  VS2010 vs2012

SGD vs Momentum vs NAG vs Adagrad vs Adadelta vs RMSprop vs Adam