# paper_code **Repository Path**: alvin_GDUT/paper_code ## Basic Information - **Project Name**: paper_code - **Description**: 本科毕业论文源代码 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-04-28 - **Last Updated**: 2025-04-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: Python ## README # 金融文本情感分析模型 这是一个用于金融文本情感分析的工具集,包含模型训练和预测功能。支持多种模型类型,包括FinBERT、BERT、RoBERTa和LSTM,并提供单模型预测和集成模型预测功能。 ## 项目结构 ``` . ├── README.md # 项目说明文档 ├── model_trainer.py # 模型训练工具 ├── model_predictor.py # 模型预测工具(新增) └── models/ # 模型保存目录 ├── finbert/ # FinBERT模型目录 ├── bert/ # BERT模型目录 ├── lstm/ # LSTM模型目录 └── ensemble/ # 集成模型目录 ``` ## 安装依赖 ```bash pip install -r requirements.txt ``` ## 模型训练 ### 训练单个模型 ```python from model_trainer import create_trainer import pandas as pd # 创建模型训练器 trainer = create_trainer( model_type='finbert', # 模型类型:'finbert', 'bert', 'roberta', 'lstm' model_name='bert-base-chinese', # 预训练模型名称 max_seq_length=128, # 最大序列长度 batch_size=16, # 批大小 learning_rate=2e-5, # 学习率 num_epochs=3, # 训练轮数 output_dir='./models/finbert' # 模型保存目录 ) # 加载数据 df = pd.read_csv('data.csv') # 准备数据 train_dataloader, validation_dataloader, label_dict = trainer.prepare_data( df, text_column='text', label_column='sentiment' ) # 训练模型 history = trainer.train(train_dataloader, validation_dataloader) # 保存模型 trainer.save_model() ``` ### 训练多个模型并创建集成模型 ```python from model_trainer import train_multi_models, save_ensemble_model import pandas as pd # 加载数据 df = pd.read_csv('data.csv') # 配置多个模型 models_config = [ { 'model_type': 'finbert', 'model_name': 'bert-base-chinese', 'max_seq_length': 128, 'batch_size': 16, 'num_epochs': 3, 'output_dir': './models/finbert' }, { 'model_type': 'bert', 'model_name': 'bert-base-chinese', 'max_seq_length': 128, 'batch_size': 16, 'num_epochs': 3, 'output_dir': './models/bert' }, { 'model_type': 'lstm', 'model_name': 'bert-base-chinese', 'max_seq_length': 128, 'batch_size': 32, 'num_epochs': 5, 'output_dir': './models/lstm' } ] # 训练多个模型 models_results = train_multi_models(df, 'text', 'sentiment', models_config) # 保存集成模型 ensemble_config = save_ensemble_model(models_results, './models/ensemble') ``` ## 模型预测 ### 命令行使用 本项目提供了命令行工具`model_predictor.py`,可用于加载保存的模型进行预测。 #### 单个模型预测文件 ```bash python model_predictor.py single --model_path ./models/finbert --input test_data.csv --output results.csv --text_column text --batch_size 32 ``` #### 集成模型预测文件 ```bash python model_predictor.py ensemble --ensemble_path ./models/ensemble --input test_data.csv --output ensemble_results.csv --text_column text ``` #### 预测单个文本 ```bash python model_predictor.py text --model_path ./models/finbert --text "公司业绩持续上升,市场表现良好" ``` ### 在Python代码中使用 #### 单模型预测 ```python from model_predictor import ModelPredictor # 创建预测器 predictor = ModelPredictor('./models/finbert') # 预测单个文本 result = predictor.predict("公司业绩持续上升,市场表现良好") print(f"预测情感: {result['predicted_sentiment']}") print(f"置信度: {result['confidence']:.4f}") # 预测多个文本 texts = [ "公司业绩持续上升,市场表现良好", "公司业绩不及预期,投资者信心受挫", "公司公告称将继续加大研发投入" ] results = predictor.predict(texts) for result in results: print(f"文本: {result['text']}") print(f"情感: {result['predicted_sentiment']}") print(f"置信度: {result['confidence']:.4f}") print() # 预测文件 predictor.predict_file('test_data.csv', 'results.csv', 'text') ``` #### 集成模型预测 ```python from model_predictor import load_ensemble_model, ensemble_predict # 加载集成模型 predictors, weights = load_ensemble_model('./models/ensemble') # 集成预测 texts = [ "公司业绩持续上升,市场表现良好", "公司业绩不及预期,投资者信心受挫" ] results = ensemble_predict(predictors, texts, weights) # 显示结果 for result in results: print(f"文本: {result['text']}") print(f"预测情感: {result['predicted_sentiment']}") print(f"置信度: {result['confidence']:.4f}") print() ``` ## 模型说明 ### 支持的模型类型 1. **FinBERT**: 针对金融领域的BERT微调模型 2. **BERT**: 原始BERT模型 3. **RoBERTa**: 优化的BERT模型 4. **LSTM**: 基于LSTM的分类模型 ### 模型结构 保存的模型包含以下文件: - `config.json`: 模型配置信息 - `pytorch_model.bin`: 模型权重(BERT系列模型) - `tokenizer_config.json`: 分词器配置 - `vocab.txt`: 词汇表 - `model.pt` 或 `model_full.pt`: LSTM模型权重或完整模型 ### 集成模型 集成模型目录包含: - `ensemble_config.json`: 集成配置文件,包含各模型路径和权重 - 各个子模型目录 ## 性能调优 - 增大`batch_size`可以提高预测速度,但需要更多显存 - `max_seq_length`影响模型处理的文本长度,可根据实际需求调整 - 使用`cuda`设备可显著提高预测速度 - 对于大型文件,建议使用`batch_size=16`或更大 - 如果文本较长,可以适当增加`max_seq_length`,但会增加内存消耗 ## 参考资料 - [Hugging Face Transformers](https://huggingface.co/docs/transformers/index) - [PyTorch文档](https://pytorch.org/docs/stable/index.html)