This commit is contained in:
Yixin Zhang
2023-07-10 20:51:31 +08:00
parent fa365e2768
commit d24e54397e
2 changed files with 112 additions and 50 deletions

View File

@ -269,7 +269,7 @@
"id": "d6f8509a", "id": "d6f8509a",
"metadata": {}, "metadata": {},
"source": [ "source": [
"**侧重于快递服务**" "### 2.2.1 侧重于快递服务"
] ]
}, },
{ {
@ -354,7 +354,7 @@
"id": "83275907", "id": "83275907",
"metadata": {}, "metadata": {},
"source": [ "source": [
"**侧重于价格与质量**" "### 2.2.2 侧重于价格与质量"
] ]
}, },
{ {
@ -677,7 +677,13 @@
"id": "d757b389", "id": "d757b389",
"metadata": {}, "metadata": {},
"source": [ "source": [
"**回答暂缺**" "0 概括:可爱的熊猫毛绒玩具,质量好,送货快,但有点小。 \n",
"\n",
"1 这个评论是关于一款具有额外储存空间的床头灯,价格适中。客户对公司的服务和产品表示满意。 \n",
"\n",
"2 评论概括:电动牙刷电池寿命长,但刷头太小,需要更长的刷毛。价格合理,使用后牙齿感觉干净。 \n",
"\n",
"3 评论概括产品价格在12月份上涨质量不如以前但交付速度快。 "
] ]
} }
], ],

View File

