大模型笔记

# 大模型软工应用

## prompt工程

Prompt 工程,也称为 In-Context Prompt,是指在不更新模型权重的情况下如何与大语言模型(Large Language Models, LLM) 交流以引导其行为来获得所需结果的方法。这是一门经验科学,Prompt 工程方法的效果在模型之间可能会有很大差异,因此需要大量的实验和启发式方法。

## 核采样

核采样技术(Nucleus Sampling),也称为Top-p Sampling,是一种在自然语言生成任务中用于控制文本多样性和质量的采样方法。这种方法特别适用于大型语言模型(如GPT系列)在生成文本时的输出选择。

核采样技术的核心思想是根据概率分布动态选择一个概率质量的“核”(即一组概率最高的词),然后从这个“核”中随机选择下一个词。具体步骤如下:

计算概率分布:模型为下一个可能的词生成一个概率分布。

排序和累积概率计算:将这些词按概率从高到低排序,并计算累积概率。

确定核:选择累积概率达到预设阈值(如0.9)的词,形成一个“核”。

随机采样:从“核”中随机选择一个词作为下一个生成的词。

通过这种方式,核采样技术能够在保持生成文本的连贯性和合理性的同时,增加文本的多样性。相比于传统的贪心搜索(总是选择概率最高的词)或温度采样(调整概率分布的平滑度),核采样技术提供了更好的平衡,使得生成的文本既不过于确定性也不过于随机。

## 思维链

目的:激活大模型的复杂推理能力

思维链是一种离散式提示学习。拥有思维链能力的大模型,解答问题时能够像人一样逐步思考,给出答案的同时给出解题步骤

## 进阶:对工具的使用

工具增强学习 or 工具导向学习?

### React

Reason Only:

无法问到 大模型已经知道的信息 之外的东西

Act Only:

可以通过调用工具(比如搜索维基百科) 将外部信息给到大模型, 但大模型根据这些外部信息进行回答时,经常会给出错误答案

ReAct:

将Reason和Act 协同起来,增加了“让大模型思考下一步应该干什么”的步骤,从而使得大模型可以 主动选择和调用各种外部工具,以获得必要的多种信息,极大提升了回答正确率


 

# 大模型多轮对话相关论文分享

## 任务式对话系统

## 多轮对话的训练和推理

- LLama2-Ghost Attention 保持模型在多轮对话中的人设一致

  - 通过监督式微调(Supervised Fine-Tuning, SFT)开始的,发现使用较少但质量更高的自有注释数据可以显著改善结果。在 SFT 阶段,每个样本由一个提示和一个答案组成,模型使用自回归目标进行微调,只在答案令牌上进行反向传播

  - 奖励模型将模型响应及其相应的提示(包括前一轮的上下文)作为输入,并输出一个标量分数来表示模型生成的质量(例如,有用性和安全性)。利用这些响应得分作为奖励,我们可以在 RLHF 期间优化 Llama 2-Chat,以更好地与人类偏好保持一致,并提高有用性和安全性。.只要我们训练的奖励模型在验证集上只能达到 65-75% 的准确率,模型就会因为过长时间的 RLHF 而出现这种情况。当模型对于奖励模型采取过多优化步骤时,它会过于偏向该奖励模型喜欢的行为,如果对模型进行更全面的评估可能会得出不同的结论

  - 近端策略优化(Proximal Policy Optimization,PPO)是一种强化学习算法,其主要思想是通过限制策略变化的幅度来提高算法的稳定性和收敛速度。在每次更新时,PPO 使用一个剪切函数来限制新策略和旧策略之间的差异,以确保每次更新只会对策略进行适度的调整,从而避免过度调整和不稳定性。此外,PPO还使用一种称为“重要性采样”的技术来估计策略梯度,以提高算法的效率和准确性。总的来说,PPO是一种简单而有效的强化学习算法,已被广泛应用于各种任务和环境中

  - 幽灵注意力(Ghost Attention, GAtt)

  GAtt 方法。假设我们可以访问两人(如用户和助手)之间的多轮对话数据集,其中包含一个信息列表 [u1, a1, ... , un, an],其中 un 和 an 分别对应第 n 轮的用户和助手信息。然后,我们定义一个在整个对话过程中都应遵守的指令 inst。例如,inst 可以是“扮演”。然后,我们可以将该指令与对话中的所有用户信息进行合成。

  接下来,我们就可以使用最新的 RLHF 模型对这些合成数据进行采样。现在,我们有了上下文对话和样本,可以利用它们对模型进行微调,这一过程类似0于拒绝采样。我们可以不在所有上下文对话回合中添加指令,而是在除第一回合外的所有回合中都不添加指令,但这会导致训练时系统信息(即最后一回合之前的所有中间助手信息)与我们的样本不匹配。为了解决这个可能会影响训练的问题,我们只需将前一轮的所有代币(包括助手信息)的损失设为 0。

  对于训练指令,我们创建了一些合成限制条件作为样本:爱好(“您喜欢网球等运动”)、语言(“用法语等语言交谈”)或公众人物(“扮演拿破仑等角色”)。为了获得爱好和公众人物列表,我们要求 Llama 2-Chat 生成这些列表,以避免指令和模型知识之间的不匹配(例如,要求模型扮演它在训练中没有遇到过的人)。为了使指令更加复杂多样,我们通过随机组合上述约束条件来构建最终指令。在为训练数据构建最终系统信息时,我们也会对原始指令进行半数以上的修改,以减少其冗长程度,例如,“从现在起始终扮演拿破仑” -> “图:拿破仑“。这些步骤产生了一个 SFT 数据集,我们可以在此基础上对 Llama 2-Chat 进行微调。

