【慢工社—论文阅读】LLMs能成为产品调研中合适的被访谈者吗?斯坦福学生团队近期的文献尝试回答这个问题

Park, J. S., Zou, C. Q., Shaw, A., Hill, B. M., Cai, C., Morris, M. R., Willer, R., Liang, P., & Bernstein, M. S. (2024). Generative agent simulations of 1,000 people. arXiv. https://doi.org/10.48550/arXiv.2411.10109

(本论文共65页=12页论文+支撑材料,通过ChatGPT进行拆解阅读)


概述

本文探讨了一种新颖的生成式代理(Generative Agent)架构,该架构结合了详细的定性访谈和大语言模型(LLMs),用于模拟超过1,000名个体的行为和态度。这些代理旨在通过定性洞察,在多种场景下模拟人类行为,并预测在社会科学调查、人格评估和实验任务中的真实反应。本文的概述图

关键发现

1.预测准确性:

生成式代理在综合社会调查(GSS)问题上表现出显著的预测准确性,实现了85%的标准化准确率,与参与者自身在不同时间点回答的一致性相当。

2.行为洞察:

代理(Agent)成功预测了个体和集体行为,并以高度相关的结果再现了社会科学实验中的人类结果。

3.访谈效率:

与其他数据收集方法相比,访谈数据提供了更丰富和可靠的信息,即使是使用访谈摘要或部分访谈记录时亦是如此。

4.偏差缓解:

该架构减少了在人口统计子群体(如政治意识形态、种族和性别)中的偏差,不同种族和意识形态群体的表

### 方法概述 基于CVE描述并利用大语言模型(LLMs)识别脆弱函数的有效方法主要依赖于自然语言处理和代码分析的结合。该方法旨在通过解析CVE描述中的信息,将漏洞与特定的函数或代码段关联起来,并借助LLMs的强大语义理解能力提升识别的准确性和效率。 ### 数据准备与预处理 首先需要收集包含CVE描述、补丁信息以及对应源代码的数据集。CVE描述通常提供漏洞的上下文信息,而补丁信息则可以用来定位具体的漏洞代码位置。这些数据经过清洗后,可提取出漏洞相关的自然语言描述和代码片段用于后续分析[^1]。 ### 漏洞描述嵌入与代码表示学习 接下来,使用大语言模型对CVE描述进行编码,生成高维向量表示。这种表示能够捕捉到漏洞的语义特征,例如漏洞类型、受影响组件等信息。同时,针对代码部分,采用代码专用的语言模型(如CodeBERT)对函数级别的代码进行编码,以生成代码的向量表示。这种方法能够在同一向量空间中对自然语言描述和代码进行比较,从而实现漏洞描述与代码的匹配[^1]。 ### 匹配与排序机制 在得到CVE描述和代码的向量表示之后,可以通过相似度计算(如余弦相似度)来衡量两者之间的匹配程度。为了进一步提高匹配精度,可以引入排序模型(如神经网络排序器),根据多维度特征对候选函数进行打分和排序,最终选出最有可能包含漏洞的函数。这一过程可以显著减少误报率并提升识别效果[^1]。 ### 实验评估与优化 实验表明,上述方法在多个基准数据集上均取得了较好的性能。通过对比不同模型和特征组合的效果,研究人员发现结合自然语言描述和代码表示的方法优于仅依赖代码或仅依赖文本的传统方法。此外,通过对模型进行微调和引入领域知识(如安全规则库),可以进一步提升识别的准确性[^1]。 ### 代码示例 以下是一个简单的Python代码示例,展示了如何使用Hugging Face的Transformers库来加载预训练的CodeBERT模型,并对代码进行编码: ```python from transformers import RobertaTokenizer, RobertaModel import torch # 加载预训练的CodeBERT模型和对应的tokenizer tokenizer = RobertaTokenizer.from_pretrained("microsoft/codebert-base") model = RobertaModel.from_pretrained("microsoft/codebert-base") # 示例代码函数 code_function = """ def vulnerable_function(input): if input == "malicious": execute_shell_command(input) """ # 对代码进行tokenize inputs = tokenizer(code_function, return_tensors="pt", padding=True, truncation=True) # 获取模型输出 with torch.no_grad(): outputs = model(**inputs) # 提取[CLS]标记的隐藏状态作为代码的向量表示 code_embedding = outputs.last_hidden_state[:, 0, :].squeeze().numpy() print("Code Embedding:", code_embedding) ``` 该示例展示了如何使用CodeBERT模型对代码函数进行编码,生成其向量表示。此向量可用于后续的相似度计算或分类任务。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值