基于文字情感的民族音乐智能生成项目Bert+Magenta----文本情感部分
项目源码及数据集
https://github.com/DreamShibei/ChineseMusicGenerator
其他模块
基于文字情感的民族音乐智能生成项目Bert+Magenta【音乐生成部分】(一)
基于文字情感的民族音乐智能生成项目Bert+Magenta【音乐生成部分】(二)
搭建环境
系统为 ubuntu18.04,基本配置为 4 核CPU、8GB 内存,硬盘100G,如云主机建议 图形界面,另此处使用Anaconda 和 Pycharm开发环境。
着手开发
配置 bert 运行环境
- 安装 tensorflow 和 Bert
- anaconda创建 python=3.5 的虚拟环境;
- 安装 tensorflow=1.11.10
conda install tensorflow==1.11.10
- bert,目前来看可以选择 fine-tune 较为便捷,因此先下载 bert 和中文预训练模型;下载 bert:
git clone https://github.com/google-research/bert
准备数据集
- 我们需要的情感分类模型对应的文件是 runclassifier.py ,其中数据读取部分默认是以回车作为example的分隔符,以 tab 为 label 和 sample 之间的分隔符。因此数据最好符合这种模式。否则可修改 get_example 函数即可。
- 其中 test 集的 label 可随意填写,不影响最终结果。大大减少了分集时的数据处理量。
- 推荐数据下载地址为中文情感干分析语料库大全,我们这里采用中文微博情感分析测评数据
训练
- 文件中提供了多个任务处理类,我们只是用 DataProcesser 类,新建类继承,并给出我们需要的输出方式。
class MyTaskProcessor(DataProcessor):
"""Processor for my task-news classification """
def __init__(self):
self.labels = ['happy','sad','angry','peaceful']
def get_train_examples(self, data_dir):
return self._create_examples(
self._read_tsv(os.path.join(data_dir, 'cnews.train.txt')), 'train')
def get_dev_examples(self, data_dir):
return self._create_examples(
self._read_tsv(os.path.join(data_dir, 'cnews.val.txt')), 'val')
def get_test_examples(self, data_dir):
return self._create_examples(
self._read_tsv(os.path.join(data_dir, 'test.csv')), 'test')
def get_labels(self):
return self.labels
def _create_examples(self, lines, set_type):
"""create examples for the training and val sets"""
examples = []
for (i, line) in enumerate(lines):
guid = '%s-%s' %(set_type, i)
text_a = tokenization.convert_to_unicode(line[1])
label = tokenization.convert_to_unicode(line[0])
examples.append(InputExample(guid=guid, text_a=text_a, label=label))
return examples
- 同时需要修改任务名称
def main(_):
tf.logging.set_verbosity(tf.logging.INFO)
processors = {
"cola": ColaProcessor,
"mnli": MnliProcessor,
"mrpc": MrpcProcessor,
"xnli": XnliProcessor,
"mytask": MyTaskProcessor,
}
- 进入 bert 文件夹,打开项目,运行脚本,脚本内容如下:
export BERT_BASE_DIR=/home/ubuntu/Downloads/processed_bert_model_data/chinese_L-12_H-768_A-12
export GLUE_DIR=/home/ubuntu/Downloads/processed_bert_model_data
export
TRAINED_CLASSIFIER=/home/ubuntu/Downloads/processed_bert_model_data/chinese_L-12_H-768_A-12/bert_model.ckpt
python run_classifier.py \
--task_name=mytask \
--do_train=true \
--data_dir=$GLUE_DIR/cnews-tab \
--vocab_file=$BERT_BASE_DIR/vocab.txt \
--bert_config_file=$BERT_BASE_DIR/bert_config.json \
--init_checkpoint=$TRAINED_CLASSIFIER \
--max_seq_length=128 \
--output_dir=/tmp/mytask_output/
其中 bert_base_Dir 指预训练模型所在位置;Glue_Dir 指数据集所在位置;TRAINED_CLASSIFIER 指训练过模型所在位置,这里我们为训练的时候只需要指向预训练模型即可。
训练结果的保存和预测
- 在刚刚的output_dir中保存有训练后的ckpt文件,下次使用时将init_chekpoint指向它即可;
- 进行预测和验证只需要增加参数do_predict=true即可
- 结果为所有情感的概率,若只输出一种情感还需要对结果进行处理