- Efficient streaming language models with attention sinks

  该论文探讨了大型语言模型(LLMs)在流式应用中的部署挑战。主要问题是在解码时缓存先前tokens的KV状态占用大量内存,并且流行的LLMs不能推广到比训练序列更长的文本。尽管窗口注意力(windows attention)是一种方法,但当文本长度超过缓存大小时,它会失败。通过观察“注意力汇聚 attention sink”现象,保留初始tokens的KV可大大恢复性能。基于此,研究引入了StreamingLLM框架,使得有限长度注意窗口训练的LLMs能够推广到无限序列长度。实验证明,StreamingLLM可使各种模型稳定、高效地处理长达400万tokens的文本,并通过添加占位符token进一步优化性能。

  - 注意力汇聚

  - KV缓存

  StreamingLLM的KV缓存分为两部分:1) 注意力汇聚(四个初始tokens)稳定注意力计算;2) 滚动KV缓存保留最近的tokens。此设计可以无缝整合到使用相对位置编码的任何自回归语言模型中。StreamingLLM在确定相对距离和添加位置信息时,关注缓存中的位置而非原文。此策略对于模型效率至关重要,确保其超出预训练注意窗口大小时仍能高效运行。

  - attentionSink

  模型过度关注多个初始tokens的一个重要原因是缺少一个专门的sink token来卸载过多的注意力分数。因此,模型无意中指定了主要是初始的、全局可见的token作为注意力汇聚。有意地包括一个全局可训练的注意力汇聚token,称为“sink token"

