大模型语料库的构建过程 包括知识图谱构建 垂直知识图谱构建 输入到sql构建 输入到cypher构建 通过智能体管理数据生产组件

ops/2025/2/2 2:33:00/

以下是大模型语料库的构建过程:

一、文档切分语料库构建
  1. 数据来源确定

    • 首先,需要确定语料库的数据来源。这些来源可以是多种多样的,包括但不限于:
      • 网络资源:利用网络爬虫技术从各种网站(如新闻网站、学术网站、博客、社交媒体平台等)收集文本数据。例如,可以使用 Python 的 requestsBeautifulSoup 库来爬取网页内容,设定不同的网址和规则,收集各类文章、帖子、评论等信息。
      • 现有文档存储:整合企业内部的文档库、图书馆的数字资源、电子书籍、研究报告、学术论文等,这些文档可以以不同的格式存在,如 PDF、DOCX、TXT 等。
      • 开放数据集:利用一些公开的数据集,像 Common Crawl 提供的大规模文本数据,以增加语料库的广度和多样性。
  2. 文档格式转换与清洗

    • 对于不同格式的文档,需要将其转换为统一的纯文本格式,以便后续处理。
      • 对于 PDF 文档,使用 PyPDF2pdfplumber 等 Python 库将其转换为纯文本,去除不必要的格式信息。
      • 对于 DOCX 格式的文档,可使用 python-docx 库提取文本内容。
      • 对于 HTML 内容,使用 BeautifulSoup 库去除 HTML 标签和脚本,仅保留文本信息。
    • 对转换后的纯文本进行清洗,使用正则表达式和字符串处理函数去除无关信息,例如删除多余的空格、特殊字符、广告信息、版权声明等,确保文本内容的简洁性和一致性。
  3. 文档切分操作

    • 将长文档按照语义单元进行切分,常见的切分方式有:
      • 按段落切分:根据段落标记(如 )将文档拆分成段落,使每个段落成为一个独立的语料单元,以保证每个单元具有相对独立的语义。
      • 按句子切分:利用自然语言处理工具(如 nltkspaCy)的句子分割功能,将段落进一步拆分成句子,确保语料单元的细化和易于处理。
    • 将切分好的语料单元存储在数据库(如 MongoDB 或 Elasticsearch)或文件系统中,并为每个语料单元添加元数据,包括来源、时间戳、文档类型等信息,方便后续管理和检索。
二、基于文档向量聚簇向量库构建
  1. 文档向量化

    • 利用 BGE(BAAI General Embedding)相关技术对切分好的语料单元进行向量化。
      • 首先,安装并导入 sentence-transformers 库,它提供了方便的接口来使用 BGE 模型。
      • 加载预训练的 BGE 模型,如 BAAI/bge-base-enBAAI/bge-large-en 等,通过以下代码实现:

    from sentence_transformers import SentenceTransformer
    model = SentenceTransformer(‘BAAI/bge-base-en’)

    - 将语料单元列表作为输入,使用模型将其编码为向量,示例代码如下:
    

    sentences = [“This is a sample sentence”, “Another sentence for embedding”]
    sentence_embeddings = model.encode(sentences)

    - 存储生成的向量,可以使用向量数据库,如 Faiss 或 Annoy 进行存储。以下是使用 Faiss 的简单示例:
    

    import faiss
    import numpy as np
    d = sentence_embeddings.shape[1] # 向量维度
    index = faiss.IndexFlatL2(d) # 构建一个 L2 距离的索引
    index.add(sentence_embeddings.astype(np.float32)) # 添加向量到索引中

    • 对于较长的语料单元,可以采用截断、采样或其他文本摘要技术,确保输入到 BGE 模型的长度在合理范围内。
  2. 聚类操作

    • 选择合适的聚类算法,如 K-Means、DBSCAN 或层次聚类。以 K-Means 为例,使用 scikit-learn 库实现:

    from sklearn.cluster import KMeans
    kmeans = KMeans(n_clusters=5, random_state=0).fit(sentence_embeddings)
    cluster_labels = kmeans.labels_

    • 确定聚类的数量可以使用肘部法则(Elbow Method)或轮廓系数(Silhouette Coefficient)进行评估。例如,使用肘部法则的代码如下:

    sse = []
    for k in range(1, 11):
    kmeans = KMeans(n_clusters=k, random_state=0).fit(sentence_embeddings)
    sse.append(kmeans.inertia_)
    import matplotlib.pyplot as plt
    plt.plot(range(1, 11), sse)
    plt.xlabel(‘Number of clusters’)
    plt.ylabel(‘SSE’)
    plt.show()

    • 存储聚类结果,将簇的信息存储在数据库中,包括簇中心向量、簇内语料单元的索引等,以便后续的分析和检索。
