什么是词干提取?

一群身着商务便装的人在创意办公室内一起工作

作者

Jacob Murel Ph.D.

Senior Technical Content Creator

Eda Kavlakoglu

Business Development + Partnerships

IBM Research

词干提取是几种文本规范化技术之一,它将原始文本数据转换为自然语言处理任务可读的格式。

词干提取是自然语言处理 (NLP) 中的一种文本预处理技术。特指将单词的屈折形式简化为一个所谓的“词干”或词根形式,也称为语言学中的“词元”。1它是两种主要方法中的一种(另一种则为词形还原)。它可将文本数据集中的屈折变体简化为一种形态词素。为此,词干提取旨在改善机器学习与信息检索系统中的文本处理效果。

为什么要使用词干提取?

从搜索和查找功能到深度学习模型,机器很大程度上根据形式来处理语言,而很多研究人员都认为计算机无法理解语言中的含义。2虽然某些人对后一点存在争议,但事实是:机器学习模型需经过训练才能将不同的单词识别为一个基础词的形态变体。例如,在搜索引擎或图书馆目录中,用户可能会提交仅包含一个词的查询(例如,investing),但预计会出现使用任意屈折词形式(例如,investinvestmentinvestments 等)的结果。通过将派生词形式简化为一个词干,词干提取有助于信息检索系统将形态上相关的词视为同一个词。3

对于很多文本挖掘 任务(包括文本分类、聚类、索引等),词干提取可通过缩小机器学习算法的维度并根据概念对单词进行分组来协助提高准确性。降低算法维数可以提高统计 NLP 模型的准确性和精度,例如主题模型和词嵌入。4因此,在执行各种 NLP 任务(例如,词性标注的情感分析)时,词干提取可提高准确性。因此,词干提取便成为了开发大型语言模型的其中重要一步。

小球在轨道上滚动的三维设计

最新的 AI 新闻 + 洞察分析

在每周的 Think 时事通讯中,发现专家精选的有关 AI、云等的洞察分析和新闻。 

词干提取的工作原理

词干提取是文本挖掘管道中的一个阶段,它将原始文本数据转换为可供机器处理的结构化格式。词干提取本质上是去除单词中的词缀,只留下基本形式。5这相当于删除词标记末尾的字符。然而,除了这种基本的相似性之外,词干提取算法差异很大。

Mixture of Experts | 8 月 28 日,第 70 集

解码 AI:每周新闻摘要

加入我们世界级的专家小组——工程师、研究人员、产品负责人等将为您甄别 AI 领域的真知灼见,带来最新的 AI 资讯与深度解析。

词干提取算法的类型

为了探讨词干提取算法运算之间的差异,我们可对莎士比亚《仲夏夜之梦》中的这句话进行处理:“爱情是不用眼睛而用心灵看着的,因此生着翅膀的丘匹德常被描成盲目。”(Love looks not with the eyes but with the mind, and therefore is winged Cupid painted blind.)在进行词干提取之前,用户必须对原始文本数据进行标记化。Python 自然语言工具包 (NLTK) 的内置标记器会将引用的文本输出为:

Tokenized: ['Love', 'looks', 'not', 'with', 'the', 'eyes', 'but', 'with', 'the', 'mind', ',', 'and', 'therefore', 'is', 'winged', 'Cupid', 'painted', 'blind', '.']

通过在多个词干提取器中运行标记化输出,我们可以观察到词干提取算法的不同之处。

Lovins 提取器

Lovins 词干处理法是首个向大众公开的词干处理算法。从本质上讲,它的功能就是一个参数化程度很高的查找和替换函数。它可将每个输入标记与常见后缀列表进行比较,而每个后缀均以 29 条规则之一作为条件。如果在标记中发现该列表的后缀之一,并且删除后缀并不违反任何关联后缀的条件,此算法则会从标记中删除该后缀。然后,词干提取后的标记会通过另一组规则来运行,从而纠正词干词根中常见的畸形问题;例如,双字母(比如,hopping 变为 hopp 再变为 hop)。6

 此代码使用 Python 词干提取库,7对标记化莎士比亚语录进行词干提取:

from stemming.lovins import stem
from nltk.tokenize import word_tokenize
text = "Love looks not with the eyes but with the mind, and therefore is winged Cupid painted blind."
words = word_tokenize(text)
stemmed_words = [stem(word) for word in words]

代码输出:

