【NLP-06】词形还原(Lemmatization)深度解析与实践

news2024/11/5 12:44:12

🧑 博主简介:曾任某智慧城市类企业算法总监,目前在美国市场的物流公司从事高级算法工程师一职,深耕人工智能领域,精通python数据挖掘、可视化、机器学习等,发表过AI相关的专利并多次在AI类比赛中获奖。CSDN人工智能领域的优质创作者,提供AI相关的技术咨询、项目开发和个性化解决方案等服务,如有需要请站内私信或者联系任意文章底部的的VX名片(ID:xf982831907

💬 博主粉丝群介绍:① 群内初中生、高中生、本科生、研究生、博士生遍布,可互相学习,交流困惑。② 热榜top10的常客也在群里,也有数不清的万粉大佬,可以交流写作技巧,上榜经验,涨粉秘籍。③ 群内也有职场精英,大厂大佬,可交流技术、面试、找工作的经验。④ 进群免费赠送写作秘籍一份,助你由写作小白晋升为创作大佬。⑤ 进群赠送CSDN评论防封脚本,送真活跃粉丝,助你提升文章热度。有兴趣的加文末联系方式,备注自己的CSDN昵称,拉你进群,互相学习共同进步。

在这里插入图片描述

【【NLP-06】词形还原(Lemmatization)深度解析与实践

  • 一、 引言
    • 1.1 词形还原的定义
    • 1.2 词形还原在自然语言处理(NLP)中的重要性
  • 二、 词形还原与词干提取的区别
    • 2.1 词形还原的原理和特点
    • 2.2 词干提取的原理和特点
    • 2.3 二者之间的对比
  • 三、 Python中的词形还原实现
    • 3.1 安装和导入必要的库
    • 3.2 使用nltk库中的WordNet进行词形还原
    • 3.3 词性标注(POS tagging)的重要性
  • 四、 Python代码示例
    • 4.1 简单的词形还原示例
    • 4.2 结合词性标注的词形还原示例
  • 五、 词形还原的应用场景
    • 5.1 信息检索
    • 5.2 文本分类
    • 5.3 情感分析
  • 六、 结论
    • 6.1 词形还原的优缺点
    • 6.2 对NLP领域的影响和未来展望

在这里插入图片描述

一、 引言

1.1 词形还原的定义

  词形还原(Lemmatization)是自然语言处理(NLP)中的一个重要步骤,它旨在将单词还原为其基本的、词典中的形式,即词元(lemma)。与词形还原密切相关的是词干提取(Stemming),但两者在方法和目标上有所不同。词形还原更注重词汇的语义,而词干提取则更关注词汇的形态变化。

1.2 词形还原在自然语言处理(NLP)中的重要性

  在自然语言处理任务中,如文本分析、信息检索、文本分类和机器翻译等,词形还原扮演着至关重要的角色。通过将不同形态但意义相同的单词还原为同一词元,词形还原可以显著减少词汇表中的单词数量,从而降低计算复杂度,提高模型的性能和准确性。


二、 词形还原与词干提取的区别

2.1 词形还原的原理和特点

  词形还原的原理是基于词汇的语义和语法规则,将单词还原为其在词典中的基本形式。例如,将“running”、“ran”和“runs”等动词形式还原为“run”。词形还原通常需要依赖词汇资源(如WordNet)和词性标注(POS tagging)来实现。

  词形还原的特点在于它更关注词汇的语义,能够保留词汇的更多信息。因此,词形还原在处理同义词和多义词时更具优势。

2.2 词干提取的原理和特点

  词干提取的原理是通过去除单词的后缀(如动词的-ed、-ing等)来还原单词的基本形式。词干提取通常使用简单的规则或算法来实现,不需要依赖词汇资源或词性标注。

  词干提取的特点在于其实现简单、速度快,但缺点是可能会产生一些无意义的词干。例如,“running”和“ran”的词干提取结果都是“runn”,而“running”的词形还原结果才是“run”。

2.3 二者之间的对比

  词形还原和词干提取在方法和目标上有所不同。词形还原更注重词汇的语义和语法规则,能够保留词汇的更多信息,适用于需要准确理解词汇语义的NLP任务。而词干提取则更关注词汇的形态变化,实现简单、速度快,但可能会产生一些无意义的词干,适用于对词汇形态变化要求不高的NLP任务。


三、 Python中的词形还原实现

3.1 安装和导入必要的库

  在使用Python进行词形还原之前,我们需要安装和导入必要的库。这里我们使用nltk(Natural Language Toolkit)库中的WordNet进行词形还原。

pip install nltk

  然后,我们需要下载nltk的WordNet数据:

import nltk
nltk.download('wordnet')
nltk.download('omw-1.4')
nltk.download('averaged_perceptron_tagger')

  接下来,我们可以导入所需的模块:

from nltk.stem import WordNetLemmatizer
from nltk.corpus import wordnet as wn
from nltk import pos_tag

3.2 使用nltk库中的WordNet进行词形还原

  在nltk库中,我们可以使用WordNetLemmatizer类进行词形还原。但是,为了准确地进行词形还原,我们需要知道单词的词性(POS)。因此,在进行词形还原之前,我们需要对单词进行词性标注。

  下面是一个简单的例子,演示如何使用WordNetLemmatizer和词性标注进行词形还原:

lemmatizer = WordNetLemmatizer()

# 示例单词列表
words = ['running', 'better', 'dogs', 'mice']

# 对单词进行词性标注
tagged_words = pos_tag(words)

# 打印词性标注结果
print("POS Tagged Words:", tagged_words)

# 根据词性标注结果进行词形还原
lemmatized_words = [lemmatizer.lemmatize(word.lower(), pos=get_wordnet_pos(tag)) for word, tag in tagged_words]

# 打印词形还原结果
print("Lemmatized Words:", lemmatized_words)

# 辅助函数:将POS标签转换为WordNet标签
def get_wordnet_pos(tag):
    """Map POS tag to first character lemmatize() accepts"""
    tag_dict = {'J': wn.ADJ, 'N': wn.NOUN, 'V': wn.VERB, 'R': wn.ADV}
    return tag_dict.get(tag[0].upper(), wn.NOUN)

  在这个例子中,我们首先创建了一个WordNetLemmatizer对象。然后,我们定义了一个示例单词列表,并对这些单词进行词性标注。接下来,我们使用lemmatize方法对标注后的单词进行词形还原,并将结果打印出来。

  注意,在调用lemmatize方法时,我们需要传入单词的小写形式和对应的WordNet词性标签。为了将POS标签转换为WordNet标签,我们定义了一个辅助函数get_wordnet_pos

3.3 词性标注(POS tagging)的重要性

  词性标注在词形还原中扮演着至关重要的角色。因为词形还原需要根据单词的词性来确定其还原形式。如果词性标注不准确,那么词形还原的结果也可能会不准确。

  例如,在上面的例子中,如果我们将“running”的词性标注为名词(NN),那么词形还原的结果可能会是“running”(因为“running”作为名词时是不可还原的)。但是,如果我们将“running”的词性标注为动词(VB),那么词形还原的结果就会是“run”。

  因此,在进行词形还原之前,我们需要对单词进行准确的词性标注。


四、 Python代码示例

4.1 简单的词形还原示例

  下面是一个简单的词形还原示例,演示如何使用nltk库中的WordNetLemmatizer对单词进行词形还原:

lemmatizer = WordNetLemmatizer()  
  
# 示例单词列表  
words = ['running', 'better', 'worse', 'good']  
  
# 对单词进行词形还原(不考虑词性标注)  
lemmatized_words = [lemmatizer.lemmatize(word.lower()) for word in words]  


  
# 打印词形还原结果  
print("Lemmatized Words (without POS tagging):", lemmatized_words)

  在这个例子中,我们直接对单词进行了词形还原,而没有进行词性标注。因此,还原结果可能并不准确。例如,“better”和“worse”都被还原为了“good”的某种形式(实际上是“good”和“bad”的原型,但由于没有词性标注,所以这里出现了不准确的情况)。

4.2 结合词性标注的词形还原示例

  在Python中,NLTK库提供了强大的词形还原功能。以下是一个结合词性标注进行词形还原的示例代码:

import nltk
from nltk.stem import WordNetLemmatizer
from nltk.corpus import wordnet
from nltk.tokenize import word_tokenize
from nltk import pos_tag

# 下载必要的NLTK资源
nltk.download('wordnet')
nltk.download('punkt')
nltk.download('averaged_perceptron_tagger')

# 初始化词形还原器
lemmatizer = WordNetLemmatizer()

# 获取单词的词性
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  # 默认返回名词

# 示例文本
sample_text = "The brown fox is quick and he is jumping over the lazy dog."

# 分词和词性标注
tokens = word_tokenize(sample_text)
tagged_tokens = pos_tag(tokens)

# 词形还原
lemmas = []
for token, pos in tagged_tokens:
    wordnet_pos = get_wordnet_pos(pos)
    lemmas.append(lemmatizer.lemmatize(token, pos=wordnet_pos))

# 输出结果
print("原始文本:", sample_text)
print("词形还原后:", ' '.join(lemmas))

输出

原始文本: The brown fox is quick and he is jumping over the lazy dog.
词形还原后: The brown fox is quick and he is jump over the lazy dog.

  在上述代码中,我们首先进行了分词和词性标注,然后使用WordNetLemmatizer进行词形还原。注意,词形还原的效果依赖于词性标注的准确性,因此在进行词形还原之前,先进行词性标注是非常重要的。

五、 词形还原的应用场景

  词形还原在NLP中的应用非常广泛,以下是一些主要的应用场景:

5.1 信息检索

  在信息检索中,词形还原有助于将用户查询和文档中的不同形式但意义相同的单词归一化,从而提高检索的准确性和效率。例如,当用户查询“running”时,系统可以将文档中的“ran”和“runs”也视为匹配项。

5.2 文本分类

  在文本分类任务中,词形还原可以减少词汇的多样性,使不同形式的单词映射到相同的词形,从而简化特征表示和模型训练。例如,在新闻分类中,将“political”和“politics”还原为“political”有助于模型更好地识别相关主题。

5.3 情感分析

  在情感分析中,词形还原有助于捕捉单词的基本情感倾向。例如,将“happier”还原为“happy”可以更好地理解文本中的积极情感。此外,词形还原还可以减少噪声词汇的影响,提高情感分析的准确性。

六、 结论

6.1 词形还原的优缺点

优点

  1. 语义化:词形还原考虑单词的语法和语义信息,还原后的词语通常是合法的词汇形式。
  2. 准确性:与词干提取相比,词形还原更加准确,能够处理更多复杂的词汇变形。

缺点

  1. 计算开销:词形还原通常需要更多的计算资源和语言资源(如词典),因此计算开销较大。
  2. 依赖词性标注:词形还原的效果依赖于词性标注的准确性,如果词性标注不准确,可能会影响词形还原的效果。

6.2 对NLP领域的影响和未来展望

  词形还原作为NLP中的一项重要预处理技术,已经广泛应用于各种NLP任务中。随着自然语言处理技术的不断发展,词形还原将在以下方面发挥更大的作用:

  1. 多语言支持:未来的词形还原工具将更加支持多种语言,满足不同语言环境下的需求。
  2. 深度学习结合:深度学习技术的发展将推动词形还原与深度学习模型的结合,提高词形还原的准确性和效率。
  3. 领域自适应:针对特定领域的词形还原工具将不断涌现,以满足不同领域的需求。

  总之,词形还原作为NLP中的一项重要技术,将在未来的自然语言处理领域中发挥越来越重要的作用。通过不断改进和优化词形还原方法,我们可以更好地理解和处理自然语言数据,推动自然语言处理技术的进一步发展。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2231770.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

卖三蹦子的wordpress模板

Tricycle三奔子wordpress模板 卖三轮的跨境电商B2B产品展示型网站wordpress模板,助力二大爷的三奔子卖向全球,让在中国遍地热销的三蹦子在海外也大卖. https://www.jianzhanpress.com/?p8178

Java | Leetcode题解之第535题TinyURL的加密与解密

题目&#xff1a; 题解&#xff1a; public class Codec {private Map<Integer, String> dataBase new HashMap<Integer, String>();private Random random new Random();public String encode(String longUrl) {int key;while (true) {key random.nextInt();i…

NFTScan Site:以蓝标认证与高级项目管理功能赋能 NFT 项目

自 NFTScan Site 上线以来&#xff0c;它迅速成为 NFT 市场中的一支重要力量&#xff0c;凭借对各类 NFT 集合、市场以及 NFTfi 项目的认证获得了广泛认可。这个平台帮助许多项目提升了曝光度和可见性&#xff0c;为它们在竞争激烈的 NFT 市场中创造了更大的成功机会。 在最新更…

保研考研机试攻略:python笔记(2)

&#x1f428;&#x1f428;&#x1f428;宝子们好呀&#xff0c;今天我们继续来学习N诺提供的python笔记&#xff0c;fighting&#xff01;( •̀ ω •́ )✧ 对这个系列感兴趣的宝子欢迎关注保研考研机试攻略专栏哦 ~ 目录 &#x1f428;&#x1f428;&#x1f428;4进制转…

【动手学电机驱动】 STM32-FOC(2)STM32 导入和创建项目

STM32-FOC&#xff08;1&#xff09;STM32 电机控制的软件开发环境 STM32-FOC&#xff08;2&#xff09;STM32 导入和创建项目 STM32-FOC&#xff08;3&#xff09;STM32 互补 PWM 输出 STM32-FOC&#xff08;4&#xff09;IHM03 电机控制套件介绍 STM32-FOC&#xff08;5&…

【力扣专题栏】字母异词分组,如何利用强大的容器(unordered_map)解决该问题?

题解目录 1、题目描述解释2、算法原理解析3、代码编写 1、题目描述解释 2、算法原理解析 3、代码编写 class Solution { public:vector<vector<string>> groupAnagrams(vector<string>& strs) {//创建哈希表unordered_map<string,vector<string&g…

vscode clangd for cuda 插件配置

这里写目录标题 1. 下载插件clangd,并且安装server到host2. 配置3. 安装调试插件 1. 下载插件clangd,并且安装server到host 步骤 extension下载 altshiftp, 下服务&#xff0c;如果下不下来请考虑用&#x1fa9c; 下载好后check一下&#xff0c;检查是否正常 正常的标志 注意…

Oracle 11g DataGuard GAP处理

1 说明 在Oracle Data Guard中&#xff0c;GAP是指在备库无法接收到一个或多个来自主库的归档日志文件时发生的情况&#xff0c;会导致数据保护和实时数据复制的能力受到影响。 Oracle Data Guard架构日志同步有三个阶段&#xff1a; 日志发送&#xff1b;日志接收&#xff…

2023年编程语言排行榜

随着编程语言的不断发展&#xff0c;跟踪哪些语言处于领先地位至关重要。在这两部分中&#xff0c;我们将深入研究 2023 年排名前 40 的编程语言&#xff0c;并分析它们脱颖而出的原因。 40 种顶级 TIOBE 编程语言 1. Python 受欢迎程度&#xff1a;非常高学习难度&#xff1…

ELK之路第四步——整合!打通任督二脉

ELK之路第四步——整合&#xff01;打通任督二脉 前言1.架构2.下载资源3.整合开始1.分别启动三个es2.启动kibana3.新建filebeat_logstash.yml配置文件4.修改logstash的启动配置文件5.启动logstash6.启动filebeat7.Kibana查看 4.结语 前言 在开始本篇之前&#xff0c;你需要用到…

Verilog实现的莫尔斯电码发生器

莫尔斯或者摩尔斯电码(Morse Code)&#xff0c;发明于1837年(另有一说是1836年)&#xff0c;通过不同的排列顺序来表达不同的英文字母、数字和标点符号&#xff0c;在这里作一简单处理&#xff0c;仅产生点(Dit)和划(Dah)&#xff0c;时长在0.25秒之内为点&#xff0c;超过为划…

vue3 封装aixos

1. Vue3 封装 aixos 并且 使用 aixos 请求数据 npm install axios # 或者 yarn add axios 2. Vue3 封装 aixos 并且 使用 aixos 请求数据 封装 axios可以帮助我们更好地管理 HTTP 请求&#xff0c;例如添加统一的基础URL、请求头、拦截器等功能。 下面是封装 axios的一个示…

在美团外卖上抢券 Python来实现

在美团外卖上抢券的 Python 实现 在如今的互联网时代&#xff0c;自动化脚本已经成为了许多用户生活中不可或缺的工具。尤其是在购物、抢券等场景中&#xff0c;自动化脚本能够帮助我们节省大量的时间和精力。今天&#xff0c;我们将一起探索如何使用 Python 编写一个简单的脚…

【学术论文投稿】探索嵌入式硬件设计:揭秘智能设备的心脏

【IEEE出版】第六届国际科技创新学术交流大会暨通信、信息系统与软件工程学术会议&#xff08;CISSE 2024&#xff09;_艾思科蓝_学术一站式服务平台 更多学术会议论文投稿请看&#xff1a;https://ais.cn/u/nuyAF3 目录 引言 嵌入式系统简介 嵌入式硬件设计的组成部分 设…

宝藏虚拟化学习资料大全

最近发现了关于虚拟化的宝藏资料&#xff0c;瑞斯拜&#xff01;原文链接如下&#xff1a; 500篇关于虚拟化的经典资料&#xff0c;含CPU虚拟化&#xff0c;磁盘虚拟化&#xff0c;内存虚拟化&#xff0c;IO虚拟化。 目录 &#x1fa90; 虚拟化基础 &#x1f343; 虚拟化分类&…

qt QStatusBar详解

1、概述 QStatusBar是Qt框架提供的一个小部件&#xff0c;用于在应用程序窗口底部显示状态信息。它可以显示一些固定的文本和图标&#xff0c;并且可以通过API动态更新显示内容。QStatusBar通常是一个水平的窗口部件&#xff0c;能够显示多行文本内容&#xff0c;非常适合用于…

即插即用显著位置注意力spab,涨点起飞

题目&#xff1a;Salient Positions based Attention Network for Image Classification 论文地址&#xff1a;https://arxiv.org/pdf/2106.04996 创新点 提出了基于显著位置的注意力机制&#xff1a;论文提出了一种名为SPAblock的显著位置选择算法(SPS)&#xff0c;通过在注…

R语言贝叶斯:INLA下的贝叶斯回归、生存分析、随机游走、广义可加模型、极端数据的贝叶斯分析

原文链接&#xff1a;R语言贝叶斯&#xff1a;INLA下的贝叶斯回归、生存分析、随机游走、广义可加模型、极端数据的贝叶斯分析https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247625527&idx8&snba4e50376befd94022519152609ee8d0&chksmfa8daad0cdfa23c6…

C++设计模式结构型模式———外观模式

文章目录 一、引言二、外观模式三、总结 一、引言 外观模式是一种结构型设计模式&#xff0c; 能为程序库、 框架或其他复杂类提供一个简单的接口。也就是说&#xff0c;该模式的目的用于隔离接口&#xff0c;换句话说&#xff0c;就是扮演中间层的角色&#xff0c;把本来结合…

物流公司出货单据模板下载软件 佳易王物流单管理系统操作使用教程

一、概述 【软件资源文件下载可以点文章最后信息卡片】 物流公司出货单据模板下载软件物流单管理系统操作使用教程 ‌软件功能‌&#xff1a; ‌记录管理‌&#xff1a;记录运费、垫付货款、代收货款、保险费等。‌打印模式‌&#xff1a;支持空白单、卷纸、印刷好的单子等多…