按照阿光的项目
做出了学习笔记,pytorch深度学习实战项目100例
基于词级ngram的词袋模型对twitter数据进行情感分析
什么是 N 符?
N 格是指给定文本或语音样本中 n 个项目的连续序列。这些项目可以是音素、音节、字母、单词或碱基对,具体取决于应用。N-grams 广泛应用于计算语言学和文本分析中的各种任务,如文本预测、拼写校正、语言建模和文本分类。它们为文本挖掘和自然语言处理(NLP)提供了一种简单而有效的方法。
###了解 N 符
n-gram 的概念很简单:它是由 'n' 个连续项组成的序列。下面是一个细分:
- Unigram (n=1): 单个项目或单词。
- Bigram (n=2): 一对连续的项目或单词。
- Trigram (n=3): 连续的三联项或词。
示例
考虑一下这个句子: "敏捷的棕狐狸跳过懒惰的狗"。
- Unigram: "The"、"quick"、"brown"、"fox"、"jumps"、"over"、"the"、"l lazy"、"dog"
- Bigram: "快"、"棕色快"、"棕色狐狸"、"狐狸跳"、"跳过"、"过"、"懒"、"懒狗"
- Trigram: "棕色的快"、"棕色的狐狸快"、"棕色的狐狸跳"、"狐狸跳过"、"跳过"、"跳过懒惰"、"懒惰的狗"
上下文和用途
- Unigram: 除单个词条外,这些词条不包含任何上下文。
- Bigrams: 通过将连续的项目配对,提供最基本的语境。
- Trigrams: 这些词组开始形成更加连贯和与上下文相关的短语。
随着'n'的增加,n-grams 可以捕捉到更多的上下文,但由于计算费用的增加和数据的稀疏性,其收益也会逐渐减少。
###实际应用
N-gram 在各种 NLP 任务中至关重要:
- 文本预测: 预测序列中的下一个词。
- 拼写纠正: 根据上下文识别并纠正拼写错误的单词。
- 语言建模 :创建理解和生成人类语言的模型。4.文本分类: 根据内容将文本归入预定义的类别。
通过理解和利用 n-gram,可以提高 NLP 模型在这些任务中的性能和准确性。
Twitter 情感分析数据集包含 1,578,627 条分类推文,每一行的正面情感标记为 1,负面情感标记为 0。我建议使用语料库的 1/10 来测试你的算法,而其余的可以用来训练你用来进行情感分类的任何算法。我试着用一个非常简单的 Naive Bayesian 分类算法来使用这个数据集,结果是 75% 的准确率,考虑到长期的猜测工作方法会达到 50% 的准确率,一个简单的方法可以给你带来比猜测工作高 50% 的性能,这并不是很好,但考虑到一般情况下(尤其是在涉及到社交传播情感分类时),人类进行的 10% 的情感分类是有争议的,任何分析文本整体情感的算法所希望达到的最高相对准确率是 90%,这并不是一个坏的起点。
http://thinknook.com/twitter-sentiment-analysis-training-corpus-dataset-2012-09-22/
bash
x_train, x_test, y_train, y_test = train_test_split(data['SentimentText'],
data['Sentiment'],
test_size=0.1,
random_state=2022)
print(x_train.shape, x_test.shape, y_train.shape, y_test.shape)
#(682294,) (75811,) (682294,) (75811,)
bash
import pandas as pd
import csv
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
try:
data = pd.read_csv('/content/drive/MyDrive/Niek/Sentiment Analysis Dataset.csv', quoting=csv.QUOTE_NONE, on_bad_lines='skip', encoding='utf-8')
except pd.errors.ParserError as e:
print(f"Error parsing CSV: {e}")
data
TF-IDF 是 Term Frequency Inverse Document Frequency 的缩写。这是一种非常常见的算法,用于将文本转化为有意义的数字表示,并将其用于机器算法的预测。在深入解释之前,让我们先举例说明并探索两种不同的辣味稀疏矩阵。这可以让你对我下面要解释的内容有一个整体的了解。简单的基本示例数据 :
python
# 初始化TF-IDF向量化器
vectorizer_word = TfidfVectorizer(max_features=40000, # 最多使用40000个特征词
min_df=5, # 至少在5个文档中出现的词才会被考虑
max_df=0.5, # 在50%以上的文档中出现的词会被忽略
analyzer='word', # 词级别的分析
stop_words='english', # 去除英语停用词
ngram_range=(1, 2)) # 考虑1-2元组
# 使用训练数据拟合向量化器
vectorizer_word.fit(x_train.astype("U").str.lower())
# 将训练集和测试集文本转化为TF-IDF矩阵
tfidf_matrix_word_train = vectorizer_word.transform(x_train.astype("U").str.lower())
print("TF-IDF Matrix for Training Data (Dense Format):\n")
print(tfidf_matrix_word_train)
tfidf_matrix_word_test = vectorizer_word.transform(x_test.astype("U").str.lower())
print("TF-IDF Matrix for Test Data (Dense Format):\n")
print(tfidf_matrix_word_test)
该代码段首先初始化并训练一个逻辑回归模型,然后使用训练好的模型对训练集和测试集进行预测,最后计算并打印模型在训练集和测试集上的准确性。
bash
# 初始化并训练逻辑回归模型
model = LogisticRegression(solver='sag')
model.fit(tfidf_matrix_word_train, y_train)
# 预测训练集和测试集的结果
y_pred_train = model.predict(tfidf_matrix_word_train)
y_pred_test = model.predict(tfidf_matrix_word_test)
# 打印训练集和测试集的准确性
print(accuracy_score(y_train, y_pred_train))
#0.8014386845292767
print(accuracy_score(y_test, y_pred_test))
#0.7856396908790025