词干提取后:['Lov', 'look', 'not', 'with', 'th', 'ey', 'but', 'with', 'th', 'mind', ',', 'and', 'therefor', 'is', 'wing', 'Cupid', 'paint', 'blind', '.']

输出中显示了 Lovins 词干处理法如何正确地将变位和时态转换为基本形式(例如,painted 变为 paint),同时消除复数形式(例如,eyes 变为 eye)。但是,Lovins 词干提取算法也会返回很多格式有误的词干,例如 lovthey。出现这些格式错误的词根词是因为删除了过多字符。在机器学习中,此类错误往往有助于揭示潜在的流程。

与 Lovins 词干提取器的后缀列表进行比较时,同时适合 lovethe 的最长后缀是单字符 -e。该后缀的唯一附加条件是“词干无限制”,也就是说,无论剩余词干的长度如何,词干提取器都可以去掉 -e。遗憾的是,词干 lovth 均不包含 Lovins 算法用于识别格式错误单词的任何特征,例如双字母或不规则复数。8

当此类格式错误的词干从算法中逃逸时,Lovins 词干处理法可将语义上不相关的单词简化为同一词干;例如,将 thethesethis 均简化为 th。当然,这三个单词均为指示词,因此它们具有相同的语法功能。但其他指示词(例如 thatthose)却未简化为 th。这意味着 Lovins 词干处理法生成的词干无法正确代表词组。

Porter 词干处理法

与 Lovins 词干提取器相比,Porter 词干提取算法使用更加数学化的词干提取算法。从本质上讲,该词干提取器将给定标记中的每个字符分类为辅音 (c) 或元音 (v),并将后续的辅音分组为 C,将后续的元音分组为 V。因此,词干提取器将每个单词标记表示为辅音和元音组的组合。以这种方式枚举后,词干提取器会通过一个规则列表运行每个单词标记,这些规则根据标记中元音辅音组的数量指定要删除的结尾字符。9由于英语本身遵循一般而非绝对的词法规则,因此 Porter 词干提取器算法用于确定后缀删除的系统标准可能会返回错误。

Python NLTK 包含内置的 Porter 词干提取器函数。此代码将 Porter 词干提取算法部署到标记化莎士比亚语录上:

from nltk.stem import PorterStemmer
from nltk.tokenize import word_tokenize
porter_stemmer = PorterStemmer()
text = "Love looks not with the eyes but with the mind, and therefore is winged Cupid painted blind."
words = word_tokenize(text)
stemmed_words = [porter_stemmer.stem(word) for word in words]

此代码返回:

词干提取后:['love', 'look', 'not', 'with', 'the', 'eye', 'but', 'with', 'the', 'mind', ',', 'and', 'therefor', 'is', 'wing', 'cupid', 'paint', 'blind', '.']

与 Lovins 一样,Porter 正确地更改动词变位和名词复数。虽然缺少 Lovins 的其他格式错误词干(例如,将 love 改为 lov),但 Porter 词干提取算法仍然错误地删除 therefore 结尾的 -e

根据 Porter 词干处理法的辅音-元音分组方法,therefore 会表示为 CVCVCVCV 或 C(VC)3V,同时附带表示辅音-元音组重复项的指数。

该算法的最后一个步骤为:如果某一词未经任何词干提取处理,且其指数值大于 1,则从该词的词尾(如果存在)中去除 -eTherefore 的指数值等于 3,且不含该算法的其他条件中列出的任何后缀。10因此,therefore 将变为 therefor

诚然,这是 Porter 词干提取法的唯一错误,而它或许可以证明为何它是使用最广泛的词干提取算法。事实上,Porter 词干提取法为后来出现的词干提取算法奠定了基础。

Snowball 词干提取法

Snowball 词干提取器是 Porter 词干提取器的更新版本。虽然它旨在实施一组更强大的规则来确定后缀删除,但它仍然容易出现许多相同错误。与 Porter 词干提取器非常相似,Python NLTK 包含内置的 Snowball 词干提取器函数:

from nltk.stem.snowball import SnowballStemmer
from nltk.tokenize import word_tokenize

stemmer = SnowballStemmer("english", True)
text = "There is nothing either good or bad but thinking makes it so."
words = word_tokenize(text)
stemmed_words = [stemmer.stem(word) for word in words]

此方法会产生与 Porter 词干提取法相同的莎士比亚文本输出,从而错误地将 therefore 简化为 therefor

词干提取后:['love', 'look', 'not', 'with', 'the', 'eye', 'but', 'with', 'the', 'mind', ',', 'and', 'therefor', 'is', 'wing', 'cupid', 'paint', 'blind', '.']

