NLP 基础理论和工具使用
第一部分:NLP 基础理论
1.1 什么是自然语言处理(NLP)?
定义:自然语言处理是一门让计算机能够理解、生成和操作人类语言的技术。
应用场景:
文本分类:垃圾邮件检测、情感分析。
信息提取:命名实体识别(NER)、关系抽取。
机器翻译:如 Google 翻译。
文本生成:如 ChatGPT、自动摘要。
1.2 NLP 工作的基本流程
文本获取:从文件、数据库、API 获取文本。
文本预处理:将原始文本清洗为机器可处理的格式。
分词、去停用词、标注词性等。
文本表示:将文本转化为数字表示(如 Bag of Words、TF-IDF、词向量)。
模型训练:训练分类器、序列标注模型等。
结果输出:生成模型的输出(如分类标签、摘要等)。
1.3 文本预处理基础
在 NLP 中,预处理是非常重要的环节。常见步骤包括:
分词 (Tokenization):
将句子切分为单词或子词单位。
示例:“I love NLP” → [‘I’, ‘love’, ‘NLP’]
去停用词 (Stop Words Removal):
去除像“a”、“the”、“is”这样对语义影响较小的词。
示例:[‘I’, ‘love’, ‘NLP’] → [‘love’, ‘NLP’]
词形还原 (Lemmatization):
将单词还原到它的基本形式。
示例:“running” → “run”
词性标注 (POS Tagging):
给每个单词标注它的语法类别,如名词、动词等。
示例:“I love NLP” → [(‘I’, ‘PRP’), (‘love’, ‘VBP’), (‘NLP’, ‘NN’)]
第二部分:NLP 工具使用
我们通过实践了解 NLTK 和 spaCy 的基础用法。
NLTK 基础用法
安装 NLTK:
pip install nltk
- 文本分词
import nltk
from nltk.tokenize import word_tokenize, sent_tokenize
下载 NLTK 数据
nltk.download(‘punkt’)
示例文本
text = “Natural Language Processing (NLP) is exciting! It helps computers understand human language.”
句子分割
sentences = sent_tokenize(text)
print(“句子分割:”, sentences)
单词分割
words = word_tokenize(text)
print(“单词分割:”, words)
2. 去停用词
from nltk.corpus import stopwords
下载停用词数据
nltk.download(‘stopwords’)
获取英语停用词表
stop_words = set(stopwords.words(‘english’))
去除停用词
filtered_words = [word for word in words if word.lower() not in stop_words]
print(“去停用词:”, filtered_words)
3. 词性标注
from nltk import pos_tag
下载词性标注数据
nltk.download(‘averaged_perceptron_tagger’)
词性标注
pos_tags = pos_tag(filtered_words)
print(“词性标注:”, pos_tags)
4. 词形还原
from nltk.stem import WordNetLemmatizer
下载词形还原数据
nltk.download(‘wordnet’)
lemmatizer = WordNetLemmatizer()
示例
lemmas = [lemmatizer.lemmatize(word) for word in filtered_words]
print(“词形还原:”, lemmas)
spaCy 基础用法
安装 spaCy:
pip install spacy
python -m spacy download en_core_web_sm
- 加载文本
import spacy
加载预训练模型
nlp = spacy.load(‘en_core_web_sm’)
示例文本
text = “Natural Language Processing (NLP) is exciting! It helps computers understand human language.”
doc = nlp(text)
2. 文本分词
单词分割
tokens = [token.text for token in doc]
print(“单词分割:”, tokens)
3. 词性标注
词性标注
pos_tags = [(token.text, token.pos_) for token in doc]
print(“词性标注:”, pos_tags)
4. 命名实体识别 (NER)
命名实体识别
entities = [(ent.text, ent.label_) for ent in doc.ents]
print(“命名实体识别:”, entities)