前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >多模态信息提取和问答

多模态信息提取和问答

原创
作者头像
Luoyger
修改2024-03-13 12:28:58
2910
修改2024-03-13 12:28:58
举报

画面信息提取

经过分幕后,内容理解的难度降低。我们可以通过MLLM + 问答的方式来将视频中的内容,提取成为文本形式的信息。最简单的例子是,直接让MLLM来描述视频中画面的内容。比较常用的MLLM:video-llama、minigpt4、vision-glm、mPLUG-Owl等。

【参考】: https://github.com/BradyFU/Awesome-Multimodal-Large-Language-Models

虽然经过分幕后,每一个幕的内容变得简单,但是由于数据分布跨度依然很大,开源模型并不能很好的了解游戏领域的很多信息,如游戏类型、一些专业术语等。所以我们还需对MLLM在游戏广告素材的数据上进行一轮微调,主要目的是提升模型再游戏领域知识和认知能力。

针对MLLM的微调,主要分为三个部分:数据构造 + 模型训练 + 评估标准。

  1. 数据构造:由于MLLM的训练数据是对话的模式,我们在数据构造的过程中,先是人工写一段视频的描述,然后把这段描述交给ChatGPT,让ChatGPT针对这段描述内容,自问自答,产生k条问答样本。
  2. 模型微调:MLLM的训练,通常分为两个阶段,即跨模态对齐训练 + LLM表述训练。
  3. 衡量标准:我们分别从”整体描述能力“、”确定性问题“、”打标能力“、”逻辑推理能力“、”稳定性“,并在每个维度上设置了一些问题,通过人为判断模型在每个问题上的回答,来进行打分。以此分数作为衡量模型效果的依据。

实验结果显示,经过微调后的模型,在各项维度上的打分,都有所提高。

语音信息提取

语音识别可以直接通过使用OpenAI开源的Whisper模型来实现,其不仅可以识别语音文案,还可以识别起止时间,甚至每个字词的起止时间,Whisper模型返回结果样例如下:

代码语言:javascript
复制
[
    {
        'start': 0.0,
        'end': 2.22,
        'text': '注意看,這個男人叫小帥。',
        'word': [
            [0.0, 0.24, '注意', 0.9580078125],
            [0.24, 0.56, '看,', 0.99560546875],
            [0.92, 1.12, '這個', 0.51611328125],
            [1.12, 1.34, '男', 0.9970703125],
            [1.34, 1.56, '人', 0.99951171875],
            [1.56, 1.74, '叫', 0.99462890625],
            [1.74, 1.98, '小', 0.9365234375],
            [1.98, 2.22, '帥。', 0.98779296875]
        ]
    }
]

内容问答

前面有提到,基于假设:”只要多模态信息提取的足够全面、精准,即使不需要观看原视频,也可以了解视频中的内容“。我们只需要汇总前面提到的,不同模态的信息,并将其输入给ChatGPT,就可以让ChatGPT对素材的内容有足够的了解。

我们将画面、语音信息统一整理为SRT格式(SubRip 文件格式),即通常被用来作为视频字幕的数据格式。在我们的场景下,不仅限于字幕内容,还可以是画面内容的描述,或其他有专家模型识别得到的信息。下面样例展示了这种数据格式(部分):

代码语言:javascript
复制
100:00:00.0 --> 00:00:02.220
今天我发现了一款全新的射击手游

200:00:02.220 --> 00:00:02.940
暗区突围

300:00:02.940 --> 00:00:05.719
现在我给大家介绍下它特有的健康系统

400:00:30.0 --> 00:00:31.879
小心你的脑袋和胸部被击穿的话

500:00:31.879 --> 00:00:33.20
可是会丢了小命

600:00:33.20 --> 00:00:34.560
其中还有许多其他药品

700:00:34.560 --> 00:00:36.320
激素能让你兴奋起来

800:00:36.320 --> 00:00:37.560
如果你饿了或者渴了

900:00:37.560 --> 00:00:39.619
记得及时寻找食物和水分

1000:00:39.619 --> 00:00:40.820
最后提醒你一下

1100:00:40.820 --> 00:00:42.60
再次重回战场之前

1200:00:42.60 --> 00:00:43.899
记得把你的小身板收拾干净

