基于zero-shot learning实现金融文本分类任务

# —*-coding:utf-8-*-
"""
利用 LLM 进行文本分类任务。
"""
from rich import print
from rich.console import Console
from transformers import AutoTokenizer, AutoModel

# 提供所有类别以及每个类别下的样例
class_examples = {
    '新闻报道': '今日,股市经历了一轮震荡,受到宏观经济数据和全球贸易紧张局势的影响。投资者密切关注美联储可能的政策调整,以适应市场的不确定性。',
    '财务报告': '本公司年度财务报告显示,去年公司实现了稳步增长的盈利,同时资产负债表呈现强劲的状况。经济环境的稳定和管理层的有效战略执行为公司的健康发展奠定了基础。',
    '公司公告': '本公司高兴地宣布成功完成最新一轮并购交易,收购了一家在人工智能领域领先的公司。这一战略举措将有助于扩大我们的业务领域,提高市场竞争力',
    '分析师报告': '最新的行业分析报告指出,科技公司的创新将成为未来增长的主要推动力。云计算、人工智能和数字化转型被认为是引领行业发展的关键因素,投资者应关注这些趋势'}


# 定义init_prompts函数
def init_prompts():
    '''
    这里是对函数的功能进行注释,方便他人理解:该函数的目的是初始化前置prompt,便于模型做Few-shot
    :return: dict字典
    '''
    class_list = list(class_examples.keys())
    print(f'分类的类别数:{class_list}')

    pre_history = [
        (f'现在你是一个文本分类器,你需要按照要求将我给你的句子分类到:{class_list}类别中。',
         f'好的。')
    ]

    # 遍历给的示例样本
    for _type, example in class_examples.items():
        # print(f'键--》{_type}')
        # print(f'值--》{example}')
        pre_history.append((f'"{example}"是{class_list}里的什么类别', _type))

    # print(f'pre_history--》{pre_history}')
    return {"class_list": class_list, "pre_history": pre_history}


def inference(sentences: list, custom_settings: dict):
    """
    推理函数。

    Args:
        sentences (List[str]): 待推理的句子。
        custom_settings (dict): 初始设定,包含人为给定的 few-shot example。
    """
    for sentence in sentences:
        with console.status("[bold bright_green] Model Inference..."):
            sentence_prompt = f'"{sentence}"是{custom_settings["class_list"]}里的什么类别?'
            response, history = model.chat(tokenizer, sentence_prompt, history=custom_settings['pre_history'])

        print(f'>>>[bold bright_red]sentence:{sentence}')
        print(f'>>>[bold bright_green]inference answer:{response}')
        print(f'history-->{history}')
        print("*" * 80)


if __name__ == '__main__':
    console = Console()
    # device = 'cuda:0'
    # device = 'cpu'
    tokenizer = AutoTokenizer.from_pretrained("D:\\workspace\\PyCharmProjects\\nlp_project\\ChatGLM-6B\\THUDM\\chatglm-6b-int4", trust_remote_code=True)
    # model = AutoModel.from_pretrained("./ChatGLM-6B/THUDM/chatglm-6b", trust_remote_code=True).half().cuda()
    model = AutoModel.from_pretrained("D:\\workspace\\PyCharmProjects\\nlp_project\\ChatGLM-6B\\THUDM\\chatglm-6b-int4", trust_remote_code=True).float()
    # model.to(device)

    # sentences = [
    #     "今日,央行发布公告宣布降低利率,以刺激经济增长。这一降息举措将影响贷款利率,并在未来几个季度内对金融市场产生影响。",
    #     "ABC公司今日发布公告称,已成功完成对XYZ公司股权的收购交易。本次交易是ABC公司在扩大业务范围、加强市场竞争力方面的重要举措。据悉,此次收购将进一步巩固ABC公司在行业中的地位,并为未来业务发展提供更广阔的发展空间。详情请见公司官方网站公告栏",
    #     "公司资产负债表显示,公司偿债能力强劲,现金流充足,为未来投资和扩张提供了坚实的财务基础。",
    #     "最新的分析报告指出,可再生能源行业预计将在未来几年经历持续增长,投资者应该关注这一领域的投资机会",
    #     ]
    sentences = ["金融系统是建设金融强国责无旁贷的主力军,必须切实把思想和行动统一到党中央决策部署上来,深刻把握建设金融强国的精髓要义和实践要求,不断增强使命感、责任感,推动宏伟蓝图一步步变成美好现实"]
    custom_settings = init_prompts()
    print(custom_settings)

    inference(
        sentences,
        custom_settings
    )
    
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
对于Feature Generating Networks (FGN)来说,它是一种用于零样本学习(Zero-Shot Learning)的模型。零样本学习是指在没有训练样本的情况下,通过使用语义描述来识别未见过的类别。FGN模型的目标是通过学习一个映射函数,将输入图像映射到一个特征空间,从而进行零样本分类。 FGN模型的代码实现可以参考以下步骤: 1. 数据集准备:首先,需要准备一个包含图像和类别信息的数据集。这个数据集应该包含已知类别的训练图像,以及未知类别的测试图像。 2. 特征提取器:在FGN模型中,通常使用卷积神经网络(CNN)来提取图像的特征。可以使用预训练的CNN模型(如VGG、ResNet等)来提取图像的特征。 3. 语义嵌入:为了进行零样本分类,需要将类别信息转换为语义嵌入向量。可以使用预训练的文本嵌入模型(如Word2Vec、GloVe等)来将类别描述转换为语义向量。 4. 特征生成器:FGN模型中的特征生成器是一个神经网络,它接收图像特征和语义嵌入作为输入,并生成一个新的特征表示。这个特征表示可以用于进行零样本分类。 5. 分类器训练:使用已知类别的训练图像和它们对应的语义嵌入,可以训练一个分类器(如支持向量机、逻辑回归等)来进行零样本分类。 6. 零样本分类:使用训练好的特征生成器和分类器,可以将未见过的测试图像映射到特征空间,并进行零样本分类。 上述步骤是FGN模型的一般实现流程,具体的代码实现会根据具体的框架和库有所不同。你可以参考相关的论文和开源实现来更详细地了解FGN模型的代码解读。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cts618

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值