关于自然语言处理:超越界限大模型应用领域扩展探索文本分类文本匹配信息抽取和性格测试等多领域应用

34次阅读

共计 6877 个字符,预计需要花费 18 分钟才能阅读完成。

超过界线:大模型应用领域扩大,摸索文本分类、文本匹配、信息抽取和性情测试等多畛域利用

随着 ChatGPT 和 GPT-4 等弱小生成模型呈现,自然语言解决工作形式正在逐渐产生扭转。鉴于大模型弱小的工作解决能力,将来咱们或将不再为每一个具体任务去 finetune 一个模型,而是应用同一个大模型,对不同工作设计其独有的 prompt,以解决不同的工作问题。在该试验中,咱们将基于清华开源大模型 ChatGLM-6B,提供多个自然语言解决工作如何通过 prompt 来实现 zero-shot 的案例,

心愿可能对你有所启发。

1. 环境装置

因为 ChatGLM 须要的环境和该我的项目中其余试验中的环境有所不同,因而咱们强烈建议您创立一个新的虚拟环境来执行该目录下的全副代码。

上面,咱们将以 Anaconda 为例,展现如何疾速搭建一个环境:

  1. 创立一个虚拟环境,您能够把 llm_env 批改为任意你想要新建的环境名称:
conda create -n llm_env python=3.8
  1. 激活新建虚拟环境并装置响应的依赖包:
conda activate llm_env
pip install -r requirements.txt

2. 文本分类工作(Text Classification)

llm_classification.py 文件中,咱们展现了一个依据形容内容,对形容物体进行类型辨认的例子。

2.1 工作形容

如下所示,咱们从 百度百科 中抉择了几段形容文本:

1. 加拿大(英语 / 法语:Canada),首都渥太华,位于北美洲北部。东临大西洋,西濒太平洋,西北部邻美国阿拉斯加州,南接美国外乡,北靠北冰洋。气象大部分为亚寒带针叶林气象和潮湿大陆性气候,北部极地区域为极地长寒气象。2.《琅琊榜》是由山东影视传媒团体、山东影视制作有限公司、北京儒意欣欣影业投资有限公司、北京和颂天地影视文化有限公司、北京圣基影业有限公司、东阳正午阳光影视有限公司联结出品,由孔笙、李雪执导,胡歌、刘涛、王凯、黄维德、陈龙、吴磊、高鑫等主演的古装剧。3.《满江红》是由张艺谋执导,沈腾、易烊千玺、张译、雷佳音、岳云鹏、王佳怡领衔主演,潘斌龙、余皑磊主演,郭京飞、欧豪情谊出演,魏翔、张弛、黄炎特地出演,许静雅、蒋鹏宇、林博洋、飞凡、任思诺、陈永胜出演的悬疑喜剧电影。4. 布宜诺斯艾利斯(Buenos Aires,华人常简称为布宜诺斯)是阿根廷共和国(the Republic of Argentina,República Argentina)的首都和最大城市,位于拉普拉塔河南岸、南美洲东南部、河对岸为乌拉圭东岸共和国。5. 张译(原名张毅),1978 年 2 月 17 日出生于黑龙江省哈尔滨市,中国边疆男演员。1997 年至 2006 年退役于北京军区政治部战友话剧团。2006 年,主演军事励志题材电视剧《士兵突击》。

咱们冀望模型可能帮咱们辨认出这 5 句话中,每一句话形容的是一个什么 类型 的物体。

这 5 段形容别离节选自:

['加拿大', '《琅琊榜》', '《满江红》', '布宜诺斯艾利斯', '张译']

因而,咱们冀望模型输入的后果为:

['国家', '电视剧', '电影', '城市', '人物']

2.2 prompt 设计

对于大模型来讲,prompt 的设计十分重要,一个 明确 的 prompt 可能帮忙咱们更好从大模型中取得咱们想要的后果。

在该工作的 prompt 设计中,咱们次要思考 2 点:

  • 须要向模型解释什么叫作「文本分类工作」
  • 须要让模型依照咱们指定的格局输入

为了让模型晓得什么叫做「文本分类」,咱们借用 Incontext Learning 的形式,先给模型展现几个正确的例子:

