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

目录

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.mzph.cn/news/777517.shtml

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

相关文章

ChatGPT 商业金矿(下)

原文:ChatGPT Business Goldmines 译者:飞龙 协议:CC BY-NC-SA 4.0 第十七章:ChatGPT 商业金矿#15:在线课程创建业务 随着人们寻求便捷灵活的学习新技能、推进职业或探索新爱好的方式,在线课程变得越来越受…

基于Redis实现延时任务

两种方案: Redis 过期事件监听Redisson 内置的延时队列 Redis 过期事件监听这种方案存在很多问题,建议使用 Redisson 内置的 DelayedQueue 方案。 Redis 过期事件监听实现延时任务原理 Redis 2.0 引入了发布订阅 (pub/sub) 功能。 在 pub/sub 模式下…

Mini-Gemini: Mining the Potential of Multi-modality Vision Language Models

Mini-Gemini: Mining the Potential of Multi-modality Vision Language Models 相关链接:arxiv 关键字:Vision Language Models、Multi-modality、High-Resolution Visual Tokens、High-Quality Data、VLM-guided Generation 摘要 在这项工作中&#x…

unity学习(76)--窗口化和后台运行

1.通过如下方式将编译的游戏设置为窗口模式。 成功: 2.现在只有鼠标点击的窗体游戏运动,其他窗体游戏都会卡住。 2.1build setting中 2.2unity内部Project Settings 也被同步修改了

火车头通过关键词采集文章的原理

随着互联网信息的爆炸式增长,网站管理员和内容创作者需要不断更新和发布新的文章,以吸引更多的用户和提升网站的排名。而火车头作为一款智能文章采集工具,在这一过程中发挥着重要作用。本文将探讨火车头如何通过关键词采集文章,以…

CDH集群hive初始化元数据库失败

oracle数据库操作: 报错如下:命令 (Validate Hive Metastore schema (237)) 已失败 截图如下: 后台日志部分摘录: WARNING: Use “yarn jar” to launch YARN applications. SLF4J: Class path contains multiple SLF4J binding…

Vite 为什么比 Webpack 快?

目录 1. Webpack 的构建原理 2. Script 的模块化(主流浏览器对 ES Modules 的支持) 3. Webpack vs Vite 开发模式的差异 对 ES Modules 的支持 底层语言的差异 热更新的处理 1. Webpack 的构建原理 前端之所以需要类似于 Webpack 这样的构建工具&…

主机安全-德迅卫士

什么是主机安全? 主机安全,其核心内容包括安全应用交付系统、应用监管系统、操作系统安全增强系统和运维安全管控系统。它的具体功能是指保证主机在数据存储和处理的保密性、完整性,可用性,它包括硬件、固件、系统软件的自身安全&…

CMakeLists生成动态库.so和静态库.a

一、下载NDK CMake - NDK : 26.2.11394342 或 23.1.7779620 - CMake : 3.22.1 二、新建android\app\CMakeLists.txt 文件CMakeLists.txt内容 cmake_minimum_required(VERSION 3.4.1) #mker为项目名称 project(mker)#设置生成的so动态库最后输出的路径 set(CMAKE_LIBRARY_OUTP…

如何安装OceanBase的OBD

选择一:借助 all-in-one 安装包安装 OBD(推荐) OceanBase 社区版的all-in-one安装包是一个集成了多种工具的一键式安装包。它包含了数据库软件本身,以及OBD、OBProxy、OBClient,自4.1版本起,还额外加入了O…

面试算法-122-翻转二叉树

题目 给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。 示例 1: 输入:root [4,2,7,1,3,6,9] 输出:[4,7,2,9,6,3,1] 解 class Solution {public TreeNode invertTree(TreeNode root) {return dfs(…

第二证券今日投资参考:低空经济迎利好 自动驾驶商业化提速

昨日,两市股指盘中弱势震动,午后加快下探,沪指失守3000点大关,深成指、创业板指跌超2%;到收盘,沪指跌1.26%报2993.14点,深成指跌2.4%报9222.47点,创业板指跌2.81%报1789.82点&#x…

DC电源模块的设计与制造流程

BOSHIDA DC电源模块的设计与制造流程 DC电源模块是一种用于将交流电转换为直流电的设备。它广泛应用于各种电子设备中,如电子产品、工业仪器、电视等。下面是DC电源模块的设计与制造流程的简要描述: 1. 需求分析:在设计DC电源模块之前&#…

设计模式(一)简介

一、书籍推荐及博客 大话设计模式 设计模式的艺术 XXL开源社区 | 博客 二、通俗版概念 创建型模式、结构型模式、行为型模式 怎么建房子、建什么样的房子、建的房子有什么用 三、重点模式及简述 1、创建型模式 工厂方法(多态工厂的实现) 抽象工厂…

flutter 中 GetxController 和 GetxService 的区别和使用场景

区别: GetxController: GetxController 用于管理特定页面或 widget 的状态。每个页面或 widget 可以拥有一个或多个 GetxController,用于管理其自身的状态和逻辑。GetxController 是短暂存在的,通常与页面或 widget 的生命周期相关…

JetBrains pycharm pro 2023 for mac Python集成开发环境

JetBrains PyCharm Pro 2023 for Mac是一款功能强大的Python集成开发环境(IDE),专为Mac用户设计,旨在提供高效、智能的编程体验。 软件下载:JetBrains pycharm pro 2023 for mac中文最新版 PyCharm Pro 2023支持多种语…

上位机图像处理和嵌入式模块部署(qmacvisual图像修复)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 qmacvisual提供了一个图像修复的功能。所谓的图像修复,就是对图像中缺省的部分进行修补,它的操作,其实分成两个…

Leetcode 第 388 场周赛题解

Leetcode 第 388 场周赛题解 Leetcode 第 388 场周赛题解题目1:3074. 重新分装苹果思路代码复杂度分析 题目2:3075. 幸福值最大化的选择方案思路代码复杂度分析 题目3:3076. 数组中的最短非公共子字符串思路代码复杂度分析 题目4:…

IDEA跑Java后端项目提示内存溢出

要设置几个地方,都试一下吧: 1、默认是700,我们设置大一点(上次配置了这儿就解决了) 2、 3、 4、-Xmx4g

葵花卫星影像应用场景及数据获取

一、卫星参数 葵花卫星是由中国航天科技集团公司研制的一颗光学遥感卫星,代号CAS-03。该卫星于2016年11月9日成功发射,位于地球同步轨道,轨道高度约为35786公里,倾角为0。卫星设计寿命为5年,搭载了高分辨率光学相机和多…