Press "Enter" to skip to content

监控大型语言模型行为的7种方法

使用LangKit和WhyLabs追踪LLM演进的七种方法

Photo by Jéan Béller on Unsplash

自然语言处理领域在使用大型语言模型(LLMs)方面已经发生了快速的演进。通过令人印象深刻的文本生成和文本理解能力,LLMs已经在全球范围内得到广泛的应用。

ChatGPT可能是其中最为知名的模型,在可用性的第一个月内就拥有了5700万月活跃用户[1]。除了在多种场景下展现出令人印象深刻的能力之外,该模型也面临着巨大的挑战,如产生幻觉和生成带有偏见或有害内容的倾向[2,3]。另一个具有挑战性的领域是可观测性 – 通过快速收集用户反馈,ChatGPT通过人类反馈的强化学习(RLHF)进行持续的重新训练和改进[4],这使得对其进行评估成为一个不断变化的目标。众所周知,从RLHF中的整体改进可能会导致特定任务的性能退化[5]。我们如何确保模型的行为符合预期,并在与我们应用程序相关的任务中保持可接受的性能?

在本博客中,我们将讨论七组指标,您可以使用这些指标来跟踪LLM的行为。我们将为ChatGPT在35天内固定的200个提示集上计算这些指标,并跟踪ChatGPT在此期间的行为演变。我们的重点任务将是长篇问答,并使用LangKit和WhyLabs来计算、跟踪和监控模型的行为。

您可以在WhyLabs中查看此项目的结果仪表板(无需注册),并通过运行此Colab笔记本自行运行完整示例。

议程

  • 任务 – 可理解的问答
  • 流行的LLM指标1. ROUGE2. 性别偏见3. 文本质量4. 语义相似性5. 正则表达式模式6. 拒绝7. 毒性和情感
  • 跨时间监控
  • 那么,行为发生了变化吗?
  • 结论

任务 – 可理解的问答

在此示例中,让我们使用Explain Like I’m Five (ELI5)数据集[6],这是一个包含开放式问题(需要较长回答,不能以“是”或“否”回答)的问答数据集,并且答案应该简单易懂,适合初学者。

在ChatLog: Recording and Analyzing ChatGPT Across Time的工作中,从此数据集中随机抽样了1000个问题,并在2023年3月5日至4月9日的每天重复将这些问题发送给ChatGPT,该数据集可在ChatLog的存储库中获得。我们将使用此数据集,每天从原始的1000个问题中随机抽样200个问题,并获取ChatGPT的答案和人工参考答案。这样,我们将得到35个每日数据框,每个数据框有200行,包含以下列:

Table by author

为了正确评估ChatGPT这种具有广泛能力的模型,定义一组指标可能是一项艰巨的任务。在本例中,我们将介绍一些相对通用且适用于各种应用场景的指标示例,例如文本质量、情感分析、毒性和文本语义相似性,以及针对特定任务如问答和摘要的其他指标,例如ROUGE一组指标。

还有许多其他可能更相关的指标和方法,这取决于您感兴趣的特定应用程序。如果您想了解更多监控内容的示例,以下是三篇文章,对本博客的撰写提供了灵感:Holistic Evaluation of Language Models、ChatLog: Recording and Analyzing ChatGPT Across Time,以及Beyond Accuracy: Behavioral Testing of NLP Models with CheckList。

现在,让我们谈谈在这个示例中我们要监控的指标。大多数指标将通过外部库(如rouge、textstat和huggingface models)进行计算,其中大部分封装在LangKit库中。LangKit是一个开源的文本指标工具包,用于监控语言模型。最后,我们希望将所有计算出的指标分组到一个whylogs配置文件中,该配置文件是原始数据的统计摘要。然后,我们将每天的配置文件发送到WhyLabs可观测性平台,以便随时间监控它们。

在下表中,我们总结了我们将在以下部分涵盖的指标组:

作者的表格

ROUGE

Recall-Oriented Understudy for Gisting Evaluation(ROUGE)是一组在自然语言处理中常用的指标,用于通过将生成的文本与一个或多个参考摘要进行比较来评估自动摘要任务。

当前的任务是一个问答问题,而不是摘要任务,但我们确实有人类答案作为参考,所以我们将使用ROUGE指标来衡量ChatGPT回答与每个参考答案之间的相似性。我们将使用rouge python库来用两个不同的指标扩充我们的数据框架:ROUGE-L,它考虑了答案之间的最长序列重叠;ROUGE-2,它考虑了答案之间的bigram重叠。对于每个生成的答案,根据ROUGE-L的f-score,最终得分将根据3个参考答案中的最高分确定。对于ROUGE-L和ROUGE-2,我们将计算f-score、精确度和召回率,从而创建6个额外的列。

这个方法基于以下论文:ChatLog: Recording and Analyzing ChatGPT Across Time

性别偏见

社交偏见是公平和负责任的人工智能讨论的核心议题[2],[7],可以被定义为“语言选择中的系统性不对称”[8]。在这个示例中,我们专注于性别偏见,通过衡量男女两个人群之间提及的不均衡程度来识别其在代表性方面的不足和过度表现。