Snowball 词干提取法与 Porter 词干提取法的主要区别在于两个方面。首先,虽然 Lovins 与 Porter 词干提取法仅会提取英语单词,但 Snowball 词干提取法却可提取以各种其他罗马文字语言书写的文本;例如,荷兰语、德语、法语甚至还有俄语。其次,通过 Python NLTK 库实现的 Snowball 词干提取法可忽略非索引字。非索引字是指在预处理期间从数据集中删除的非通用单词的集合。Snowball 词干提取法的预定义非索引字列表包含缺少直接概念定义的单词,而这些单词会更多地用于语法功能而非语义功能。Snowball 词干提取法的英语非索引字列表中包含的非索引字包括 theabeing 等。11

Lancaster 词干提取法

许多资料将 Lancaster 词干提取器(也称为 Paice 词干提取器)描述为英语语言词干提取器中最激进的词干提取器。Lancaster 词干提取器包含 100 多条规则,这些规则规定用其他字符串(如果有)替换哪些结尾字符串(如果存在)。词干提取器遍历每个单词标记,并根据所有规则进行检查。如果标记的结尾字符串与规则的结尾字符串匹配,则算法执行规则的描述操作,然后再次通过所有规则运行转换后的新单词。词干提取器会反复应用规则,直到给定的单词通过它们而没有被转换。12

虽然在 Python NLTK 中不可用,但 Lancaster 词干提取器在词干库中可用:13

from stemming.paicehusk import stem
from nltk.tokenize import word_tokenize
text = "Love looks not with the eyes but with the mind, and therefore is winged Cupid painted blind."
words = word_tokenize(text)
stemmed_words = [stem(word) for word in words]

此代码会将标记化后的莎士比亚文本段落的词干提取为:

Stemmed: ['Lov', 'look', 'not', 'with', 'the', 'ey', 'but', 'with', 'the', 'mind', ',', 'and', 'theref', '', 'wing', 'Cupid', 'paint', 'blind', '.']

显然,Lancaster 词干提取器的迭代方法是词干提取器中最激进的,如 theref 所示。首先,Lancaster 词干提取器具有规则“e1>”。此规则删除单字符 -e,且不进行替换。算法从 therefore 中删除 -e 之后,它会通过每条规则运行新的 therefor。新转化的单词符合规则“ro2>”。此规则删除两个字符的后缀,-or,且不进行替换。因此,生成的词干 theref 不符合任何其他算法的任何其他规则,因此作为词干基础返回。与 Lovins 不同,Lancaster 算法无法解决格式错误的单词。

词干提取的局限性

语言支持

如今已有很多英语词干提取法,以及适用于其他罗马脚本语言的词干提取法。而最近,相关研究已转向开发并评估适用于非罗马脚本语言的词干提取算法。其中,由于其复杂的形态与正字法变化,阿拉伯语可谓尤具挑战。少数研究比较了不同阿拉伯语词干提取法在分类等任务中的功效。14此外,研究人员还研究了词干提取在改善泰米尔语15与梵语信息检索任务方面的准确性。16

词干过度提取和词干欠提取

虽然研究证明词干提取在提高 NLP 任务准确性方面发挥作用,但词干提取确实存在两个主要问题,需要用户注意。词干提取过度是指将两个语义不同的词简化为相同的词根,从而导致混淆。词干提取不足表示没有将两个语义相关的词简化为相同的词根。17词干提取过度示例:Lancaster 词干提取器将 wander 简化为 wand,这两个词在英语中具有不同语义。然而,Porter 和 Lovins 词干提取器根本不会改变 wander。词干提取不足示例:Porter 词干提取器不会将 knavish 简化为 knav,也不会将 knave 简化为 knav,但它们确实具有相同的语义词根。相比之下,Lovins 词干提取器会将这两个词都简化为 knav

基本形成

虽然各有相似的用途和目标,但词干提取和词形还原在细微却又关键的很多方面又有所不同。文献通常会将词干提取描述为更具启发式,而其本质则是从单词中剥离常见后缀以生成词根。相比之下,词形还原会对不同单词进行更详细的形态分析,以确定词典基本形式,从而同时去除后缀和前缀。虽然词干提取速度更快、更易实现,但很多深度学习工具开发人员可能更偏爱词形还原,因为它的剥离流程更为细致入微。

相关解决方案
IBM watsonx Orchestrate

