自然语言处理(NLP)基础:文本预处理与词嵌入

news/2024/4/29 15:26:34/文章来源:https://blog.csdn.net/meijinbo/article/details/137022427

目录

1.引言

2.文本预处理步骤

3.文本预处理工具

4.词嵌入模型介绍与应用

4.1.Word2Vec

4.2.GloVe

4.3.应用示例

5.总结


1.引言

        自然语言处理(Natural Language Processing, NLP)是计算机科学与人工智能领域的重要分支,旨在使计算机理解、生成和处理人类语言。本文将聚焦于NLP的基础环节:文本预处理与词嵌入。首先,详细介绍文本预处理的步骤与常用工具(如NLTK、Spacy),然后解析词嵌入模型(如Word2Vec、GloVe)的概念、特点与应用。更多Python在人工智能中的使用方法,欢迎关注《Python人工智能实战》栏目!

2.文本预处理步骤

        文本预处理是NLP中的第一步,它涉及将原始文本转换成适合机器学习模型处理的格式。预处理的目的是去除文本中的噪声和不相关信息,以便模型能够更准确地学习文本的语义。

预处理步骤

  1. 分词:将文本拆分成单独的词语或符号,以便后续处理。这通常涉及到处理标点符号、停用词(如“的”、“和”等常见但无太多语义信息的词)以及词干提取或词形还原。

  2. 标准化:统一文本的大小写、去除无关字符(如特殊符号、HTML标签等)、转换数字为文本形式等,确保数据一致性。

  3. 去除噪声:包括去除无关文本(如广告、版权信息等)、填充或删除缺失值、处理异常值等。

  4. 词形还原与词干提取:将词语还原到其基本形式(词根),减少词汇表的冗余。例如,“running”还原为“run”,“cats”还原为“cat”。

  5. 停用词过滤:移除频繁出现但对语义贡献较小的词汇,如“的”、“是”、“在”等。

  6. 词性标注与命名实体识别:标注每个词语的词性(如名词、动词、形容词等)并识别命名实体(如人名、地名、组织名),有助于后续分析。

3.文本预处理工具

  • NLTK(Natural Language Toolkit):Python中最常用的NLP库之一,提供了丰富的文本预处理功能,包括分词、标准化、停用词过滤、词形还原、词性标注等。
import nltk  
from nltk.corpus import stopwords  
from nltk.tokenize import word_tokenize  
from nltk.stem import PorterStemmer  # 下载停用词表和punkt分词器  
nltk.download('stopwords')  
nltk.download('punkt')  # 示例文本  
text = "This is a sample text for NLP preprocessing."  # 分词  
tokens = word_tokenize(text)  
print("Tokens:", tokens)  # 输出:Tokens: ['This', 'is', 'a', 'sample', 'text', 'for', 'NLP', 'preprocessing', '.']  # 去除停用词  
stop_words = set(stopwords.words('english'))  
filtered_tokens = [word for word in tokens if not word.lower() in stop_words]  
print("Filtered Tokens:", filtered_tokens)  # 输出:Filtered Tokens: ['sample', 'text', 'NLP', 'preprocessing', '.']  # 词干提取  
stemmer = PorterStemmer()  
stemmed_tokens = [stemmer.stem(word) for word in filtered_tokens]  
print("Stemmed Tokens:", stemmed_tokens)  # 输出:Stemmed Tokens: ['sampl', 'text', 'nlp', 'preprocess', '.']
  • Spacy:高效的工业级NLP库,除了基础预处理功能外,还内置了高质量的词性标注器、命名实体识别器以及依存关系解析器等。
import spacynlp = spacy.load("en_core_web_sm")# Spacy处理文本
doc = nlp("This is a sample text for demonstration.")# 分词、词性标注与命名实体识别
for token in doc:print(token.text, token.pos_, token.ent_type_)