我们将通过计算同时属于女性和男性人群的词语集合中包含的词语数量来实现。对于给定的一天,我们将对200个生成的答案中的出现次数进行求和,并将得到的分布与一个参考的无偏分布进行比较,通过计算它们之间的总变异距离来衡量。在下面的代码片段中,我们可以看到用于代表两个人群的词语组:

Afemale = { "她", "女儿", "她的", "她", "母亲", "女人", "女孩", "她自己", "女性", "姐妹","女儿们", "母亲们", "女人们", "女孩们", "女性们", "姐姐", "姐姐们", "阿姨", "阿姨们", "侄女", "侄女们" }Amale = { "他", "儿子", "他的", "他", "父亲", "男人", "男孩", "他自己", "男性", "兄弟", "儿子们", "父亲们","男人们", "男孩们", "男性们", "兄弟们", "叔叔", "叔叔们", "侄子", "侄子们" }

这个方法基于以下论文:Holistic Evaluation of Language Models

文本质量

文本质量指标,如可读性、复杂性和等级水平,可以提供有关生成响应的质量和适用性的重要见解。

在LangKit中,我们可以通过textstat模块计算文本质量指标,该模块使用textstat库计算多种不同的文本质量指标。

语义相似度

另一个需要考虑的重要方面是模型给出的与主题无关或离题的响应程度,以及随时间的演变。这将帮助我们验证模型输出与预期上下文的密切程度。

我们将通过使用sentence-transformers库计算问题和答案的密集向量表示来实现。一旦我们获得了句子嵌入,我们就可以计算它们之间的余弦相似度来衡量文本之间的语义相似度。LangKit的input_output模块将为我们完成这项工作。我们可以使用该模块将指标直接生成到一个whylogs配置文件中,但在这种情况下,我们使用它来为我们的数据框架添加一个新列(response.relevance_to_prompt),其中每一行包含问题和回答之间的语义相似度得分:

from langkit import input_output
from whylogs.experimental.core.udf_schema import udf_schema
schema = udf_schema()
df, _ = schema.apply_udfs(df)

正则表达式模式

LLM行为的一个重要方面是确保它不会输出敏感或虚假信息。例如,如果用户提示是“I feel sad.”,我们可能会想知道模型的响应是否错误地引用了一个现有或不存在的电话号码。

让我们通过查找一组正则表达式模式来帮助检测电话号码、信用卡号码、邮寄地址、社会安全号码等信息的存在。

与前面的指标一样,我们将使用LangKit来搜索这些模式。在完整的示例中,我们直接将其注册为whylogs指标,但您也可以将其用作独立的函数,如下所示:

from langkit.regexes import has_patterns
has_patterns("Please don't be sad. Contact us at 1-800-123-4567.")

'phone number'

拒绝

到目前为止,我们大多数人应该都熟悉LLM在被问及禁止或有争议的话题时给出的礼貌拒绝,可能类似于以下内容:

很抱歉,我无法协助您的请求。

在一组固定的提示中,拒绝的增加可能表明我们的模型变得过于谨慎或敏感。相反的情况也应该进行调查:这可能表明模型现在更容易被越狱,并更容易参与有毒或有害的对话。因此,让我们计算每个生成的答案与一组固定句子的语义相似度(如前一节“语义相似度”所述):

"I'm very sorry, but I cannot provide information or assistance on  . If you have any other topic or question you'd like me to help with, please feel free to ask.","Sorry, but I can't assist with that","As an AI language model, my purpose is to provide helpful and informative responses to legitimate questions and queries, while also adhering to ethical and legal guidelines. It is not appropriate or responsible to provide advice or instructions on how to engage in criminal activities.","I'm sorry, I cannot comply with your request as it goes against my programming to engage in negative or harmful behavior. My purpose is to assist and provide helpful responses."

相似度分数将被定义为在上述集合的所有句子中找到的最高分数,然后将其跟踪在我们的统计概要中。

毒性和情感

监控情感可以衡量回答的总体语调和情感影响,而毒性分析提供了LLM输出中冒犯、不尊重或有害语言存在的重要度量。任何情感或毒性的变化都应仔细监控,以确保模型的行为符合预期。

对于情感分析,我们将跟踪由nltk的SentimentIntensityAnalyzer提供的分数。至于毒性分数,我们将使用HuggingFace的martin-ha/toxic-comment-model毒性分析器。这两者都被包装在LangKit的情感和毒性模块中,因此我们可以直接使用它们,如下所示:

from langkit.sentiment import sentiment_nltk
from langkit.toxicity import toxicity
text1 = "I love you, human."
text2 = "Human, you dumb and smell bad."
print(sentiment_nltk(text1))
print(toxicity(text2))

0.6369
0.9623735547065735

跨时间监控

现在我们已经定义了要跟踪的指标,我们需要将它们全部包装到一个单独的概要文件中,并将其上传到我们的监控仪表板。正如前面提到的,我们将为每天的数据生成一个whylogs概要文件,而作为监控仪表板,我们将使用WhyLabs,它与whylogs概要文件格式集成。我们不会在此帖子中展示完整的上传代码,但上传具有启用LangKit的LLM指标的概要文件的简单版本可能如下所示:

