NLP 梳理01 — 文本预处理和分词

文章目录

一、说明

本文总结了在NLP处理中,进行文本预处理的一些内容、步骤、处理工具包应用。对于初学者具有深刻学习和实验指导意义。

二、文本预处理概述

文本预处理是任何自然语言处理 (NLP) 管道中的关键步骤。它涉及将原始、非结构化文本转换为适合分析和建模的干净、结构化的格式。

2.1 为什么要预处理文本?

噪:删除不相关的信息,例如特殊字符、数字或非索引字。

文本规范化:确保文本数据的一致性,例如,将文本转换为小写。

改进的性能:预处理的文本可以在分类或情绪分析等下游任务中获得更好的性能。

特征提取:简化有意义特征的创建。

2.2 文本预处理的常见步骤

清洗:删除特殊字符、数字或 标签。

标记化:将文本拆分为更小的单元(标记)。

正常化:将文本转换为标准格式(例如,小写、词干提取、词形还原)。

删除停用词:删除可能对含义没有贡献的常用词。

2.3 什么是令牌化?

分词是将文本分解为更小的单元(称为分词)的过程。这些标记可以表示单词、句子或子词,具体取决于应用的标记化级别。分词通常是文本预处理的第一步,因为它将原始文本简化为适合分析和建模的结构化格式。

2.4 为什么令牌化很重要?

文本标准化:将原始的非结构化文本转换为结构化形式。

特征提取:支持为机器学习模型创建有意义的功能。

效率:通过将文本拆分为可管理的组件来降低计算复杂性。

三、分词类型

  1. 单词级分词
    这会将文本拆分为单个单词。

例:输入:"自然语言处理令人着迷。输出: "Natural", "Language", "Processing", "is", "fascinating", "."

  1. 句子级分词

这会将文本拆分为句子。

例:输入:"NLP 很棒。代币化很有趣!输出: "NLP is great.", "Tokenization is fun!"

  1. 子词分词

这将文本分解为子词单元,通常用于基于 transformer 的模型。

例:输入: "unbelievable" 输出: "un", "believe", "##able" (使用 BERT 分词器)

四、用于分词化的工具和库

  1. NLTK

    NLTK (Natural Language Toolkit) 是一个用于 NLP 任务的多功能库,包括用于单词和句子标记化的函数。

  2. spaCy

    spaCy 是一个现代 NLP 库,可提供开箱即用的高效、准确的标记化。

  3. Hugging Face分词器

    Hugging Face 为 BERT、GPT 和 RoBERTa 等 transformer 模型提供了一个预训练的分词器库。

五、实际实施

设置环境

首先,您需要设置一个 Python 环境,其中包含用于文本预处理的必要库。以下是使用 Conda 的方法:

第 1 步:创建新的 Conda 环境

打开您的终端或 Anaconda Prompt,并创建一个安装了 Python 的新环境(例如,名为 nlp_env):

复制代码
conda create --name nlp_env python=3.9

第 2 步:激活环境

激活新创建的环境:

复制代码
conda activate nlp_env

第 3 步:安装所需的 Python 库

激活环境后,使用 或 安装所需的包。虽然 Conda 没有针对某些库的预构建包,但安装核心库后,您仍然可以在 Conda 环境中使用:condapippip

复制代码
conda install nltk spacy

或者,如果您愿意,可以使用 直接安装它们:pip

复制代码
pip install nltk spacy

第 4 步:安装 Transformers 库

要使用高级 NLP 任务和模型,请从 Hugging Face 安装 Transformers 库:

复制代码
pip install transformers

第 5 步:下载 SpaCy 语言模型

安装必要的库后,下载 SpaCy 的英语语言模型:

复制代码
python -m spacy download en_core_web_sm

完成这些步骤后,您就可以开始在 Python 中使用文本预处理技术了!

六、编写函数以对文本进行标记

我们将在示例数据集上演示使用 NLTK、spaCy 和 Hugging Face 分词器进行分词化。

示例 Dataset

sample_text = "分词法有助于将文本分解为可管理的单位。"

示例 1:使用 NLTK 进行单词和句子标记化

复制代码
import nltk
nltk.download('punkt')

def nltk_tokenize(text):
    # Word tokenization
    words = nltk.word_tokenize(text)
    
    # Sentence tokenization
    sentences = nltk.sent_tokenize(text)
    return words, sentences