4.词嵌入模型介绍与应用

        词嵌入是将词汇转化为固定维度的向量表示,使得语义上相近的词在向量空间中也相近。常见的词嵌入模型有Word2Vec和GloVe。

4.1.Word2Vec

        Word2Vec由Google提出,通过浅层神经网络模型学习词向量。有两种主要架构:CBOW(Continuous Bag-of-Words)和Skip-Gram。CBOW根据上下文预测中心词,Skip-Gram则相反,根据中心词预测上下文。训练得到的词向量能够捕获词汇间的语义和语法关系,如“king” - “queen” ≈ “man” - “woman”。

4.2.GloVe

        GloVe(Global Vectors for Word Representation)是斯坦福大学提出的词嵌入方法,结合了全局统计信息和局部上下文窗口。它通过优化一个全局词共现矩阵的加权log概率,使得词向量的内积尽可能接近词语共现次数的对数。GloVe的优势在于能较好地处理低频词,且训练效率相对较高。

4.3.应用示例

        词嵌入模型广泛应用于各类NLP任务,如文本分类、情感分析、机器翻译、问答系统等。以下是一个使用GloVe预训练词向量进行文本分类的简单示例(使用PyTorch):

import torch
from torchtext.data import Field, TabularDataset, BucketIterator
from torchtext.vocab import GloVe# 定义预处理字段与词嵌入加载方式
TEXT = Field(tokenize='spacy', tokenizer_language='en_core_web_sm', include_lengths=True)
LABEL = Field(sequential=False, use_vocab=False)# 加载预训练词向量
glove_vectors = GloVe(name='6B', dim=100)# 构建数据集与迭代器
train_data, test_data = TabularDataset.splits(path='./data/', train='train.csv', test='test.csv',format='csv', fields=[('text', TEXT), ('label', LABEL)])
TEXT.build_vocab(train_data, vectors=glove_vectors)
train_iter, test_iter = BucketIterator.splits((train_data, test_data), batch_size=32)# 定义模型(此处省略)# 使用词嵌入初始化模型的嵌入层
embedding_matrix = glove_vectors.vectors
model.embedding.weight.data.copy_(embedding_matrix)# 训练与评估模型过程略...

        使用Gensim库加载预训练的GloVe词嵌入模型,并查询单词向量的例子:

from gensim.models import KeyedVectors  # 加载预训练的GloVe模型  
model_path = 'glove.6B.100d.txt'  # GloVe模型文件路径  
glove_model = KeyedVectors.load_word2vec_format(model_path, binary=False)  # 查询单词'apple'的向量表示  
apple_vector = glove_model.wv['apple']  
print("Apple Vector:", apple_vector)  # 输出:Apple Vector: 数组形式的向量  # 计算两个单词的余弦相似度  
similarity = glove_model.wv.similarity('apple', 'orange')  
print("Similarity between 'apple' and 'orange':", similarity)  # 输出两个词之间的相似度得分

         上述代码中的apple_vector会输出一个数组形式的向量,而similarity则会输出'apple'和'orange'两个词之间的相似度得分。

        在中文文本预处理中,我们通常使用分词工具来将句子切分为单独的词汇。jieba是一个常用的中文分词库。

import jieba  # 示例文本  
text = "这是一个用于自然语言处理的文本预处理示例。"  # 使用jieba进行分词  
seg_list = jieba.cut(text, cut_all=False)  
print("分词结果:", " ".join(seg_list))  # 输出分词结果,以空格分隔
# 输出 分词结果: 这是 一个 用于 自然语言 处理 的 文本 预处理 示例 。

        对于中文词嵌入,需要使用针对中文语料训练的模型,如word2vecfastText等。以下是一个加载预训练中文词嵌入模型的例子:

