22、自然语言处理中的无监督学习与系统评估

自然语言处理中的无监督学习与系统评估

1. 无监督学习在主题建模中的应用

1.1 寻找新文档的主题

在完成聚类后,模型可用于查找新文档的主题,类似于分类应用。可以使用 model.transform() 方法来实现,示例代码如下:

sentence_model = SentenceTransformer("all-MiniLM-L6-v2")
new_docs = ["I'm looking for a new graphics card","when is the next nasa launch"]
embeddings = sentence_model.encode(new_docs)
topics, probs = model.transform(new_docs,embeddings)
print(topics)

运行上述代码后,输出结果为 [-1, 3] ,这表明 new_docs 中两个文档预测的主题分别为 -1(无主题)和 3,其中 3 代表 3_space_launch_orbit_nasa

1.2 聚类和主题标签处理

聚类最常见的应用是探索数据,通常是为开发有监督分类应用做准备。在查看聚类结果时,可能会发现某些聚类非常相似且彼此接近。在这种情况下,即使经过有监督训练,也很难区分这些主题中的文档,因此将这些聚类合并为一个主题是个不错的选择。同样,如果发现非常小的聚类,将其与相似的大聚类合并可能会得到更可靠的结果。

此外,还可以修改标签,使其更有用或更具信息性。例如,原本主题 1 的标签是 1_space_launch_nasa_orbit ,可以将其简化为 space ,这样的标签同样具有信息性。

在对聚类和标签进行任何有益的调整后,就会得到一个有监督的数据集,可像使用其他有监督数据集一样将其应用于自然语言处理(NLP)应用中。

1.3 利用弱监督数据

在完全有监督学习和无监督学习之间,存在几种部分监督的方法,即只有部分数据是有监督的。与无监督方法一样,这些技术的目标是充分利用有监督数据,因为获取有监督数据的成本可能很高。部分监督相对于无监督方法的一个优势是,无监督学习的结果不会自动产生有用的标签,这些标签需要手动提供或通过之前介绍的一些技术来生成。

一般来说,在弱监督中,标签是基于有监督的数据子集提供的。弱监督的一些策略包括:
- 不完全监督 :只有部分数据有真实标签。
- 不精确监督 :数据具有粗粒度的标签。
- 不准确监督 :部分标签可能不正确。
- 半监督学习 :提供一些预定义的标签,帮助模型朝着已知类别发展。

这些方法在全标注成本过高或耗时过长的应用中值得考虑。此外,在无监督学习可能存在问题的情况下,例如整个应用的其他部分需要预定义标签(如数据库),这些方法也很有用。

2. 自然语言理解系统的评估

2.1 为什么要评估自然语言理解系统

评估自然语言理解(NLU)系统是为了回答关于其整体质量的诸多问题。不同类型的开发者有不同的评估目标,例如:
- 研究人员希望了解自己的想法是否推动了 NLU 科学的发展,即与当前最先进的技术(SOTA)相比如何。
- 开发者希望确保整个系统的性能足以满足应用需求。
- 开发者希望了解自己的更改对系统的改进程度。
- 开发者希望确保自己的更改没有降低系统的性能。
- 研究人员或开发者希望了解系统在不同类别的数据上的表现。