使用STR这种数据格式有2个好处:

  1. 格式中自然包含了时间信息,以及片段信息
  2. srt格式是人类文化中本就存在的数据格式,ChatGPT的训练数据中可能本就包含这种类型的数据,其理解起来效果也更好

将画面内容、声音信息,都以SRT的格式汇总好后,可以以prompt输入的形式输入给ChatGPT,同时直接问ChatGPT关于视频内容的问题,就可以得到相应的理解结果。

比如下面的例子,展示了我们可以直接问ChatGPT,这个视频的卖点是什么:

代码语言:javascript
复制
question = "这个广告视频主要展示的卖点是什么?"

prompt = f"""
下面两段由三重反引号包含起来的两段内容,分别是一段广告视频的画面内容和音频内容。格式为SubRip字幕格式,分别包含了每一幕的起止时间以及该幕的内容。

画面内容:
```
{video_srt}
```

音频内容:
```
{audio_srt}
```

现在请你尽可能简短的回答我的问题:
{question}
"""

data = {"prompt": prompt,"model": "chatgpt",}

response = requests.post("http://xx.xx.xx.xx:xxxx/api/llm_chat", data=json.dumps(data))
result = response.content.decode()

为了方便使用,我们搭建了MLLM、语音识别、LLM对话等大模型的服务化接口(样例中隐去了IP和端口),通过前面样例中的这种方式,我们可以直接和LLM针对素材内容进行问答了。比如该样例中,可以直接询问模型,素材的卖点是什么。

经过封装后,用户仅需要像下面的例子中一样,一次调用,就可以得到最终理解结果。

代码语言:javascript
复制
with open("./3ec80c979e4e32a4e8b9fee9d9a23161.mp4", "rb") as f:
    video = f.read()

question = "这个广告视频中体现的主要卖点是什么"

response = requests.post("http://xx.xx.xx.xx:xxxx/api/material_qa", 
    files={'video': video, 
        'question': (None, question)},
    timeout=9999,)
# print(response.content.decode())

下面列举几个不同问题,模型给出的回答:

问题

回答

这个广告视频中体现的主要卖点是什么

这个广告视频中主要卖点是这款设计手游的全新的健康系统和多种药品的使用。

视频的前3秒说了什么

视频的前3秒说了"今天我发现了一款全新的射击手游"。

视频中第20秒,画面中的士兵在做什么

视频中第20秒,画面中的士兵正在使用一支军用步枪,准备进行精确射击。

视频一开始,画面中的人穿什么衣服

视频一开始,画面中的人穿着军装。

对于传统的打标签的场景,也可以通过这种方式覆盖。只需要向模型说明”标签名“和”标签含义“即可:

代码语言:javascript
复制
tag_name = "系统介绍"
tag_caption = "指主要介绍游戏中的某个玩法系统的功能,以吸引玩家兴趣。"

prompt = f"""
下面两段由三重反引号包含起来的两段内容,分别是一段广告视频的画面内容和音频内容。格式为SubRip字幕格式,分别包含了每一幕的起止时间以及该幕的内容。

画面内容:
```
{video_srt}
```

音频内容:
```
{audio_srt}
```

请你找出,该视频中符合“{tag_caption}”的描述的地方。如果有,请回答“{tag_name}”;如果没有,请回答“无”。
"""

data = {"prompt": prompt,"model": "chatgpt",}

response = requests.post("http://xx.xx.xx.xx:xxxx/api/llm_chat", data=json.dumps(data))
result = response.content.decode()AI助手

根据这样的方法,我们可以对视频判断是否符合各个标签的描述,以此可以直接给视频打标。我们只需要便利待打标的所有标签描述,就可以得到最终打标结果:

代码语言:javascript
复制
tags = "问题引入,系统介绍"

response = requests.post("http://xx.xx.xx.xx:xxxx/api/material_tag", 
    files={'video': video, 
        'tags': (None, tags)},
    timeout=9999,)
    # print(response.content.decode())# 系统介绍

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 画面信息提取
  • 语音信息提取
  • 内容问答
相关产品与服务
语音识别
腾讯云语音识别(Automatic Speech Recognition,ASR)是将语音转化成文字的PaaS产品,为企业提供精准而极具性价比的识别服务。被微信、王者荣耀、腾讯视频等大量业务使用,适用于录音质检、会议实时转写、语音输入法等多个场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档