@ -5,16 +5,49 @@
"id": "3630c235-f891-4874-bd0a-5277d4d6aa82", "id": "3630c235-f891-4874-bd0a-5277d4d6aa82",
"metadata": {}, "metadata": {},
"source": [ "source": [
"# 推断\n", "# 第五章 推断\n",
"\n", "\n",
"在这节课中,你将从产品评论和新闻文章中推断情感和主题。\n", "在这节课中,你将从产品评论和新闻文章中推断情感和主题。\n",
"\n"
]
},
{
"cell_type": "markdown",
"id": "aeb0eaf6",
"metadata": {},
"source": [
"<div class=\"toc\">\n",
" <ul class=\"toc-item\">\n",
" <li><span><a href=\"#一引言\" data-toc-modified-id=\"一、引言\">一、引言</a></span></li>\n",
" <li>\n",
" <span><a href=\"#二情感推断与信息提取\" data-toc-modified-id=\"二、情感推断与信息提取\">二、情感推断与信息提取</a></span>\n",
" <ul class=\"toc-item\">\n",
" <li><span><a href=\"#21-情感倾向分析\" data-toc-modified-id=\"2.1 情感倾向分析\">2.1 情感倾向分析</a></span></li> \n",
" <li><span><a href=\"#22-识别情感类型\" data-toc-modified-id=\"2.2 识别情感类型\">2.2 识别情感类型</a></span></li>\n",
" <li><span><a href=\"#23-识别愤怒\" data-toc-modified-id=\"2.3 识别愤怒\">2.3 识别愤怒</a></span></li>\n",
" <li><span><a href=\"#24-商品信息提取\" data-toc-modified-id=\"2.4 商品信息提取\">2.4 商品信息提取</a></span></li>\n",
" <li><span><a href=\"#25-综合完成任务\" data-toc-modified-id=\"2.5 综合完成任务\">2.5 综合完成任务</a></span></li>\n",
" </ul>\n",
" </li>\n",
" <li><span><a href=\"#三主题推断\" data-toc-modified-id=\"三、主题推断\">三、主题推断</a></span></li>\n",
" <ul class=\"toc-item\">\n",
" <li><span><a href=\"#31-推断讨论主题\" data-toc-modified-id=\"3.1 推断讨论主题\">3.1 推断讨论主题</a></span></li> \n",
" <li><span><a href=\"#32-为特定主题制作新闻提醒\" data-toc-modified-id=\"3.2 为特定主题制作新闻提醒\">3.2 为特定主题制作新闻提醒</a></span></li>\n",
" </ul>\n",
" </ul>\n",
"</div>"
]
},
{
"cell_type": "markdown",
"id": "5f3abbee",
"metadata": {},
"source": [
"## 一、引言\n",
"\n", "\n",
"这些任务可以看作是模型接收文本作为输入并执行某种分析的过程。这可能涉及提取标签、提取实体、理解文本情感等等。如果你想要从一段文本中提取正面或负面情感,在传统的机器学习工作流程中,需要收集标签数据集、训练模型、确定如何在云端部署模型并进行推断。这样做可能效果还不错,但是这个过程需要很多工作。而且对于每个任务,如情感分析、提取实体等等,都需要训练和部署单独的模型。\n", "推断任务可以看作是模型接收文本作为输入并执行某种分析的过程。其中涉及提取标签、提取实体、理解文本情感等等。如果你想要从一段文本中提取正面或负面情感,在传统的机器学习工作流程中,需要收集标签数据集、训练模型、确定如何在云端部署模型并进行推断。这样做可能效果还不错,但是执行全流程需要很多工作。而且对于每个任务,如情感分析、提取实体等等,都需要训练和部署单独的模型。\n",
"\n", "\n",
"大型语言模型的一个非常好的特点是,对于许多这样的任务,你只需要编写一个prompt即可开始产结果,而不需要进行大量的工作。这极大地加快了应用程序开发的速度。你还可以只使用一个模型和一个 API 来执行许多不同的任务,而不需要弄清楚如何训练和部署许多不同的模型。\n", "LLM 的一个非常好的特点是,对于许多这样的任务,你只需要编写一个 Prompt 即可开始产结果,而不需要进行大量的工作。这极大地加快了应用程序开发的速度。你还可以只使用一个模型和一个 API 来执行许多不同的任务,而不需要弄清楚如何训练和部署许多不同的模型。"
"\n",
"\n",
"## 启动"
] ]
}, },
{ {
@ -57,9 +90,10 @@
"id": "51d2fdfa-c99f-4750-8574-dba7712cd7f0", "id": "51d2fdfa-c99f-4750-8574-dba7712cd7f0",
"metadata": {}, "metadata": {},
"source": [ "source": [
"## 商品评论文本\n", "# 二、情感推断与信息提取\n",
"## 2.1 情感分类\n",
"\n", "\n",
"这是一盏台灯的评论。" "以电商平台关于一盏台灯的评论为例,可以对其传达的情感进行二分类(正向/负向)。"
] ]
}, },
{ {
@ -100,14 +134,18 @@
"\"\"\"" "\"\"\""
] ]
}, },
{
"cell_type": "markdown",
"id": "cc4ec4ca",
"metadata": {},
"source": []
},
{ {
"cell_type": "markdown", "cell_type": "markdown",
"id": "30d6e4bd-3337-45a3-8c99-a734cdd06743", "id": "30d6e4bd-3337-45a3-8c99-a734cdd06743",
"metadata": {}, "metadata": {},
"source": [ "source": [
"## 情感(正向/负向)\n", "现在让我们来编写一个 Prompt 来分类这个评论的情感。如果我想让系统告诉我这个评论的情感是什么,只需要编写 “以下产品评论的情感是什么” 这个 Prompt ,加上通常的分隔符和评论文本等等。\n",
"\n",
"现在让我们来编写一个prompt来分类这个评论的情感。如果我想让系统告诉我这个评论的情感是什么只需要编写 “以下产品评论的情感是什么” 这个prompt加上通常的分隔符和评论文本等等。\n",
"\n", "\n",
"然后让我们运行一下。结果显示这个产品评论的情感是积极的,这似乎是非常正确的。虽然这盏台灯不完美,但这个客户似乎非常满意。这似乎是一家关心客户和产品的伟大公司,可以认为积极的情感似乎是正确的答案。" "然后让我们运行一下。结果显示这个产品评论的情感是积极的,这似乎是非常正确的。虽然这盏台灯不完美,但这个客户似乎非常满意。这似乎是一家关心客户和产品的伟大公司,可以认为积极的情感似乎是正确的答案。"
] ]
@ -129,7 +167,7 @@
} }
], ],
"source": [ "source": [
"prompt = f\"\"\"\n", " Prompt = f\"\"\"\n",
"What is the sentiment of the following product review, \n", "What is the sentiment of the following product review, \n",
"which is delimited with triple backticks?\n", "which is delimited with triple backticks?\n",
"\n", "\n",
@ -164,12 +202,18 @@
"print(response)" "print(response)"
] ]
}, },
{
"cell_type": "markdown",
"id": "a562e656",
"metadata": {},
"source": []
},
{ {
"cell_type": "markdown", "cell_type": "markdown",
"id": "76be2320", "id": "76be2320",
"metadata": {}, "metadata": {},
"source": [ "source": [
"如果你想要给出更简洁的答案,以便更容易进行后处理,可以使用上面的prompt添加另一个指令以一个单词 “正面” 或 “负面” 的形式给出答案。这样就只会打印出 “正面” 这个单词,这使得文本更容易接受这个输出并进行处理。" "如果你想要给出更简洁的答案,以便更容易进行后处理,可以在上述 Prompt 基础上添加另一个指令*以一个单词 “正面” 或 “负面” 的形式给出答案*。这样就只会打印出 “正面” 这个单词,这使得输出更加统一,方便后续处理。"
] ]
}, },
{ {
@ -233,9 +277,9 @@
"id": "81d2a973-1fa4-4a35-ae35-a2e746c0e91b", "id": "81d2a973-1fa4-4a35-ae35-a2e746c0e91b",
"metadata": {}, "metadata": {},
"source": [ "source": [
"## 识别情感类型\n", "## 2.2 识别情感类型\n",
"\n", "\n",
"让我们看看另一个prompt,仍然使用台灯评论。这次我要让它识别出以下评论作者所表达的情感列表,不超过五。" "仍然使用台灯评论,我们尝试另一个 Prompt 。这次我需要模型识别出评论作者所表达的情感,并归纳为列表,不超过五。"
] ]
}, },
{ {
@ -292,12 +336,18 @@
"print(response)" "print(response)"
] ]
}, },
{
"cell_type": "markdown",
"id": "c7743a53",
"metadata": {},
"source": []
},
{ {
"cell_type": "markdown", "cell_type": "markdown",
"id": "cc4444f7", "id": "cc4444f7",
"metadata": {}, "metadata": {},
"source": [ "source": [
"大型语言模型非常擅长从一段文本中提取特定的东西。在上面的例子中,评论正在表达情感,这可能有助于了解客户如何看待特定的产品。" "大型语言模型非常擅长从一段文本中提取特定的东西。在上面的例子中,评论表达情感有助于了解客户如何看待特定的产品。"
] ]
}, },
{ {
@ -305,9 +355,9 @@
"id": "a428d093-51c9-461c-b41e-114e80876409", "id": "a428d093-51c9-461c-b41e-114e80876409",
"metadata": {}, "metadata": {},
"source": [ "source": [
"## 识别愤怒\n", "## 2.3 识别愤怒\n",
"\n", "\n",
"对于很多企业来说,了解某个顾客是否非常生气很重要。所以你可能有一个类似这样的分类问题:以下评论的作者是否表达了愤怒情绪?因为如果有人真的很生气,那么可能值得额外关注,让客户支持或客户成功团队联系客户以了解情况,并为客户解决问题。" "对于很多企业来说,了解某个顾客是否非常生气很重要。所以产生了下述分类问题:以下评论的作者是否表达了愤怒情绪?因为如果有人真的很生气,那么可能值得额外关注,让客户支持或客户成功团队联系客户以了解情况,并为客户解决问题。"
] ]
}, },
{ {
@ -363,12 +413,18 @@
"print(response)" "print(response)"
] ]
}, },
{
"cell_type": "markdown",
"id": "77905fd8",
"metadata": {},
"source": []
},
{ {
"cell_type": "markdown", "cell_type": "markdown",
"id": "11ca57a2", "id": "11ca57a2",
"metadata": {}, "metadata": {},
"source": [ "source": [
"上面这个例子中,客户并没有生气。注意,如果使用常规的监督学习,如果想要建立所有这些分类器,不可能在几分钟内就做到这一点。我们鼓励大家尝试更改一些这样的prompt也许询问客户是否表达了喜悦或者询问是否有任何遗漏的部分并看看是否可以让prompt对这个灯具评论做出不同的推论。" "上面这个例子中,客户并没有生气。注意,如果使用常规的监督学习,如果想要建立所有这些分类器,不可能在几分钟内就做到这一点。我们鼓励大家尝试更改一些这样的 Prompt ,也许询问客户是否表达了喜悦,或者询问是否有任何遗漏的部分,并看看是否可以让 Prompt 对这个灯具评论做出不同的推论。"
] ]
}, },
{ {
@ -376,13 +432,13 @@
"id": "936a771e-ca78-4e55-8088-2da6f3820ddc", "id": "936a771e-ca78-4e55-8088-2da6f3820ddc",
"metadata": {}, "metadata": {},
"source": [ "source": [
"## 从客户评论中提取产品和公司名称\n", "## 2.4 商品信息提取\n",
"\n", "\n",
"接下来让我们从客户评论中提取更丰富的信息。信息提取是自然语言处理NLP的一部分与从文本中提取你想要知道的某些事物相关。因此在这个prompt中我要求它识别以下内容购买物品和制造物品的公司名称。\n", "接下来让我们从客户评论中提取更丰富的信息。信息提取是自然语言处理NLP的一部分与从文本中提取你想要知道的某些事物相关。因此在这个 Prompt 中,我要求它识别以下内容:购买物品和制造物品的公司名称。\n",
"\n", "\n",
"同样,如果你试图总结在线购物电子商务网站的许多评论,对于这些评论来说,弄清楚是什么物品谁制造了该物品,弄清楚积极和消极的情感,以跟踪特定物品或特定制造商的积极或消极情感趋势,可能会很有用。\n", "同样,如果你试图总结在线购物电子商务网站的许多评论,对于这些评论来说,弄清楚是什么物品谁制造了该物品,弄清楚积极和消极的情感,有助于追踪特定物品或制造商收获的用户情感趋势。\n",
"\n", "\n",
"在下面这个示例中,我们要求它将响应格式化为一个 JSON 对象,其中物品和品牌键。" "在下面这个示例中,我们要求它将响应格式化为一个 JSON 对象,其中物品和品牌作为键。"
] ]
}, },
{ {
@ -457,6 +513,12 @@
"print(response)" "print(response)"
] ]
}, },
{
"cell_type": "markdown",
"id": "1342c732",
"metadata": {},
"source": []
},
{ {
"cell_type": "markdown", "cell_type": "markdown",
"id": "954d125d", "id": "954d125d",
@ -470,9 +532,9 @@
"id": "a38880a5-088f-4609-9913-f8fa41fb7ba0", "id": "a38880a5-088f-4609-9913-f8fa41fb7ba0",
"metadata": {}, "metadata": {},
"source": [ "source": [
"## 一次完成多项任务\n", "## 2.5 综合完成任务\n",
"\n", "\n",
"提取上所有这些信息使用了 3 或 4 个prompt但实际上可以编写单个prompt来同时提取所有这些信息。" "提取上所有信息使用了 3 或 4 个 Prompt ,但实际上可以编写单个 Prompt 来同时提取所有这些信息。"
] ]
}, },
{ {
@ -564,7 +626,7 @@
"id": "5e09a673", "id": "5e09a673",
"metadata": {}, "metadata": {},
"source": [ "source": [
"这个例子中,我们告诉它将愤怒值格式化为布尔值,然后输出一个 JSON。大家可以自己尝试不同的变化,或者甚至尝试完全不同的评论,看看是否仍然可以准确地提取这些内容。" "这个例子中,我们告诉它将愤怒值格式化为布尔值,然后输出一个 JSON。可以自己尝试不同的变化,或者甚至尝试完全不同的评论,看看是否仍然可以准确地提取这些内容。"
] ]
}, },
{ {
@ -572,9 +634,9 @@
"id": "235fc223-2c89-49ec-ac2d-78a8e74a43ac", "id": "235fc223-2c89-49ec-ac2d-78a8e74a43ac",
"metadata": {}, "metadata": {},
"source": [ "source": [
"## 推断主题\n", "## 三、主题推断\n",
"\n", "\n",
"大型语言模型的一个很酷的应用是推断主题。给定一段长文本,这段文本是关于什么的?有什么话题?" "大型语言模型的一个很酷的应用是推断主题。给定一段长文本,这段文本是关于什么的?有什么话题?以以下一段虚构的报纸报道为例。"
] ]
}, },
{ {
@ -644,7 +706,7 @@
"id": "a8ea91d6-e841-4ee2-bed9-ca4a36df177f", "id": "a8ea91d6-e841-4ee2-bed9-ca4a36df177f",
"metadata": {}, "metadata": {},
"source": [ "source": [
"## 推断5个主题\n", "## 3.1 推断讨论主题\n",
"\n", "\n",
"上面是一篇虚构的关于政府工作人员对他们工作机构感受的报纸文章。我们可以让它确定五个正在讨论的主题,用一两个字描述每个主题,并将输出格式化为逗号分隔的列表。" "上面是一篇虚构的关于政府工作人员对他们工作机构感受的报纸文章。我们可以让它确定五个正在讨论的主题,用一两个字描述每个主题,并将输出格式化为逗号分隔的列表。"
] ]
@ -742,7 +804,7 @@
"id": "34be1d2a-1309-4512-841a-b6f67338938b", "id": "34be1d2a-1309-4512-841a-b6f67338938b",
"metadata": {}, "metadata": {},
"source": [ "source": [
"## 为特定主题制作新闻提醒\n", "## 3.2 为特定主题制作新闻提醒\n",
"\n", "\n",
"假设我们有一个新闻网站或类似的东西这是我们感兴趣的主题NASA、地方政府、工程、员工满意度、联邦政府等。假设我们想弄清楚针对一篇新闻文章其中涵盖了哪些主题。可以使用这样的prompt确定以下主题列表中的每个项目是否是以下文本中的主题。以 0 或 1 的形式给出答案列表。" "假设我们有一个新闻网站或类似的东西这是我们感兴趣的主题NASA、地方政府、工程、员工满意度、联邦政府等。假设我们想弄清楚针对一篇新闻文章其中涵盖了哪些主题。可以使用这样的prompt确定以下主题列表中的每个项目是否是以下文本中的主题。以 0 或 1 的形式给出答案列表。"
] ]
@ -853,12 +915,18 @@
"print(response)" "print(response)"
] ]
}, },
{
"cell_type": "markdown",
"id": "8f39f24a",
"metadata": {},
"source": []
},
{ {
"cell_type": "markdown", "cell_type": "markdown",
"id": "08247dbf", "id": "08247dbf",
"metadata": {}, "metadata": {},
"source": [ "source": [
"所以,这个故事是关于 NASA 的。它不是关于当地政府的,不是关于工程的。它是关于员工满意度的,它是关于联邦政府的。这在机器学习中有时被称为 Zero-Shot 学习算法,因为我们没有给它任何标记的训练数据。仅凭prompt它就能确定哪些主题在新闻文章中涵盖。\n", "有结果可见,这个故事是关于 NASA 、员工满意度、联邦政府有关,而与当地政府的、工程学无关。这在机器学习中有时被称为 Zero-Shot (零样本)学习算法,因为我们没有给它任何标记的训练数据。仅凭 Prompt ,它就能确定哪些主题在新闻文章中有所涵盖。\n",
"\n", "\n",
"如果我们想生成一个新闻提醒,也可以使用这个处理新闻的过程。假设我非常喜欢 NASA 所做的工作,就可以构建一个这样的系统,每当 NASA 新闻出现时,输出提醒。" "如果我们想生成一个新闻提醒,也可以使用这个处理新闻的过程。假设我非常喜欢 NASA 所做的工作,就可以构建一个这样的系统,每当 NASA 新闻出现时,输出提醒。"
] ]
@ -885,29 +953,17 @@
}, },
{ {
"cell_type": "markdown", "cell_type": "markdown",
"id": "76ccd189", "id": "9fc2c643",
"metadata": {}, "metadata": {},
"source": [ "source": []
"这就是关于推断的全部内容了仅用几分钟时间我们就可以构建多个用于对文本进行推理的系统而以前则需要熟练的机器学习开发人员数天甚至数周的时间。这非常令人兴奋无论是对于熟练的机器学习开发人员还是对于新手来说都可以使用prompt来非常快速地构建和开始相当复杂的自然语言处理任务。"
]
}, },
{ {
"cell_type": "markdown", "cell_type": "markdown",
"id": "f88408ae-469a-4b02-a043-f6b4f0b14bf9", "id": "76ccd189",
"metadata": {}, "metadata": {},
"source": [ "source": [
"## 尝试你的实验!" "这就是关于推断的全部内容了,仅用几分钟时间,我们就可以构建多个用于对文本进行推理的系统,而以前则需要熟练的机器学习开发人员数天甚至数周的时间。这非常令人兴奋,无论是对于熟练的机器学习开发人员,还是对于新手来说,都可以使用 Prompt 来非常快速地构建和开始相当复杂的自然语言处理任务。"
] ]
},
{
"cell_type": "code",
"execution_count": null,
"id": "1bd3553f",
"metadata": {
"height": 30
},
"outputs": [],
"source": []
} }
], ],
"metadata": { "metadata": {