本项目使用BERT模型实现了一个文本情感分析系统,能够将文本分类为六种情感类别:中性、高兴、生气、伤心、恐惧和惊讶。
首先克隆仓库并安装必要的依赖包:
git clone https://github.com/AuroraEchos/SentimentAnalysis.git
cd SentimentAnalysis
mkdir bert_model_files
mkdir saved_models
pip install -r requirements.txt
- 准备训练集、验证集和测试集,格式为TSV文件。
- 根据需要更新代码中的数据集路径。
- 运行以下命令开始训练:
该命令将按照指定轮数训练基于BERT模型的情感分析器,并根据验证准确率保存最佳模型。
python train.py
训练完成后,可以通过以下命令在测试集上评估模型性能:
python evaluate.py
该命令将输出测试集上的准确率。
你可以使用训练好的BERT模型来预测新文本的情感类别。以下是一个示例:
from sentiment_analyzer import SentimentAnalyzer
model_path = 'saved_models/best_model'
analyzer = SentimentAnalyzer(model_path)
text = "今天天气不错!"
predicted_label, confidence = analyzer.predict(text)
print(f"Predicted sentiment: {predicted_label} (Confidence: {confidence:.2f})")
sentiment-analysis/
├── bert_model_files/
│ └── ...
├── data/
│ ├── cn_stopwords.txt
│ ├── data.csv
│ └── ...
├── saved_models/
│ └── bert_epoch_0/
│ ├── config.json
│ └── ...
├── evaluate.py
├── preprocess.py
├── README.md
├── sentiment_analyzer.py
├── train.py
本项目使用的数据集为SMP微博情绪6分类数据集,来源于SMP2020-EWECT。数据集应为TSV格式,包含两列:第一列为标签,第二列为文本。请确保数据集包含表头行。
示例 web_train.tsv:
label text
0 这是一个中性句子。
1 我今天非常高兴!
2 我对你非常生气。
3 我对此感到非常伤心。
4 我现在真的很害怕。
5 太惊讶了!
预训练模型为 BERT,来源于Hugging Face模型库。 模型和分词器在每个轮次结束时会根据验证准确率的提高情况进行保存,保存在 /saved_models 目录中。 加载保存的模型可以使用以下代码:
from transformers import BertTokenizer, BertForSequenceClassification
model_path = 'saved_models/bert_epoch_'
tokenizer = BertTokenizer.from_pretrained(model_path)
model = BertForSequenceClassification.from_pretrained(model_path)
训练过程中,包含每个轮次的平均损失和验证准确率等信息会通过 logging 模块记录,并打印到控制台。
此项目基于MIT许可证。详情请参阅LICENSE文件。
- 本项目仅供学习和研究使用,不保证在所有环境下均可正常运行。
- 如果遇到问题或有改进意见,请联系项目作者。
- 维护者:Wenhao Liu