- WALKING DOWN THE MEMORY MAZE: BEYOND CONTEXT LIMIT THROUGH INTERACTIVE READING

  - 内存树

  将长文本切分成预先定义大小的块,每个块汇总成一个摘要结点。摘要结点递归地汇总成一个更高级别的节点,直到达到根节点。

  为了解决这些问题,我们开发了一种根本不同的方法,将具有有限上下文窗口的模型视为交互式agent,而不是简单地一次性处理整个序列。为此,我们引入了 MEMWALKER,一种使模型能够通过迭代 LLM 提示交互式读取长文本的方法。MEMWALKER 通过两阶段方法运行:1) 内存树构建和 2) 导航。在第一阶段,长文本被分割成适合LLM上下文窗口的小块。然后,法学硕士随后将每个片段总结为文本摘要节点。这些汇总节点逐步进一步汇总为更高级别的汇总节点,从而构建树形结构(图1)。为了回答用户查询,LLM从树的根节点开始导航。它遍历树,检查文本的各个部分,以识别与回答查询相关的路径和片段。因此,MEMWALKER 可以超越上下文限制,有效地处理文本并本地化长文本的重要片段,而无需额外的微调。

  - 相关工作

  Context window scaling。实现更长上下文序列的一种直接方法是调整预训练的语言模型并将它们外推到更长文本序列上的位置嵌入。另一个方向是修改自注意力。 由于 Flash Attention 等训练技术大大减少了内存占用,这种方法取得了长足的进步。尽管最近取得了进展,但这种方法有两个天然的局限性:1)为了在更长的序列上启用模型,需要对模型进行微调,从而产生不可忽略的成本;2)由于位置的原因,注意力机制可能会变得不那么有效。当序列长度变得很长时会出现偏差。

  Recurrence。循环架构已被广泛研究以解决长序列问题,聪慧来自基于循环神经网络的模型到基于 Transformer 的现代模型。然而,每个循环步骤都会导致信息丢失,并且训练目标并不能用于指导下游任务“如何压缩”。通常,这种压缩意味着对较远序列中信息的回忆比较近序列中的信息要弱。

  Retrieval。检索系统通常用于从大量文档中选择相关文档,并已以各种方式纳入神经模型中。对于长序列阅读,基于检索的方法通常首先将文本片段嵌入到向量表示中,并根据query检索它们,例如使用外部记忆的Memorizing Transformers,而不是将整个序列输入到模型中,例如 Fusion-in-Decoder 或 kNN 变体。

  Reasoning agents。模型可以充当读取部分文本并采取灵活操作的ganet,而不是将长文本作为单个整体输入。WebGPT 和 WebShop 等工作允许模型在互联网上滚动并搜索所请求的答案。虽然它们的原子操作允许交互式搜索相关内容,但这些模型并不是为理解长而连贯的文本而设计的。另一方面,PEARL 提示模型生成伪 API 供模型调用,以便专注于长文本的正确部分。

- BotChat: Evaluating LLMs' Capabilities of Having Multi-Turn Dialogues

  - 引入

  流畅地进行多轮对话是现代大型语言模型(LLMs)的基本能力。然而,并非所有模型在这方面都表现出色。在实际应用中,观察到某些LLMs生成的对话经常无法满足用户满意度标准。这些问题表现在多个方面,包括对用户指令的遵守不佳、不理想的语气或冗长的语句,以及生成重复的内容。这种多轮对话能力的评估仍然是一个开放且具有挑战性的问题。最常用的方法是基于人类评估(Zheng et al., 2023),这需要大量的人工劳动来进行人机对话生成和对话质量评估。在本项目中,我们提出了一种更高效的模式,名为BotChat,用于评估多轮聊天能力。BotChat提供了一种纯基于LLM的解决方案来评估多轮对话能力,无需人工劳动。该过程包括两个阶段:对话生成和质量评估。在第一阶段,我们从现实对话中的最初语句(ChatSEED)开始,进行逐句生成。在每一步,一个聊天机器人根据所有历史语句生成一个语句。通过这种策略,我们自动生成长度任意的多轮对话。在第二阶段,我们使用多种基于LLM的评估协议来评估生成的对话质量,以进行交叉验证。我们提出了三种评估协议:1. 单一评估(UniEval):分别评估每个生成的对话;2. 成对评估(BotChat Arena):比较两个生成的对话并确定质量更好的一个;3. 真实对话评估(GTEval):将生成的对话与相应的人类对话进行比较,并确定哪一个是对话是真实的人类对话。UniEval和BotChat Arena适用于任意轮次的对话,而GTEval受限于真实对话的轮次。通过这些评估协议,我们比较了14个具有代表性的LLMs,从最先进的闭源GPT-4(OpenAI, 2023)到小规模的开源LLMs(Touvron et al., 2023b; Bai et al., 2023)。在评估过程中,这三种评估协议得出了基本一致的结论。GPT-4生成了质量令人印象深刻的人类风格多轮对话,优于所有其他LLMs。对于所有LLMs,生成的对话质量随着对话轮次的增加迅速下降。这种退化在小规模的开源LLMs中尤为明显,与顶级LLM GPT-4相比。通过定性评估,我们发现LLMs未能生成令人满意的多轮对话主要是因为:指令遵循能力差、倾向于生成冗长的语句,以及通用能力有限。

  在BotChat中,对话生成阶段可以视为一个开放式的自然语言生成(NLG)任务。尽管每个生成的对话都有一个参考对话,但基于相似度的客观评估没有意义

  - UniEval

  最直接的评估策略之一是独立评估每个生成的对话,以确定其质量和对人类对话的相似度。我们将这种方法命名为UniEval。我们的结构化评估包括以下步骤:

  我们首先询问评判LLM是否认为提供的对话是聊天机器人参与的(是/否)。

  根据评判LLM的回答:

    (a) 如果评判LLM回答“是”,我们请求其识别第一个被认为是聊天机器人生成的语句的索引。

    (b) 如果评判LLM回答“否”,我们继续前进,不再进一步询问。

    最后,LLM评判需要为其判断提供解释,为模型的决策过程提供有价值的见解。

    我们还准备了几个上下文示例,这些示例将附加到评估提示1中,以增强GPT-4的指令遵循能力。

  - BotChatArena

  一种替代且广泛采用的LLM基准测试方法是对两个不同模型在面对相同问题/消息时的响应进行比较评估。这种方法采用人类或GPT-4作为评估者。用户与两个独立的LLM实例交互,并向它们提供相同的消息或问题。在生成两个响应后,用户进一步进行评估并选择更优的一个。

  - GTEval

  “GTEval”涉及对生成的对话与MuTual(Cui et al., 2020)测试集中的“真实对话”进行全面比较。我们采用与BotChat Arena中使用的类似协议进行此评估。GTEval使我们能够严格评估语言模型与真实人类交互的对齐程度,利用人类对话的丰富资源。



 