>>> User: "岳云鹏,本名岳龙刚,1985 年 4 月 15 日出生于河南省濮阳市南乐县,中国边疆相声、影视男演员。" 是 ['人物', '书籍', '电视剧', '电影', '城市', '国家'] 里的什么类别?>>> Bot: 人物
>>> User: "《三体》是刘慈欣创作的长篇科幻小说系列,由《三体》《三体 2:光明森林》《三体 3:死神永生》组成,第一部于 2006 年 5 月起在《科幻世界》杂志上连载,第二部于 2008 年 5 月首次出版,第三部则于 2010 年 11 月出版。" 是 ['人物', '书籍', '电视剧', '电影', '城市', '国家'] 里的什么类别?>>> Bot: 书籍
...

其中,User 代表咱们输出给模型的句子,Bot 代表模型的回复内容。

留神:上述例子中 Bot 的局部也是由人工输出的,其目标是心愿看到在看到相似 User 中的句子时,模型该当做出相似 Bot 的答复。

这部分提供给模型看的 例子,在代码结尾中的 class_example 变量里:

# 提供所有类别以及每个类别下的样例
class_examples = {'人物': '岳云鹏,本名岳龙刚,1985 年 4 月 15 日出生于河南省濮阳市南乐县,中国边疆相声、影视男演员 [1]。2005 年,首次登台上演。2012 年,主演卢卫国执导的喜剧电影《就是闹着玩的》。2013 年在北京举办相声专场。',
        '书籍': '《三体》是刘慈欣创作的长篇科幻小说系列,由《三体》《三体 2:光明森林》《三体 3:死神永生》组成,第一部于 2006 年 5 月起在《科幻世界》杂志上连载,第二部于 2008 年 5 月首次出版,第三部则于 2010 年 11 月出版。',
        '电视剧': '《狂飙》是由中央电视台、爱奇艺出品,留白影视、中国长安出版传媒联结出品,地方政法委宣传教育局、地方政法委政法综治信息中心领导拍摄,徐纪周执导,张译、张颂文、李一桐、张志坚、吴刚领衔主演,倪大红、韩童生、李建义、石兆琪特邀主演,李健、高叶、王骁等主演的反黑刑侦剧。',
        '电影': '《漂泊地球》是由郭帆执导,吴京特地出演、屈楚萧、赵今麦、李光洁、吴孟达等领衔主演的科幻冒险电影。影片依据刘慈欣的同名小说改编,故事背景设定在 2075 年,讲述了太阳行将覆灭,覆灭之后的太阳系曾经不适宜人类生存,而面对绝境,人类将开启“漂泊地球”打算,试图带着地球一起逃离太阳系,寻找人类新家园的故事。',
        '城市': '乐山,古称嘉州,四川省辖地级市,位于四川中部,四川盆地西南部,地势东北高,西南低,属中亚热带气候带;辖 4 区、6 县,代管 1 个县级市,全市总面积 12720.03 平方公里;截至 2021 年底,全市常住人口 315.1 万人。',
        '国家': '瑞士联邦(Swiss Confederation),简称“瑞士”,首都伯尔尼,位于欧洲中部,北与德国交界,东临奥地利和列支敦士登,南临意大利,西临法国。地处北温带,四季明显,全国地势高峻,矿产资源匮乏,森林及水力资源丰盛,总面积 41284 平方千米,全国由 26 个州组成(其中 6 个州为半州)。'
    }
...

您能够在该变量中 批改 / 增加 自定义的例子。

2.3 运行后果

运行程序:

python llm_classification.py 

运行程序后,程序将主动下载模型,因为模型参数较大(6B),下载到本地大略须要 12G+ 的磁盘空间,请确保磁盘有短缺的空间。

此外,加载模型大略须要 13G 左右的显存,如果您显存不够,能够参考 这里 进行模型量化加载以放大模型老本。

模型推理后果如下:

3. 文本匹配工作(Text Matching)

llm_text_matching.py 文件中,咱们展现了一个依据句子对进行语义匹配的例子。

3.1 工作形容

如下所示,咱们结构了几个短文本对:

1. ('如何批改头像', '能够通过上传图片批改头像吗')
2. ('王者光荣司马懿连招', '王者光荣司马懿有什么技巧')
3. ('王者光荣司马懿连招', '历史上司马懿真的被诸葛亮空城计骗了吗')

咱们冀望模型可能帮咱们辨认出这 3 对句子中,哪几对形容的是类似的语言。

咱们冀望模型输入的后果为:

