本文基于对于吴恩达老师的课程学习笔记,继续描述记录如何通过Inferring 推理以及Transforming 转换的概念更好的去得到和我们预期相符合的输出。
一、Inferring 推理
Inferring 推理实际上是现在我们可以向模型输入一段文本,然后让模型去分析,帮助我们提取、总结或者是理解文本想要表达的情感,这是非常便捷的,我们只需要输入一段prompt调用一个api既能高效的完成我们的一个特定的工作任务。而在以往的机器学习中,我们需要收集带有标签的数据集、训练模型、部署到云端等等一系列操作,尽管能够很好的完成任务,但是这个过程却是耗时、复杂的。下面就看一下Inferring 概念的使用。
# 示例
# 推理出文本所表达的情感。
text = f"""
我的卧室需要一盏漂亮的灯,而这个有
额外的存储空间,价格也不太高。
速度很快。我们灯上的绳子在暴风雨中断了
运输公司和这家公司很高兴地送来了一台新的。
几天之内就来了。放起来很容易
在一起。我缺了一个零件,所以我联系了他们的
支持,他们很快找到了我缺失的部分!
在我看来,Lumina是一家关心他人的伟大公司
关于他们的客户和产品!!
"""
prompt = f"""
从评论文本中确定以下项目:
-情绪(积极或消极)
-评论者是否在表达愤怒?(对或错)
-评论者购买的物品
-生产该产品的公司
审查用三个反号分隔。\
将您的响应格式化为带有\的JSON对象
“情绪”,“愤怒”,“物品”和“品牌”作为关键。
如果信息不存在,则使用“unknown”
作为值。
让你的回答尽可能简短。
将Anger值格式化为布尔值。
评论文本: '''{text}'''
"""
# 输出结果:
{
"情绪": "积极",
"愤怒": false,
"物品": "灯",
"品牌": "Lumina"
}
上面的示例我们可以看到通过我们的prompt指令,模型很好的为我们理解了文本所表达的情绪,同时也为门提取了评论中所涉及产品的内容。在实际应用中,实际上这能够快速的帮助我们理解用户的评论,并且批量分类,然后做出相对应的处理。下面的示例将会尝试去理解文本里面的信息并且提炼总结。
# 示例通用样本文本
# 下面是一篇文章,我们需要做的是在这个文章里面提取并且总结我们所需要的信息。
text = f"""
在政府最近进行的一项调查中,
公共部门雇员被要求评价他们的水平
对他们工作的部门的满意度。
结果显示,NASA 最受欢迎
满意度为95%的部门。
美国宇航局的一名员工约翰·史密斯对调查结果发表了评论,
说,“我对 NASA 名列前茅并不感到惊讶。
这是与了不起的人一起工作的好地方
难以置信的机会。 我很自豪能成为其中的一员
这样一个创新的组织。”
这一结果也受到了 NASA 管理团队的欢迎,
导演汤姆约翰逊说,“我们很高兴
听说我们的员工对他们在 NASA 的工作感到满意。
我们拥有一支才华横溢、兢兢业业的团队,他们孜孜不倦地工作
实现我们的目标,很高兴看到他们
努力工作是有回报的。”
调查还显示,
社会保障局满意度最低
评级,只有 45% 的员工表示他们是
对他们的工作感到满意。 政府已承诺
解决员工在调查中提出的顾虑,并
努力提高所有部门的工作满意度。
"""
下面我们通过prompt找到5个主题,从而更快的理解文章是要表达什么。
# 示例prompt1
prompt = f"""
确定正在讨论的五个主题
以下文本,由三个反引号分隔。
让每个项目一两个词长。
将您的回复格式化为以逗号分隔的项目列表。
文本样本: '''{inferring_content()}'''
"""
# 输出结果:
NASA满意度高,
美国宇航局员工评论,
NASA管理团队回应,
社会保障局满意度低,
政府承诺改善工作满意度
下面我们期望能够让模型帮助我们理解关键词在文章中出现的次数,从而更好的找到文本的着重点。
# 示例prompt2
topic_list = [
"NASA" "地方政府" "工程学"
"雇员满意度" "联邦政府"
]
prompt = f"""
确定主题列表中的每个元素在
下面文本中出现的次数,
其中文本由三个反引号分隔。
以列表的形式给出你的答案,每个主题包含0或1
主题列表: {", ".join(topic_list)}
文本样本: '''{inferring_content()}'''
"""
# 输出结果:
NASA: 3次
地方政府: 0次
工程学: 0次
雇员满意度: 4次
联邦政府: 3次
同样的我们也可以看到模型很快的为我们找到了文章的着重点,当然我们也可以要求为我们提供这些主题出现的文章摘要。
二、Transforming 转换
类似ChatGPT这种大模型,转换实际上是非常擅长的一个事情。因为大模型使用了大量的互联网上的文本数据进行训练,囊括了多种不同的语言,所以这也赋予了模型翻译的能力。
大模型非常擅长的一个事情就是将输入转换为不同的格式,例如将一种语言的文本作为输入,然后将其转换或翻译成另一种语言;或者协助进行拼写和语法纠正,将可能不完全符合语法规则的文本作为输入,帮助我们修改其中的错误;甚至还能转换格式,如输入HTML并输出JSON。过去,我们需要痛苦地用一堆正则表达式来完成这些应用,而现在,借助大型语言模型和一些提示,实现起来肯定会简单得多。下面,一起来看一下具体的示例。
1. 通用翻译 (Universal Translator)
# 示例
text = f"""
将以下英文文本翻译成中文
并且告诉我这是什么语言:
```Hi, I would like to order a blender```
"""
# 输出结果:
这是英语。翻译成中文为:“嗨,我想订购一个搅拌机。”
上面是一个简单的语言转换示例,下面让模型接收多种语言,然后识别为我们转换。
# 示例
# 下面提供了3种不同的语言。
user_messages = [
"La performance du système est plus lente que d'habitude.",
"Mi monitor tiene píxeles que no se iluminan.",
"Il mio mouse non funziona",
]
for issue in user_messages:
prompt = f"告诉我这是什么语言: ```{issue}```"
lang = get_completion(prompt)
print(f"原始信息 ({lang}): {issue}")
prompt = f"""
将以下文字翻译成中文 \
和韩文: ```{issue}```
"""
response = get_completion(prompt)
print(response, "\n")
# 输出结果:
原始信息 (这是法语。): La performance du système est plus lente que d'habitude.
中文翻译:系统性能比平时慢。
韩文翻译:시스템 성능이 평소보다 느립니다.
原始信息 (这是西班牙语。): Mi monitor tiene píxeles que no se iluminan.
中文翻译:我的显示器有一些像素点不亮。
韩文翻译:내 모니터에는 밝지 않은 픽셀이 있습니다.
2. 色调变换 (Tone Transformation)
写作可以根据目标受众而有所不同。 ChatGPT 可以产生不同的风格。下面是一个简单的示例。
# 示例
prompt = f"""
将以下文本翻译成商业信函:
“老兄,我是乔,看看这个台灯的规格。”
"""
# 输出结果:
尊敬的先生/女士,
我是乔,想向您咨询一下这个台灯的规格。希望您能提供相关信息,谢谢!
祝好,
乔
3. 格式转换 (Format Conversion)
通过上面的prompt,我们可以看出模型很好的去理解了并且为我们进行了转换.同样的对于不同的数据格式之间的转换也非常有效。
# 示例
data_json = { "resturant employees" :[
{"name":"Shyam", "email":"shyamjaiswal@gmail.com"},
{"name":"Bob", "email":"bob32@gmail.com"},
{"name":"Jai", "email":"jai87@gmail.com"}
]}
prompt = f"""
将以下 Python 字典从 JSON 翻译成 HTML \
带有列标题和标题的表格:: {data_json}
"""
# 输出结果:
<table>
<caption>Restaurant Employees</caption>
<thead>
<tr>
<th>Name</th>
<th>Email</th>
</tr>
</thead>
<tbody>
<tr>
<td>Shyam</td>
<td>shyamjaiswal@gmail.com</td>
</tr>
<tr>
<td>Bob</td>
<td>bob32@gmail.com</td>
</tr>
<tr>
<td>Jai</td>
<td>jai87@gmail.com</td>
</tr>
</tbody>
</table>
4. 拼写检查/语法检查 (Spellcheck/Grammar check)
这里有一些常见的语法和拼写问题的例子以及法学硕士的回应。要向 LLM 发出我们希望它校对我们的文本的信号,我们可以指示模型“校对”或“校对并更正”。
# 示例
text = [
"那个带着黑白小狗的球有一个女孩.",
"Yolanda拥有她的笔记本电脑。", # ok
"这将是漫长的一天,机油需要更换汽车吗?",
"他们去我的自由。那里会带来他们的手提箱。",
]
for t in text:
prompt = f"""
校对并更正下面的文本并重写更正后的版本。
如果你没有找到错误,只需说“未发现错误”。 不要使用
文本周围的任何标点符号:
```{t}```"""
response = get_completion(prompt)
print(response)
time.sleep(25)
# 输出结果:
1、那个带着黑白小狗的球有一个女孩。
更正后的版本:那个带着黑白小狗的球的女孩。
2、未发现错误。
3、这将是漫长的一天。机油需要更换,汽车吗?
重写后的版本:今天会是漫长的一天。请问,汽车需要更换机油吗?
(更正了句子结构和标点符号,并添加了礼貌用语)
...
可以看到校正还是非常有效的,当然我们也可以使用“校对并更正此评论”这样子的prompt对之前我们用到过的评论示例去做校正,只需要把原文本传入即可,也是非常有效果的,最后把这个贴一下。
# 示例
text = f"""
为我女儿买这个作为她的生日礼物,因为她一直服用 \
我的房间。 是的,大人也喜欢熊猫。 她拿 \
它随处可见,超级柔软可爱。 中的一个 \
耳朵比另一个低一点,我不认为那是\
设计成不对称的。 对于我付出的代价来说有点小\
尽管。 我认为对于 \
同样的价格。 它比预期提前一天到达,所以我得到了 \
在我把它送给我女儿之前自己玩。
"""
prompt = f"""
校对并更正此评论: ```{text}```
"""
# 输出结果:
我为女儿买了这个作为她的生日礼物,因为她一直喜欢我的房间里的熊猫。是的,成年人也喜欢熊猫。她随身携带它,超级
柔软可爱。其中一个耳朵比另一个低一点,但我不认为这是设计上的不对称。对于我所付出的代价来说,有点小贵了。我认
为同样的价格可以买到更好的。它比预期提前一天到达,所以我在把它送给女儿之前自己玩了一下。