# Example usage
sample_text = "Tokenization helps break text into manageable units."
words, sentences = nltk_tokenize(sample_text)
print("Words:", words)
print("Sentences:", sentences)

输出:

Words: 'Tokenization', 'helps', 'break', 'text', 'into', 'manageable', 'units', '.'

Sentences: 'Tokenization helps break text into manageable units.'

示例 2:使用 SpaCy 进行标记化

复制代码
import spacy

def spacy_tokenize(text):
    # Load the SpaCy language model
    nlp = spacy.load("en_core_web_sm")
    doc = nlp(text)

    # Extract words and sentences
    words = [token.text for token in doc]
    sentences = [sent.text for sent in doc.sents]
    return words, sentences

# Example usage
sample_text = "Tokenization helps break text into manageable units."
words, sentences = spacy_tokenize(sample_text)
print("Words:", words)
print("Sentences:", sentences)

输出:

Words: 'Tokenization', 'helps', 'break', 'text', 'into', 'manageable', 'units', '.'

Sentences: 'Tokenization helps break text into manageable units.'

示例 3:使用 Hugging Face 分词器进行子词分词化

复制代码
from transformers import AutoTokenizer

def huggingface_tokenization(text):
    tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
    tokens = tokenizer.tokenize(text)
    token_ids = tokenizer.convert_tokens_to_ids(tokens)
    return tokens, token_ids

# Example usage
sample_text = "Tokenization helps break text into manageable units."
tokens, token_ids = huggingface_tokenization(sample_text)
print("Tokens:", tokens)
print("Token IDs:", token_ids)

输出:

Tokens: 'token', '##ization', 'helps', 'break', 'text', 'into', 'manage', '##able', 'units', '.'

Token IDs: 19204, 3989, 7126, 3338, 3793, 2046, 6133, 3085, 3197, 1012

比较输出

分析和比较不同分词化方法的输出。例如:

NLTK 单词分词:包括标点符号作为单独的标记。

spaCy 令牌化:保留特定于上下文的分段并处理边缘情况。

Hugging Face 子词分词化:将单词分解为子单词单元,适用于 transformer 模型。

示例输出

对于输入文本:

"Tokenization helps break text into manageable units."

NLTK 的:

单词: 'Tokenization', 'helps', 'break', 'text', 'into', 'manageable', 'units', '.'

句子:'Tokenization helps break text into managed units.'

spaCy 的:

单词: 'Tokenization', 'helps', 'break', 'text', 'into', 'manageable', 'units', '.'

句子:'Tokenization helps break text into managed units.'

拥抱脸:

代币: 'token', '##ization', 'helps', 'break', 'text', 'into', 'manage', '##able', 'units', '.'

令牌 ID:19204、3989、7126、3338、3793、2046、6133、3085、3197、1012

七、结论

在本教程中,我们探讨了文本预处理和分词化的概念,包括其类型和使用 NLTK、spaCy 和 Hugging Face 分词器的实际实现。每种方法都有其独特的优势,选择取决于用例和模型要求。

*[HTML]: https://medium.com/@ebimsv/day-2-text-preprocessing-and-tokenization-26ea25d3db0f

相关推荐
云烟成雨TD14 小时前
Spring AI 1.x 系列【39】MCP Java SDK 与 Spring AI 集成
java·人工智能·spring
继续商行14 小时前
性能优化的工程美学与极致追求
人工智能
超梦dasgg14 小时前
详细讲解 AI 上下文(Context)
人工智能·状态模式
救救孩子把14 小时前
87-机器学习与大模型开发数学教程-8-5 微分方程与神经微分方程(Neural ODEs)
人工智能·机器学习
完成大叔14 小时前
模块二,Agent个性化模式的价值呈现
人工智能
Shan120514 小时前
机器学习之平均精确率均值(Average Precision)
人工智能·机器学习·均值算法
共享家952715 小时前
Skill的概述与使用
人工智能·学习·openclaw
`流年づ15 小时前
人工智能学习笔记-KNN
人工智能·笔记·学习
Master_oid15 小时前
机器学习45:线性回归进阶篇③
人工智能·机器学习·线性回归
YOLO数据集集合15 小时前
智慧工地AI视觉落地|施工现场建材目标检测开源数据集|无人机航拍建材识别、工地智能化物料盘点深度学习10266期
人工智能·目标检测·无人机