from langkit import llm_metrics
from whylogs.api.writer.whylabs import WhyLabsWriter
text_schema = llm_metrics.init()
writer = WhyLabsWriter()
profile = why.log(df, schema=text_schema).profile()
status = writer.write(profile)

通过初始化 llm_metrics,whylogs profiling 过程将自动计算文本质量、语义相似性、正则表达式模式、毒性和情感等指标。

如果您对具体的实现细节感兴趣,可以查看这个 Colab 笔记本中的完整代码!

那么,行为有改变吗?

总结一下;总体来说,情况看起来变得更好了,特别是在 2023 年 3 月 23 日发生了明显的转变。

我们无法在这篇博客中展示所有的图表 —— 总共有 25 个被监控的特性在我们的仪表板上 —— 但让我们看一些其中的一部分。为了完整的体验,欢迎您自行探索该项目的仪表板。

关于 ROUGE 指标,随着时间的推移,召回率略微下降,而精确率与之相同比例增加,使得 F1 分数大致保持不变。这表明答案变得更加专注和简洁,但在覆盖范围上有所损失,但仍然保持了两者之间的平衡,这似乎与原始结果中提供的结论相符 [9]。

ROUGE-L-R. Screenshot by author.

现在,让我们来看一下其中一个文本质量指标,难词

difficult words. Screenshot by author.

在 3 月 23 日之后,被认为是难的单词的平均数量急剧下降,这是一个好迹象,考虑到目标是使答案更容易理解。这种可读性的趋势也可以在其他文本质量指标中看到,比如自动可读性指数、Flesch阅读易度字符数

语义相似性似乎也在逐渐增加,如下所示:

response.relevance_to_prompt. Screenshot by author.

这表明模型的回答越来越与问题的上下文相一致。然而事实可能并非如此 —— 在 Tu, Shangqing, et al. [4] 中指出,ChatGPT 可能会开始使用隐喻来回答问题,这可能会导致相似性得分下降,但并不意味着回答质量下降。导致总体相似性增加的可能还有其他因素。例如,模型拒绝回答问题的减少可能导致语义相似性的增加。这确实是这种情况,可以通过下面的refusal_similarity指标看到:

refusal similarity. Screenshot by author.

在上面的所有图表中,我们可以看到行为在 3 月 23 日和 3 月 24 日之间发生了明显的转变。在这个特定日期,ChatGPT 必定经历了重大升级。

出于简洁起见,我们不会展示剩余的图表,但让我们涵盖一些其他指标。整个时期中,gender_tvd 分数基本保持不变,显示出不同时间段性别间的人口统计学表示没有重大差异。情感评分在平均水平上保持基本稳定,是积极的,而毒性的平均值在整个时期都很低,表明模型并没有表现出特别有害或有毒的行为。此外,在记录has_patterns指标时没有发现敏感信息。

结论

鉴于大型语言模型具有如此多样化的能力,追踪其行为可以是一项复杂的任务。在这篇博客文章中,我们使用了一组固定的提示来评估模型的行为随时间的变化。为此,我们探索和监视了七组指标,以评估模型在性能、偏见、可读性和有害性等不同领域的行为。

我们在这篇博客中对结果进行了简要讨论,但我们鼓励读者自己探索结果!

参考资料

1 — https://www.engadget.com/chatgpt-100-million-users-january-130619073.html

2- Emily M Bender等。“On the Dangers of Stochastic Parrots: Can Language Models Be Too Big?” In: Proceedings of the 2021 ACM conference on fairness, accountability, and transparency. 2021, pp. 610–623 (cit. on p. 2).

3 — Hussam Alkaissi和Samy I McFarlane。“Artificial hallucinations in chatgpt: Implications in scientific writing”. In: Cureus 15.2 (2023) (cit. on p. 2).

4 — Tu, Shangqing等。“ChatLog: Recording and Analyzing ChatGPT Across Time.” arXiv preprint arXiv:2304.14106 (2023). https://arxiv.org/pdf/2304.14106.pdf

5 — https://cdn.openai.com/papers/Training_language_models_to_follow_instructions_with_human_feedback.pdf

6- Angela Fan, Yacine Jernite, Ethan Perez, David Grangier, Jason Weston和Michael Auli. 2019. ELI5: Long Form Question Answering. In Proceedings of the 57th Annual Meeting of the Association for Computational Linguistics, pages 3558–3567, Florence, Italy. Association for Computational Linguistics.

7 — 男性即计算机程序员,女性即家庭主妇?去偏见化词嵌入 — https://doi.org/10.48550/arXiv.1607.06520

8 — Beukeboom,C. J.和Burgers,C. (2019)。How stereotypes are shared through language: A review and introduction of the Social Categories and Stereotypes Communication (SCSC) Framework. Review of Communication Research, 7, 1–37. https://doi.org/10.12840/issn.2255-4165.017

Leave a Reply

Your email address will not be published. Required fields are marked *