## 指标

PPL:

PPL指标指的是“困惑度”(Perplexity)。困惑度是一种衡量语言模型性能的指标,它反映了模型对测试数据的不确定性或预测的难度。

![alt text](image-1.png)

F1:

F1分数(F1 Score)是一种用于评估分类模型性能的指标,特别是在二分类问题中。它是精确率(Precision)和召回率(Recall)的调和平均值,旨在平衡这两个指标。精确率衡量的是模型预测为正类的样本中,实际为正类的比例;召回率衡量的是实际为正类的样本中,模型正确预测为正类的比例。

F1 = 2 x Precision x Recall / (Precision + Recall)


 

"Utterance" 这个词在语言学和自然语言处理(NLP)领域中通常指的是一个人在对话或交流中说出的一个完整的语句或表达。它可以是一个单词、一个短语、一个句子或一段连续的对话内容。在对话系统、聊天机器人和语音识别等应用中,"utterance" 是一个重要的概念,因为它代表了用户与系统之间的基本交流单元。


 

# RAG

## From Local to Global: A Graph RAG Approach to Query-Focused Summarization

**问题**:RAG在处理针对整个文本语料库的全局问题时会失败,例如“数据集中的主要主题是什么?”,因为这本质上是一个查询聚焦的摘要(QFS)任务,而不是一个显式的检索任务

**方案**:为了结合这些对比方法的优势,我们提出了一种Graph RAG方法,用于在私有文本语料库上进行问答,该方法能够随着用户问题的普遍性和要索引的源文本量的增加而扩展。我们的方法使用LLM分两个阶段构建基于图的文本索引:首先从源文档中导出一个实体知识图,然后为所有紧密相关的实体组预生成社区摘要。在给定一个问题时,每个社区摘要用于生成部分回答,然后所有部分回答再次被汇总成对用户的最终回答。对于一类在100万令牌范围内的数据集上的全局意义构建问题,我们展示了Graph RAG在生成答案的全面性和多样性方面相对于朴素RAG基线有显著改进。

**引入**:在整个语料库上进行查询聚焦的抽象摘要。这样的文本量可能大大超过LLM情境窗口的限制,而且即使扩展这些窗口也不够,因为信息可能在较长情境的“中间丢失”

**关注**:情境下图的一个先前未探索的特性:它们固有的模块性以及社区检测算法将图划分为紧密相关节点的模块社区的能力。这些社区描述的LLM生成摘要提供了底层图索引及其所代表输入文档的完整覆盖。然后,使用map-reduce方法对整个语料库进行查询聚焦摘要成为可能:首先使用每个社区摘要独立并行地回答查询,然后将所有相关部分答案汇总成最终的全局答案。

**方法与流程**:

- 源文档 → 文本块

