词干提取和词形还原

作者

Jacob Murel Ph.D.

Senior Technical Content Creator

Eda Kavlakoglu

Business Development + Partnerships

IBM Research

什么是词干提取和词形还原?

在自然语言处理 (NLP) 中,词干提取和词形还原是文本预处理技术,它们将文本数据集中的词的变格形式简化为一个共同的词根或词典形式,在计算语言学中也称为“词元”。1

词干提取和词形还原在搜索引擎等信息检索系统中特别有用,用户可以使用一个单词(例如,meditate)提交查询,但期望结果使用该词的任何变形形式(例如, meditatesmeditation 等)。词干提取和词形还原旨在进一步改进机器学习算法中的文本处理。

舞蹈形态变体的词干示意图

为什么要进行词干提取和词形还原?

研究人员对人工智能是否具有推理能力展开了争论,这场争论已经延伸到计算语言学。聊天机器人深度学习模型只能处理语言形式?还是可以理解语义?2无论人们对这一问题的看法如何,机器学习模型都必须经过训练,才能将不同的单词识别为一个基础词的形态变体。甚至根据形态而不是语义来处理单词。通过将派生词形式简化为一个词干,词干提取和词形还原有助于信息检索系统和深度学习模型将形态相关的词等同起来。

对于许多文本挖掘任务,包括文本分类、聚类、索引编制等,词干提取和词形还原通过降低机器学习算法维度和对形态相关单词进行分组来帮助提高准确性。算法维度的降低可以提高 NLP 中统计模型的准确性和精度,例如主题模型和词向量模型。3

专家为您带来最新的 AI 趋势

获取有关最重要且最有趣的 AI 新闻的精选洞察分析。订阅我们的每周 Think 时事通讯。请参阅 IBM 隐私声明

谢谢!您已订阅。

您的订阅将以英语提供。您会在每份时事通讯中找到一个取消订阅链接。您可以在此处管理您的订阅或取消订阅。有关更多信息,请参阅我们的 IBM 隐私声明

词干提取与词形还原

词干提取和词形还原用作文本挖掘管道中的一个阶段,它将原始文本数据转换为可供机器处理的结构化格式。词干提取和词形还原都从变格的词形中去除词缀,只留下根形式。4这些过程相当于删除词标记开头和结尾的字符。然后传递得到的词根或基础词以进行进一步处理。除了这种基本相似性之外,词干提取和词形还原在如何将单词的不同形式简化为一种常见的基本形式方面存在关键差异。

词干提取的工作原理

尽管词干提取算法确实有一些通用的运算模式,但它们之间的差异很大。词干提取器通过对预定义的常见后缀列表运行输入单词标记来消除单词后缀。然后,如果单词不违反与该后缀相关的任何规则或条件,词干提取器就会从单词中删除所有找到的后缀字符串。某些词干提取器(例如,Lovins 词干提取器)通过一组额外的规则运行生成的词干位,以纠正格式错误的词根。

其中使用最广泛的算法是 Porter 词干提取算法,以及其更新版本 Snowball 词干提取器。为了更好地理解词干提取,我们可以通过 Snowball 词干提取器运行 Shakespeare 的《哈姆雷特》中的以下段落:“There is nothing either good or bad but thinking makes it so.”

Python 自然语言工具包 (NLTK) 包含适用于 Snowball 和 Porter 词干提取器的内置函数。在使用 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]

print("Original:", text)
print("Tokenized:", words)
print("Stemmed:", stemmed_words)

代码输出:

Original: There is nothing either good or bad but thinking makes it so.
Tokenized: ['There', 'is', 'nothing', 'either', 'good', 'or', 'bad', 'but', 'thinking', 'makes', 'it', 'so', '.']
Stemmed: ['there', 'is', 'noth', 'either', 'good', 'or', 'bad', 'but', 'think', 'make', 'it', 'so', '.']

与其他词干提取器相比,Snowball 和 Porter 词干提取器算法采用更加数学化的方法来消除后缀。可以说,词干提取器根据规则列表运行每个单词标记,这些规则根据标记中的元音和辅音组的数量指定要删除的后缀字符串。5当然,由于英语遵循一般而非绝对的词法规则,词干提取算法的系统标准会返回错误,如 noth

