山东大学软件学院创新实训-角色疆界(一)

数据集准备任务

本阶段任务是从Movie101下载数据集并对数据集进行处理,得到能够使mPlug-Owl进行学习训练的数据格式。

Movie101包含101部电影的视频(从西瓜视频爬取),以及带有时间戳的解说文本(由ASR获取并人工修正)和演员台词(由OCR获取)。根据电影片段解说 (MCN) 任务和时序解说定位 (TNG) 任务的要求

数据集下载

训练:Movie101/Movie101v1/dataset/Movie101-G/train.json at main · yuezih/Movie101 · GitHub

验证:Movie101/Movie101v1/dataset/Movie101-G/val.json at main · yuezih/Movie101 · GitHub

测试:Movie101/Movie101v1/dataset/Movie101-G/test.json at main · yuezih/Movie101 · GitHub

原始格式如下:

[
    {
        "movie_id": "6973286990817002015",
        "start_time": 218,
        "end_time": 236,
        "content": "阿豪站起身,小心地端着一碗粥递给阿花,然后坐下端起另外半碗粥吸溜了两口,勾勾手指,让兄弟三个凑过来,阿平转转眼珠子也好奇地凑上前。"
    },
    {
        "movie_id": "6973286990817002015",
        "start_time": 250,
        "end_time": 254,
        "content": "侧着身子避开包租婆的视线,悄悄塞到阿平手里,"
    },...
]

下载完成后,使用FileZilla等文件传输软件,将下载后的数据传至服务器

数据集处理

方案一:

        我们将同一部电影中的所有解说台词拼接成一个整体,输入mPlug-Owl模型,模型对整个文本进行随机掩盖,并预测掩盖词是什么进行完整化句子。通过这种方式提升模型对电影的理解能力。

处理代码如下:

import json

for mode in ['train', 'test', 'val']:
    # 读取json文件
    with open(f'{mode}.json', 'r', encoding='utf-8') as file:
        data = json.load(file)

    # 字典用于存储拼接后的内容
    movie_content = {}

    # 遍历数据
    for entry in data:
        movie_id = entry['movie_id']
        content = entry['content']

        if movie_id in movie_content:
            movie_content[movie_id] += content
        else:
            movie_content[movie_id] = content

    # 将结果转换为所需的格式
    result = [{'movie_id': movie_id, 'all_content': content} for movie_id, content in movie_content.items()]

    # 打印结果
    print(result)

    with open(f'{mode}_movie_content.json', 'w', encoding='utf-8') as file:
        json.dump(result, file, ensure_ascii=False, indent=4)

处理好的数据如下:

[
    {
        "movie_id": "6973286990817002015",
        "all_content": "阿豪站起身,小心地端着一碗粥递给阿花,然后坐下端起另外半碗粥吸溜了两口,勾勾手指,让兄弟三个凑过来,阿平转转眼珠子也好奇地凑上前。侧着身子避开包租婆的视线,悄悄塞到阿平手里,晚上雷洛探长的车停到一间酒楼门口,猪油仔赶忙上前拉开车门。亨特得意地靠着桌子..."
    },
    {
        "movie_id": "6969009002155868709",
        "all_content": "天色灰暗,几只健硕的六角怪飞进山谷中,地面上聚集了数以万计的怪物。画面淡出,进入一片幽静的森林当中。老妖后在草丛中4处张望着,矮胖的老妖后和两名随从听到一声低吼,立马停下步子,随从说道:老妖后仓皇逃跑,两名随从相互对视了一眼,冲向后面这两个巨型血妖。一名随从被血妖甩在树干上瞬间昏厥,另一名当场被捏晕。老妖后躲在树后偷..."
    },...
]

问题

        由于每部电影的解说台词拼接特别长,大于有20000个字符,这已经明显超出计算资源的处理能力,而且不利于模型记忆相关信息。因此该方案被否决

方案二

        我们将解说台词的形式进行修改,我们输入一句话和下一句话,让mPlug-Owl模型学习训练当前这句话然后预测下一句话,通过这种方式,加深模型对电影的理解能力。即输入一个台词pair。

处理代码如下:

import json

for mode in ['train', 'val', 'test']:
    # 假设文件名为train.json
    with open(f'{mode}.json', 'r', encoding='utf-8') as file:
        data = json.load(file)

    output = []

    for i in range(len(data) - 1):
        current_entry = data[i]
        next_entry = data[i + 1]

        # 检查是否有相同的 movie_id
        if current_entry['movie_id'] == next_entry['movie_id']:
            combined_content = {
                "movie_id": current_entry['movie_id'],
                "text": f"The following is a conversation between a curious human and AI assistant. The assistant gives helpful, detailed, and polite answers to the user's questions. This Task type is 'content Prediction'.\nHuman: {current_entry['content']}\nAI: {next_entry['content']}",
                "task_type": "llava_sft"
            }
            output.append(combined_content)

    print(len(output))
    # 将结果保存到一个新的文件中
    with open(f'combined_{mode}.json', 'w', encoding='utf-8') as file:
        json.dump(output, file, ensure_ascii=False, indent=4)

处理好的格式如下:

[
    {
        "movie_id": "6973286990817002015",
        "text": "The following is a conversation between a curious human and AI assistant. The assistant gives helpful, detailed, and polite answers to the user's questions. This Task type is 'content Prediction'.\nHuman: 阿豪站起身,小心地端着一碗粥递给阿花,然后坐下端起另外半碗粥吸溜了两口,勾勾手指,让兄弟三个凑过来,阿平转转眼珠子也好奇地凑上前。\nAI: 侧着身子避开包租婆的视线,悄悄塞到阿平手里,",
        "task_type": "llava_sft"
    },
    {
        "movie_id": "6973286990817002015",
        "text": "The following is a conversation between a curious human and AI assistant. The assistant gives helpful, detailed, and polite answers to the user's questions. This Task type is 'content Prediction'.\nHuman: 侧着身子避开包租婆的视线,悄悄塞到阿平手里,\nAI: 晚上雷洛探长的车停到一间酒楼门口,猪油仔赶忙上前拉开车门。",
        "task_type": "llava_sft"
    },...
]

使用这种方案可以解决方案一的问题,同时能够加深模型对电影理解能力

处理好的数据集情况

训练集共有81部电影,其中处理好的训练样本数为24427个,每个电影的解说台词约为20000字

验证集共有10部电影,其中处理好的训练样本数为2758个,每个电影的解说台词约为20000字

测试集共有10部电影,其中处理好的训练样本数为2888个,每个电影的解说台词约为20000字

与其他数据集对比

我们数据集与代表性现有视频问答数据集的比较。“Lang.”表示数据的语言,“En”代表英语,“Ch”代表中文。“Annotation”表示数据是否由人工或自动标注。“Aut”代表自动标注,“Man”代表人工标注。“QAType”表示答案是多项选择(MC)还是开放式回答(OE)。“Dur. (s)”是视频的平均时长(秒)。

  • 23
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值