Twitter-Sentiment-Analysis
基于 Word2Vec 与词袋模型的 Twitter 仇恨言论二分类实战项目,涵盖完整 NLP 流程,适合 NLP 入门学习
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
基于 Word2Vec 与词袋模型的 Twitter 仇恨言论二分类实战项目,涵盖完整 NLP 流程,适合 NLP 入门学习
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象一下:你是一名社交媒体运营,每天要审核上万条用户评论,找出那些带有种族歧视、性别偏见的仇恨言论。人工一条条读?不,你只需要训练一个模型,让它自动告诉你:这条是垃圾,那条是正常。
这就是 Twitter-Sentiment-Analysis 项目所做的事——一个完整的 NLP 情感分析实战项目,涵盖了从原始推文到模型训练的完整流程,适合作为学习 NLP 的入门级项目。
Twitter 是全球最大的社交媒体平台之一,每天产生数亿条推文。这些文本数据中蕴含着海量用户情绪:从对产品的真实评价,到对社会事件的立场表达,再到网络暴力与仇恨言论。
传统的情感分析方法依赖人工标注,成本高、效率低。而基于机器学习的自动化情感分析,可以对海量文本进行快速分类。这催生了 NLP 领域最经典的二分类问题之一:判断一条推文是否包含仇恨或歧视言论(label=1),还是正常内容(label=0)。
本项目的训练集包含约 31962 条推文,测试集约 17197 条,评判指标为 F1-Score,这也是 Kaggle 平台上该练习赛的标准评测指标。
项目仓库结构简洁,包含两个核心入口:
| 文件 | 说明 |
|---|---|
Twitter_Sentiment.ipynb | Google Colab 原生 Notebook,含完整分析流程 |
twitter_sentiment.py | 独立 Python 脚本,可本地命令行运行 |
train_tweet.csv | 训练集(约 31962 条,已标注 label) |
test_tweets.csv | 测试集(约 17197 条,待预测) |
这种「Notebook + 脚本」双轨设计非常实用:爱好者可以用 Colab 零门槛打开 Notebook 边跑边学;开发者可以将脚本直接集成到自己的数据处理流程中。
原始推文充满噪声——@用户名、#话题标签、URL链接、表情符号、大小写混乱。模型无法直接处理这些噪音数据,必须先做预处理。项目使用 Porter Stemmer 将「running」「ran」「runner」统一映射为「run」,减少词汇表维度:
# 去除非字母字符,统一小写
review = re.sub('[^a-zA-Z]', ' ', tweet).lower()
# 去停用词(nltk stopwords)
review = [ps.stem(word) for word in review
if word not in set(stopwords.words('english'))]
将文本转化为词频向量,这是最经典也最直观的文本特征表示方式。统计每个词在语料库中的出现频次,生成稀疏矩阵。这种方法的优点是简单直观,缺点是丢失了词序信息和语义关联。
为了弥补词袋模型的不足,项目引入了 Word2Vec 的 Skip-Gram 模型,能够捕捉词的语义相似性。通过 model.wv.most_similar(positive='dinner') 可以找出与「dinner」在语义上最接近的词:
model_w2v = gensim.models.Word2Vec(
tokenized_tweet,
size=200, # 200维词向量
window=5, # 上下文窗口5个词
min_count=2,
sg=1, # 1=Skip-Gram
negative=10, # 负采样10个词
workers=2,
seed=34
)
model_w2v.train(tokenized_tweet, total_examples=len(train), epochs=20)
Twitter 的 #话题标签往往承载了重要的语义信息。项目用正则表达式专门提取 hashtag,对比正常推文与仇恨推文中的高频标签分布,挖掘两类文本的主题差异。
项目充分利用 matplotlib + seaborn + wordcloud 进行多维可视化:
| 类别 | 技术/库 |
|---|---|
| 数据处理 | pandas, numpy |
| NLP | nltk, gensim (Word2Vec, Doc2Vec), PorterStemmer |
| 特征工程 | CountVectorizer |
| 可视化 | matplotlib, seaborn, wordcloud |
| 进度条 | tqdm |
| 环境 | Jupyter Notebook / Google Colab |
爱好者路线(零门槛):直接用浏览器打开 Google Colab 连接,无需本地配置任何环境,即可运行完整分析流程。作者在 README 中直接附上了 Colab 链接,新手可以边跑边学。
开发者路线:克隆仓库后,在本地 Python 3.6+ 环境中运行脚本,需要额外安装 nltk 并下载 stopwords 数据(脚本会自动调用 nltk.download('stopwords'))。无 GPU 依赖,CPU 即可运行。
项目使用传统的机器学习方法(CountVectorizer + 分类器),而非深度学习方案。这意味着:
尽管技术栈偏向传统,这个项目在 NLP 教学领域具有重要价值:
项目 GitHub ⭐ 268,fork 128,在同类 NLP 入门项目中属于热度较高的。值得注意的是,同类项目中基于深度学习的情感分析正在快速崛起,传统 ML 方法的价值更多体现在教学和快速原型阶段。