使用 IBM® watsonx Orchestrate 轻松设计可扩展的 AI 助手和代理、自动执行重复任务并简化复杂流程。

探索 watsonx Orchestrate
自然语言处理工具和 API

通过强大灵活的库、服务和应用组合,加速实现人工智能的商业价值。

深入了解 NLP 解决方案
AI 咨询与服务

通过增加 AI 重塑关键工作流程和运营,最大限度提升体验、实时决策和商业价值。

深入了解人工智能服务
采取后续步骤

使用 IBM® watsonx Orchestrate 轻松设计可扩展的 AI 助手和代理、自动执行重复任务并简化复杂流程。

探索 watsonx Orchestrate 深入了解 NLP 解决方案
脚注

1  Ruslan Mitkov, 牛津计算语言学手册,第 2  ,牛津大学出版社,2014 年。

2  Emily Bender 和 Alexander Koller,“迈向 NLU:数据时代的意义、形式与理解”, 第 58 届计算语言学协会年会论文集,2020 年 ,第 5185-5198 页, https:/ /aclanthology.org/2020.acl-main.463

3  Steven Bird、Ewan Klein 和 Edward Loper, 《用 Python 进行自然语言处理》,O'Reilley,2009 年。

4  Gary Miner、Dursun Delen、John Elder、Andrew Fast、Thomas Hill 和 Robert A. Nisbet, 针对非结构化文本数据应用的实用文本挖掘和统计分析,Academic Press,2012 年。

5 Christopher Manning 和 Hinrich Schütze,《统计自然语言处理基础》,麻省理工学院出版社,1999 年。

6  Julie Beth Lovins,“词干提取算法的开发”, 《机械翻译和计算语言学》 ,第 11 卷, 1 和第 2 期,1968 年,第 22-31 页, https://aclanthology.org/www.mt-archive.info/MT-1968-Lovins.pdf

7、 13 https://pypi.org/project/stemming/1.0

8  Julie Beth Lovins,“词干提取算法的开发”, 《机械翻译和计算语言学》,第 11 卷,第 1 期和第 2 期,1968 年,第 22-31 页, https://aclanthology.org/www.mt-archive.info/MT-1968-Lovins.pdf

9  Martin Porter,“去除后缀的算法”, 程序:电子图书馆和信息系统,第 14 卷,第 3 期,1980 年,第 130-137 页, https://www.emerald.com/insight/content/doi/10.1108/eb046814/full/html 

10 Martin Porter,“后缀剥离算法”,《程序:电子图书馆和信息系统》》,第 14 卷,第 3 期,1980 年,第 130-137 页, https://www.emerald.com/insight/content/doi/10.1108/eb046814/full/html

11  Martin Porter,《SnowBall:一种用于词干算法的语言》,2001 年, https://snowallstem.org/texts/introplication.html

12  Chris Paice,“另一位选手”, ACM SIGIR 论坛 ,第 24 卷,第 3 期,1990 年,第 56-61 页,  https://dl.acm.org/doi/10.1145/101306.101310

14  Y. A. Alhaj、J. Xiang、D. Zhao、M. A. A. Al-Qaness、M. Abd Elaziz 和 A. Dahou,“词根策略对阿拉伯文文档分类的影响研究”, IEEE Access,第 7 卷,第 32664-32671 页, https://ieeexplore.ieee.org/document/8664087。Janneke van der Zwaan、Maksim Abdul Latif、Dafne van Kuppevelt、Melle Lyklema、Christian Lange,“您确定您的工具符合预期吗?验证阿拉伯语词根提取”, 人文学科的数字学术,第 36 卷,2021 年,第 137-150 页, https://academic.oup.com/dsh/article/36/Suplement_1/i137/5545478

15 Ratnavel Rajalakshmi、Srivarshan Selvaraj、Faerie Mattins、Pavitra Vasudevan 和 Anand Kumar,“最热门话题:使用转换器和增强词干提取识别泰米尔语中的仇恨与冒犯性内容”,《计算机语音与语言》,第 78 卷,2023 年,https://www.sciencedirect.com/science/article/abs/pii/S0885230822000870?via%3Dihub

16 Siba Sankar Sahu 和 Sukomal Pal,“为梵文构建文本检索系统:探讨索引编制、词干提取和搜索问题”,《计算机语音与语言》,第 81 卷,2023 年,https://www.sciencedirect.com/science/article/abs/pii/S0885230823000372?via%3Dihub

17  Chris Paice,“词干提取”, 《数据库系统百科全书》,Springer,2020 年。