NLTK与深度学习的自然语言处理实战:NLTK情感分析入门

部署运行你感兴趣的模型镜像

情感分析:从文本中挖掘情绪

学习目标

本课程将深入探讨情感分析的基本原理和技术,重点学习如何使用NLTK(Natural Language Toolkit)进行情感分析,包括正面、负面和中性情感的识别。通过本课程的学习,学员将能够独立完成情感分析项目,为文本数据的情感倾向提供准确的判断。

相关知识点

  • NLTK情感分析

学习内容

1 NLTK情感分析

1.1 情感分析的基本概念

情感分析,也称为意见挖掘,是一种通过自然语言处理、文本分析和计算语言学来识别和提取文本中主观信息的技术。这些信息通常包括情感(正面、负面或中性)、态度、情绪和观点。情感分析在社交媒体监控、市场研究、产品分析和客户服务等多个领域都有广泛的应用。

情感分析可以分为几个不同的层次:

  • 文档级情感分析:分析整个文档的情感倾向。
  • 句子级情感分析:分析单个句子的情感倾向。
  • 方面级情感分析:分析特定方面的情感倾向,例如产品特性或服务的某个方面。

情感分析的方法可以分为基于规则的方法、基于机器学习的方法和基于深度学习的方法。基于规则的方法依赖于预定义的规则和词典,而基于机器学习的方法则通过训练模型来自动学习情感倾向。基于深度学习的方法则利用神经网络来捕捉文本中的复杂模式。

1.2 使用NLTK进行文本预处理

在进行情感分析之前,文本预处理是一个非常重要的步骤。文本预处理包括去除噪声、分词、词干提取和词形还原等步骤,这些步骤有助于提高情感分析的准确性。

1.2.1 去除噪声

去除噪声是指从文本中移除无关的信息,如HTML标签、特殊字符和数字等。这些信息通常不会对情感分析产生积极影响,反而可能干扰模型的训练。

#安装相关依赖
%pip install nltk
#下载数据
!wget https://model-community-picture.obs.cn-north-4.myhuaweicloud.com/ascend-zone/notebook_datasets/36f81a50300d11f0ac12fa163edcddae/nltk_data.zip
!wget https://model-community-picture.obs.cn-north-4.myhuaweicloud.com/ascend-zone/notebook_datasets/36f81a50300d11f0ac12fa163edcddae/test-00000-of-00001.parquet
#解压数据
!unzip nltk_data.zip
import re

def remove_noise(text):
    # 去除HTML标签
    text = re.sub(r'<.*?>', '', text)
    # 去除特殊字符和数字
    text = re.sub(r'[^a-zA-Z\s]', '', text)
    return text

# 示例
text = "<p>This is a test text that contains some special characters!123</p>"
clean_text = remove_noise(text)
print(clean_text)
1.2.2 分词

分词是将文本分割成单词或短语的过程。分词是自然语言处理中的一个基本步骤,有助于后续的词频统计和特征提取。

import nltk
nltk.data.path.append('./nltk_data')

def tokenize(text):
    return nltk.word_tokenize(text)

# 示例
text = "<p>This is a test text that contains some special characters!123</p>"
tokens = tokenize(text)
print(tokens)
1.2.3 词干提取和词形还原

词干提取是将单词还原为其基本形式的过程,而词形还原则是将单词还原为其词典形式。这两个步骤有助于减少词汇的多样性,提高模型的泛化能力。

from nltk.stem import PorterStemmer, WordNetLemmatizer

def stem_and_lemmatize(tokens):
    stemmer = PorterStemmer()
    lemmatizer = WordNetLemmatizer()
    stemmed = [stemmer.stem(token) for token in tokens]
    lemmatized = [lemmatizer.lemmatize(token) for token in stemmed]
    return lemmatized

# 示例
tokens = ['running', 'ran', 'runs', 'flying', 'flew', 'flies']
processed_tokens = stem_and_lemmatize(tokens)
print(processed_tokens)
1.3 构建情感分析模型

构建情感分析模型是情感分析的核心步骤。可以使用NLTK中的预训练模型,也可以自己训练一个模型。本课程将介绍如何使用NLTK中的预训练模型进行情感分析。

1.3.1 使用NLTK的预训练模型

NLTK提供了一些预训练的情感分析模型,这些模型可以直接使用,无需额外的训练。将使用VADER(Valence Aware Dictionary and sEntiment Reasoner)模型,它是一个基于规则和词汇表的情感分析工具,特别适合社交媒体文本。

from nltk.sentiment import SentimentIntensityAnalyzer

def analyze_sentiment(text):
    sia = SentimentIntensityAnalyzer()
    sentiment = sia.polarity_scores(text)
    return sentiment

# 示例
text = "This movie is very wonderful and I love it so much!"
sentiment = analyze_sentiment(text)
print(sentiment)

VADER模型返回一个字典,包含四个值:

  • neg:负面情感的得分。
  • neu:中性情感的得分。
  • pos:正面情感的得分。
  • compound:综合得分,范围从-1(最负面)到1(最正面)。
1.3.2 自定义情感分析模型

如果预训练模型不能满足需求,还可以训练一个情感分析模型。这通常需要一个标注好的数据集,以及一些机器学习或深度学习的算法。

from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report, accuracy_score

import pandas as pd

# 读取 parquet 文件
data = pd.read_parquet('test-00000-of-00001.parquet')

# 获取评论内容
texts = data['text']      

# 获取标签
labels = data['label']    


train_texts, test_texts, train_labels, test_labels = train_test_split(
    texts, labels, test_size=0.2, random_state=42, stratify=labels
)

vectorizer = CountVectorizer(
    lowercase=True,
    stop_words='english',
    ngram_range=(1, 2)
)
train_features = vectorizer.fit_transform(train_texts)
test_features = vectorizer.transform(test_texts)

model = MultinomialNB()
model.fit(train_features, train_labels)

predictions = model.predict(test_features)
print(classification_report(test_labels, predictions))
              precision    recall  f1-score   support

    negative       0.62      0.65      0.64       794
     neutral       0.62      0.71      0.66      1188
    positive       0.75      0.41      0.53       475

    accuracy                           0.63      2457
   macro avg       0.66      0.59      0.61      2457
weighted avg       0.64      0.63      0.63      2457

您可能感兴趣的与本文相关的镜像

TensorFlow-v2.15

TensorFlow-v2.15

TensorFlow

TensorFlow 是由Google Brain 团队开发的开源机器学习框架,广泛应用于深度学习研究和生产环境。 它提供了一个灵活的平台,用于构建和训练各种机器学习模型

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值