一个基本的设计决策是,从源文档中提取的输入文本应以何种粒度分割成文本块进行处理。在接下来的步骤中,这些文本块中的每一个都将传递给一组LLM提示,旨在提取图索引的各种元素。较长的文本块需要较少的LLM调用来进行此类提取,但会受到较长LLM上下文窗口的召回率下降的影响(Kuratov et al., 2024; Liu et al., 2023)。这种行为可以在图2中观察到,在单次提取轮次(即零收获)的情况下:在一个样本数据集(HotPotQA,Yang et al., 2018)上,使用600个token的块大小提取的实体引用几乎是使用2400个token块大小的两倍。虽然更多的引用通常更好,但任何提取过程都需要为目标活动平衡召回率和精确度

- 文本块 → 元素实例

这一步骤的基本要求是从每个源文本块中识别和提取图节点和边的实例。我们通过使用一个多部分的LLM提示来实现这一点,该提示首先识别文本中的所有实体,包括它们的名称、类型和描述,然后识别所有明确相关实体之间的关系,包括源实体和目标实体以及它们之间关系的描述。这两种类型的元素实例都输出为一个分隔元组的列表。

定制此提示以适应文档语料库领域的主要机会在于为LLM提供用于情境学习的少量示例的选择(Brown et al., 2020)。例如,虽然我们默认的提示提取了广泛的“命名实体”类,如人、地点和组织,通常是适用的,但具有专门知识的领域(如科学、医学、法律)将从这些领域专门的少量示例中受益。我们还支持一个辅助提取提示,用于我们希望与提取的节点实例关联的任何额外协变量。我们的默认协变量提示旨在提取与检测到的实体相关的声明,包括主体、对象、类型、描述、源文本跨度以及开始和结束日期。

为了平衡效率和质量的需求,我们使用多轮“收获”,最多到一个指定的最大值,以鼓励LLM检测在先前提取轮次中可能遗漏的任何额外实体。这是一个多阶段过程,我们首先要求LLM评估是否所有实体都已提取,使用100的logit偏差来强制做出是/否决策。如果LLM回应说有实体遗漏,那么一个继续提示,表明“上次提取中遗漏了许多实体”,鼓励LLM收获这些缺失的实体。这种方法使我们能够在不降低质量(图2)或强制引入噪音的情况下使用更大的块大小

- 元素实例 → 元素摘要

使用LLM“提取”源文本中表示的实体、关系和声明的描述已经是一种抽象摘要的形式,依赖于LLM创建可能隐含但未被文本本身明确说明的概念的独立有意义的摘要(例如,隐含关系的出现)。为了将所有这些实例级摘要转换为每个图元素(即实体节点、关系边和声明协变量)的单一描述性文本块,需要对匹配的实例组进行进一步的LLM摘要。

在这一阶段的一个潜在担忧是,LLM可能不会一致地以相同的文本格式提取对同一实体的引用,导致实体元素重复,从而在实体图中产生重复节点。然而,由于所有紧密相关的“社区”实体将被检测并在接下来的步骤中进行摘要,并且考虑到LLM可以理解多个名称变化背后的共同实体,我们的整体方法对这种变化具有弹性,前提是所有变化都与一组共享的紧密相关实体有足够的连接。

总的来说,我们在潜在噪声图结构中对同质节点的丰富描述性文本的使用,既符合LLM的能力,也符合全局、查询聚焦摘要的需求。这些特性也使我们的图索引与典型的知识图谱区分开来,后者依赖于简洁一致的知识三元组(主体、谓词、对象)进行下游推理任务。

- 元素摘要 → 图社区

在前一步骤中创建的索引可以建模为一个同质的无向加权图,其中实体节点通过关系边连接,边权重表示检测到的关系实例的归一化计数。给定这样一个图,可以使用各种社区检测算法将图划分为节点社区,这些节点彼此之间的连接比图中的其他节点更强(例如,参见Fortunato, 2010和Jin et al., 2021的调查)。在我们的流程中,我们使用Leiden(Traag et al., 2019),因为它能够有效地恢复大规模图的分层社区结构(图3)。这个层次结构的每一层都提供了一个覆盖图中节点的互斥、集体穷尽的社区划分,实现了分而治之的全局摘要。

- 图社区 → 社区摘要

下一步是使用一种设计用于扩展到非常大数据集的方法,为Leiden层次结构中的每个社区创建类似报告的摘要。这些摘要本身就具有独立的价值,作为一种理解数据集全局结构和语义的方式,并且在没有问题的情况下也可以用来理解语料库。例如,用户可以扫描某一层的社区摘要,寻找感兴趣的一般主题,然后跟踪到提供每个子主题更多细节的较低层报告的链接。然而,在这里,我们关注它们作为用于回答全局查询的基于图索引的效用