词干提取器中删除了 -ing,这是表示现在进行时的常用词尾。然而,在《哈姆雷特》的引用中,删除 -ing 会错误地产生词干 noth。这可能会阻后续的语言分析将 nothing 与相似的名词相关联,例如 anythingsomething。此外,词干提取器还保留了不规则动词 is。Snowball 词干提取器同样保留了 to be 的其他变位,例如 wasare,未进行词干提取。这可能会阻止模型正确关联给定动词的不规则变位。

词形还原的工作原理

文献通常将词干提取定义为从单词中剥离词缀以获得词干字符串的过程,将词形还原定义为将形态变体简化为一种词典基本形式的更大过程。6词干提取和词形还原之间的实际区别在于,词干提取仅从单词标记的末尾删除常见后缀,而词形还原可确保输出的单词是可以在词典中找到的单词的现有规范化形式(例如,词元)。7

因为词形还原旨在输出字典基本形式,所以它需要比词干提取更强大的形态分析。词性 (POS) 标记是词形还原的关键步骤。POS 本质上为每个单词标记分配表示其在句子中的句法功能。Python NLTK 提供了 Word Net 词形还原算法的函数,我们可以通过该函数对《哈姆雷特》段落进行词形还原:

from nltk.stem import WordNetLemmatizer
from nltk.corpus import wordnet
from nltk import word_tokenize, pos_tag
 
def get_wordnet_pos(tag):
    if tag.startswith('J'):
        return wordnet.ADJ
    elif tag.startswith('V'):
        return wordnet.VERB
    elif tag.startswith('N'):
        return wordnet.NOUN
    elif tag.startswith('R'):
        return wordnet.ADV
    else:         
        return wordnet.NOUN
       
def lemmatize_passage(text):
    words = word_tokenize(text)
    pos_tags = pos_tag(words)
    lemmatizer = WordNetLemmatizer()
    lemmatized_words = [lemmatizer.lemmatize(word, get_wordnet_pos(tag)) for word, tag in pos_tags]
    lemmatized_sentence = ' '.join(lemmatized_words)
    return lemmatized_sentence
 
text = "There is nothing either good or bad but thinking makes it so."
result = lemmatize_passage(text)
 
print("Original:", text)
print("Tokenized:", word_tokenize(text))
print("Lemmatized:", result)

代码返回:

Original: There is nothing either good or bad but thinking makes it so.
Tokenized: ['There', 'is', 'nothing', 'either', 'good', 'or', 'bad', 'but', 'thinking', 'makes', 'it', 'so', '.']
Lemmatized: There be nothing either good or bad but think make it so .

WordNetLemmatizer 与 Snowball 词干提取器非常相似,它将动词变位简化为基本形式,例如,从 thinkingthink,从 makesmake。但是,与 Snowball 词干提取算法不同的是,该词形还原器将 nothing 标识为名词,并适当地保留其 -ing 结尾不变,同时将 is 进一步更改为基本形式 be。通过这种方式,可以更恰当地合并不规则动词形式。

Mixture of Experts | 12 月 12 日,第 85 集

解码 AI:每周新闻摘要

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

限制

词干提取和词形还原主要支持英语文本数据的规范化。这两种文本规范化技术还支持其他几种罗马化语言,例如法语、德语和西班牙语。Snowball 词干提取器还支持其他语言,例如俄语。针对其他语言(尤其是阿拉伯语)的词干提取和词形还原算法开发是近期正在进行的研究领域。阿拉伯语尤其具有挑战性,因为它具有粘着形态、正字法变异和词汇歧义等特征。8总之,这些因素使得从形态变体中识别基本词形的系统方法变得困难,至少与英语单词相比是如此。

除了这个一般限制之外,词干提取和词形还原也有各自的缺点。正如《哈姆雷特》的例子所示,词干提取是一种相对启发式的、基于规则的字符串删除过程。词干提取过度和词干提取不足是两种常见的错误。前者是两个语义不同的单词还原为同一词根(例如,news 变为 new);词干提取不足是指两个语义相关的单词没有还原为同一词根(例如,knavishknave 分别还原为 knavishknave)9此外,词干提取只会从单词中去除后缀,因此不能像词形还原那样解释不规则的动词形式或前缀。当然,词干提取相对简单易行,而词形还原的计算成本和时间可能更高,具体取决于所处理数据的大小。

相关解决方案
IBM watsonx Orchestrate

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

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

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

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

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

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

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

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