import gensim.downloader as api  # 下载中文词嵌入模型  
model_name = 'glove-wiki-gigaword-6B-100'  # 这里只是一个示例,实际应使用中文模型名称  
model = api.load(model_name)  # 查询词汇的向量表示  
word = '处理'  
vector = model.wv[word]  
print(f"'{word}' 的向量表示:", vector)  # 输出词汇的向量表示  # 计算两个词汇之间的相似度  
word1 = '处理'  
word2 = '分析'  
similarity = model.wv.similarity(word1, word2)  
print(f"'{word1}' 和 '{word2}' 之间的相似度:", similarity)  # 输出两个词汇之间的相似度

        请注意,上述代码中的model_name应替换为实际的中文词嵌入模型名称。由于gensim.downloader主要提供英文模型,对于中文模型,你需要手动下载获取,并使用gensim的相应函数加载。另外,由于中文文本的复杂性,预处理步骤可能还包括去除标点、特殊字符、数字等,这些都可以根据具体任务需求进行调整。

        在实际应用中,中文NLP任务通常还会涉及到更复杂的预处理步骤,比如去除停用词(需要专门的中文停用词表)、词性标注等,这些可以使用jieba或其他中文NLP工具库来实现。

5.总结

        总结来说,文本预处理是NLP任务的基石,通过NLTK、Spacy等工具进行有效的文本清洗、标准化和特征提取,为后续分析奠定良好基础。词嵌入模型如Word2Vec、GloVe则将词汇映射到高维向量空间,这些向量编码了词汇间的语义关系,极大地提升了NLP算法在理解文本含义和模式识别上的表现。在实际应用中,词嵌入常作为深度学习模型的输入特征,助力各类文本分析任务取得优秀效果。

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

wpf程序调用macad的c++编写的dll

1.把macad里的build,source文件夹复制到一个文件夹里 2.创建一个wpf项目,在解决方案里添加macad.occt项目 3.把macad.occt设为dll文件,修改平台工具集,在macadtest里引用macad.occt 4.运行,应该会报错,说找…

深度学习每周学习总结P3(天气识别)

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 | 接辅导、项目定制 数据链接 提取码:o3ix 目录 0. 总结1. 数据导入部分数据导入部分代码详解:a. 数据读取部分a.1 提问:关…

30-3 越权漏洞 - 水平越权(横向越权)

环境准备:构建完善的安全渗透测试环境:推荐工具、资源和下载链接_渗透测试靶机下载-CSDN博客 一、定义 攻击者可以访问和操作与其拥有同级权限的用户资源。 示例: 学生A在教务系统上正常只能修改自己的作业内容,但由于不合理的权限校验规则等原因,学生A可以修改学生B的内…

【CDA二级数据分析备考思维导图】

CDA二级数据分析备考思维导图 CDA二级复习备考资料共计七个章节,如需资料,请留言,概览如下图:一、数据采集与处理1.数据采集方法2.市场调研和数据录入3、数据探索与可视化4、数据预处理方法 总结:以上为自己学习数据分…

修改 RabbitMQ 默认超时时间

MQ客户端正常运行,突然就报连接错误, 错误信息写的很明确,是客户端连接超时。 不过很疑虑,为什么会出现连接超时呢?代码没动过,网络也ok,也设置了心跳和重连机制。 最终在官网中找到了答案&am…

展示大屏-24小时天气预报

一、项目说明 展示大屏显示未来一周天气和24小时天气详情。 二、技术工具 1.语言&框架:java、springboot 2.UI界面:jQuery、HTML、CSS、 VUE 3.开发工具:IntelliJ IDEA、Eclipse 三、实现步骤 后端步骤 1.调取免费或收费的API接口。 …

CSGO赛事管理系统的设计与实现|Springboot+ Mysql+Java+ B/S结构(可运行源码+数据库+设计文档)

本项目包含可运行源码数据库LW,文末可获取本项目的所有资料。 推荐阅读100套最新项目持续更新中..... 2024年计算机毕业论文(设计)学生选题参考合集推荐收藏(包含Springboot、jsp、ssmvue等技术项目合集) 目录 1. 系…