除了系统的整体性能,还有其他重要的 NLU 系统属性也可以进行评估,如下表所示:
| 属性 | 说明 |
| ---- | ---- |
| 机器学习模型的大小 | 如今的模型可能非常大,有大量研究致力于在不显著降低性能的前提下缩小模型尺寸。 |
| 训练时间 | 一些算法在处理大型数据集时,需要在高性能 GPU 处理器上花费数周的训练时间。减少训练时间有助于更轻松地尝试不同算法和调整超参数。 |
| 训练数据量 | 当今的大型语言模型(LLMs)需要大量的训练数据,除了大型组织外,其他组织很难承担如此大的数据量。不过,LLMs 可以使用特定应用的数据进行微调。 |
| 开发者的专业知识 | 依赖高度专业的开发者成本较高,因此一个可以由不太专业的开发者执行的开发过程通常更受欢迎。 |
| 训练成本 | 大型模型的训练成本可能高达数百万美元,降低训练成本是 NLU 系统的一个理想特性。 |
| 环境影响 | 训练成本与能源消耗带来的环境影响密切相关,降低环境影响显然是可取的。 |
| 推理处理时间 | 对于交互式系统(如聊天机器人或语音对话系统),处理短输入时通常不会有问题,但对于离线应用(如分析),处理大量音频或文本时,处理时间过长会成为问题。 |
| 预算 | 付费的基于云的 LLMs(如 GPT - 4)通常能提供很好的结果,但本地开源模型(如 BERT)可能更便宜,并且对于特定应用来说结果也足够好。 |

2.2 评估范式

2.2.1 基于标准指标比较系统结果

这是最常见且可能最容易实施的评估范式。只需给系统提供数据进行处理,然后根据标准指标对其性能进行定量评估。后续的“评估指标”部分将更详细地探讨这个主题。

2.2.2 评估语言输出

一些 NLU 应用会产生自然语言输出,如翻译或文本摘要。与具有特定正确或错误答案的应用(如分类和槽填充)不同,这些应用没有单一的正确答案,可能有很多好的答案。

评估机器翻译质量的一种方法是让人类查看原文和翻译,并判断其准确性,但这种方法通常成本过高,无法广泛使用。因此,已经开发了一些可以自动应用的指标,虽然它们不如人类评估令人满意,但在需要评估语言输出时可以考虑使用。这些指标包括:
- 双语评估辅助指标(BLEU) :基于将机器翻译结果与人类翻译进行比较并测量差异。由于优秀的机器翻译可能与任何特定的人类翻译有很大不同,因此 BLEU 分数不一定与人类对翻译质量的判断相符。
- 带显式排序的翻译评估指标(METEOR)
- 面向摘要评估的召回导向辅助指标(ROUGE)
- 跨语言优化的翻译评估指标(COMET)

2.2.3 系统部分去除评估(消融)

如果一个实验包含多个操作的管道,通过去除管道中的步骤来比较结果通常很有意义,这被称为消融。消融在两种不同的情况下很有用:
- 研究或学术项目 :当实验是为研究论文或学术项目进行,且管道中包含一些创新技术时,需要量化管道中每个步骤对最终结果的影响,以便读者评估每个步骤的重要性。如果去除创新步骤后系统仍然表现良好,那么这些步骤可能对系统的整体性能贡献不大。
- 实际应用 :当处理需要高效计算以进行部署的系统时,通过比较包含和不包含特定步骤的系统版本,可以决定这些步骤所花费的时间是否值得其为系统性能带来的提升。例如,了解预处理步骤(如停用词去除、词形还原或词干提取)是否对系统性能有影响。

2.2.4 共享任务

NLU 领域长期以来一直受益于在共享任务上比较系统。不同开发者开发的系统在特定主题的一组共享数据上进行测试,并比较结果。此外,参与共享任务的团队通常会发布系统描述,这有助于深入了解他们的系统是如何取得结果的。

共享任务范式有两个好处:
- 使参与共享任务的开发者能够准确了解自己的系统与其他系统的比较情况,因为使用的数据完全相同。
- 共享任务中使用的数据可供研究社区用于开发未来的系统。共享数据可以长期使用,因为它不受 NLU 技术变化的影响,例如自 20 世纪 90 年代初以来,旅行规划任务中的航空旅行信息系统(ATIS)数据一直在使用。

2.3 数据划分

在进行系统开发之前,通常需要将完整的数据集划分为训练集、验证集和测试集。训练数据用于开发 NLU 模型,以执行 NLU 应用的最终任务,如分类、槽填充、意图识别等。验证数据(有时称为开发测试数据)用于在训练过程中评估模型在未用于训练的数据上的表现,这很重要,因为如果在训练数据上测试系统,系统可能只是通过记忆训练数据而获得好结果,但这样的系统在实际部署时对新数据的泛化能力较差。验证数据还可用于调整机器学习应用中的超参数,但这意味着在开发过程中系统已经接触了部分验证数据,因此该数据的新颖性不如预期。

