JinYuanLi0012 / PGIM

[EMNLP 2023 Findings] Prompting Chatgpt in MNER: Enhanced Multimodal Named Entity Recognition with Auxiliary Refined Knowledge
20 stars 0 forks source link

PGIM的推理与adaseq代码 #3

Closed www-dayin closed 8 months ago

www-dayin commented 8 months ago

您好,请问如何利用训练好的PGIM模型进行推理演示,本项目针对adaseq主要修改了那部分的代码?数据集中通过img_id继续链接图片,推理时具体图片和文本如何输入? 感谢!

JinYuanLi0012 commented 8 months ago

1、模型推理可参考此处--https://github.com/modelscope/AdaSeq/blob/master/docs/tutorials/model_inference_zh.md

2、由于PGIM的关注点在于数据的构建与拓展,所以我们没有对Adaseq进行过多的代码修改。我们给出Adaseq文件夹是出于两点原因:其一是在我们使用原始的adaseq程序时遇到了一些微小bug 于是我们简单修复了这些bug;其二是Adaseq可能存在后续更新,为了防止更新导致的意料之外的错误,我们希望能给出一版固定的代码以确保项目长期可复现。

3、如果是使用我们给出的Twitter-2015和2017数据集进行推理,则推理过程中仅使用文本 无需图片输入。 如果使用新的图像文本对,则需要按照论文方法执行相应操作获取原文的拓展解释。

希望能解决您的疑惑 :)

www-dayin commented 8 months ago

十分感谢您给予的解答与指导! 请问数据处理和拓展相关工作部分的代码实现后续会开源吗? 看目前主要是提供处理好的数据文件。 Image caption、ICL samples select、prompting ChatGPT 等部分实现想具体学习一下,对于一些细节没能很好理解。

JinYuanLi0012 commented 8 months ago

image caption可参考如下,只是BLIP2的简单使用

from PIL import Image
import requests
import os
from transformers import Blip2Processor, Blip2ForConditionalGeneration
import torch

if __name__ == "__main__":

    device = "cuda" if torch.cuda.is_available() else "cpu"

    processor = Blip2Processor.from_pretrained("Salesforce/blip2-opt-6.7b")

    model = Blip2ForConditionalGeneration.from_pretrained(
        "Salesforce/blip2-opt-6.7b", torch_dtype=torch.float16
    )
    model.to(device)

    root = r'twitter2015_images'

    File = open("2015.txt",'a+') 

    for img in os.listdir(root):
        image = Image.open(os.path.join(root, img))
        inputs = processor(images=image, return_tensors="pt").to(device, torch.float16)

        generated_ids = model.generate(**inputs)
        generated_text = processor.batch_decode(generated_ids, skip_special_tokens=True)[0].strip()
        content = img + ' :' + generated_text 

        File.write(content +'\n')
        File.flush()

    File.close()

ICL samples select、prompting ChatGPT 需要花费一些时间整理,因为这实际上已经是去年此时的代码了,我可能会在下次更新时添加它们。