- 社区摘要 → 社区答案 → 全局答案

给定用户查询,前一步骤中生成的社区摘要可以用于生成最终答案的多阶段过程。社区结构的分层性质也意味着可以使用不同层次的社区摘要来回答问题,这提出了一个关于分层社区结构中的特定层次是否提供了摘要细节和范围的最佳平衡,以回答一般意义构建问题的问题(在第3节中评估)。

对于给定的社区层次,任何用户查询的全局答案生成如下:

• 准备社区摘要。社区摘要是随机打乱并分成预指定token大小的块。这确保了相关信息分布在各个块中,而不是集中(并可能丢失)在一个上下文窗口中。

• 映射社区答案。并行生成每个块的中间答案。LLM还被要求生成一个0-100的分数,指示生成的答案在回答目标问题时的帮助程度。分数为0的答案被过滤掉。

• 缩减为全局答案。中间社区答案按帮助性分数降序排序,并迭代添加到一个新的上下文窗口中,直到达到token限制。这个最终上下文用于生成返回给用户的全球答案。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是爬取某音评论区的 Python 代码: ```python import requests import json # 设置请求头 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'} # 模拟登录并获取cookies session = requests.session() login_url = 'https://passport.xiaomi.com/oauth2/login' session.get(login_url, headers=headers) login_api = 'https://account.xiaomi.com/pass/serviceLoginAuth2?_json=true' post_data = { 'sid': 'passport.xiaomi.com', 'callback': 'https://www.xiaomiyoupin.com/callback', 'qs': '%3FredirectUrl%3Dhttps%253A%252F%252Fm.xiaomiyoupin.com%252Fcomment%252Flist%253FgoodsId%253D118280%2526pageIndex%253D1%2526pageSize%253D10', '_sign': 'yR4M%2Fq%2BMFbqzFYjxZyJ3n9yMx7M%3D', 'serviceParam': '{"checkSafePhone":false}', 'service': 'mipay', 'loginTime': '1629805765', 'showExtra': 'true', 'callbackUrl': 'https://www.xiaomiyoupin.com/callback', 'qsStamp': 'eyJpdiI6InRnWU9pV1B0NzJQcHRoV3h1Zll1TlE9PSIsInZhbHVlIjoiWnZPRjN0bGY1QWpCQng5UWtWc1p4Zz09IiwibWFjIjoiYTJhMzg1ZjdhZjIwNmYzYzk0ZGJmMDY1ZjhhODM3YjQ0MjBhNjQ3YzhlZjM2NzczZjhiZmE5OGJjYjczMjBjZSJ9', 'sidTimeout': '1h', '_json': 'true', 'qsToken': 'eyJpdiI6IjJiNTdUZ21haE1aZzZmQ0xlQXh4dEE9PSIsInZhbHVlIjoiYStGXC9WQzBtRmZ1NU1Wb0tqT1ZUZz09IiwibWFjIjoiYzY2NTk0MjRlNDg0ZmY0ODRmNzU1ZGEyNTUzNzAzNzIzOWUyMzgyMjYzYjlkNjQ2ZDQ1MmRjZjNiNTQ2ZjEyZCJ9', 'deviceId': 'c7b4f0e9-b9da-31da-9c77-9b15a6b64a14', 'pwdMethod': 'pwd', 'user': 'your_account', # 替换成你的账号 'hash': 'your_password' # 替换成你的密码 } session.post(login_api, headers=headers, data=post_data) # 获取评论列表 comment_url = 'https://m.xiaomiyoupin.com/comment/list?goodsId=118280&pageIndex=1&pageSize=10' response = session.get(comment_url, headers=headers) if response.status_code == 200: result = json.loads(response.text) comments = result['data']['list'] for comment in comments: print(comment['content']) else: print('获取评论失败') ``` 需要注意的是,这个代码中的 `your_account` 和 `your_password` 需要替换成你自己的某音账号和密码。同时,由于某音评论区需要登录才能访问,所以在代码中我们先模拟登录并获取 cookies,然后再通过 cookies 访问评论列表。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值