为了进行最终测试,通常会保留一组全新的数据,即测试数据。一般来说,大约 80% 的完整数据集分配给训练集,10% 分配给验证集,10% 分配给测试集。

数据划分有三种常见方式:
- 使用已划分的数据集 :在一些通用可用的数据集(如本书中使用的数据集或共享任务中的数据集)中,数据已经被划分为训练集、验证集和测试集。有时数据只划分为训练集和测试集,此时可以从训练集中选取一部分作为验证集。例如,Keras 提供了一个实用工具 text_dataset_from_directory ,可以从目录中加载数据集,并根据子目录名称对文本进行有监督分类,同时划分出验证子集。以下代码展示了如何从 aclImdb/train 目录加载训练数据,并将 20% 的数据划分为验证数据:

raw_train_ds = tf.keras.utils.text_dataset_from_directory(
    'aclImdb/train',
    batch_size=batch_size,
    validation_split=0.2,
    subset='training',
    seed=seed)
  • 使用库函数自动划分 :如果使用自己的数据,一些常用的库(如 scikit - learn、TensorFlow 和 Keras)提供了 train_test_split 函数,可以在加载数据时自动划分数据。
  • 手动编写 Python 代码划分 :虽然可以手动编写 Python 代码来划分数据集,但通常建议使用经过测试的库代码,除非找不到合适的库或想深入了解划分过程。

最后一种数据划分策略是 k 折交叉验证。这种策略将整个数据集划分为 k 个子集(折),然后将每个子集作为测试数据来评估系统。k 折交叉验证的整体系统得分是所有测试得分的平均值。

graph LR
    A[完整数据集] --> B(训练集 80%)
    A --> C(验证集 10%)
    A --> D(测试集 10%)
    B --> E(模型训练)
    C --> F(模型验证)
    D --> G(模型测试)

综上所述,无监督学习在主题建模中有着重要的应用,而对自然语言理解系统进行评估以及合理划分数据对于开发高效、准确的 NLU 系统至关重要。通过运用上述方法和策略,可以更好地处理数据、训练模型,并评估系统的性能,从而满足不同应用场景的需求。

2.4 评估指标

评估自然语言理解系统的性能需要使用一系列的评估指标,不同的任务可能会使用不同的指标。以下是一些常见的评估指标:
| 指标 | 说明 | 适用场景 |
| ---- | ---- | ---- |
| 准确率(Accuracy) | 分类正确的样本数占总样本数的比例。 | 适用于各类分类任务,尤其是类别分布较为均衡的情况。 |
| 精确率(Precision) | 预测为正类的样本中,实际为正类的比例。 | 关注预测为正类的准确性,例如在垃圾邮件分类中,更关注将邮件正确标记为垃圾邮件的能力。 |
| 召回率(Recall) | 实际为正类的样本中,被正确预测为正类的比例。 | 关注对正类样本的识别能力,如在疾病诊断中,希望尽可能多地识别出真正患病的人。 |
| F1 值 | 精确率和召回率的调和平均数。 | 综合考虑精确率和召回率,当需要平衡两者时使用。 |
| 曲线下面积(AUC) | 用于衡量分类器性能的指标,主要针对二元分类问题。 | 可以直观地展示分类器在不同阈值下的性能表现。 |

这些指标可以帮助开发者更全面地了解系统在不同方面的表现,从而根据具体需求进行优化。

2.5 用户测试

