【NLP 面经 8】
目录
一、文本生成任务
模型架构方面
训练数据方面
生成策略方面
二、命名实体识别任务NER
模型架构方面
特征工程方面
训练优化方面
三、情感分析任务
模型架构方面
训练数据方面
超参数调整方面
四、计算余弦相似度并添加符合条件结果
提示:
思路与算法
任由深渊的痛苦流过,我依旧是我
—— 25.4.8
一、文本生成任务
在自然语言处理的文本生成任务中,你使用基于Transformer的模型。模型生成的文本有时会出现逻辑跳跃、连贯性差的问题,并且在生成多样化内容时,难以平衡多样性与合理性。请从模型架构、训练数据和生成策略这三个方面分析可能的原因,并提出相应的改进措施。
模型架构方面
- 原因:
- 注意力机制局限:Transformer 的多头注意力机制虽能捕捉不同位置信息,但在处理长文本生成时,可能无法精准把握文本的全局逻辑关系。例如,在生成故事时,难以保证前后情节的连贯性,导致逻辑跳跃。而且,注意力机制在计算时对所有位置的关注相对均衡,没有突出关键信息的长期依赖关系,使得生成的文本在连贯性上表现不佳。
- 缺乏层次化结构建模:模型没有充分对文本的层次结构进行有效建模。文本通常具有句子、段落等不同层次,简单的 Transformer 架构难以区分不同层次信息的重要性。在生成过程中,不能合理地从不同层次组织信息,导致生成文本的结构不清晰,逻辑连贯性差。
- 位置编码不足:Transformer 的位置编码主要用于标识词在序列中的位置,但这种编码方式在反映文本的逻辑顺序和结构信息上存在局限性。特别是在生成多样化内容时,无法很好地引导模型按照合理的逻辑生成不同部分的文本,影响了文本的连贯性和多样性与合理性的平衡。
- 改进措施:
- 改进注意力机制:引入基于强化学习的注意力机制,通过奖励机制引导模型更关注与前文逻辑相关的信息。例如,对于生成连贯文本给予正向奖励,对于逻辑跳跃的情况给予惩罚,让模型学习如何更好地聚焦关键信息,提升文本连贯性。还可以采用基于位置的注意力机制,对不同位置的信息赋予不同的权重,突出关键位置的信息,增强长期依赖关系的捕捉能力。
- 构建层次化模型:在 Transformer 架构基础上,添加层次化编码模块。先对文本进行句子级别的编码,例如通过卷积神经网络(CNN)提取句子特征,再对这些句子特征进行段落级别的编码,如使用循环神经网络(RNN)处理。最后将层次化编码后的信息输入到 Transformer 解码器生成文本,使模型能更好地利用不同层次信息,生成结构清晰、逻辑连贯的文本。
- 优化位置编码:结合句法和语义信息改进位置编码。比如,利用依存句法分析获取词与词之间的结构关系,将这种结构信息融入位置编码中,让模型能更好地理解文本的逻辑顺序。或者根据文本的语义角色标注信息,调整位置编码,使模型在生成文本时能按照更合理的逻辑组织信息,平衡多样性与合理性。
训练数据方面
- 原因:
- 数据多样性不足:训练数据集中文本类型、主题和风格分布不均衡,模型对某些类型文本学习过度,对其他类型文本学习不足。例如,数据集中新闻类文本较多,而故事类文本较少,当生成故事时,模型可能因缺乏相关学习而出现逻辑跳跃、连贯性差的问题。同时,单一的数据类型也限制了模型生成多样化内容的能力,难以平衡多样性与合理性。
- 缺乏上下文信息:训练数据仅包含文本,没有提供足够的上下文信息,如文本的背景知识、主题相关信息等。在生成文本时,模型无法利用这些上下文信息来保持逻辑连贯,特别是在生成需要背景知识支撑的内容时,容易出现逻辑跳跃。而且,缺乏上下文信息也使得模型难以生成既多样又合理的内容。
- 标注不规范:如果训练数据是经过标注的,标注的不规范或不一致可能导致模型学习到错误的逻辑关系。例如,在文本摘要标注中,不同标注者对关键信息的理解和标注方式不同,会误导模型对文本逻辑和重要性的学习,从而在生成文本时出现逻辑问题。
- 改进措施:
- 扩充数据多样性:收集更多不同类型、主题和风格的文本数据,丰富训练数据的多样性。例如,除了常见的新闻、论文文本,还应包括故事、诗歌、对话等多种类型文本。对数据进行合理的预处理和清洗,确保数据质量。同时,采用数据增强技术,如对文本进行同义词替换、句子重组等操作,增加数据的多样性,使模型能更好地学习到不同类型文本的逻辑和表达方式,提升生成文本的连贯性和多样性。
- 添加上下文信息:在训练数据中加入文本的上下文信息,如通过知识图谱获取文本相关的背景知识,将这些信息与文本一起作为训练数据。模型在训练过程中可以学习利用这些上下文信息,生成逻辑连贯的文本。例如,在生成历史故事时,模型可以利用历史背景知识来保证情节的合理性和连贯性。此外,还可以在数据中添加文本的主题信息、情感倾向等,帮助模型生成既多样又合理的内容。
- 规范标注标准:制定详细明确的标注指南,对标注者进行培训,统一标注标准。采用多轮标注和交叉验证的方式,对标注结果进行审核和修正。可以利用自动评估指标(如 ROUGE 等)辅助标注过程,确保标注的准确性和一致性,让模型学习到准确的文本逻辑和重要性信息,从而生成逻辑连贯的文本。
生成策略方面
- 原因:
- 贪心搜索局限:如果采用贪心搜索策略生成文本,每次只选择概率最高的词,容易陷入局部最优解。这会导致生成的文本缺乏全局规划,出现逻辑跳跃,连贯性差。因为贪心搜索没有考虑后续词的选择对整体文本逻辑的影响,只关注当前步骤的最优选择,使得生成的文本在多样性和合理性之间难以平衡。
- 缺乏文本规划:生成策略没有对生成的文本进行有效的规划。在生成过程中,没有预先确定文本的大致结构和关键信息,只是逐词生成,导致生成的文本结构不清晰,逻辑连贯性差。同时,缺乏规划也使得模型难以生成多样化且合理的内容,因为没有从整体上把握文本的主题和发展方向。
- 未考虑语义连贯性:在生成过程中,没有充分考虑生成的词与前文的语义连贯性。生成的词可能在局部上概率较高,但与前文结合后语义不连贯,影响文本的整体质量。例如,生成的相邻句子之间缺乏逻辑联系,使得文本难以理解。
- 改进措施:
- 采用束搜索或其他优化策略:用束搜索代替贪心搜索,在每一步生成时保留多个概率较高的候选词(束宽决定候选词数量)。通过综合考虑后续生成步骤,从多个候选路径中选择最优文本,避免陷入局部最优,提高文本的连贯性和多样性与合理性的平衡。此外,还可以考虑使用强化学习等方法来优化生成策略,根据生成文本的质量反馈来调整生成过程,使生成的文本更符合要求。
- 引入文本规划机制:在生成文本之前,先对生成任务进行分析,确定文本的大致结构和关键信息。可以使用基于规则或机器学习的方法来进行规划,例如,通过对大量高质量文本的统计分析,学习不同类型文本的结构模式,然后应用到生成过程中。在生成时,按照预先规划的结构和关键信息框架,逐步填充内容,使生成的文本结构清晰、逻辑连贯。同时,通过规划可以更好地控制文本的多样性和合理性,例如,在规划中设定不同的情节发展方向来增加多样性,同时确保这些方向符合逻辑和主题要求。
- 增强语义连贯性:在生成过程中,利用语言模型的概率分布和语义理解能力,结合注意力机制,确保生成的词与前文在语义上连贯。例如,在计算生成下一个词的概率时,不仅考虑当前词的概率,还考虑该词与前文的语义相关性,通过调整概率分布来生成更连贯的文本。可以使用预训练的语言模型(如 GPT 系列)来评估生成文本的语义连贯性,并在生成过程中进行优化。
二、命名实体识别任务NER
在自然语言处理的命名实体识别(NER)任务中,你使用基于 Bi - LSTM + CRF 的模型。模型在识别一些模糊边界的实体和罕见实体时,准确率较低,并且对长文本的处理效果也不理想。请从模型架构、特征工程和训练优化这三个方面分析可能的原因,并提出相应的改进措施。
模型架构方面
- 原因:
- LSTM 自身局限:Bi - LSTM 虽然能够处理序列信息,捕捉前后文的依赖关系,但对于长文本,随着序列长度的增加,其梯度消失或梯度爆炸问题依然可能出现,导致难以有效学习长距离的依赖信息。在处理模糊边界实体和罕见实体时,由于缺乏长距离上下文信息的支持,无法准确识别。例如,在医学长文本中,疾病实体可能与前文的症状描述间隔较远,Bi - LSTM 难以建立有效的联系。
- 缺乏全局信息捕捉:Bi - LSTM 以词为单位依次处理序列,缺乏对整个句子或文本的全局理解。对于模糊边界实体,仅依靠局部的前后文信息难以准确判断边界位置。而对于罕见实体,由于在训练数据中出现频率低,仅从局部上下文难以学习到足够的特征,需要从全局文本中挖掘相关线索。
- CRF 局限性:条件随机场(CRF)在处理相邻标签之间的依赖关系上表现良好,但对于一些复杂的、非相邻词之间的语义关联捕捉能力有限。在识别模糊边界实体时,可能无法综合考虑非相邻词的信息来确定实体边界。对于罕见实体,由于其周围词的模式可能与常见实体不同,CRF 难以通过有限的训练数据学习到准确的标签依赖关系。
- 改进措施:
- 引入注意力机制:在 Bi - LSTM 层之后添加注意力机制,如自注意力机制(Self - Attention)。自注意力机制可以让模型在处理每个位置的词时,动态地关注文本中其他位置的信息,从而更好地捕捉长距离依赖关系,解决长文本处理问题。对于模糊边界和罕见实体,通过注意力机制可以从全局文本中聚焦到相关的重要信息,提高识别准确率。例如,在处理医学文本时,注意力机制可以帮助模型关注到相隔较远但与疾病实体相关的症状描述。
- 结合全局特征提取模块:在模型前端或后端添加能够提取全局特征的模块,如卷积神经网络(CNN)。CNN 可以通过卷积核在文本上滑动,提取不同尺度的全局特征。对于模糊边界实体,这些全局特征可以提供更丰富的信息来确定边界。对于罕见实体,全局特征有助于捕捉其在文本中的独特模式。例如,利用 CNN 提取句子的整体语义特征,与 Bi - LSTM 提取的序列特征相结合,提升模型对实体的识别能力。
- 改进 CRF 层:设计更复杂的 CRF 变体,例如基于神经网络的 CRF(Neural - CRF),通过神经网络来学习标签之间的依赖关系,增强对非相邻词之间语义关联的捕捉能力。这种方式可以更好地处理模糊边界实体和罕见实体周围复杂的语义关系,提高识别准确率。
特征工程方面
- 原因:
- 特征单一性:在命名实体识别中,仅使用词向量等简单特征可能无法充分表达文本中的语义信息。对于模糊边界实体,单一特征难以捕捉到其与周围词之间微妙的语义差异,导致边界判断不准确。对于罕见实体,由于其出现频率低,简单特征无法有效区分其与其他词的不同。例如,仅依靠词向量可能无法区分同形异义词在不同语境下是否为实体。
- 缺乏领域知识特征:在特定领域(如生物医学、法律等)的命名实体识别中,如果没有引入领域知识特征,模型很难识别出该领域的模糊边界实体和罕见实体。例如,在生物医学领域,基因名称的识别需要专业的生物学知识,如基因命名规则等,但普通的特征工程可能没有包含这些信息。
- 上下文特征挖掘不足:长文本中包含丰富的上下文信息,但现有的特征工程可能没有充分挖掘这些信息来帮助识别实体。对于模糊边界实体和罕见实体,上下文信息尤为重要,如前文的主题描述、后文的相关解释等,但未被有效利用,导致模型对这些实体的识别准确率低。
- 改进措施:
- 丰富特征表示:除词向量外,添加词性标注(POS)特征、命名实体类别标签特征等。词性标注可以提供词的语法信息,帮助模型更好地理解句子结构,从而更准确地识别实体。命名实体类别标签特征可以在训练过程中提供额外的监督信息,引导模型学习不同类别实体的特征。同时,结合预训练语言模型(如 BERT)的特征表示,这些模型在大规模语料上预训练,能够学习到丰富的语义知识,能更好地表示文本中的模糊边界实体和罕见实体。
- 融入领域知识特征:针对特定领域,收集和整理领域知识,如在生物医学领域,将基因命名规则、疾病分类体系等知识转化为特征。可以通过构建领域知识图谱,将图谱中的节点和关系信息融入到特征工程中。例如,将基因与相关疾病之间的关系作为特征,帮助模型识别基因实体。对于法律领域,可以将法律条文的结构和术语定义作为特征,提高对法律实体的识别能力。
- 增强上下文特征提取:利用句法分析和语义分析技术,提取文本中的依存关系、语义角色标注等上下文特征。依存关系可以揭示词与词之间的语法结构关系,语义角色标注可以明确每个词在句子中的语义角色,这些信息有助于模型理解上下文对实体的影响,特别是对于模糊边界实体和罕见实体。此外,通过窗口滑动的方式,提取词的局部上下文特征,如前后 n 个词的特征,增强模型对上下文信息的利用。
训练优化方面
- 原因:
- 数据不平衡:训练数据中不同类型实体的样本数量可能不平衡,常见实体的样本数量较多,而模糊边界实体和罕见实体的样本数量较少。模型在训练过程中倾向于学习多数类别的特征,对少数类别的模糊边界实体和罕见实体学习不足,导致识别准确率低。
- 过拟合问题:在处理长文本时,模型参数较多,如果训练数据量相对不足,容易出现过拟合现象。过拟合的模型在训练集上表现良好,但在测试集上对长文本中的模糊边界实体和罕见实体的泛化能力差,准确率下降。
- 优化算法选择不当:选择的优化算法可能不适合当前的命名实体识别任务和模型结构。一些优化算法在处理大规模数据或复杂模型时,收敛速度慢或者容易陷入局部最优解,影响模型的训练效果,导致对模糊边界实体和罕见实体的识别能力不佳。
- 改进措施:
- 平衡数据分布:采用过采样(如 SMOTE 算法)增加模糊边界实体和罕见实体样本的数量,或者对多数类样本进行欠采样,使各类别样本数量更均衡。还可以使用数据合成技术,生成与少数类样本相似的新样本,扩充模糊边界实体和罕见实体的数据量,让模型能够充分学习到各类实体的特征,提高识别准确率。例如,通过生成对抗网络(GAN)生成与罕见实体类似的文本片段作为训练数据。
- 防止过拟合:增加训练数据量,通过收集更多长文本数据或使用数据增强技术(如回译、同义词替换等)扩充数据集。同时,采用正则化技术,如 L1 和 L2 正则化,对模型参数进行约束,防止参数过大导致过拟合。还可以使用 Dropout 技术,在训练过程中随机丢弃部分神经元,减少神经元之间的共适应性,降低过拟合风险,提高模型对长文本中模糊边界实体和罕见实体的泛化能力。
- 优化算法调优:尝试不同的优化算法,如 Adam、Adagrad、Adadelta 等,并根据模型的训练效果调整算法的超参数(如学习率、动量等)。例如,对于复杂的模型结构和大规模数据,Adam 优化算法通常具有较好的收敛效果,可以通过实验确定其最优超参数设置,使模型能够更快地收敛到全局最优解,提升对模糊边界实体和罕见实体的识别能力。还可以采用学习率衰减策略,随着训练的进行逐渐降低学习率,避免模型在训练后期出现振荡,提高收敛效果。
三、情感分析任务
在自然语言处理的情感分析任务中,使用基于卷积神经网络(CNN)的模型。模型在处理含有隐喻、讽刺等复杂语言表达的文本时,情感判断准确率较低,并且在处理长文本时,性能下降明显。请从模型架构、训练数据和超参数调整三个方面分析可能的原因,并提出相应的改进措施。
模型架构方面
- 原因:
- 卷积核局限性:CNN 中固定大小的卷积核在捕捉隐喻、讽刺等复杂语言表达特征时存在困难。这些复杂表达往往需要对更广泛的上下文进行理解,而固定大小的卷积核感受野有限,难以捕捉长距离语义依赖,导致无法准确提取相关特征,影响情感判断。对于长文本,卷积核也难以覆盖所有关键信息,使得模型对长文本的整体理解能力不足,性能下降。
- 缺乏语义深度理解:单纯的 CNN 架构缺乏对语义的深度理解机制。隐喻、讽刺等表达需要对语言背后的隐含意义进行挖掘,CNN 通常只对局部文本模式进行卷积操作,难以深入理解文本的语义内涵,从而导致情感判断失误。
- 池化操作信息损失:常用的池化操作(如最大池化、平均池化)虽然能降低数据维度,但在处理含有复杂语言表达和长文本时,可能会丢失关键信息。对于隐喻、讽刺等依赖微妙语义线索的表达,池化操作可能会过滤掉重要的情感判断依据,对于长文本,也可能丢失长距离依赖信息,导致性能下降。
- 改进措施:
- 多尺度卷积核:采用不同大小的卷积核组合,小卷积核捕捉局部细节特征,大卷积核捕捉长距离语义依赖和更宏观的语义结构。例如,同时使用 3 - gram、5 - gram 和 7 - gram 的卷积核,从不同粒度提取文本特征,增强对复杂语言表达和长文本的理解能力。
- 结合循环神经网络(RNN)或 Transformer:将 CNN 与 RNN(如 LSTM、GRU)相结合,利用 RNN 的顺序处理能力和记忆机制来捕捉长距离依赖,帮助模型理解复杂语言表达和长文本中的语义关系。或者与 Transformer 结合,借助 Transformer 的自注意力机制对文本进行全局理解,提升对复杂语义的捕捉能力。
- 改进池化策略:使用基于注意力机制的池化方法,如自注意力池化。这种方法可以根据特征的重要性给予不同权重,避免重要信息丢失。模型可以自动关注与情感判断相关的关键信息,尤其是在处理复杂语言表达和长文本时,能更好地保留重要语义线索,提高情感判断准确率。
训练数据方面
- 原因:
- 数据多样性不足:训练数据集中包含隐喻、讽刺等复杂语言表达的样本较少,模型对这类表达的学习不够充分。当遇到含有复杂表达的测试文本时,由于缺乏相关经验,无法准确判断情感。对于长文本,数据集中长文本的比例和多样性也可能不足,模型对长文本的处理能力没有得到充分训练,导致性能下降。
- 标注不准确或不一致:对于含有复杂语言表达的文本,其情感标注可能存在主观性和不一致性。不同标注者对隐喻、讽刺等表达的理解和情感判断可能不同,这会误导模型学习,导致情感判断准确率降低。
- 缺乏上下文信息:训练数据通常只包含文本及其情感标签,缺乏相关的上下文信息。对于隐喻、讽刺等依赖上下文才能准确理解的表达,缺乏上下文信息会使模型难以把握其真实情感。长文本中的情感也往往与上下文紧密相关,缺乏上下文信息会影响模型对长文本情感的准确判断。
- 改进措施:
- 扩充数据多样性:收集更多含有隐喻、讽刺等复杂语言表达的文本数据,以及不同主题、长度的长文本数据。可以从文学作品、社交媒体评论、论坛帖子等多种来源获取数据,增加模型对复杂表达和长文本的学习机会。同时,利用数据增强技术,如回译、同义词替换等,对现有数据进行扩充,提高数据的多样性。
- 提高标注质量:制定详细的标注指南,对标注人员进行培训,确保标注的准确性和一致性。对于复杂语言表达的标注,可以采用多人标注并进行一致性检验的方式,选取最合理的标注结果。也可以利用自动标注工具辅助标注,但需要进行人工审核和修正,以提高标注质量。
- 添加上下文信息:在训练数据中尽可能添加上下文信息,如提供包含目标文本的段落或篇章。模型在训练时可以利用这些上下文更好地理解复杂语言表达和长文本中的情感。此外,还可以通过预处理步骤,提取与目标文本相关的关键上下文特征,如主题信息、情感倾向等,与文本一起输入模型,辅助模型进行更准确的情感判断。
超参数调整方面
- 原因:
- 卷积核数量与大小不当:卷积核数量过多可能导致模型过拟合,过少则可能无法充分提取特征,影响对复杂语言表达和长文本的处理能力。卷积核大小不合适,如过大或过小,都可能无法有效捕捉到相关语义特征,导致情感判断准确率下降。
- 学习率设置不合理:学习率过大,模型在训练过程中可能会跳过最优解,导致无法收敛,情感判断准确率不稳定。学习率过小,模型收敛速度慢,可能陷入局部最优解,同样影响性能,尤其是在处理复杂模型和大量数据时,不合适的学习率对模型效果影响更明显。
- 网络层数与神经元数量不合理:网络层数过多可能导致梯度消失或爆炸,使模型难以训练,对于复杂语言表达和长文本的处理能力也会受到影响。神经元数量过多或过少都会影响模型的表达能力,过多可能导致过拟合,过少则可能无法学习到足够的特征,从而降低情感判断准确率。
- 改进措施:
- 优化卷积核参数:通过交叉验证等方法,尝试不同数量和大小的卷积核组合,找到最适合当前情感分析任务的设置。例如,可以从较小的卷积核数量和大小开始尝试,逐渐增加,观察模型在验证集上的性能变化,选择能使模型在处理复杂语言表达和长文本时性能最佳的参数组合。
- 调整学习率:采用学习率衰减策略,在训练初期使用较大的学习率,使模型快速收敛到较优解附近,随着训练的进行,逐渐降低学习率,避免模型跳过最优解。也可以尝试不同的优化算法(如 Adam、Adagrad 等),每种算法对学习率的适应性不同,通过实验选择最适合的算法和学习率设置。
- 合理设置网络层数与神经元数量:根据数据集的规模和任务的复杂程度,合理调整网络层数和神经元数量。可以先参考相关文献或经验值进行初步设置,然后通过实验观察模型在训练集和验证集上的性能变化,逐步调整层数和神经元数量,以达到最佳的情感判断效果。例如,对于含有复杂语言表达和长文本的情感分析任务,可能需要适当增加网络层数和神经元数量来提高模型的表达能力,但要注意避免过拟合。
四、计算余弦相似度并添加符合条件结果
假设你正在处理自然语言处理中的文本匹配任务,给定两个句子列表
sentences1
和sentences2
,以及一个阈值threshold
。对于每对句子(s1, s2)
,其中s1
来自sentences1
,s2
来自sentences2
,计算它们之间的余弦相似度。如果余弦相似度大于等于threshold
,则将这对句子的索引对(i, j)
添加到结果列表中,其中i
是s1
在sentences1
中的索引,j
是s2
在sentences2
中的索引。请实现以下函数:
import numpy as np from sklearn.feature_extraction.text import TfidfVectorizerdef find_matching_sentences(sentences1, sentences2, threshold):# 在此处编写你的代码pass
提示:
- 可以使用
TfidfVectorizer
将句子转换为 TF - IDF 向量表示。- 计算两个向量之间的余弦相似度可以使用以下公式:
- 对于向量 a 和 b,余弦相似度:
- 在
numpy
中,可以通过np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))
来计算。
思路与算法
① 合并句子并进行 TF - IDF 向量化
② 分割 TF - IDF 矩阵
③ 计算余弦相似度并筛选结果
④ 返回结果
TfidfVectorizer():将文本数据转换为 TF-IDF 特征矩阵,结合了 CountVectorizer
(词频统计)和 TfidfTransformer
(逆文档频率计算),适用于文本分类、信息检索等任务
参数名 | 类型/选项 | 必选 | 默认值 | 说明 |
---|---|---|---|---|
input | str ('content' , 'file' , 'filename' ) | 否 | 'content' | 输入类型:直接处理字符串、文件路径或文件对象。 |
analyzer | str ('word' , 'char' , 'char_wb' ) | 否 | 'word' | 分词粒度:按词、字符或词边界字符划分。 |
ngram_range | tuple (如 (1,2) ) | 否 | (1,1) | 提取 n-gram 范围,如 (1,2) 表示提取单字和双词组合。 |
max_df /min_df | float 或 int | 否 | 1.0 /1 | 忽略词频高于 max_df (或低于 min_df )的词,支持百分比(如 0.8 )或绝对频数(如 5 )。 |
stop_words | list 或 'english' | 否 | None | 停用词列表,设为 'english' 使用内置英文停用词。 |
norm | str ('l1' , 'l2' , None ) | 否 | 'l2' | 归一化方式:L1(曼哈顿范数)、L2(欧氏范数)或不做归一化。 |
use_idf | bool | 否 | True | 是否启用逆文档频率(IDF)计算,若设为 False ,仅使用词频(TF)。 |
fit_transform():先通过 fit()
学习数据的统计特征(如词频、IDF 值),再通过 transform()
应用变换生成 TF-IDF 矩阵,常用于训练数据预处理
参数名 | 类型 | 必选 | 默认值 | 说明 |
---|---|---|---|---|
X | Iterable (如文本列表) | 是 | - | 输入文本数据,需为可迭代对象(如列表或生成器)。 |
y | array-like | 否 | None | 通常不用于无监督任务(如 TF-IDF),在监督学习中可传递标签数据(如分类任务)。 |
np.linalg.norm():计算向量或矩阵的范数(如 L1、L2、无穷范数),支持按行或列计算,适用于数据归一化或相似度计算
参数名 | 类型/选项 | 必选 | 默认值 | 说明 |
---|---|---|---|---|
x | ndarray | 是 | - | 输入数组,支持任意维度。 |
ord | int /str (如 2 , 'fro' , np.inf ) | 否 | None (L2) | 范数类型:1 (L1)、2 (L2)、np.inf (无穷范数)、'fro' (矩阵 Frobenius 范数)。 |
axis | int (0 或 1 ) | 否 | None | 计算轴:0 按列计算,1 按行计算,None 计算整体范数。 |
keepdims | bool | 否 | False | 是否保持原数组维度(如 True 时,二维数组计算结果仍为二维)。 |
np.dot():计算两个数组的点积:
一维数组:向量内积(如 [1,2]·[3,4]=1 * 3 + 2 * 4=11
)。
二维数组:矩阵乘法(如 A@B
的等效操作)
参数名 | 类型 | 必选 | 默认值 | 说明 |
---|---|---|---|---|
a | ndarray | 是 | - | 左操作数数组,支持向量或矩阵。 |
b | ndarray | 是 | - | 右操作数数组,维度需与 a 兼容(如矩阵乘法要求 a.shape[1] == b.shape[0] )。 |
out | ndarray | 否 | None | 可选输出数组,用于存储结果(需预先分配内存)。 |
.toarray():将稀疏矩阵(如 scipy.sparse.csr_matrix
)转换为稠密 NumPy 数组,便于可视化或与其他库交互
列表.append():向列表末尾添加单个元素(若为可迭代对象,会作为整体添加),适用于动态构建列表
参数名 | 类型 | 必选 | 默认值 | 说明 |
---|---|---|---|---|
object | 任意类型 | 是 | - | 要添加的元素(如 list.append(5) 或 list.append([1,2]) ,后者会将 [1,2] 视为单个元素)。 |
import numpy as np
from sklearn.feature_extraction.text import TfidfVectorizerdef find_matching_sentences(sentences1, sentences2, threshold):# 将两个句子列表合并,一起进行TF - IDF向量化all_sentences = sentences1 + sentences2vectorizer = TfidfVectorizer()tfidf_matrix = vectorizer.fit_transform(all_sentences)# 分割为两个句子列表对应的TF - IDF矩阵num_sentences1 = len(sentences1)tfidf_matrix1 = tfidf_matrix[:num_sentences1]tfidf_matrix2 = tfidf_matrix[num_sentences1:]result = []for i in range(num_sentences1):for j in range(len(sentences2)):# 计算余弦相似度similarity = np.dot(tfidf_matrix1[i].toarray()[0], tfidf_matrix2[j].toarray()[0]) / (np.linalg.norm(tfidf_matrix1[i].toarray()[0]) * np.linalg.norm(tfidf_matrix2[j].toarray()[0]))if similarity >= threshold:result.append((i, j))return result
相关文章:
【NLP 面经 8】
目录 一、文本生成任务 模型架构方面 训练数据方面 生成策略方面 二、命名实体识别任务NER 模型架构方面 特征工程方面 训练优化方面 三、情感分析任务 模型架构方面 训练数据方面 超参数调整方面 四、计算余弦相似度并添加符合条件结果 提示: 思路与算法 任由深渊的…...
Qt项目——记事本
目录 前言工程文档一、功能介绍二、界面预览三、UI设计师工具四、给三个按钮设置贴图五、信号与槽六、实现文件打开功能代码实现代码实现 七、实现文件保存代码内容 八、实现文件关闭代码实现 九、显示高亮和行列位置代码实现 十、实现快捷功能代码实现 总结 前言 这个项目就是…...
WHAT - React 惰性初始化
目录 在 React 中如何使用惰性初始化示例:常规初始化 vs. 惰性初始化1. 常规初始化2. 惰性初始化 为什么使用惰性初始化示例:从 localStorage 获取值并使用惰性初始化总结 在 React 中,惰性初始化(Lazy Initialization)…...
HOW - 如何测试 React 代码
目录 一、使用 React 测试库:testing-library/react二、使用测试演练场:testing-playground.com三、使用 Cypress 或 Playwright 进行端到端测试四、使用 MSW 在测试中模拟网络请求 一、使用 React 测试库:testing-library/react testing-li…...
React 条件渲染
开发环境:Reacttsantd 通常你的组件会需要根据不同的情况显示不同的内容。在 React 中,你可以通过使用 JavaScript 的 if 语句、&& 和 ? : 运算符来选择性地渲染 JSX。 例子 我们在满足 isPacked{true} 条件的物品清单旁加上一个勾选符号✔。…...
使用 Canal 实现 MySQL 与 ES 数据同步的技术实践
前言 本文将详细讲解如何使用阿里的 Canal 工具,实现 MySQL 向 ES(Elasticsearch)的数据同步。 数据同步有多种方式,双写同步数据方式因性能慢、存在分布式事务及数据一致性问题、业务耦合度高且难以扩展,不适合采用…...
《实战AI智能体》什么是 Scrum 项目管理及为什么需要它
Scrum 项目管理是一种敏捷项目管理方法,强调团队合作、迭代开发和客户参与。它的核心概念包括 Scrum 团队、产品待办事项列表、Sprint、每日站立会议、Sprint 回顾会议等。Scrum 团队由产品负责人、Scrum 主管和开发团队组成,他们共同负责项目的规划、执行和交付: 产品待办事…...
智能硬件开发革命:低代码平台+物联网
物联网和低代码开发 初识物联网 物联网的概念 20 世纪末,随着计算机网络和通信技术的兴起,互联网开始走进并融入人们的生活。传统互联网通常以人作为主体,数据的产生和传输都在人的控制下进行,数据的应用结果也在具体的人身上得…...
「合诚」携手企企通共建新材料和健康产业采购数智化新生态
在科技革命与产业变革深度融合的时代背景下,新材料与健康产业正迎来数字化、智能化的快速发展。 技术突破与消费升级的双重驱动,推动着行业不断创新,同时也对企业的供应链管理提出了更高要求。 1、合诚:聚焦新材料与健康产业&am…...
ansible角色
一、角色 role 本质上就是目录 /etc/ansible/roles 1、创建角色 tree查看目录结构 在同一个角色中,相互引用文件、操作时,不需要添加任何路径 删除角色,将角色目录中的角色文件删除 案例:部署zabbix agent 执行角色...
WHAT - React 元素接收的 ref 详解
目录 1. ref 的基本概念2. 如何使用 ref2.1 基本用法2.2 类组件使用 createRef 3. forwardRef 转发 ref4. ref 的应用场景5. ref 和函数组件总结 在 React 中,ref(引用)用于访问 DOM 元素或类组件实例。它允许我们直接与元素进行交互…...
数字游戏(继Day 10)
主体: #include<stdio.h> #include<time.h> #include<stdlib.h>#include"mygetch.h"#define MAX 51 //定义测试字母的最大长度void help() {printf("\n****************************************");printf("\n*输入过程中无法退出…...
react 中将生成二维码保存到相册
需求:生成二维码,能保存到相册 框架用的 react 所以直接 qrcode.react 插件,然后直接用插件生成二维码,这里一定要写 renderAs{‘svg’} 属性,否则会报错,这里为什么会报错??&#…...
React-05React中props属性(传递数据),propTypes校验,类式与函数式组件props的使用
1.类式组件props基本数据读取与解构运算符传递 <script type"text/babel">// 创建组件class PersonalInfo extends React.Component {render() {// 读取props属性 并读取值console.log(props,this.props);return(<ul><li>姓名:{this.p…...
export default function?在react中在前面还是后面呢?
好的!我将通过几个具体场景的代码示例,展示不同 export default 使用方式的适用情况,并给出推荐实践。 场景 1:基础组件(推荐直接导出) 适用情况:简单组件,无需额外处理 // 方式A:…...
红米手机输入正确密码也无法解锁的问题的可尝试解决方法
文章目录 问题现象官方途径没看到有能给解决的可尝试解决方法(汇总小红书成功解决方法,但从回复来看,多为成功的个例,整体而言希望不大)重启/强制重启尝试之前的密码等待一晚上后再次尝试输入密码,包括重启…...
优选算法系列(6.模拟)
一.替换所有的问号(easy) 题目链接:1576. 替换所有的问号 - 力扣(LeetCode) 解法: 纯模拟。从前往后遍历整个字符串,找到问号之后,就用 a ~ z 的每⼀个字符去尝试替换即可。 代码…...
罗技K860键盘
罗技蓝牙键盘的顶部功能键F1-F12的原本功能 单击罗技键盘的功能键时,默认响应的是键盘上面显示的快进、调节音量等功能。改变回F1~F12原本功能,同时按下 fn和esc组合键...
⭐算法OJ⭐数据流的中位数【最小堆】Find Median from Data Stream
最小堆 最小堆是一种特殊的完全二叉树数据结构。 基本定义 堆性质:每个节点的值都小于或等于其子节点的值(根节点是最小值)完全二叉树性质:除了最底层外,其他层的节点都是满的,且最底层的节点都靠左排列…...
node-modules-inspector 使用以及 node_modules可视化 依赖关联关系快速分析
node-modules-inspector 使用以及 node_modules可视化 依赖关联关系快速分析 node-modules-inspector 简介 node-modules-inspector 是一个用于分析和可视化 node_modules 依赖关系的工具,主要功能包括: 依赖可视化:以交互式图表展示项目的依…...
python自动登录远程设备的几种方式(华为设备)
其实登录远程设备(交换机路由器)的方式无非就是通过SSH或者是Telnet这两个协议,当然最主要的还是SSH,这里主要讲的是通过这两个协议登录远程设备的几个方式 拓扑 本文都是用的这个拓扑,主要通过编写python脚本来登录其…...
【android bluetooth 框架分析 01】【关键线程 1】【关键线程介绍】
1. 为什么学习蓝牙协议栈之前,必须先梳理清楚这几大线程? 为什么 学习协议栈之前 最好是要先梳理清楚 关键线程 bt_stack_manager_threadbt_jni_threadbt_main_threadbt_a2dp_sink_worker_thread 1.1 蓝牙协议栈是典型的“多线程异步系统” 蓝牙协议…...
LDAP高效数据同步:Syncrepl复制模式实战指南
#作者:朱雷 文章目录 一、Syncrepl 复制简介1.1. 什么是复制模式1.2. 什么是 syncrepl同步复制 二、Ldap环境部署三、配置复制类型3.1. 提供者端配置3.2. 消费者端配置3.3.启动服务3.4.测试同步是否生效 四、总结 一、Syncrepl 复制简介 1.1. 什么是复制模式 Ope…...
SeeGround: See and Ground for Zero-Shot Open-Vocabulary 3D Visual Grounding
CVPR 2025 核心问题与动机 问题背景:3D视觉定位(3DVG)要求根据文本描述在3D场景中定位目标物体,是增强现实、机器人导航等应用的关键技术。传统方法依赖标注的3D数据集和预定义类别,限制了其在开放场景中的扩展性。现…...
深入理解Spring IoCDI
1. 引言:为什么需要IoC和DI? 传统开发方式的耦合性问题 在传统开发中,对象通常通过 new 关键字直接创建,例如: // 直接依赖具体实现类 UserService userService new UserServiceImpl(); OrderService orderService…...
NO.78十六届蓝桥杯备战|数据结构-并查集|双亲表示法|初始化|查询|合并|判断|亲戚|Lake Counting|程序自动分析(C++)
双亲表⽰法 接下来要学习到的并查集,本质上就是⽤双亲表⽰法实现的森林。因此,我们先认识⼀下双亲表⽰法。 在学习树这个数据结构的时,讲到树的存储⽅式有很多种:孩⼦表⽰法,双亲表⽰法、孩⼦双亲表⽰法以及孩⼦兄弟表…...
20250407-组件v-model
基本用法 v-model 可以在组件上使用以实现双向绑定。 首先看下 v-model 在原生元素上的用法: <input v-model"searchText" /> 在代码背后,模板编译器会对 v-model 进行更冗长的等价展开。因此上面的代码其实等价于下面这段ÿ…...
oracle 存储体系结构
oracle 存储体系结构 参考: Logical Storage Structures (oracle.com)...
晋城市电子健康证上传照片尺寸要求及手机拍照制作方法
晋城市餐饮从业人员健康证电子照片上传有着明确的技术规范。根据"晋城市从业人员电子健康证明服务平台"要求,照片尺寸应为358像素(宽)441像素(高),这一比例符合标准证件照的规格。照片底色可选择…...
STL c++ list——模拟实现
结点类的模拟实现 list是一个带头双向循环链表 因需要实现一个节点类,其中包含哨兵位(用来标识位置),节点信息(val数据,prev后指针,next后指针) template<class T> struct …...
【ES系列】Elasticsearch从入门到精通保姆级教程 | 启篇
🔥 本系列将带你从零开始学习Elasticsearch,通过保姆级教程,手把手教你掌握这个强大的搜索与分析引擎。无论你是完全的新手,还是想系统学习ES的开发者,这个系列都能满足你的需求。 📚博主匠心之作,强推专栏: JAVA集合专栏 【夜话集】JVM知识专栏数据库sql理论与实战【…...
图解Java运行机制-JVM、JRE、JDK区别
以下是Java运行机制及JVM、JRE、JDK区别的图解与说明: --- ### 一、Java程序运行机制 1. **编写与编译** Java源文件(.java)通过**JDK中的编译器(javac)**编译为字节码文件(.class)ÿ…...
UML类图综合实验三补档
1.使用简单工厂模式模拟女娲(Nvwa)造人(Person),如果传入参数“M”,则返回一个Man对象,如果传入参数“W”,则返回一个Woman对象,用Java语言实现该场景。现需要增加一个新的Robot类,如果传入参数“R”&#…...
OpenHarmony子系统开发 - DFX(八)
OpenHarmony子系统开发 - DFX(八) 八、Faultlogger开发指导 概述 功能简介 Faultlogger是OpenHarmony为开发者提供的一个维测日志框架,能够为应用、元能力、系统服务进程崩溃故障提供统一检测、日志采集、日志存储、日志上报功能…...
C# virtual 和 abstract 详解
简介 在 C# 中,virtual 和 abstract 关键字都用于面向对象编程中的继承和多态,它们主要用于方法、属性和事件的定义,但在用法上存在一些重要的区别。 virtual 关键字 virtual 表示可重写的方法,但可以提供默认实现,…...
红宝书第三十二讲:零基础学会模块打包器:Webpack、Parcel、Rollup
红宝书第三十二讲:零基础学会模块打包器:Webpack、Parcel、Rollup 资料取自《JavaScript高级程序设计(第5版)》。 查看总目录:红宝书学习大纲 一、模块打包器是什么? 把分散的HTML/CSS/JS文件 组合成浏览…...
DeepSeek 在金融领域的应用解决方案
DeepSeek 在金融领域的应用解决方案 一、背景 随着人工智能技术的快速发展,DeepSeek 作为一款国产大模型,凭借其强大的语义理解、逻辑推理和多模态处理能力,在金融行业迅速崭露头角。金融行业作为经济的核心,面临着激烈的市场竞…...
linux 处理2个文件的差集
命令 grep -Fvxf 文件1 文件2 -F 将模式视为固定字符串,而非正则表达式。 -v 反向匹配,输出不匹配的行。 -x 精确匹配整行,避免部分匹配。 -f 文件1 从文件1中读取模式。 示例 执行命令 grep -Fvxf a1.txt a2.txt...
vue3中pinia基本使用
一、安装以及引入 安装:npm install piniamain.js文件: import { createApp } from "vue"; import { createPinia } from "pinia"; import App from "./App.vue";const pinia createPinia() const app createApp(App)…...
“乐企“平台如何重构业财税票全流程生态?
2025年,国家税务总局持续推进的"便民办税春风行动"再次推进数字化服务升级,其中"乐企"平台作为税务信息化的重要载体,持续优化数电票服务能力,为企业提供更高效、更规范的税务管理支持。在这一背景下…...
JVM内存模型
JVM内存模型 JVM(Java Virtual Machine)内存模型是 Java 程序在运行时,JVM 为其分配的内存结构,它定义了 Java 程序如何在内存中存储数据和如何进行线程之间的通信。JVM 内存模型是为了支持高效的多线程执行和垃圾回收机制。 一…...
LeetCode热题100记录-【二分查找】
二分查找 35.搜索插入位置 思考:二分查找先判定边界条件 记录:不需要二刷 class Solution {public int searchInsert(int[] nums, int target) {int left 0,right nums.length-1;if(nums[right] < target){return right1;}if(nums[left] > tar…...
科普:原始数据是特征向量么?
一、输入向量 x \mathbf{x} x是特征向量 机器学习算法公式中的输入向量 x \mathbf{x} x通常要求是特征向量。原因如下: 从算法原理角度:机器学习算法旨在通过对输入数据的学习来建立模型,以实现对未知数据的预测或分类等任务。特征向量是对…...
echarts地图添加涟漪波纹点位
1.完整代码 chartsOption: {tooltip: {trigger: "item",formatter: this.initTooltip,triggerOn: "mousemove",borderColor: "#fff",backgroundColor: "rgba(216, 227, 244, 1)",extraCssText: "border-radius: 14px;", //…...
Linux(十三)fork + exec进程创建
一、进程创建 在了解进程创建的步骤前,让我们先通过实例观察一下。大家可以跟小编一起,在终端中执行3次ps -f命令,观察一下。 通过上图,我们可以发现,3次ps -f的父进程(PPID)都是一样的…...
集合计算高级函数
说明 过滤 遍历一个集合并从中获取满足指定条件的元素组成一个新的集合转化/映射(map)将集合中的每一个元素映射到某一个函数扁平化 扁平化映射 注:flatMap 相当于先进行 map 操作,在进行 flatten 操作集合中的每个元素的子元素映…...
鼎讯信通 便携式雷达信号干扰模拟器:打造实战化电磁环境的新利器
在现代战争中,电磁环境的复杂性直接影响着雷达装备的性能和作战效果。面对敌方日益精进的电子战手段,如何提升雷达设备的抗干扰能力,确保其在实战环境中的稳定性和可靠性,已成为各国军队和科研机构的重要课题。 为此,…...
避开养生误区,拥抱健康生活
在追求健康的道路上,我们常常会陷入一些养生误区,不仅无法达到预期效果,还可能损害身体健康。只有拨云见日,认清这些误区,采取正确的养生方式,才能真正拥抱健康生活。 很多人认为,保健品吃得…...
解码ChatBI技术形态:独立对话框、插件式与IM集成模式的技术优劣
ChatBI的形态之争 随着大语言模型(LLM)技术的成熟,**对话式商业智能(ChatBI)**正成为企业数据分析的新范式。然而,不同的技术形态直接影响ChatBI的落地效果——独立对话框、插件式助手、IM集成机器人&…...
rockylinux 8 9 升级到指定版本
rockylinux 8 update 指定版本 rockylinux 历史版 所有版本rockylinux 最新版 所有版本vault历史版 pub最新版(https://dl.rockylinux.org)地址后面增加不同名称 echo "delete repos" rm -rf /etc/yum.repos.d/*echo "new rockylinux repo" cat <<EO…...