三、基于大模型指令的通用知识图谱语料库构建
  1. 实体和关系抽取

    • 从切分好的语料库中选取语料单元,使用大模型(如 GPT-3、BERT 或其微调版本)进行实体和关系抽取。通过精心设计的提示,引导大模型完成任务,例如:

    import openai
    openai.api_key = “your_api_key”
    for corpus in corpus_list:
    prompt = f"从以下文本中提取所有的实体和关系:{corpus}"
    response = openai.Completion.create(
    engine=“text-davinci-02”,
    prompt=prompt,
    max_tokens=100
    )
    extracted_info = response.choices[0].text.strip()
    # 解析提取的信息,将其存储在结构化数据中,如 JSON 或 RDF 格式

    • 对大模型的输出进行解析和验证,将提取的实体和关系存储在结构化的数据格式中,确保信息的准确性和完整性。
  2. 知识图谱构建

    • 将提取的实体作为节点,关系作为边,使用图数据库(如 Neo4j)构建通用知识图谱。以下是使用 py2neo 库的示例:

    from py2neo import Graph
    graph = Graph(“bolt://localhost:7687”, auth=(“neo4j”, “password”))

    假设 entity1 和 entity2 是提取的两个实体,relation 是它们之间的关系

    graph.run(“CREATE (e1:Entity {name: $name1})-[r:RELATION {type: $relation}]->(e2:Entity {name: $name2})”,
    name1=entity1, relation=relation, name2=entity2)

    • 知识图谱进行扩充和优化,可以继续使用大模型的能力,通过生成性任务来推断新的实体和关系。例如,使用以下提示让大模型根据已有的信息推断更多内容:

    prompt = “根据以下实体和关系,推断新的实体和关系:[已有实体和关系列表]”
    response = openai.Completion.create(
    engine=“text-davinci-02”,
    prompt=prompt,
    max_tokens=100
    )

四、基于垂直领域专家经验的大模型指令构建的垂直领域知识图谱语料库
  1. 领域数据收集与筛选

    • 针对特定的垂直领域(如医疗、金融、法律等)收集数据,来源可以包括:
      • 专业数据库:如医疗领域的 PubMed、金融领域的 Bloomberg 等,从这些专业数据库中提取特定领域的数据。
      • 企业内部数据:从企业的业务系统、数据库中收集与该领域相关的信息。
      • 专业网站和报告:从行业网站、专业报告、期刊中获取最新的信息。
    • 对收集的数据进行筛选和整理,结合垂直领域专家的经验,确保数据的相关性和专业性。
  2. 实体和关系抽取

    • 与通用知识图谱的构建类似,但会使用更具领域针对性的大模型或对大模型进行微调。首先,使用垂直领域专家提供的知识和经验来设计更精确的提示,引导大模型进行实体和关系抽取。例如,对于医疗领域:

    import openai
    openai.api_key = “your_api_key”
    for medical_corpus in medical_corpus_list:
    prompt = f"从以下医疗文本中提取医疗实体和关系:{medical_corpus}"
    response = openai.Completion.create(
    engine=“text-davinci-02”,
    prompt=prompt,
    max_tokens=100
    )
    extracted_info = response.choices[0].text.strip()
    # 解析提取的信息,将其存储在结构化数据中,如 JSON 或 RDF 格式

    • 对大模型的输出进行解析和验证,可邀请领域专家对结果进行审核,确保提取信息的准确性和专业性。
  3. 知识图谱构建与融合

    • 将提取的垂直领域实体和关系构建成垂直领域知识图谱,使用图数据库存储,如 Neo4j。
    • 将垂直领域知识图谱与通用知识图谱进行融合,可以通过共享的实体或关系将两者连接起来,形成一个更完整的知识图谱
五、根据输入生成 Cypher 语料库构建
  1. 问题收集

    • 从用户的问题、问答系统、客服记录等渠道收集自然语言问题,将这些问题存储在数据库(如 PostgreSQL、MySQL)或文件系统中,并添加问题的来源、时间、领域等元数据。
  2. Cypher 语句生成

    • 使用大模型将自然语言问题转换为 Cypher 查询语句,使用特定的提示引导大模型完成转换,例如:

    import openai
    openai.api_key = “your_api_key”
    for question in question_list:
    prompt = f"将以下自然语言问题转换为 Cypher 查询:{question}"
    response = openai.Completion.create(
    engine=“text-davinci-02”,
    prompt=prompt,
    max_tokens=100
    )
    cypher_query = response.choices[0].text.strip()
    # 存储自然语言问题和对应的 Cypher 查询,建立映射关系

    • 对生成的 Cypher 查询语句进行验证和优化,可以使用 Neo4j 的 Cypher 解释器检查语句的语法和语义是否正确,对于错误或不合理的语句,使用大模型重新生成或人工修改。
六、根据输入生成 SQL 数据集
  1. 结构化数据确定

    • 确定需要使用 SQL 进行查询的数据来源,这些数据通常存储在关系型数据库中,如企业的业务数据库、数据仓库等,包含不同的表和字段,例如用户信息表、销售数据表、库存表等。
  2. SQL 语句生成

    • 使用大模型将自然语言问题转换为 SQL 语句,使用相应的提示引导大模型完成任务,例如:

    import openai
    openai.api_key = “your_api_key”
    for question in question_list:
    prompt = f"将以下自然语言问题转换为 SQL 查询:{question}"
    response = openai.Completion.create(
    engine=“text-davinci-02”,
    prompt=prompt,
    max_tokens=100
    )
    sql_query = response.choices[0].text.strip()
    # 存储自然语言问题和对应的 SQL 查询,建立映射关系

    • 对生成的 SQL 语句进行验证和优化,使用数据库的 SQL 解释器(如 MySQL 的 EXPLAIN 语句)检查语句的可行性和性能,对于错误或不合理的语句,使用大模型重新生成或人工修改。
代码解释
  • 文档切分部分
    • 使用各种工具将不同格式的文档转换为纯文本,并将长文本按段落或句子切分,方便后续处理和存储。
  • 文档向量聚簇部分
    • sentence-transformers 库加载 BGE 模型,将语料单元转换为向量表示,使用 faiss 存储向量,使用 scikit-learnKMeans 进行聚类操作,通过肘部法则确定聚类数量。
  • 知识图谱部分
    • 利用大模型进行实体和关系抽取,使用 py2neo 将提取的信息存储在 Neo4j 图数据库中,通过大模型的生成能力对知识图谱进行扩充。
  • Cypher 和 SQL 生成部分
    • 利用大模型将自然语言问题转换为 Cypher 或 SQL 语句,使用数据库的解释器对生成的语句进行验证和优化。
使用说明
  • 在使用大模型时,要根据不同的任务设计合理的提示,引导大模型准确完成任务。
  • 对于存储的数据,根据数据的特点选择合适的存储方式,如向量数据库存储向量、图数据库存储知识图谱、关系型数据库存储问题和语句映射等。
  • 对大模型的输出要进行严格的验证和优化,保证最终结果的准确性和有效性。
  • 定期更新和维护语料库,根据新的数据和领域的发展,更新聚类结果、知识图谱和生成的语句。

通过以上步骤,可以逐步构建一个功能完善的大模型语料库,为大模型在不同领域和应用场景中的使用提供全面的数据支持。
以下是一个面向数据集构建的智能体协调管理底层数据加工组件的设计,该组件可以对上述大模型语料库构建过程中的数据进行二次加工:

一、总体架构

该智能体协调管理底层数据加工组件主要由以下几个部分组成:

  • 数据输入模块:负责接收来自不同来源的原始数据,包括文档语料库、向量数据、知识图谱数据等。
  • 智能体控制器:根据数据的类型和加工需求,调度不同的加工模块进行数据的二次加工,并协调不同模块之间的工作。
  • 数据加工模块:包含多个专门的加工模块,如实体关系加工模块、聚类优化模块、Cypher/SQL 语句优化模块等,分别对不同类型的数据进行二次加工。
  • 数据存储模块:存储经过二次加工的数据,并提供数据的检索和更新功能。
  • 监控与评估模块:对加工过程和结果进行监控和评估,以便持续优化加工过程。
二、模块详细设计
数据输入模块
  • 功能

    • 从文件系统、数据库(如 MongoDB、Elasticsearch、Neo4j、MySQL 等)或外部数据源接收原始数据。
    • 对输入的数据进行格式检查和初步的预处理,确保数据的一致性和可用性。
  • 实现示例(以 Python 为例)

    import json
    import pymongo
    from neo4j import GraphDatabase

    def fetch_document_corpus():
    client = pymongo.MongoClient(“mongodb://localhost:27017/”)
    db = client[“corpus_db”]
    collection = db[“document_corpus”]
    return list(collection.find())

    def fetch_vector_data():
    # 假设向量数据存储在文件中
    with open(“vector_data.json”, “r”) as f:
    return json.load(f)

    def fetch_knowledge_graph():
    driver = GraphDatabase.driver(“bolt://localhost:7687”, auth=(“neo4j”, “password”))
    with driver.session() as session:
    result = session.run(“MATCH (n) RETURN n”)
    return [record for record in result]

    def fetch_sql_data():
    connection = pymysql.connect(
    host=“localhost”,
    user=“root”,
    password=“password”,
    database=“sql_corpus_db”
    )
    cursor = connection.cursor()
    cursor.execute(“SELECT * FROM sql_queries”)
    return cursor.fetchall()

    def fetch_cypher_data():
    driver = GraphDatabase.driver(“bolt://localhost:7687”, auth=(“neo4j”, “password”))
    with driver.session() as session:
    result = session.run(“MATCH (n:Query) RETURN n.cypher_query”)
    return [record[“cypher_query”] for record in result]

智能体控制器
  • 功能

    • 分析输入数据的类型和特征,决定调用哪些数据加工模块进行处理。
    • 协调不同加工模块的工作顺序和资源分配,确保数据的流畅加工。
    • 处理加工过程中的异常和错误,进行相应的调整和重新调度。
  • 实现示例(以 Python 为例)

    class DataProcessingAgentController:
    def init(self):
    self.processing_modules = []

    def register_module(self, module):self.processing_modules.append(module)def process_data(self, data):for module in self.processing_modules:if module.can_process(data):try:processed_data = module.process(data)self.store_data(processed_data)except Exception as e:print(f"Error processing data with module {module}: {e}")self.handle_error(module, data)def store_data(self, data):# 调用数据存储模块存储数据passdef handle_error(self, module, data):# 处理异常,可能重新调度模块或调整数据处理流程pass
    
数据加工模块
实体关系加工模块
  • 功能

    • 对于从大模型中提取的实体和关系数据,进行进一步的清理、验证和优化。
    • 利用外部知识资源或规则,对实体和关系进行补充和完善。
    • 解决实体和关系中的歧义或错误信息。
  • 实现示例(以 Python 为例)

    class EntityRelationProcessingModule:
    def can_process(self, data):
    # 判断数据是否为实体和关系数据
    return “entities” in data and “relations” in data

    def process(self, data):entities = data["entities"]relations = data["relations"]# 进行实体和关系的优化处理optimized_entities = self.optimize_entities(entities)optimized_relations = self.optimize_relations(relations)return {"entities": optimized_entities, "relations": optimized_relations}def optimize_entities(self, entities):# 对实体进行清理和优化,例如去除重复、添加语义信息等cleaned_entities = []seen_entities = set()for entity in entities:if entity["name"] not in seen_entities:seen_entities.add(entity["name"])cleaned_entities.append(entity)return cleaned_entitiesdef optimize_relations(self, relations):# 对关系进行清理和优化,例如去除错误关系、添加缺失关系等optimized_relations = []for relation in relations:if self.is_valid_relation(relation):optimized_relations.append(relation)return optimized_relationsdef is_valid_relation(self, relation):# 检查关系的有效性,例如检查源节点和目标节点是否存在等return True
    
聚类优化模块
  • 功能

    • 对基于文档向量的聚类结果进行优化,提高聚类的质量。
    • 利用新的数据和算法对聚类结果进行更新和调整。
  • 实现示例(以 Python 为例)

    from sklearn.cluster import KMeans
    import numpy as np

    class ClusteringOptimizationModule:
    def can_process(self, data):
    # 判断数据是否为聚类数据
    return “cluster_labels” in data and “vectors” in data

    def process(self, data):vectors = np.array(data["vectors"])cluster_labels = data["cluster_labels"]# 使用新的聚类算法或参数进行优化optimized_clusters = self.recluster(vectors, cluster_labels)return {"cluster_labels": optimized_clusters, "vectors": vectors}def recluster(self, vectors, cluster_labels):# 使用 K-Means 重新聚类kmeans = KMeans(n_clusters=len(set(cluster_labels)), random_state=0).fit(vectors)return kmeans.labels_
    
Cypher/SQL 语句优化模块
  • 功能

    • 对大模型生成的 Cypher 和 SQL 语句进行语法检查和优化。
    • 根据知识图谱和数据库结构,对语句进行性能优化。
    • 利用专家规则和历史执行数据,对语句进行调整和改进。
  • 实现示例(以 Python 为例)

    class CypherSQLStatementOptimizationModule:
    def can_process(self, data):
    # 判断数据是否为 Cypher 或 SQL 语句
    return “cypher_queries” in data or “sql_queries” in data

    def process(self, data):if "cypher_queries" in data:optimized_cypher = self.optimize_cypher(data["cypher_queries"])data["cypher_queries"] = optimized_cypherif "sql_queries" in data:optimized_sql = self.optimize_sql(data["sql_queries"])data["sql_queries"] = optimized_sqlreturn datadef optimize_cypher(self, cypher_queries):optimized_queries = []for query in cypher_queries:# 进行 Cypher 语句的优化,例如添加索引建议等optimized_query = self.syntax_check_cypher(query)optimized_queries.append(optimized_query)return optimized_queriesdef optimize_sql(self, sql_queries):optimized_queries = []for query in sql_queries:# 进行 SQL 语句的优化,例如添加索引建议等optimized_query = self.syntax_check_sql(query)optimized_queries.append(optimized_query)return optimized_queriesdef syntax_check_cypher(self, query):# 使用 Neo4j 的解释器进行语法检查和优化return querydef syntax_check_sql(self, query):# 使用数据库的 SQL 解释器进行语法检查和优化return query
    
数据存储模块
  • 功能

    • 将经过二次加工的数据存储到相应的存储系统中,如更新文档语料库、更新知识图谱、存储优化后的 Cypher 和 SQL 语句等。
  • 实现示例(以 Python 为例)

    def store_document_corpus(corpus):
    client = pymongo.MongoClient(“mongodb://localhost:27017/”)
    db = client[“corpus_db”]
    collection = db[“document_corpus”]
    collection.insert_many(corpus)

    def store_knowledge_graph(entities, relations):
    driver = GraphDatabase.driver(“bolt://localhost:7687”, auth=(“neo4j”, “password”))
    with driver.session() as session:
    for entity in entities:
    session.run(“CREATE (e:Entity {name: $name, properties: $properties})”,
    name=entity[“name”], properties=entity.get(“properties”, {}))
    for relation in relations:
    session.run("MATCH (a:Entity {name: $source}), (b:Entity {name: $target}) "
    “CREATE (a)-[r:RELATION {type: $type}]->(b)”,
    source=relation[“source”], target=relation[“target”], type=relation[“type”])

    def store_sql_queries(queries):
    connection = pymysql.connect(
    host=“localhost”,
    user=“root”,
    password=“password”,
    database=“sql_corpus_db”
    )
    cursor = connection.cursor()
    for query in queries:
    cursor.execute(“INSERT INTO optimized_sql_queries (query) VALUES (%s)”, (query,))
    connection.commit()

    def store_cypher_queries(queries):
    driver = GraphDatabase.driver(“bolt://localhost:7687”, auth=(“neo4j”, “password”))
    with driver.session() as session:
    for query in queries:
    session.run(“CREATE (q:Query {cypher_query: $query})”, query=query)

监控与评估模块
  • 功能

    • 监控数据加工过程中的关键指标,如加工时间、加工成功率、错误率等。
    • 对加工结果进行评估,如聚类质量评估、语句执行性能评估等。
    • 根据评估结果,为智能体控制器提供优化建议。
  • 实现示例(以 Python 为例)

    import time

    class MonitoringEvaluationModule:
    def start_monitoring(self, start_time):
    end_time = time.time()
    processing_time = end_time - start_time
    print(f"Processing time: {processing_time}")

    def evaluate_clustering(self, cluster_labels, vectors):# 使用轮廓系数等指标评估聚类质量passdef evaluate_statements(self, statements, execution_results):# 根据执行结果评估语句性能pass
    
三、组件使用示例
# 初始化智能体控制器
controller = DataProcessingAgentController()# 注册数据加工模块
controller.register_module(EntityRelationProcessingModule())
controller.register_module(ClusteringOptimizationModule())
controller.register_module(CypherSQLStatementOptimizationModule())# 从不同来源获取数据
document_corpus = fetch_document_corpus()
vector_data = fetch_vector_data()
knowledge_graph = fetch_knowledge_graph()
sql_data = fetch_sql_data()
cypher_data = fetch_cypher_data()# 对数据进行处理
controller.process_data({"document_corpus": document_corpus})
controller.process_data({"vector_data": vector_data})
controller.process_data({"knowledge_graph": knowledge_graph})
controller.process_data({"sql_data": sql_data})
controller.process_data({"cypher_data": cypher_data})
代码解释
  • 数据输入模块

    • 包含多个函数,用于从不同的数据源(如 MongoDB、Neo4j、文件系统等)获取不同类型的数据,为后续的加工处理提供原始数据。
  • 智能体控制器

    • DataProcessingAgentController 类负责协调各个数据加工模块,根据数据类型调度相应的模块进行处理,并处理异常情况和存储结果。
  • 数据加工模块

    • 每个加工模块都有 can_process 方法,用于判断是否可以处理该类型的数据,process 方法用于实际的数据加工操作。
    • EntityRelationProcessingModule 对实体和关系数据进行清理和优化,确保数据的质量和准确性。
    • ClusteringOptimizationModule 对聚类结果进行重新聚类或优化,提高聚类的效果。
    • CypherSQLStatementOptimizationModule 对 Cypher 和 SQL 语句进行语法和性能优化。
  • 数据存储模块

    • 不同的存储函数将经过二次加工的数据存储到相应的存储系统中,确保数据的更新和持久化。
  • 监控与评估模块

    • 对加工过程和结果进行监控和评估,为整个加工过程的优化提供依据。
使用说明
  • 在使用该组件时,首先要确保各个数据源的连接信息(如数据库地址、用户名、密码等)正确配置。
  • 根据需要添加或修改数据加工模块,以适应不同的数据和加工需求。
  • 对于存储模块,根据实际的存储系统和数据结构,调整存储函数的实现细节。
  • 监控和评估模块可以根据具体的评估指标和业务需求进行细化和扩展,以更好地指导加工过程的优化。

通过这样的智能体协调管理底层数据加工组件,可以对大模型语料库构建过程中的数据进行全面、系统的二次加工,提高数据的质量和可用性,为大模型的训练和应用提供更好的数据支持。


http://www.ppmy.cn/ops/154912.html

相关文章

STM32完全学习——RT-thread在STM32F407上移植

一、写在前面 关于源码的下载,以及在KEIL工程里面添加操作系统的源代码,这里就不再赘述了。需要注意的是RT-thread默认里面是会使用串口的,因此需要额外的进行串口的初始化,有些人可能会问,为什么不直接使用CubMAX直接…

【协议详解】卫星通信5G IoT NTN SIB32-NB 信令详解

一、SIB32信令概述 低轨卫星的移动性会导致地面用户设备覆盖不连续,为了解决这一问题,3GPP引入了SystemInformationBlockType32(SIB32)信令,为非连续覆盖预测提供卫星辅助信息。地面设备可以基于SIB32信令中的信息&am…

【matlab】绘图 离散数据--->连续函数

matlab绘图练习 离散数据及离散函数对离散区间进行细划分 达到连续效果画plot(y)图 与 复数的应用 离散数据及离散函数 例1 x1[1 2 4 6 7 8 10 11 12 14 16 17 18 20] y1[1 2 4 6 7 8 10 10 8 7 6 4 2 1] figure(1); plot(x1,y1,o,MarkerSize,15); x21:20; y2log(x2); figure…

【矩阵二分】力扣378. 有序矩阵中第 K 小的元素

给你一个 n x n 矩阵 matrix ,其中每行和每列元素均按升序排序,找到矩阵中第 k 小的元素。 请注意,它是 排序后 的第 k 小元素,而不是第 k 个 不同 的元素。 你必须找到一个内存复杂度优于 O(n2) 的解决方案。 示例 1&#xff1…

使用PyTorch实现逻辑回归:从训练到模型保存与加载

1. 引入必要的库 首先,需要引入必要的库。PyTorch用于构建和训练模型,pandas和numpy用于数据处理,matplotlib用于结果的可视化。 import torch import torch.nn as nn import torch.optim as optim from torch.utils.data import DataLoade…

CSS关系选择器详解

CSS关系选择器详解 学习前提什么是关系选择器?后代选择器(Descendant Combinator)语法示例注意事项 子代选择器(Child Combinator)语法示例注意事项 邻接兄弟选择器(Adjacent Sibling Combinator&#xff0…

双指针c++

双指针(Two Pointers)是一种常用的算法技巧,通常用于解决数组或链表中的问题,如滑动窗口、区间合并、有序数组的两数之和等。双指针的核心思想是通过两个指针的移动来优化时间复杂度,通常可以将 (O(n^2)) 的暴力解法优…

Titans 架构下MAC变体的探究

目前业界流行的 Transformer 模型架构虽然在大多数场景表现优秀,但其上下文窗口(Window)长度的限制,通常仅为几千到几万个 Token,这使得它们在处理长文本、多轮对话或需要大规模上下文记忆的任务中,往往无法…