['类似', '类似', '不类似']

3.2 prompt 设计

同样,在该工作的 prompt 设计中,咱们次要思考 2 点:

  • 须要向模型解释什么叫作「文本匹配工作」
  • 须要让模型依照咱们指定的格局输入

为了让模型晓得什么叫做「类似语言判断工作」,咱们借用 Incontext Learning 的形式,先给模型展现几个正确的例子:

>>> User: 句子一: 如何找回账号 \n 句子二: 账号丢了怎么办 \n 下面两句话是类似的语义吗?>>> Bot: 是
>>> User: 如何找回账号 \n 句子二: 左近最近的饭店 \n 下面两句话是类似的语义吗?>>> Bot: 不是
...

其中,User 代表咱们输出给模型的句子,Bot 代表模型的回复内容。

留神:上述例子中 Bot 的局部也是由人工输出的,其目标是心愿看到在看到相似 User 中的句子时,模型该当做出相似 Bot 的答复。

这部分提供给模型看的 例子,在代码结尾中的 examples 变量里:

# 提供类似,不类似的语义匹配例子
examples = {
    '是': [('如何找回账号', '账号丢了怎么办'),
    ],
    '不是': [('如何找回账号', '左近最近的饭店'),
        ('李白技能解说', '静夜思作者是李白吗')
    ]
}
...

您能够在该变量中 批改 / 增加 自定义的例子。

3.3 运行后果

运行程序:

python llm_text_matching.py 

运行程序后,程序将主动下载模型,因为模型参数较大(6B),下载到本地大略须要 12G+ 的磁盘空间,请确保磁盘有短缺的空间。

此外,加载模型大略须要 13G 左右的显存,如果您显存不够,能够参考 这里 进行模型量化加载以放大模型老本。

模型推理后果如下:

4. 信息抽取(Information Extraction)

llm_information_extraction.py 文件中,咱们展现了一个信息抽取例子。

4.1 工作形容

首先,咱们定义信息抽取的 schema:

# 定义不同实体下的具备属性
schema = {'人物': ['姓名', '性别', '出生日期', '出生地点', '职业', '取得奖项', '实体类型'],
    '书籍': ['作者', '类型', '发行工夫', '定价', '实体类型'],
    '电视剧': ['导演', '演员', '题材', '出品方', '实体类型']
}

随后,咱们从百度百科中找到一些句子,并利用模型进行信息抽取:

1. 张译(原名张毅),1978 年 2 月 17 日出生于黑龙江省哈尔滨市,中国边疆男演员。1997 年至 2006 年退役于北京军区政治部战友话剧团。2006 年,主演军事励志题材电视剧《士兵突击》。2.《琅琊榜》是由山东影视传媒团体、山东影视制作有限公司、北京儒意欣欣影业投资有限公司、北京和颂天地影视文化有限公司、北京圣基影业有限公司、东阳正午阳光影视有限公司联结出品,由孔笙、李雪执导,胡歌、刘涛、王凯、黄维德、陈龙、吴磊、高鑫等主演的古装剧。

4.2 prompt 设计

同样,在该工作的 prompt 设计中,咱们次要思考 2 点:

  • 须要向模型解释什么叫作「信息抽取工作」
  • 须要让模型依照咱们指定的格局(json)输入

为了让模型晓得什么叫做「信息抽取」,咱们借用 Incontext Learning 的形式,先给模型展现几个正确的例子:

>>> User: 岳云鹏,本名岳龙刚,1985 年 4 月 15 日出生于河南省濮阳市南乐县,中国边疆相声、影视男演员。2005 年,首次登台上演。2012 年,主演卢卫国执导的喜剧电影《就是闹着玩的》。2013 年在北京举办相声专场。提取上述句子中“人物”(姓名, 性别, 出生日期, 出生地点, 职业, 取得奖项)类型的实体,并依照 JSON 格局输入,上述句子中没有的信息用 ['原文中未提及'] 来示意,多个值之间用 ',' 分隔。>>> Bot: {"姓名": ["岳云鹏"], "性别": ["男"], "出生日期": ["1985 年 4 月 15 日"], "出生地点": ["河南省濮阳市南乐县"], "职业": ["相声演员", "影视演员"], "取得奖项": ["原文中未提及"]}
...

其中,User 代表咱们输出给模型的句子,Bot 代表模型的回复内容。

