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

相关推荐
cooldream200936 分钟前
华为云Flexus+DeepSeek征文|基于华为云Flexus X和DeepSeek-R1打造个人知识库问答系统
人工智能·华为云·dify
Blossom.1184 小时前
使用Python和Scikit-Learn实现机器学习模型调优
开发语言·人工智能·python·深度学习·目标检测·机器学习·scikit-learn
DFminer5 小时前
【LLM】fast-api 流式生成测试
人工智能·机器人
郄堃Deep Traffic5 小时前
机器学习+城市规划第十四期:利用半参数地理加权回归来实现区域带宽不同的规划任务
人工智能·机器学习·回归·城市规划
GIS小天6 小时前
AI+预测3D新模型百十个定位预测+胆码预测+去和尾2025年6月7日第101弹
人工智能·算法·机器学习·彩票
阿部多瑞 ABU6 小时前
主流大语言模型安全性测试(三):阿拉伯语越狱提示词下的表现与分析
人工智能·安全·ai·语言模型·安全性测试
cnbestec6 小时前
Xela矩阵三轴触觉传感器的工作原理解析与应用场景
人工智能·线性代数·触觉传感器
不爱写代码的玉子6 小时前
HALCON透视矩阵
人工智能·深度学习·线性代数·算法·计算机视觉·矩阵·c#
sbc-study7 小时前
PCDF (Progressive Continuous Discrimination Filter)模块构建
人工智能·深度学习·计算机视觉
EasonZzzzzzz7 小时前
计算机视觉——相机标定
人工智能·数码相机·计算机视觉