在这个笔记中,我们将探索如何使用大型语言模型进行文本转换任务,如语言翻译,拼写和语法检查,语气调整,和格式转换。
大型语言模型非常擅长将其输入转换为不同的格式,比如输入一种语言的文本,将其转换或翻译成另一种语言,或者帮助进行拼写和语法纠正。因此,它可以输入一段可能并未完全符合语法规则的文本,帮助你修正,或者甚至进行格式转换,比如输入HTML并输出JSON。所以,我过去用大量的正则表达式痛苦地编写的一系列应用,现在使用大型语言模型和一些提示就可以更简单地实现。事实上,我现在几乎用ChatGPT来校对我写的所有东西,所以我很高兴现在能在笔记本中向你展示更多的例子。
首先,我们将导入OpenAI,并使用我们在视频中一直在使用的get_completion助手函数。我们首先要做的是一个翻译任务。大型语言模型在许多来源的大量文本上进行了训练,其中很多是来自互联网,这些文本当然是用许多不同的语言写的。因此,这种模型具有翻译能力。这些模型知道几百种语言,熟练程度各不相同。
我们将通过一些例子来展示如何使用这种能力。让我们从一个简单的例子开始。在这个例子中,提示是将以下英文文本翻译成西班牙语。"Hi, I would like to order a blender"。相应的回答是" Hola, me gustaría ordenar una licuadora"。我非常抱歉,我从未学过西班牙语,你可以肯定的看出来。好的,让我们再试一下。在这个例子中,提示是"告诉我这是什么语言"。然后,这是法语,"Combien coûte le lampadaire"。然后我们运行这个。模型已经识别出"这是法语"。模型还可以一次做多个翻译。因此,在这个例子中,让我们说将以下文本翻译成法语和西班牙语。你知道吗?我们再添加一个英语示例。文本是"I want to order a basketball"。所以这里我们有法语,西班牙语和英语示例。因此,在某些语言中,翻译可能会根据说话者与听者的关系而变化。你也可以向语言模型解释这一点。因此,它将能够相应地进行翻译。在这个例子中,我们说,"将以下文本以正式和非正式的形式翻译成西班牙语"。"Would you like to order a pillow?" 还要注意,我们在这里使用的分隔符与这些反引号不同。只要有明显的分隔就没关系。所以这里我们有正式和非正式的形式。正式是当你在和比你年长的人或者在专业情况下交谈时使用的,非正式则是当你在和一群朋友交谈时使用的。我实际上不会说西班牙语,但我爸爸会说,他说这是正确的。
在下一个例子中,我们将假装我们负责一家跨国电子商务公司,所以用户的消息将会是各种各样的语言,用户将会用各种语言告诉我们他们的IT问题。所以我们需要一个通用的翻译器。
首先,我们将粘贴一系列用户用各种不同语言发送的信息。然后我们将遍历这些用户信息。所以 "for issue in user_messages"。然后我将复制这个稍长一些的代码块。首先,我们会让模型告诉我们这个问题是用什么语言写的。这就是提示。然后我们将打印出原始消息的语言和问题。然后我们会要求模型将其翻译成英文和韩文。让我们运行这个。所以,原始的法语消息。所以我们有各种语言,然后模型将它们翻译成英语然后再翻译成韩语。
你可以看到,模型说,"这是法语"。这是因为这个提示的回应将会是 "这是法语"。你可以尝试修改这个提示,比如说让我知道这是什么语言,只用一个词回答或者不用一整个句子,之类的。如果你希望这只是一个词。或者你可以要求以JSON格式等,这可能会鼓励它不使用整句话。你刚刚建立了一个通用翻译器,真是太棒了。
也欢迎你暂停视频,尝试添加任何你想尝试的其他语言。也许是你自己会说的语言,看看模型的表现如何。 接下来我们要深入的是语气转换。写作的方式可以根据预期的受众而变化,你知道,我写给同事或教授的电子邮件显然会和我给我弟弟发的短信大不相同。因此,ChatGPT实际上也可以帮助产生不同的语气。让我们来看一些例子。在这个例子中,提示是"将以下的俚语翻译成一封商务信"。"哥们,这是乔,看看这个立灯的规格吧。"让我们执行这个。可以看到,我们得到了一封关于立灯规格的更正式的商务信。 我们接下来要做的是在不同的格式之间进行转换。ChatGPT非常擅长在不同的格式之间进行转换,比如JSON到HTML,XML,各种东西。Markdown。
在提示中,我们将描述输入和输出格式。这是一个例子。我们有一个包含餐厅员工姓名和电子邮件的JSON。然后在提示中,我们将要求模型将其从JSON翻译成HTML。提示是"将以下的Python字典从JSON翻译成一个带有列标题和标题的HTML表格"。然后我们将从模型中获取响应并打印出来。这里我们有一些HTML,显示了所有员工的姓名和电子邮件。现在让我们看看我们能否实际查看这个HTML。
我们将使用这个Python库的"display (HTML(response))"功能。你可以看到这是一个格式正确的HTML表格。 我们接下来要做的转换任务是拼写检查和语法检查。这是ChatGPT的一个非常受欢迎的用途。我强烈推荐这样做,我一直在这样做。当你在用非母语工作时,这尤其有用。这里有一些关于一些常见的语法和拼写问题以及语言模型如何帮助解决这些问题的例子。我将粘贴一些包含语法或拼写错误的句子。然后我们将遍历这些句子,让模型对这些进行校对。校对和修正。然后我们将使用一些分隔符。然后我们将像往常一样获取响应并打印出来。模型能够纠正所有这些语法错误。我们可以使用之前讨论过的一些技巧。所以我们可以改进提示,我们可以说校对并修正以下文本。重写整个。重写它。纠正版本。如果你没有发现任何错误,就说没发现错误。让我们试试。这样我们就能找到,哦,他们还在这里用引号。但你可以想象,通过一些迭代的提示开发,你能找到一种每次都更可靠的提示。
现在我们将做另一个例子。在你在公共论坛发表文字之前,总是有用的去检查你的文字。所以我们将通过一个关于检查评论的例子。这是一个关于填充熊猫的评论。我们将要求模型对评论进行校对和修正。很好。我们得到了这个修正版本。我们可以做的一个酷炫的事情是找到我们原始评论和模型输出之间的差异。我们将使用这个redlines Python包来做这个。我们将获取我们的评论原文和模型输出之间的差异,然后显示出来。在这里你可以看到原始评论和模型输出之间的差异,以及被修正的地方。我们使用的提示是,"对这个评论进行校对和修正"。但是你也可以做出更大的变化,改变语气,之类的。
让我们再试一次。在这个提示中,我们将要求模型对这个同样的评论进行校对和修正,但也使其更具吸引力,并确保它遵循APA风格并针对高级读者。我们也将要求以markdown格式输出。所以我们使用的是从上面的原始评论中获取的同样的文本。让我们执行这。这里我们有一个扩展的关于软熊猫的APA风格评论。这就是转换视频的全部内容。
接下来是"扩展",我们将从一个较短的提示开始,并从语言模型中生成一个较长的、更自由形式的回应。
Setup
import openai
import os
from dotenv import load_dotenv, find_dotenv
_ = load_dotenv(find_dotenv()) # read local .env file
openai.api_key = os.getenv('OPENAI_API_KEY')
f get_completion(prompt, model="gpt-3.5-turbo", temperature=0):
messages = [{"role": "user", "content": prompt}]
response = openai.ChatCompletion.create(
model=model,
messages=messages,
temperature=temperature,
)
return response.choices[0].message["content"]
Translation 翻译
ChatGPT是通过多种语言的资源进行训练的。这使得该模型具有翻译能力。以下是如何使用这种能力的一些示例。
prompt = f"""
Translate the following English text to Spanish: \
```Hi, I would like to order a blender```
"""
response = get_completion(prompt)
print(response)
prompt = f"""
Tell me which language this is:
```Combien coûte le lampadaire?```
"""
response = get_completion(prompt)
print(response)
prompt = f"""
Translate the following text to French and Spanish
and English pirate: \
```I want to order a basketball```
"""
response = get_completion(prompt)
print(response)
prompt = f"""
Translate the following text to Spanish in both the \
formal and informal forms:
'Would you like to order a pillow?'
"""
response = get_completion(prompt)
print(response)
Universal Translator(通用翻译器)
想象一下,你在一家大型跨国电商公司负责IT部门。用户们用他们的母语向你报告IT问题。你的员工来自世界各地,只会说他们的母语。你需要一个通用翻译器!
In [ ]:
user_messages = [
"La performance du système est plus lente que d'habitude.", # System performance is slower than normal
"Mi monitor tiene píxeles que no se iluminan.", # My monitor has pixels that are not lighting
"Il mio mouse non funziona", # My mouse is not working
"Mój klawisz Ctrl jest zepsuty", # My keyboard has a broken control key
"我的屏幕在闪烁" # My screen is flashing
]
for issue in user_messages:
prompt = f"Tell me what language this is: ```{issue}```"
lang = get_completion(prompt)
print(f"Original message ({lang}): {issue}")
prompt = f"""
Translate the following text to English \
and Korean: ```{issue}```
"""
response = get_completion(prompt)
print(response, "\n")
Tone Transformation (语气转换)
写作风格可以根据预期的受众进行变化。ChatGPT能够产生不同的语气。
prompt = f"""
Translate the following from slang to a business letter:
'Dude, This is Joe, check out this spec on this standing lamp.'
"""
response = get_completion(prompt)
print(response)
Format Conversion (格式转换)
ChatGPT能够在不同的格式之间进行转换。提示应该描述输入和输出的格式。
data_json = { "resturant employees" :[
{"name":"Shyam", "email":"shyamjaiswal@gmail.com"},
{"name":"Bob", "email":"bob32@gmail.com"},
{"name":"Jai", "email":"jai87@gmail.com"}
]}
prompt = f"""
Translate the following python dictionary from JSON to an HTML \
table with column headers and title: {data_json}
"""
response = get_completion(prompt)
print(response)
from IPython.display import display, Markdown, Latex, HTML, JSON
display(HTML(response))
Spellcheck/Grammar check(拼写检查/语法检查)
这里有一些常见的语法和拼写问题以及LLM的回应示例。如果你想让LLM校对你的文本,你可以指示模型进行'校对'或'校对并纠正'。
text = [
"The girl with the black and white puppies have a ball.", # The girl has a ball.
"Yolanda has her notebook.", # ok
"Its going to be a long day. Does the car need it’s oil changed?", # Homonyms
"Their goes my freedom. There going to bring they’re suitcases.", # Homonyms
"Your going to need you’re notebook.", # Homonyms
"That medicine effects my ability to sleep. Have you heard of the butterfly affect?", # Homonyms
"This phrase is to cherck chatGPT for speling abilitty" # spelling
]
for t in text:
prompt = f"""Proofread and correct the following text
and rewrite the corrected version. If you don't find
and errors, just say "No errors found". Don't use
any punctuation around the text:
```{t}```"""
response = get_completion(prompt)
print(response)
text = f"""
Got this for my daughter for her birthday cuz she keeps taking \
mine from my room. Yes, adults also like pandas too. She takes \
it everywhere with her, and it's super soft and cute. One of the \
ears is a bit lower than the other, and I don't think that was \
designed to be asymmetrical. It's a bit small for what I paid for it \
though. I think there might be other options that are bigger for \
the same price. It arrived a day earlier than expected, so I got \
to play with it myself before I gave it to my daughter.
"""
prompt = f"proofread and correct this review: ```{text}```"
response = get_completion(prompt)
print(response)
from redlines import Redlines
diff = Redlines(text,response)
display(Markdown(diff.output_markdown))
prompt = f"""
proofread and correct this review. Make it more compelling.
Ensure it follows APA style guide and targets an advanced reader.
Output in markdown format.
Text: ```{text}```
"""
response = get_completion(prompt)
display(Markdown(response))