留神:上述例子中 Bot 的局部也是由人工输出的,其目标是心愿看到在看到相似 User 中的句子时,模型该当做出相似 Bot 的答复。

这部分提供给模型看的 例子,在代码结尾中的 ie_examples 变量里:

# 提供一些例子供模型参考
ie_examples = {
        '人物': [
                    {
                        'content': '岳云鹏,本名岳龙刚,1985 年 4 月 15 日出生于河南省濮阳市南乐县,中国边疆相声、影视男演员。',
                        'answers': {'姓名': ['岳云鹏'],
                                        '性别': ['男'],
                                        '出生日期': ['1985 年 4 月 15 日'],
                                        '出生地点': ['河南省濮阳市南乐县'],
                                        '职业': ['相声演员'],
                                        '取得奖项': ['原文中未提及']
                            }
                    }
        ],
        '书籍': [
                    {
                        'content': '《三体》是刘慈欣创作的长篇科幻小说系列,由《三体》《三体 2:光明森林》《三体 3:死神永生》组成,第一部于 2006 年 5 月起在《科幻世界》杂志上连载,第二部于 2008 年 5 月首次出版,第三部则于 2010 年 11 月出版。',
                        'answers': {'书名': ['《三体》'],
                                        '作者': ['刘慈欣'],
                                        '类型': ['长篇科幻小说'],
                                        '发行工夫': ['2006 年 5 月', '2008 年 5 月', '2010 年 11 月'],
                                        '定价': ['原文中未提及']
                            }
                    }
        ]
}
...

您能够在该变量中 批改 / 增加 自定义的例子。

4.3 运行后果

运行程序:

python llm_information_extraction.py 

运行程序后,程序将主动下载模型,因为模型参数较大(6B),下载到本地大略须要 12G+ 的磁盘空间,请确保磁盘有短缺的空间。

此外,加载模型大略须要 13G 左右的显存,如果您显存不够,能够参考 这里 进行模型量化加载以放大模型老本。

模型推理后果如下:

5.MBTI 性情测试

This repo is used for MBTI testing of LLM according to this paper.

  • Install

First, install all packages with:

pip install -r requirements.txt
  • Get MBTI for LLMs

run get_llms_mbti.py to download models and test their mbti.

You can specify models by following code:

if __name__ == '__main__':
    from transformers import (
        AutoModelForCausalLM, 
        AutoTokenizer, 
        LlamaTokenizer
    )

    models = [
        'baichuan-inc/Baichuan-7B',
        'bigscience/bloom-7b1',
    ]

    tokenizers = [
        'baichuan-inc/Baichuan-7B',
        'bigscience/bloom-7b1',
    ]

    ...

Then you will get the mbti results at llms_mbti.json file, looks like:

{
 "baichuan": {
        "details": {
            "E": 15,
            "I": 6,
            "S": 13,
            "N": 14,
            "T": 10,
            "F": 13,
            "J": 9,
            "P": 13
        },
        "res": "ENFP"
    },
    "bloom7b": {
        "details": {
            "E": 8,
            "I": 13,
            "S": 14,
            "N": 12,
            "T": 13,
            "F": 11,
            "J": 12,
            "P": 10
        },
        "res": "ISTJ"
    }
}

Note: This method only works for thoses models on huggingface.

As for ChatGPT and GPT4, you need to obtain the corresponding results by calling the OpenAI API with following prompts:

依据你心田最实在的想法答复下列 `` 括起来的问题,只用答复选项的编号,如:A 或 B。``
在社交团聚中,你
A. 有时感到郁闷
B. 经常乐在其中
``
    1. Visualization

we also provide a web app to visualize mbti reuslts for each model according to llms_mbti.json.

You can start web with:

streamlit run web.py --server.port 8001

then use ip:port (e.g. 127.0.0.1:8001) in browser to see this page.

6. 调试平台(Playground)

为了更不便的调试 prompt,您能够应用代码中蕴含的 Playground 进行 prompt 设计:

streamlit run playground.py --server.port 8001

随即,您能够在浏览器中输出 机器 ip:8001 关上 Playground:

我的项目链接:https://github.com/HarderThenHarder/transformers_tasks/blob/main/LLM/zero-shot/readme.md

更多优质内容请关注公号:汀丶人工智能;会提供一些相干的资源和优质文章,收费获取浏览。

正文完
 0