harmonyos:显示图片(Image)

开发者经常需要在应用中显示一些图片,例如:按钮中的icon、网络图片、本地图片等。在应用中显示图片需要使用Image组件实现,Image支持多种图片格式,包括png、jpg、bmp、svg和gif,具体用法请参考Image组件。 Image通过调…

路由的完整使用

多页面和单页面 多页面是指超链接等跳转到另一个HTML文件,单页面是仍是这个文件只是路由改变了页面的一部分结构. 路由的基本使用 使用vue2,则配套的路由需要是第3版. 1)下载vue-router插件 2)引入导出函数 3)new 创建路由对象 4)当写到vue的router后只能写路由对象,因此只…

快麦ERP中采购单在旺店通中同步退货

什么是快麦ERP 快麦ERP作为专业的电商ERP系统软件,为所有的商家提供涵盖订单、库存、分销、采购、财务、员工绩效等一体化的电商ERP解决方案。通过仓储数字化升级和库存精准化管理,帮助商家有更高效的工作体系,以数字赋能大卖家实现降本增效…

探索数据库--------------mysql主从复制和读写分离

目录 前言 为什么要主从复制? 主从复制谁复制谁? 数据放在什么地方? 一、mysql支持的复制类型 1.1STATEMENT:基于语句的复制 1.2ROW:基于行的复制 1.3MIXED:混合类型的复制 二、主从复制的工作过程 三个重…

2.9 Python缩进规则(包含快捷键)

Python缩进规则(包含快捷键) 和其它程序设计语言(如 Java、C 语言)采用大括号“{}”分隔代码块不同,Python采用代码缩进和冒号( : )来区分代码块之间的层次。 在 Python 中,对于类…

2核4g服务器能支持多少人访问?阿里云2核4g服务器在线人数

阿里云2核4G服务器多少钱一年?2核4G配置1个月多少钱?2核4G服务器30元3个月、轻量应用服务器2核4G4M带宽165元一年、企业用户2核4G5M带宽199元一年。可以在阿里云CLUB中心查看 aliyun.club 当前最新2核4G服务器精准报价、优惠券和活动信息。 阿里云官方2…

网络七层模型之数据链路层:理解网络通信的架构(二)

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

新穗青少年开展“小小公民科学家”科考活动探索生物多样性

为帮助“新穗”青少年了解本土文化,提升个人知识面和动手能力,贯彻落实《未成年人保护法》《家庭教育促进法》《广东省生态环境教育条例》等有关文件精神,3月24日,天河区绿日同学公益服务促进会联合华南农业大学农潮工作室、广州城…

Qt中QIcon图标设置(标题、菜单栏、工具栏、状态栏图标)

1 exe程序图标概述 在 Windows 操作系统中,程序图标一般会涉及三个地方; (1) 可执行程序(以及对应的快捷方式)的图标 (2) 程序界面标题栏图标 (3)程序在任务…

获取高德安全码SHA1

高德开发者平台上给的三种方法 获取安全码SHA1,这里我自己使用的是第三种方法。 1、通过Eclipse编译器获取SHA1 使用 adt 22 以上版本,可以在 eclipse 中直接查看。 Windows:依次在 eclipse 中打开 Window -> Preferances -> Androi…

Linux/Paper

Paper Enumeration nmap 第一次扫描发现系统对外开放了22,80和443端口,端口详细信息如下 可以看到三个端口的详细信息,22端口运行着ssh服务,80端口运行着http,而443为https,可以访问web进一步获取信息 H…

网络七层模型之传输层:理解网络通信的架构(四)

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

前端学习-CSS基础-Day3

一、CSS三大特性 1.1层叠性 相同选择器给设置相同的样式,此时一个样式就会覆盖(层叠)另一个冲突的样式。层叠性主要解决样式冲突的问题 层叠性原则: 1.样式冲突,遵循的原则是就近原则,哪个样式离结构近&a…