ChatGPT 使用笔记 推理、转换

867 阅读9分钟

本文基于对于吴恩达老师的课程学习笔记,继续描述记录如何通过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}```
"""

# 输出结果:
我为女儿买了这个作为她的生日礼物,因为她一直喜欢我的房间里的熊猫。是的,成年人也喜欢熊猫。她随身携带它,超级
柔软可爱。其中一个耳朵比另一个低一点,但我不认为这是设计上的不对称。对于我所付出的代价来说,有点小贵了。我认
为同样的价格可以买到更好的。它比预期提前一天到达,所以我在把它送给女儿之前自己玩了一下。

下一章节 Expanding 扩展以及 ChatBot 聊天机器人