目录

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

本文是转载文章,点击查看原文
如有侵权,请联系 xyy@jishuzhan.net 删除
相关推荐
Francek Chen16 分钟前
【现代深度学习技术】循环神经网络02:文本预处理
人工智能·pytorch·rnn·深度学习·神经网络·文本处理
b***25112 小时前
电池分选机:新能源时代的品质守护者|深圳比斯特自动化
大数据·人工智能·自动化
weixin_457885822 小时前
智能多媒体处理流水线——基于虎跃办公API的自动化解决方案
运维·数据库·人工智能·ai·自动化
IT科技观察2 小时前
金融壹账通推出大模型一体机,加速金融行业AI落地与应用
大数据·人工智能·金融·云计算
带娃的IT创业者3 小时前
《AI大模型应知应会100篇》第4篇:Transformer架构深入浅出:大模型的基石
人工智能·架构·transformer
L_cl4 小时前
【NLP 面经 6】
人工智能·自然语言处理
Jamence4 小时前
多模态大语言模型arxiv论文略读(六)
人工智能·深度学习·语言模型
百万蹄蹄向前冲6 小时前
三句话四分钟,豆包出题把吾秀
前端·人工智能·豆包marscode
_painter6 小时前
【深度学习与实战】3.1 逻辑回归模型
人工智能·深度学习·逻辑回归
丰锋ff7 小时前
借助 AI 工具使用 Python 实现北京市店铺分布地理信息可视化教程
人工智能·python·信息可视化