用户测试是评估自然语言理解系统的重要环节。通过让真实用户与系统进行交互,可以收集到关于系统易用性、实用性和用户满意度的反馈。用户测试可以采用以下步骤进行:
1. 确定测试目标 :明确希望从用户测试中了解到什么,例如系统的功能是否满足用户需求、界面是否友好等。
2. 招募测试用户 :选择具有代表性的用户群体,涵盖不同的年龄、性别、技术水平等。
3. 设计测试任务 :根据系统的功能和测试目标,设计一系列有针对性的测试任务。
4. 进行测试 :让用户在自然的环境下完成测试任务,并记录他们的操作和反馈。
5. 分析结果 :对用户的反馈进行整理和分析,找出系统存在的问题和改进的方向。

用户测试可以发现一些在实验室环境中难以发现的问题,为系统的优化提供宝贵的意见。

2.6 差异的统计显著性

在评估系统性能时,经常需要比较不同系统或不同版本的系统之间的差异。为了确定这些差异是否具有统计学意义,需要进行统计检验。常用的统计检验方法包括 t 检验、卡方检验等。

统计显著性检验的步骤如下:
1. 提出假设 :包括原假设(通常表示没有差异)和备择假设(表示存在差异)。
2. 选择检验方法 :根据数据的类型和分布选择合适的统计检验方法。
3. 计算检验统计量 :根据所选的检验方法,计算相应的检验统计量。
4. 确定显著性水平 :通常选择 0.05 或 0.01 作为显著性水平。
5. 做出决策 :根据检验统计量和显著性水平,判断是否拒绝原假设。

通过统计显著性检验,可以避免因随机因素导致的错误结论,更准确地评估系统的性能差异。

2.7 比较三种文本分类方法

为了更好地理解不同文本分类方法的性能,下面对三种常见的文本分类方法进行比较:
| 方法 | 优点 | 缺点 | 适用场景 |
| ---- | ---- | ---- | ---- |
| 朴素贝叶斯分类器 | 计算简单、速度快,对小规模数据集有较好的表现。 | 假设特征之间相互独立,在实际应用中可能不成立。 | 文本分类的初步尝试,尤其是对实时性要求较高的场景。 |
| 支持向量机(SVM) | 能够处理高维数据,在很多情况下表现良好。 | 训练时间较长,对参数的选择比较敏感。 | 数据维度较高、样本数量适中的文本分类任务。 |
| 深度学习模型(如神经网络) | 能够自动学习数据中的复杂特征,在大规模数据集上表现出色。 | 需要大量的训练数据和计算资源,模型解释性较差。 | 有大量标注数据且对分类精度要求较高的场景。 |

graph LR
    A[文本数据] --> B(特征提取)
    B --> C(朴素贝叶斯分类器)
    B --> D(支持向量机)
    B --> E(深度学习模型)
    C --> F(分类结果)
    D --> F(分类结果)
    E --> F(分类结果)

在实际应用中,需要根据数据的特点、任务的要求和资源的限制选择合适的文本分类方法。同时,可以通过实验比较不同方法的性能,选择最优的方案。

3. 总结与建议

3.1 总结

自然语言处理中的无监督学习在主题建模方面提供了有效的方法,通过聚类和弱监督策略可以挖掘数据中的潜在信息。而自然语言理解系统的评估则是确保系统性能和质量的关键环节,包括明确评估目标、选择合适的评估范式、合理划分数据、使用恰当的评估指标、进行用户测试以及检验差异的统计显著性等。在文本分类任务中,不同的方法各有优劣,需要根据具体情况进行选择。

3.2 建议

  • 在进行无监督学习时,根据数据特点和任务需求选择合适的聚类算法和弱监督策略,同时注意标签的生成和调整,以提高主题建模的准确性。
  • 评估自然语言理解系统时,要综合考虑多个方面的因素,不仅关注系统的整体性能,还要考虑模型大小、训练时间、成本等其他属性。
  • 在选择文本分类方法时,先对数据进行初步分析,根据数据规模、特征复杂度等选择合适的方法,并通过实验进行比较和优化。
  • 重视用户测试,及时收集用户反馈,不断改进系统的易用性和实用性,以提高用户满意度。

通过遵循这些建议,可以更好地应用无监督学习和评估方法,开发出更高效、准确、实用的自然语言处理系统。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值