文章目录
- 一、说明
- 二、文本预处理概述
-
- [2.1 为什么要预处理文本?](#2.1 为什么要预处理文本?)
- [2.2 文本预处理的常见步骤](#2.2 文本预处理的常见步骤)
- [2.3 什么是令牌化?](#2.3 什么是令牌化?)
- [2.4 为什么令牌化很重要?](#2.4 为什么令牌化很重要?)
- 三、分词类型
- 四、用于分词化的工具和库
- 五、实际实施
- 六、编写函数以对文本进行标记
- 七、结论
一、说明
本文总结了在NLP处理中,进行文本预处理的一些内容、步骤、处理工具包应用。对于初学者具有深刻学习和实验指导意义。
二、文本预处理概述
文本预处理是任何自然语言处理 (NLP) 管道中的关键步骤。它涉及将原始、非结构化文本转换为适合分析和建模的干净、结构化的格式。
2.1 为什么要预处理文本?
噪:删除不相关的信息,例如特殊字符、数字或非索引字。
文本规范化:确保文本数据的一致性,例如,将文本转换为小写。
改进的性能:预处理的文本可以在分类或情绪分析等下游任务中获得更好的性能。
特征提取:简化有意义特征的创建。
2.2 文本预处理的常见步骤
清洗:删除特殊字符、数字或 标签。
标记化:将文本拆分为更小的单元(标记)。
正常化:将文本转换为标准格式(例如,小写、词干提取、词形还原)。
删除停用词:删除可能对含义没有贡献的常用词。
2.3 什么是令牌化?
分词是将文本分解为更小的单元(称为分词)的过程。这些标记可以表示单词、句子或子词,具体取决于应用的标记化级别。分词通常是文本预处理的第一步,因为它将原始文本简化为适合分析和建模的结构化格式。
2.4 为什么令牌化很重要?
文本标准化:将原始的非结构化文本转换为结构化形式。
特征提取:支持为机器学习模型创建有意义的功能。
效率:通过将文本拆分为可管理的组件来降低计算复杂性。
三、分词类型
- 单词级分词
这会将文本拆分为单个单词。
例:输入:"自然语言处理令人着迷。输出: ["Natural", "Language", "Processing", "is", "fascinating", "."]
- 句子级分词
这会将文本拆分为句子。
例:输入:"NLP 很棒。代币化很有趣!输出: ["NLP is great.", "Tokenization is fun!"]
- 子词分词
这将文本分解为子词单元,通常用于基于 transformer 的模型。
例:输入: "unbelievable" 输出: ["un", "believe", "##able"] (使用 BERT 分词器)
四、用于分词化的工具和库
-
NLTK
NLTK (Natural Language Toolkit) 是一个用于 NLP 任务的多功能库,包括用于单词和句子标记化的函数。
-
spaCy
spaCy 是一个现代 NLP 库,可提供开箱即用的高效、准确的标记化。
-
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