词干与词干

自然语言处理(NLP) ,特别是对于英语来说,已经发展成为一个阶段,在这个阶段,如果存在“完美的”引理词根化词,词干分析将成为一种古老的技术。这是因为词干分析器将单词/标记的表面形式改变为一些无意义的词干。

然后再一次“完美”外延化的定义是值得怀疑的,因为不同的 NLP 任务将需要不同的外延化水平。例如 在动词/名词/形容词形式之间转换单词

茎生植物

[in]: having
[out]: hav

Lemmatizer

[in]: having
[out]: have
  • 所以问题是,现在英语词干还有用吗?因为我们有大量的词素化工具用于英语

  • 如果没有,那么我们应该如何继续构建鲁棒的引理化程序 可以承受 nounifyverbifyadjectifyadverbify 预处理

  • 如何将词素化任务轻松地扩展到其他语言 有着与英语相似的形态结构

24513 次浏览

问题1: “[ . . ]现在英语词干有用吗? 因为我们有大量的词根化工具用于英语”

是的。对于许多应用程序,它们的结果是 很好。为此使用 Lemmatizer 是一种资源浪费。例如,考虑一下降维信息检索。在搜索的文档和查询中,将所有 驾驶/驾驶替换为 司机。你不在乎它是 开车还是 司机或者 X17a $,只要它把屈折相关的词聚集在一起。

问题2: “[ . . ]我们应该如何继续构建可以对预处理进行 nounify、 verify、 adectify 和 adubide 处理的健壮的 lemmatizer?

你的 引理的定义,是包括派生(开车-司机)还是只包括屈折(开车-硬盘-开车) ?它是否考虑到语义?

如果你想包括 推导(大多数人会说包括动词名词等) ,那么请记住,派生远远超过 不正常的屈折。有许多特质,差距,等等。你真的希望 改变(换车)和 改变(作为硬币)有相同的引理吗?如果没有,你在哪里划定界限?神经病-别紧张地球—— 挖掘-地球人怎么样,... ... 这真的取决于应用程序。

如果你考虑到 语义学(银行会被标记为 银行存款河岸取决于上下文) ,你有多深(你区分 银行机构银行建设) ?有些应用程序可能根本不关心这个,有些可能想要区分基本语义,有些可能想要细粒度的语义。

问题3: “词素化任务如何能够很容易地扩展到与英语有相似形态结构的其他语言?”

你说的“与英语相似的形态结构”是什么意思?英语屈折形态很少。对于其他形态类型的语言(真正的屈折、粘合、模板、 ... ...) ,有很好的引理化词。

除了粘合性语言之外,我认为 查找表(比如压缩的 trie)是最好的解决方案。(可能还有一些未知单词的备份规则,比如专有名称)。查找之后是某种消除歧义的方法(从琐碎的——采用第一个,或者采用与单词 POS 标记一致的第一个,到更复杂的方法)。更复杂的消歧通常是监督随机算法(例如 TreeTagger再快点) ,尽管机器学习和手动创建规则的组合也已经完成(例如 这个)。

显然,对于大多数语言,您不希望通过以下方法创建查找表 手,而是生成它从描述的形态学 这种语言。对于屈折变化的语言,你可以去工程 捷克语的哈吉克语,俄语的米赫耶夫语,或者,如果你有胆量的话, 你可以使用两级形态学。或者你可以做一些介于两者之间的事情, 例如 阿花(我自己)(注意这些都是满的 包括词素化的形态分析器)。或者你可以学习 在无监督的情况下使用引理化词 Wicentowski ,可能需要手动后处理,纠正 最常用的词。

有太多的选择,这真的完全取决于你想对结果做什么。

词干提取或词元化的一个经典应用是改进搜索引擎结果: 通过对查询应用词干提取(或词元化) ,以及(在索引之前)对所有标记进行索引,用户搜索,例如,“ have”可以找到包含“ has”的结果。

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

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

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


然而,我并不完全相信您对“词干分析器”和“词根化器”的(隐含的)定义是被普遍接受的。我不确定这些术语是否有任何普遍接受的定义,但我对它们的定义如下:

词干: 使用规则和已知后缀列表将屈折形式简化为词干或基本形式的函数。

Lemmatizer: 一个功能,执行相同的约简,但使用一个全面的完整形式字典,以便能够处理不规则形式。

基于这些定义,lemmatizer 本质上是词干分析器的更高质量(也更昂贵)版本。

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

值得指出的是,在一些特定的任务中,如 情绪分析(这是 NLP 中最受欢迎的子领域) ,使用 StemmerLemmatizer作为系统开发的特征(训练机器学习模型)对模型的准确性没有明显的影响,无论工具有多么优秀。尽管它使性能有所提高,但是还有一些更重要的特性,比如 依赖性解析,在这样的系统中有相当大的潜力可以利用。

必须指出,还应考虑到我们正在研究的语文的特点。

Stemming 只是删除或干扰单词的最后几个字符,通常会导致错误的意思和拼写。Lemmatiation考虑上下文,并将单词转换为有意义的基本形式,即引理。有时,同一个单词可以有多个不同的引理。我们应该为这个特定上下文中的单词确定词性(POS)标签。下面的例子说明了所有的差异和用例:

  1. 如果您将单词“ 关心”词根化,它将返回“ 关心”。如果你干,它会返回‘ ’,这是错误的。
  2. 如果您在 动词上下文中将单词“ 条纹”词源化,它将返回“ 脱衣服”。如果在 名词上下文中将其引理化,它将返回‘ 条纹’。如果你只是阻止它,它只会返回‘ 脱衣服’。
  3. 你会得到相同的结果,无论你词根化或干词,如 走路,跑步,游泳... 到 走,跑,游泳等。
  4. 词元化的计算开销很大,因为它涉及到查找表等等。如果数据集很大且性能有问题,那么使用 Stemming。记住,您也可以向 Stemming 添加自己的规则。如果准确性是至关重要的,数据集不是巨大的,那么使用 Lemmalization。