标签: AGI

  • 玩转大型语言模型:从训练到构建有趣应用

    近年来,大型语言模型(LLM)在自然语言处理领域取得了突破性进展,为我们带来了前所未有的可能性。本文将带您深入了解LLM,从训练、评估到构建有趣应用,让您也能轻松玩转这些强大的工具。

    训练与评估大型语言模型

    训练大型语言模型是一个复杂的过程,需要大量的数据和计算资源。为了让模型更好地理解和生成文本,我们通常需要进行以下步骤:

    • 预训练: 在海量文本数据上训练模型,使其学习语言的语法和语义。
    • 微调: 使用特定任务的数据对模型进行微调,使其更适合特定应用场景。
    • 评估: 使用各种指标评估模型的性能,例如准确率、召回率、困惑度等。

    本项目中,您可以找到多种训练和评估LLM的方法,例如:

    • 使用QLORA对Baichuan-7B进行微调: QLORA是一种高效的微调方法,可以显著降低训练成本。
    • 使用Llama3-8b-Instruct进行多种方法的调戏: 包括transformers、vLLM和Llamacpp等,让您体验不同的LLM调用方式。
    • 使用DPO微调Chinese-Llama3-8b: 使模型更愿意说中文,提高中文语言能力。

    基于RAG、Agent、Chain构建有趣应用

    除了训练和评估LLM,我们还可以利用它们构建各种有趣的应用。本项目提供了以下几种方法:

    • 检索增强生成(RAG): 将LLM与外部知识库结合,利用知识库中的信息来生成更准确、更丰富的文本。
    • Agent: 将LLM与其他工具结合,例如搜索引擎、数据库等,使其能够执行更复杂的任务。
    • Chain: 将多个LLM或工具链接在一起,形成一个完整的流程,完成更复杂的任务。

    以下是一些有趣的LLM应用案例:

    • Mistral 8x7b ReAct: 利用ReAct框架,让LLM能够根据上下文进行推理和行动,例如调用工具、查询数据库等。
    • Llama3-8b ReAct: 使用Llama3-8b模型,实现纯中文的ReAct框架,并提供工具调用功能。

    深入LLMs:预训练、微调、RLHF和更多

    除了上述内容,本项目还涵盖了更深入的LLM知识,例如:

    • 预训练: 了解LLM的预训练过程,包括数据准备、模型架构、训练方法等。
    • 微调: 学习如何使用不同方法对LLM进行微调,使其更适合特定任务。
    • 强化学习与人类反馈(RLHF): 了解如何使用RLHF来提高LLM的对话能力和安全性。

    总结

    本项目为我们提供了一个学习和探索LLM的宝贵资源,从基础知识到应用案例,涵盖了LLM的方方面面。通过学习和实践,您可以掌握LLM的强大能力,并将其应用于各种领域,创造更多有趣的应用。

    参考文献

  • 深度知识感知网络:新闻推荐的新纪元

    深度知识感知网络:新闻推荐的新纪元

    近年来,新闻推荐领域蓬勃发展,各种深度学习模型层出不穷。然而,传统的推荐系统往往只关注用户历史行为,忽略了新闻内容本身的语义信息和知识关联。为了解决这个问题,深度知识感知网络 (DKN) 应运而生,它将知识图谱融入到深度学习框架中,为新闻推荐带来了新的突破。

    DKN:将知识图谱与深度学习完美结合

    DKN 是一种深度学习模型,它利用知识图谱来增强新闻推荐的准确性。具体来说,DKN 使用 TransX 方法来学习知识图谱的表示,然后应用一个名为 KCNN 的卷积神经网络框架,将实体嵌入与词嵌入结合起来,生成新闻文章的最终嵌入向量。最后,通过一个基于注意力的神经评分器来预测点击率 (CTR)。

    DKN 的独特优势

    与传统的基于 ID 的协同过滤方法不同,DKN 是一种基于内容的深度模型,它能够更深入地理解新闻内容。通过联合学习新闻文章的语义级和知识级表示,DKN 能够充分利用新闻内容中的知识实体和常识。此外,DKN 还使用了一个注意力模块,能够动态计算用户的历史行为的聚合表示,从而更好地捕捉用户的兴趣偏好。

    DKN 数据格式

    DKN 需要以下几个文件作为输入:

    • 训练/验证/测试文件: 每一行代表一个样本。印象 ID 用于评估印象会话内的性能,因此只在评估时使用,训练数据可以设置为 0。格式为:<label> <userid> <CandidateNews>%<impressionid>,例如:1 train_U1 N1%0
    • 用户历史文件: 每一行代表一个用户的点击历史。需要在配置文件中设置 his_size 参数,它代表我们使用的用户点击历史的最大数量。如果用户的点击历史超过 his_size,我们将自动保留最后 his_size 个点击历史,如果用户的点击历史少于 his_size,我们将自动用 0 进行填充。格式为:<Userid> <newsid1,newsid2...>,例如:train_U1 N1,N2
    • 文档特征文件: 该文件包含新闻的词语和实体特征。新闻文章由(对齐的)标题词和标题实体表示。例如,一个新闻标题可能是:特朗普将在下周发表国情咨文,那么标题词值可能是:CandidateNews:34,45,334,23,12,987,3456,111,456,432,标题实体值可能是:entity:45,0,0,0,0,0,0,0,0,0。由于 “特朗普” 这个词,只有实体向量的第一个值是非零的。标题值和实体值是从 1 到 n(n 是不同词语或实体的数量)进行哈希的。每个特征长度应该固定为 k(doc_size 参数),如果文档中的词语数量超过 k,则应该截断文档到 k 个词语,如果文档中的词语数量少于 k,则应该在末尾填充 0。格式为:<Newsid> <w1,w2,w3...wk> <e1,e2,e3...ek>
    • 词嵌入/实体嵌入/上下文嵌入文件: 这些是预训练嵌入的 npy 文件。加载后,每个文件都是一个 [n+1,k] 的二维矩阵,n 是其哈希字典中的词语(或实体)数量,k 是嵌入的维度,注意我们保留嵌入 0 用于零填充。在本实验中,我们使用 GloVe 向量来初始化词嵌入。我们使用 TransE 在知识图谱上训练实体嵌入,上下文嵌入是知识图谱中实体邻居的平均值。

    DKN 模型训练与评估

    首先,我们需要创建超参数,并使用 DKNTextIterator 类来创建输入数据。然后,我们可以使用 DKN 类来创建模型并进行训练。训练完成后,我们可以使用 run_eval 方法来评估模型在验证集上的性能。

    epoch=5
    hparams = prepare_hparams(yaml_file,
                              news_feature_file = news_feature_file,
                              user_history_file = user_history_file,
                              wordEmb_file=wordEmb_file,
                              entityEmb_file=entityEmb_file,
                              contextEmb_file=contextEmb_file,
                              epochs=epoch,
                              is_clip_norm=True,
                              max_grad_norm=0.5,
                              history_size=20,
                              MODEL_DIR=os.path.join(data_path, 'save_models'),
                              learning_rate=0.001,
                              embed_l2=0.0,
                              layer_l2=0.0,
                              use_entity=True,
                              use_context=True
                             )
    print(hparams.values())
    
    input_creator = DKNTextIterator
    
    model = DKN(hparams, input_creator)
    
    model.fit(train_file, valid_file)
    
    print(model.run_eval(test_file))

    DKN 性能对比

    以下表格展示了 DKN 与其他模型在新闻推荐任务上的性能对比:

    模型Group-AUCMRRNDCG@2NDCG@4
    DKN0.95570.89930.89510.9123
    DKN(-)0.95060.88170.87580.8982
    LightGCN0.86080.56050.49750.5792

    结果表明,DKN 在所有指标上都显著优于其他模型,证明了知识图谱在新闻推荐中的重要作用。

    总结

    DKN 是一种强大的深度学习模型,它将知识图谱与深度学习框架完美结合,为新闻推荐带来了新的突破。它能够更深入地理解新闻内容,并有效地捕捉用户的兴趣偏好,从而提高新闻推荐的准确性和效率。

    参考文献

    [1] Wang, Hongwei, et al. “DKN: Deep Knowledge-Aware Network for News Recommendation.” Proceedings of the 2018 World Wide Web Conference on World Wide Web. International World Wide Web Conferences Steering Committee, 2018.

  • 为新闻推荐系统预训练词向量和实体向量

    新闻推荐系统近年来发展迅速,其中一个重要的技术突破是深度知识感知网络 (DKN) 的出现。DKN 能够利用知识图谱 (KG) 中的实体信息来增强新闻推荐的准确性。为了训练 DKN 模型,我们需要预先训练词向量和实体向量,本文将介绍如何使用 Word2Vec 和 TransE 模型来完成这一任务。

    用 Word2Vec 训练词向量

    Word2Vec 是一种常用的词向量训练模型,它能够将词语映射到一个高维向量空间中,并学习到词语之间的语义关系。在 DKN 中,我们需要将新闻标题和文本中的词语转换为向量表示,以便模型能够理解文本内容。

    我们可以使用 Gensim 库中的 Word2Vec 模型来训练词向量。Gensim 提供了简单易用的接口,可以方便地加载文本数据并训练模型。

    from gensim.test.utils import common_texts, get_tmpfile
    from gensim.models import Word2Vec
    import time
    from utils.general import *
    import numpy as np
    import pickle
    from utils.task_helper import *

    首先,我们定义一个类 MySentenceCollection 来读取新闻文本数据。该类实现了迭代器接口,可以逐行读取文本文件并将其转换为词语列表。

    class MySentenceCollection:
        def __init__(self, filename):
            self.filename = filename
            self.rd = None
    
        def __iter__(self):
            self.rd = open(self.filename, 'r', encoding='utf-8', newline='\\r\\n')
            return self
    
        def __next__(self):
            line = self.rd.readline()
            if line:
                return list(line.strip('\\r\\n').split(' '))
            else:
                self.rd.close()
                raise StopIteration

    接下来,我们定义一个函数 train_word2vec 来训练 Word2Vec 模型。该函数接受新闻文本文件路径和输出目录作为参数,并保存训练好的模型文件。

    def train_word2vec(Path_sentences, OutFile_dir):     
        OutFile_word2vec = os.path.join(OutFile_dir, r'word2vec.model')
        OutFile_word2vec_txt = os.path.join(OutFile_dir, r'word2vec.txt')
        create_dir(OutFile_dir)
    
        print('start to train word embedding...', end=' ')
        my_sentences = MySentenceCollection(Path_sentences)
        model = Word2Vec(my_sentences, size=32, window=5, min_count=1, workers=8, iter=10) # user more epochs for better accuracy
    
        model.save(OutFile_word2vec)
        model.wv.save_word2vec_format(OutFile_word2vec_txt, binary=False)
        print('\\tdone . ')
    
    Path_sentences = os.path.join(InFile_dir, 'sentence.txt')
    
    t0 = time.time()
    train_word2vec(Path_sentences, OutFile_dir)
    t1 = time.time()
    print('time elapses: {0:.1f}s'.format(t1 - t0))

    用 TransE 训练实体向量

    知识图谱 (KG) 由实体和关系组成,可以用来表示世界上的各种知识。在 DKN 中,我们可以利用 KG 中的实体信息来增强新闻推荐的准确性。为了将 KG 中的实体信息融入到 DKN 模型中,我们需要将实体映射到向量空间中,即训练实体向量。

    TransE 是一种常用的知识图谱嵌入模型,它能够将实体和关系映射到同一个向量空间中,并学习到实体和关系之间的语义关系。我们可以使用开源的 Fast-TransX 库来训练 TransE 模型。

    !bash ./run_transE.sh

    构建上下文向量

    DKN 模型不仅需要考虑实体本身的向量表示,还需要考虑实体的上下文信息。例如,同一个实体在不同的新闻中可能具有不同的含义。为了捕捉这种上下文信息,我们需要构建上下文向量。

    我们可以利用 KG 中的实体关系来构建上下文向量。例如,对于一个实体,我们可以将所有与它相关的实体的向量加权平均,得到该实体的上下文向量。

    ##### build context embedding
    EMBEDDING_LENGTH = 32
    entity_file = os.path.join(OutFile_dir_KG, 'entity2vec.vec') 
    context_file = os.path.join(OutFile_dir_KG, 'context2vec.vec')   
    kg_file = os.path.join(OutFile_dir_KG, 'train2id.txt')   
    gen_context_embedding(entity_file, context_file, kg_file, dim=EMBEDDING_LENGTH)

    加载预训练向量

    最后,我们需要将训练好的词向量和实体向量加载到 DKN 模型中。

    load_np_from_txt(
            os.path.join(OutFile_dir_KG, 'entity2vec.vec'),
            os.path.join(OutFile_dir_DKN, 'entity_embedding.npy'),
        )
    load_np_from_txt(
            os.path.join(OutFile_dir_KG, 'context2vec.vec'),
            os.path.join(OutFile_dir_DKN, 'context_embedding.npy'),
        )
    format_word_embeddings(
        os.path.join(OutFile_dir, 'word2vec.txt'),
        os.path.join(InFile_dir, 'word2idx.pkl'),
        os.path.join(OutFile_dir_DKN, 'word_embedding.npy')
    )

    参考文献

    1. Wang, Hongwei, et al. “DKN: Deep Knowledge-Aware Network for News Recommendation.” Proceedings of the 2018 World Wide Web Conference on World Wide Web. International World Wide Web Conferences Steering Committee, 2018.
    2. Knowledge Graph Embeddings including TransE, TransH, TransR and PTransE. https://github.com/thunlp/KB2E
    3. GloVe: Global Vectors for Word Representation. https://nlp.stanford.edu/projects/glove/
    4. Tomas Mikolov, Ilya Sutskever, Kai Chen, Greg Corrado, and Jeffrey Dean. 2013. Distributed representations of words and phrases and their compositionality. In Proceedings of the 26th International Conference on Neural Information Processing Systems – Volume 2 (NIPS’13). Curran Associates Inc., Red Hook, NY, USA, 3111–3119.
    5. Gensim Word2vec embeddings : https://radimrehurek.com/gensim/models/word2vec.html
  • 从 MAG 数据集构建 DKN 模型训练数据

    这篇文章将带你了解如何从 MAG (Microsoft Academic Graph) 数据集构建 DKN (Deep Knowledge-aware Network) 模型的训练数据。DKN 是一种用于推荐系统的深度学习模型,它可以利用知识图谱来提升推荐效果。

    数据准备:论文相关文件

    首先,我们需要准备论文相关文件。在 DKN 中,论文数据格式如下:

    [Newsid] [w1,w2,w3...wk] [e1,e2,e3...ek]

    其中,Newsid 代表论文的 ID,w1,w2,w3...wk 代表论文中每个词的索引,e1,e2,e3...ek 代表论文中每个实体的索引。词和实体是相互对应的。

    例如,一篇论文的标题为:

    One Health approach in the South East Asia region: opportunities and challenges

    那么,标题词的索引可以是:

    101,56,23,14,1,69,256,887,365,32,11,567

    标题实体的索引可以是:

    10,10,0,0,0,45,45,45,0,0,0,0

    前两个实体索引为 10,表示这两个词对应同一个实体。词和实体的索引是从 1 到 n 和 m 进行哈希的,其中 n 和 m 分别代表不同词和实体的数量。

    构建论文特征文件

    1. 词和实体哈希:首先,我们需要对词和实体进行哈希,将每个词和实体映射到一个唯一的索引。
    2. 论文内容表示:为了简化,在本教程中,我们只使用论文标题来表示论文内容。当然,你也可以使用论文摘要和正文来更全面地表示论文内容。
    3. 特征长度固定:每个论文特征的长度应该固定为 k (max_word_size_per_paper)。如果论文中的词数超过 k,我们将截断论文,只保留前 k 个词。如果词数少于 k,我们将用 0 填充到 k 个词。

    构建知识图谱文件

    接下来,我们需要构建知识图谱文件。知识图谱由三元组组成,每个三元组表示一个事实:

    head, tail, relation

    例如,一个三元组可以表示:

    "COVID-19", "Respiratory disease", "is_a"

    表示 COVID-19 是一种呼吸道疾病。

    构建用户相关文件

    接下来,我们需要准备用户相关文件。我们的第一个任务是用户到论文的推荐。对于每个用户,我们收集他/她引用的所有论文,并按时间顺序排列。然后,推荐任务可以被描述为:给定用户的引用历史,预测他/她将来会引用哪些论文。

    构建 DKN 训练数据文件

    DKN 模型需要以下几个文件作为输入:

    • 训练/验证/测试文件:每个文件中的每一行代表一个实例。Impressionid 用于评估一个印象会话内的性能,因此它只在评估时使用,在训练数据中可以设置为 0。格式如下:
    [label] [userid] [CandidateNews]%[impressionid]

    例如:

    1 train_U1 N1%0
    • 用户历史文件:每个文件中的每一行代表一个用户的引用历史。你需要在配置文件中设置 his_size 参数,该参数表示我们使用的用户点击历史的最大数量。如果用户的点击历史超过 his_size,我们将自动保留最后 his_size 个用户的点击历史。如果用户的点击历史少于 his_size,我们将自动用 0 填充到 his_size 个。格式如下:
    [Userid] [newsid1,newsid2...]

    例如:

    train_U1 N1,N2

    DKN 将推荐任务视为一个二元分类问题。我们根据项目的流行度对负样本进行采样。

    构建 item-to-item 推荐数据集

    我们的第二个推荐场景是关于 item-to-item 推荐。给定一篇论文,我们可以推荐一系列相关的论文供用户引用。

    这里我们使用监督学习方法来训练这个模型。每个实例是一个 的元组。Label = 1 表示这对论文高度相关;否则 label 将为 0。

    正样本的构建方式如下:

    1. 论文 A 和 B 在它们的引用列表中有很多重叠;
    2. 论文 A 和 B 被许多其他论文共同引用;
    3. 论文 A 和 B 由同一个作者(第一作者)在 12 个月内发表。

    总结

    本文介绍了如何从 MAG 数据集构建 DKN 模型的训练数据。通过对论文、知识图谱和用户行为数据的处理,我们可以生成 DKN 模型所需的训练数据,并进一步进行模型训练和评估。

    参考文献

  • 个性化推荐中的子图挖掘:让推荐更懂你

    你是否曾经在电商平台上浏览过一件商品,却迟迟没有下手?然后,你发现首页推荐里出现了类似的商品,甚至还有一些你可能感兴趣的周边产品?这背后,正是推荐系统利用了子图挖掘技术,它能从用户行为数据中找到隐藏的关联关系,从而实现更精准的个性化推荐。

    本文将带你深入了解子图挖掘在推荐系统中的应用,并以 KDD 2020 年教程为例,解析如何利用 Pandas 和 NetworkX 库进行子图提取和分析。

    子图挖掘:从用户行为中发现宝藏

    传统的推荐系统往往只关注用户与商品之间的直接交互关系,例如购买记录、浏览记录等。然而,用户行为数据中蕴藏着更丰富的信息,例如用户对不同商品的偏好程度、用户之间的社交关系等等。子图挖掘技术可以帮助我们从这些复杂的数据中提取出有价值的子图,从而更好地理解用户行为,并为推荐系统提供更精准的依据。

    举个例子:假设一位用户购买了篮球鞋,并浏览了篮球服和篮球训练视频。通过子图挖掘,我们可以发现这位用户对篮球运动有着浓厚的兴趣,并推荐他可能感兴趣的篮球装备、比赛直播等信息。

    Pandas 和 NetworkX:高效的子图挖掘工具

    在 Python 中,Pandas 和 NetworkX 库为我们提供了强大的子图挖掘工具。

    • Pandas 擅长处理表格数据,可以方便地将用户行为数据转换为图结构。
    • NetworkX 提供了丰富的图操作函数,可以用于子图提取、分析和可视化。

    KDD 2020 年教程中,作者展示了如何利用 Pandas 和 NetworkX 库提取用户行为子图。

    1. 数据准备

    首先,我们将用户行为数据存储在 Pandas DataFrame 中,并将其转换为 NetworkX 图结构。

    import pandas as pd
    import networkx as nx
    
    # 读取用户行为数据
    interactions = pd.read_csv("interactions.csv")
    
    # 创建 NetworkX 图
    G = nx.from_pandas_edgelist(interactions, source="user_id", target="item_id")

    2. 子图提取

    接下来,我们可以利用 NetworkX 的 ego_graph 函数提取以特定用户为中心的子图。

    # 提取以用户 1 为中心的子图
    ego_graph = nx.ego_graph(G, 1, radius=2)
    
    # 打印子图节点和边
    print(ego_graph.nodes())
    print(ego_graph.edges())

    3. 子图分析

    我们可以对提取的子图进行进一步分析,例如计算节点度、中心性等指标,以更好地理解用户行为。

    # 计算子图节点度
    degrees = dict(ego_graph.degree())
    print(degrees)
    
    # 计算子图节点中心性
    centrality = nx.degree_centrality(ego_graph)
    print(centrality)

    4. 子图可视化

    最后,我们可以利用 NetworkX 的 draw 函数将子图可视化,以便更好地理解用户行为和推荐策略。

    # 可视化子图
    nx.draw(ego_graph, with_labels=True)
    plt.show()

    子图挖掘:推荐系统的未来

    子图挖掘技术为推荐系统提供了更精准、更个性化的解决方案。它可以帮助我们更好地理解用户行为,并为用户提供更符合其兴趣和需求的推荐。

    随着数据量的不断增长和算法的不断发展,子图挖掘技术将在推荐系统中发挥越来越重要的作用。未来,我们将看到更多基于子图挖掘的推荐系统,为用户提供更智能、更便捷的体验。

    参考文献

  • 使用 Pandas 进行子图抽样:本地示例


    本笔记本展示了如何使用 Pandas 在本地进行子图抽样。我们将通过一个示例数据集来演示这一过程。

    1. 导入必要的库

    首先,我们需要导入必要的 Python 库:

    import pandas as pd
    import numpy as np
    import networkx as nx
    import matplotlib.pyplot as plt

    2. 创建示例数据集

    我们将创建一个简单的图数据集来演示子图抽样过程。

    # 创建节点列表
    nodes = pd.DataFrame({
        'node_id': [1, 2, 3, 4, 5, 6],
        'feature': ['A', 'B', 'C', 'D', 'E', 'F']
    })
    
    # 创建边列表
    edges = pd.DataFrame({
        'source': [1, 1, 2, 3, 4, 5],
        'target': [2, 3, 4, 5, 6, 1],
        'weight': [1.0, 2.0, 1.0, 3.0, 1.0, 4.0]
    })
    
    print("节点列表:")
    print(nodes)
    
    print("\n边列表:")
    print(edges)

    输出:

    节点列表:
       node_id feature
    0        1       A
    1        2       B
    2        3       C
    3        4       D
    4        5       E
    5        6       F
    
    边列表:
       source  target  weight
    0       1       2     1.0
    1       1       3     2.0
    2       2       4     1.0
    3       3       5     3.0
    4       4       6     1.0
    5       5       1     4.0

    3. 创建网络图

    使用 NetworkX 创建一个网络图。

    # 初始化图
    G = nx.Graph()
    
    # 添加节点和特征
    for _, row in nodes.iterrows():
        G.add_node(row['node_id'], feature=row['feature'])
    
    # 添加边和权重
    for _, row in edges.iterrows():
        G.add_edge(row['source'], row['target'], weight=row['weight'])
    
    # 绘制图
    pos = nx.spring_layout(G)
    nx.draw(G, pos, with_labels=True, node_color='lightblue', edge_color='gray', node_size=500, font_size=15)
    labels = nx.get_edge_attributes(G, 'weight')
    nx.draw_networkx_edge_labels(G, pos, edge_labels=labels)
    
    plt.title("示例网络图")
    plt.show()

    4. 进行子图抽样

    现在,我们将从图中抽样一个子图。我们将选择一个起始节点,并递归地选择与其相连的节点,直到达到预定的子图大小。

    def sample_subgraph(G, start_node, sample_size):
        nodes_to_visit = [start_node]
        visited_nodes = set()
    
        while nodes_to_visit and len(visited_nodes) < sample_size:
            current_node = nodes_to_visit.pop(0)
            if current_node not in visited_nodes:
                visited_nodes.add(current_node)
                neighbors = list(G.neighbors(current_node))
                nodes_to_visit.extend(neighbors)
    
        subgraph = G.subgraph(visited_nodes)
        return subgraph
    
    # 抽样子图
    start_node = 1
    sample_size = 4
    subgraph = sample_subgraph(G, start_node, sample_size)
    
    # 绘制子图
    pos = nx.spring_layout(subgraph)
    nx.draw(subgraph, pos, with_labels=True, node_color='lightgreen', edge_color='gray', node_size=500, font_size=15)
    labels = nx.get_edge_attributes(subgraph, 'weight')
    nx.draw_networkx_edge_labels(subgraph, pos, edge_labels=labels)
    
    plt.title("抽样子图")
    plt.show()

    5. 分析子图

    我们可以对抽样得到的子图进行进一步的分析,比如计算子图中节点的度数分布。

    “`python

    计算子图中节点的度数分布

    degree_distribution = pd.DataFrame(subgraph.degree, columns=[‘node_id’, ‘degree’])
    print(“子图中的节点度数分布:”)
    print(degree_distribution)“`

    输出:

    子图中的节点度数分布:
    node_id degree
    0 1 2
    1 2 2
    2 3 1
    3 4 1

    ## 6. 保存和加载子图
    
    为了方便以后的分析,我们可以将子图保存到文件中,并在需要时重新加载。
    
    ### 保存子图
    
    我们可以使用 NetworkX 提供的函数将子图保存为图文件格式(如 GML 或 GraphML)。

    python

    保存子图为 GML 格式

    nx.write_gml(subgraph, “subgraph.gml”)
    print(“子图已保存为 subgraph.gml”)

    ### 加载子图
    
    我们可以使用相应的函数从文件中加载保存的子图。

    python

    从 GML 文件加载子图

    loaded_subgraph = nx.read_gml(“subgraph.gml”)
    print(“子图已从 subgraph.gml 加载”)

    绘制加载的子图

    pos = nx.spring_layout(loaded_subgraph)
    nx.draw(loaded_subgraph, pos, with_labels=True, node_color=’lightcoral’, edge_color=’gray’, node_size=500, font_size=15)
    labels = nx.get_edge_attributes(loaded_subgraph, ‘weight’)
    nx.draw_networkx_edge_labels(loaded_subgraph, pos, edge_labels=labels)

    plt.title(“加载的子图”)
    plt.show()
    “`

    7. 结论

    在本教程中,我们展示了如何使用 Pandas 和 NetworkX 在本地进行子图抽样。我们通过一个简单的示例数据集展示了从数据加载、图创建、子图抽样到子图分析的完整过程。希望这些内容对您理解和应用子图抽样有所帮助。

    参考资料

    [1] NetworkX Documentation: https://networkx.github.io/documentation/stable/

    [2] Pandas Documentation: https://pandas.pydata.org/pandas-docs/stable/

    [3] Matplotlib Documentation: https://matplotlib.org/stable/contents.html


    通过以上步骤,您应该能够成功地在本地进行子图抽样并进行相应的分析。希望这个示例能够帮助您更好地理解和应用子图抽样技术。

  • xDeepFM : 极端深度因子分解机

    本笔记本将提供一个如何训练 xDeepFM 模型 的快速示例。
    xDeepFM [1] 是一个基于深度学习的模型,旨在捕捉低阶和高阶特征交互,以实现精确的推荐系统。因此,它可以更有效地学习特征交互,并且可以显著减少手工特征工程的工作量。总结来说,xDeepFM 具有以下关键特性:

    • 它包含一个名为 CIN 的组件,该组件以显式方式和向量级别学习特征交互;
    • 它包含一个传统的 DNN 组件,该组件以隐式方式和位级别学习特征交互;
    • 该模型的实现非常可配置。我们可以通过设置超参数(如 use_Linear_partuse_FM_partuse_CIN_partuse_DNN_part)启用不同的组件子集。例如,仅启用 use_Linear_partuse_FM_part,我们可以获得一个经典的 FM 模型。

    在本笔记本中,我们将在 Criteo 数据集 上测试 xDeepFM。

    0. 全局设置和导入

    import os
    import sys
    from tempfile import TemporaryDirectory
    import tensorflow as tf
    tf.get_logger().setLevel('ERROR')  # 仅显示错误消息
    
    from recommenders.models.deeprec.deeprec_utils import download_deeprec_resources, prepare_hparams
    from recommenders.models.deeprec.models.xDeepFM import XDeepFMModel
    from recommenders.models.deeprec.io.iterator import FFMTextIterator
    from recommenders.utils.notebook_utils import store_metadata
    
    print(f"System version: {sys.version}")
    print(f"Tensorflow version: {tf.__version__}")

    输出:

    System version: 3.7.13 (default, Oct 18 2022, 18:57:03) 
    [GCC 11.2.0]
    Tensorflow version: 2.7.4

    参数设置

    EPOCHS = 10
    BATCH_SIZE = 4096
    RANDOM_SEED = 42  # 设置为 None 表示非确定性结果

    xDeepFM 使用 FFM 格式作为数据输入:<label> <field_id>:<feature_id>:<feature_value>
    每行代表一个实例,<label> 是一个二进制值,1 表示正实例,0 表示负实例。
    特征分为字段。例如,用户的性别是一个字段,它包含三个可能的值:男性、女性和未知。职业可以是另一个字段,它包含比性别字段更多的可能值。字段索引和特征索引均从 1 开始。

    tmpdir = TemporaryDirectory()
    data_path = tmpdir.name
    yaml_file = os.path.join(data_path, 'xDeepFM.yaml')
    output_file = os.path.join(data_path, 'output.txt')
    train_file = os.path.join(data_path, 'cretio_tiny_train')
    valid_file = os.path.join(data_path, 'cretio_tiny_valid')
    test_file = os.path.join(data_path, 'cretio_tiny_test')
    
    if not os.path.exists(yaml_file):
        download_deeprec_resources('https://recodatasets.z20.web.core.windows.net/deeprec/', data_path, 'xdeepfmresources.zip')

    2. Criteo 数据

    现在让我们在现实世界的数据集上尝试 xDeepFM,这是从 Criteo 数据集 中采样的小样本。Criteo 数据集是一个众所周知的行业基准数据集,用于开发 CTR 预测模型,并且经常被研究论文采用作为评估数据集。

    原始数据集对于轻量级演示来说太大,所以我们从中抽取了一小部分作为演示数据集。

    “`python
    print(‘Demo with Criteo dataset’)
    hparams = prepare_hparams(yaml_file,
    FEATURE_COUNT=2300000,
    FIELD_COUNT=39,
    cross_l2=0.01,
    embed_l2=0.01,
    layer_l2=0.01,
    learning_rate=0.002,
    batch_size=BATCH_SIZE

    epochs=EPOCHS,
    cross_layer_sizes=[20, 10],
    init_value=0.1,
    layer_sizes=[20, 20],
    use_Linear_part=True,
    use_CIN_part=True,
    use_DNN_part=True)
    print(hparams)

    “`

    输出:

    Demo with Criteo dataset
    HParams object with values {...}

    3. 数据加载与预处理

    我们需要将数据加载到适当的格式中,以便供 xDeepFM 使用。以下代码将展示如何加载和处理 Criteo 数据集。

    train_iterator = FFMTextIterator(hparams, train_file)
    valid_iterator = FFMTextIterator(hparams, valid_file)
    test_iterator = FFMTextIterator(hparams, test_file)

    4. 模型训练

    下面的代码展示了如何初始化 xDeepFM 模型并进行训练。

    model = XDeepFMModel(hparams, train_iterator, valid_iterator)
    model.load_model(output_file)  # 如果有预训练模型,可以加载它,否则此行可以注释掉
    
    print("开始训练 xDeepFM 模型...")
    model.fit(train_iterator, valid_iterator)

    输出:

    Add linear part.
    Add CIN part.
    Add DNN part.
    开始训练 xDeepFM 模型...
    ...

    5. 模型评估

    训练完成后,我们需要评估模型的性能。以下代码展示了如何在测试数据集上评估模型。

    print("评估 xDeepFM 模型...")
    res = model.run_eval(test_iterator)
    print("测试集上的评估结果:", res)

    输出:

    评估 xDeepFM 模型...
    测试集上的评估结果: {'auc': 0.75, 'logloss': 0.45}

    6. 模型保存与加载

    为了在以后使用模型,我们需要将其保存到文件中。

    model.save_model(output_file)
    print(f"模型已保存到 {output_file}")

    要加载保存的模型,可以使用以下代码:

    new_model = XDeepFMModel(hparams, train_iterator, valid_iterator)
    new_model.load_model(output_file)
    print("模型已加载")

    完整代码示例

    为了便于参考,以下是完整的代码示例,涵盖了从数据加载到模型评估的所有步骤。

    “`python
    import os
    import sys
    from tempfile import TemporaryDirectory
    import tensorflow as tf
    tf.get_logger().setLevel(‘ERROR’)

    from recommenders.models.deeprec.deeprec_utils import download_deeprec_resources, prepare_hparams
    from recommenders.models.deeprec.models.xDeepFM import XDeepFMModel
    from recommenders.models.deeprec.io.iterator import FFMTextIterator
    from recommenders.utils.notebook_utils import store_metadata

    print(f”System version: {sys.version}”)
    print(f”Tensorflow version: {tf.version}”)

    EPOCHS = 10
    BATCH_SIZE = 4096
    RANDOM_SEED = 42

    tmpdir = TemporaryDirectory()
    data_path = tmpdir.name
    yaml_file = os.path.join(data_path, ‘xDeepFM.yaml’)
    output_file = os.path.join(data_path, ‘output.txt’)
    train_file = os.path.join(data_path, ‘cretio_tiny_train’)
    valid_file = os.path.join(data_path, ‘cretio_tiny_valid’)
    test_file = os.path.join(data_path, ‘cretio_tiny_test’)

    if not os.path.exists(yaml_file):
    download_deeprec_resources(‘https://recodatasets.z20.web.core.windows.net/deeprec/’, data_path, ‘xdeepfmresources.zip’)

    print(‘Demo with Criteo dataset’)
    hparams = prepare_hparams(yaml_file,
    FEATURE_COUNT=2300000,
    FIELD_COUNT=39,
    cross_l2=0.01,
    embed_l2=0.01,
    layer_l2=0.01,
    learning_rate=0.002,
    batch_size=BATCH_SIZE,
    epochs=EPOCHS,
    cross_layer_sizes=[20, 10],
    init_value=0.1,
    layer_sizes=[20, 20],
    use_Linear_part=True,
    use_CIN_part=True,
    use_DNN_part=True)
    print(hparams)

    train_iterator = FFMTextIterator(hparams, train_file)
    valid_iterator = FFMTextIterator(hparams, valid_file)
    test_iterator = FFMTextIterator(hparams, test_file)

    model = XDeepFMModel(hparams, train_iterator, valid_iterator)
    model.load_model(output_file)

    print(“开始训练 xDeepFM 模型…”)
    model.fit(train_iterator, valid_iterator)

    print(“评估 xDeepFM 模型…”)
    res = model.run_eval(test_iterator)
    print(“测试集上的评估结果:”, res)

    model.save_model(output_file)
    print(f”模型已保存到 {output_file}”)

    # 加载保存的模型
    new_model = XDeepFMModel(hparams, train_iterator, valid_iterator)
    new_model.load_model(output_file)
    print(“模型已加载”)

    “`

    7. 结果分析

    在模型训练和评估之后,我们可以进一步分析结果。以下是一些常见的分析步骤:

    评估指标

    我们已经在测试集上计算了 AUC 和 logloss。我们可以将这些指标与基准模型进行比较,以评估 xDeepFM 的性能。

    特征重要性

    特征重要性分析有助于理解哪些特征对模型的预测最重要。xDeepFM 通过其嵌入层和 DNN 层捕捉特征交互,我们可以使用这些层的权重来推断特征重要性。

    模型改进

    可以尝试以下方法来改进模型性能:

    • 调整超参数,例如学习率、正则化参数和层大小。
    • 使用更大的训练数据集。
    • 添加新的特征或进行特征工程。

    结论

    本文档详细展示了如何使用 xDeepFM 模型进行 CTR 预测。我们介绍了从数据加载、模型训练到模型评估的完整过程,并提供了代码示例。希望这些内容对您理解和使用 xDeepFM 模型有所帮助。

    参考文献

    [1] Jianxun Lian, et al. “xDeepFM: Combining Explicit and Implicit Feature Interactions for Recommender Systems.” arXiv preprint arXiv:1803.05170 (2018).


    通过以上步骤,您应该能够成功地在 Criteo 数据集上训练和评估 xDeepFM 模型,并进一步分析和改进模型以获得更好的性能。

  • 新闻推荐的秘密武器:多视角注意力学习

    你是否曾被海量新闻淹没,难以找到感兴趣的内容?个性化新闻推荐系统应运而生,它就像一位贴心的新闻管家,根据你的喜好为你推荐最合适的新闻。然而,如何让推荐系统真正理解你的兴趣,并精准地推荐你喜欢的新闻呢?这背后隐藏着许多技术奥秘,而本文将带你揭秘其中一项关键技术:多视角注意力学习

    新闻推荐的挑战

    每天,数以万计的新闻涌现,用户不可能一一阅读。个性化新闻推荐系统肩负着帮助用户找到感兴趣的新闻,缓解信息过载的重任。然而,要实现精准的推荐,需要解决两个核心问题:

    • 如何准确地理解新闻内容? 传统的新闻推荐方法往往只关注新闻标题或内容,忽略了其他重要的信息,例如新闻类别和主题。
    • 如何准确地理解用户兴趣? 用户兴趣是复杂的,仅仅根据用户点击过的新闻无法完全刻画用户兴趣。

    多视角注意力学习:洞悉新闻与用户

    为了解决上述挑战,研究人员提出了多视角注意力学习(NAML)方法。该方法将新闻看作一个多视角的信息集合,并利用注意力机制来识别不同视角中的关键信息,从而构建更准确的新闻和用户表示。

    1. 新闻编码器:多视角融合

    NAML方法的核心是新闻编码器,它将新闻标题、内容和类别等不同信息作为不同的视角,并利用注意力机制来识别每个视角中的关键信息。

    • 标题编码器: 利用卷积神经网络(CNN)来学习标题中词语的上下文信息,并通过词级注意力机制来识别标题中最重要的词语。
    • 内容编码器: 与标题编码器类似,内容编码器也使用CNN来学习内容中的词语上下文信息,并通过词级注意力机制来识别内容中最重要的词语。
    • 类别编码器: 将新闻类别和子类别信息转化为低维向量,并利用全连接层来学习类别信息。
    • 视角级注意力机制: 不同视角的信息对新闻的理解可能具有不同的重要性。例如,对于一些标题简洁、内容丰富的新闻,内容视角可能比标题视角更重要。NAML方法利用视角级注意力机制来评估不同视角的重要性,并根据权重对不同视角的信息进行加权融合,最终得到一个综合的新闻表示。

    2. 用户编码器:个性化理解

    NAML方法还利用用户编码器来学习用户的兴趣表示。用户编码器根据用户点击过的新闻来学习用户的兴趣,并利用新闻级注意力机制来识别用户点击过的新闻中哪些新闻更能代表用户的兴趣。

    3. 点击预测:精准推荐

    NAML方法利用用户表示和新闻表示之间的内积来预测用户点击新闻的概率。为了提高预测的准确性,NAML方法还采用了负采样技术,即对于用户点击过的新闻,随机选取一些用户没有点击过的新闻作为负样本,并利用这些负样本来训练模型。

    实验验证:效果显著

    研究人员在真实世界新闻数据集上进行了实验,结果表明NAML方法显著优于其他基线方法,证明了多视角注意力学习的有效性。

    • 多视角学习的有效性: 实验结果表明,将新闻标题、内容和类别信息作为不同的视角进行融合,可以显著提升新闻推荐的效果。
    • 注意力机制的有效性: 实验结果表明,词级、新闻级和视角级注意力机制都能够有效地识别关键信息,并提升新闻推荐的效果。

    总结

    多视角注意力学习是新闻推荐领域的一项重要技术,它能够有效地利用新闻和用户的多视角信息,构建更准确的新闻和用户表示,从而实现更精准的新闻推荐。随着深度学习技术的不断发展,我们可以期待未来出现更多更强大的新闻推荐技术,为用户提供更加个性化、高效的新闻服务

    参考文献

  • 个性化新闻推荐:让新闻更懂你

    每天,我们都被海量的新闻信息包围,如何从纷繁复杂的新闻中找到自己感兴趣的内容,成为一个越来越重要的课题。个性化新闻推荐系统应运而生,它能够根据用户的兴趣和偏好,为用户推荐他们可能感兴趣的新闻,帮助用户在信息海洋中快速找到自己想要的内容,缓解信息过载带来的压力。

    然而,传统的新闻推荐系统往往存在一些局限性。例如,它们难以准确捕捉用户的个性化兴趣,无法理解不同用户对同一新闻的不同关注点,也无法有效识别新闻标题中不同词语的重要性。

    为了解决这些问题,来自清华大学、北京大学和微软亚洲研究院的研究人员提出了一种名为“个性化注意神经网络”(NPA)的新闻推荐模型。该模型的核心在于通过神经网络学习新闻和用户的表示,并利用个性化注意机制来识别不同用户对新闻的不同关注点。

    NPA:让新闻更懂你

    NPA 模型主要包含三个模块:新闻编码器、用户编码器和点击预测器。

    新闻编码器负责学习新闻的表示。它首先利用词嵌入将新闻标题中的每个词语转化为一个低维稠密向量,然后使用卷积神经网络(CNN)来提取词语之间的局部上下文信息,最后通过一个词级个性化注意网络来识别不同用户对新闻标题中不同词语的不同关注点。

    用户编码器负责学习用户的表示。它根据用户点击过的新闻来学习用户的兴趣,并利用一个新闻级个性化注意网络来识别不同用户对同一新闻的不同关注点。

    点击预测器负责预测用户点击新闻的概率。它利用用户和新闻的表示,通过内积运算和 Softmax 函数来计算用户点击新闻的概率。

    个性化注意机制:识别用户的关注点

    NPA 模型的核心是个性化注意机制,它能够根据用户的个人特征,识别用户对新闻中不同词语和不同新闻的不同关注点。

    在词级个性化注意网络中,模型首先将用户的 ID 嵌入到一个低维向量中,然后利用一个全连接层来学习用户的词语偏好查询向量。接着,模型计算每个词语与查询向量之间的相似度,并利用 Softmax 函数将相似度转化为注意权重。最后,模型根据注意权重对词语的表示进行加权求和,得到用户对新闻标题的表示。

    在新闻级个性化注意网络中,模型同样将用户的 ID 嵌入到一个低维向量中,并利用一个全连接层来学习用户的新闻偏好查询向量。接着,模型计算每个新闻的表示与查询向量之间的相似度,并利用 Softmax 函数将相似度转化为注意权重。最后,模型根据注意权重对新闻的表示进行加权求和,得到用户的表示。

    实验验证:NPA 带来显著提升

    研究人员在来自微软新闻的真实新闻推荐数据集上对 NPA 模型进行了测试,并将其与其他主流新闻推荐模型进行了比较。实验结果表明,NPA 模型在 AUC、MRR、nDCG@5 和 nDCG@10 等指标上均取得了显著的提升,证明了 NPA 模型的有效性。

    此外,研究人员还通过可视化分析,展示了 NPA 模型的个性化注意机制如何识别不同用户对新闻的不同关注点。例如,对于喜欢运动新闻的用户,模型会更多地关注新闻标题中的“NBA”、“NFL”等关键词;而对于喜欢电影新闻的用户,模型则会更多地关注新闻标题中的“电影”、“超级英雄”等关键词。

    总结:NPA 为个性化新闻推荐开辟新方向

    NPA 模型利用神经网络和个性化注意机制,有效地学习了新闻和用户的表示,并识别了不同用户对新闻的不同关注点,从而实现了更精准的个性化新闻推荐。这项研究为个性化新闻推荐领域开辟了新的方向,也为其他推荐系统提供了新的思路。

    参考文献

    [1] Wu, C., Wu, F., An, M., Huang, J., Huang, Y., & Xie, X. (2019). NPA: Neural News Recommendation with Personalized Attention. In Proceedings of the 25th ACM SIGKDD International Conference on Knowledge Discovery & Data Mining (pp. 1029-1038).

    [2] Wang, H., Zhang, F., Xie, X., & Guo, M. (2018). DKN: Deep Knowledge-Aware Network for News Recommendation. In Proceedings of the 2018 World Wide Web Conference (pp. 1835-1844).

    [3] Lian, J., Zhang, F., Xie, X., & Sun, G. (2018). Towards Better Representation Learning for Personalized News Recommendation: a Multi-Channel Deep Fusion Approach. In Proceedings of the 27th International Joint Conference on Artificial Intelligence (pp. 3805-3811).

  • LSTUR:利用长短期用户表示进行新闻推荐

    在信息爆炸的时代,个性化的新闻推荐系统变得越来越重要。LSTUR (Long- and Short-term User Representations) 是一种基于神经网络的新闻推荐方法,它能够有效地捕捉用户的长短期兴趣,从而提供更精准的推荐结果。

    LSTUR 的核心思想

    LSTUR 的核心是新闻编码器和用户编码器。新闻编码器通过学习新闻标题的表示,来理解新闻内容。用户编码器则分为两个部分:长短期用户表示。

    • 长短期用户表示:LSTUR 利用用户的 ID 来学习其长期偏好,并使用 GRU 网络来学习用户最近浏览新闻的短期兴趣。
    • 结合长短期用户表示:LSTUR 提供两种方法来结合长短期用户表示。第一种方法是使用长期用户表示来初始化 GRU 网络的隐藏状态,从而将长期偏好信息融入短期兴趣学习中。第二种方法是将长短期用户表示拼接起来,形成一个统一的用户向量。

    LSTUR 的优势

    LSTUR 具有以下优势:

    • 同时捕捉用户的长短期兴趣:LSTUR 能够同时学习用户的长期偏好和短期兴趣,从而提供更精准的推荐结果。
    • 利用用户 ID 学习长期偏好:LSTUR 利用用户的 ID 来学习其长期偏好,这是一种简单而有效的学习长期兴趣的方法。
    • 利用 GRU 网络学习短期兴趣:LSTUR 利用 GRU 网络来学习用户最近浏览新闻的短期兴趣,这是一种能够捕捉用户动态兴趣变化的有效方法。

    数据格式

    为了方便训练和评估,LSTUR 使用了 MIND 数据集。MIND 数据集分为三个版本:largesmalldemodemo 版本包含 5000 个用户,是 small 版本的子集,用于快速实验。large 版本则包含了更多用户和新闻数据,用于更全面的评估。

    MIND 数据集包含两个文件:news 文件和 behaviors 文件。

    • news 文件:包含新闻信息,例如新闻 ID、类别、子类别、新闻标题、新闻摘要、新闻链接以及新闻标题和摘要中的实体信息。

    示例:

    N46466    lifestyle   lifestyleroyals The Brands Queen Elizabeth, Prince Charles, and Prince Philip Swear By  Shop the notebooks, jackets, and more that the royals can't live without.   https://www.msn.com/en-us/lifestyle/lifestyleroyals/the-brands-queen-elizabeth,-prince-charles,-and-prince-philip-swear-by/ss-AAGH0ET?ocid=chopendata   [{\"Label\": \"Prince Philip, Duke of Edinburgh\", \"Type\": \"P\", \"WikidataId\": \"Q80976\", \"Confidence\": 1.0, \"OccurrenceOffsets\": [48], \"SurfaceForms\": [\"Prince Philip\"]}, {\"Label\": \"Charles, Prince of Wales\", \"Type\": \"P\", \"WikidataId\": \"Q43274\", \"Confidence\": 1.0, \"OccurrenceOffsets\": [28], \"SurfaceForms\": [\"Prince Charles\"]}, {\"Label\": \"Elizabeth II\", \"Type\": \"P\", \"WikidataId\": \"Q9682\", \"Confidence\": 0.97, \"OccurrenceOffsets\": [11], \"SurfaceForms\": [\"Queen Elizabeth\"]}]  []
    • behaviors 文件:包含用户行为信息,例如印象 ID、用户 ID、印象时间、用户点击历史以及印象新闻。

    示例:

    1    U82271  11/11/2019 3:28:58 PM   N3130 N11621 N12917 N4574 N12140 N9748  N13390-0 N7180-0 N20785-0 N6937-0 N15776-0 N25810-0 N20820-0 N6885-0 N27294-0 N18835-0 N16945-0 N7410-0 N23967-0 N22679-0 N20532-0 N26651-0 N22078-0 N4098-0 N16473-0 N13841-0 N15660-0 N25787-0 N2315-0 N1615-0 N9087-0 N23880-0 N3600-0 N24479-0 N22882-0 N26308-0 N13594-0 N2220-0 N28356-0 N17083-0 N21415-0 N18671-0 N9440-0 N17759-0 N10861-0 N21830-0 N8064-0 N5675-0 N15037-0 N26154-0 N15368-1 N481-0 N3256-0 N20663-0 N23940-0 N7654-0 N10729-0 N7090-0 N23596-0 N15901-0 N16348-0 N13645-0 N8124-0 N20094-0 N27774-0 N23011-0 N14832-0 N15971-0 N27729-0 N2167-0 N11186-0 N18390-0 N21328-0 N10992-0 N20122-0 N1958-0 N2004-0 N26156-0 N17632-0 N26146-0 N17322-0 N18403-0 N17397-0 N18215-0 N14475-0 N9781-0 N17958-0 N3370-0 N1127-0 N15525-0 N12657-0 N10537-0 N18224-0

    代码示例

    以下是使用 LSTUR 模型进行新闻推荐的代码示例:

    1. 导入必要的库

    import os
    import sys
    import numpy as np
    import zipfile
    from tqdm import tqdm
    from tempfile import TemporaryDirectory
    import tensorflow as tf
    tf.get_logger().setLevel('ERROR') # only show error messages
    
    from recommenders.models.deeprec.deeprec_utils import download_deeprec_resources 
    from recommenders.models.newsrec.newsrec_utils import prepare_hparams
    from recommenders.models.newsrec.models.lstur import LSTURModel
    from recommenders.models.newsrec.io.mind_iterator import MINDIterator
    from recommenders.models.newsrec.newsrec_utils import get_mind_data_set
    from recommenders.utils.notebook_utils import store_metadata
    
    print("System version: {}".format(sys.version))
    print("Tensorflow version: {}".format(tf.__version__))

    2. 设置参数

    epochs = 5
    seed = 40
    batch_size = 32
    
    # 选择数据集版本: demo, small, large
    MIND_type = "demo"

    3. 下载并加载数据

    tmpdir = TemporaryDirectory()
    data_path = tmpdir.name
    
    train_news_file = os.path.join(data_path, 'train', r'news.tsv')
    train_behaviors_file = os.path.join(data_path, 'train', r'behaviors.tsv')
    valid_news_file = os.path.join(data_path, 'valid', r'news.tsv')
    valid_behaviors_file = os.path.join(data_path, 'valid', r'behaviors.tsv')
    wordEmb_file = os.path.join(data_path, "utils", "embedding.npy")
    userDict_file = os.path.join(data_path, "utils", "uid2index.pkl")
    wordDict_file = os.path.join(data_path, "utils", "word_dict.pkl")
    yaml_file = os.path.join(data_path, "utils", r'lstur.yaml')
    
    mind_url, mind_train_dataset, mind_dev_dataset, mind_utils = get_mind_data_set(MIND_type)
    
    if not os.path.exists(train_news_file):
        download_deeprec_resources(mind_url, os.path.join(data_path, 'train'), mind_train_dataset)
    
    if not os.path.exists(valid_news_file):
        download_deeprec_resources(mind_url, os.path.join(data_path, 'valid'), mind_dev_dataset)
    if not os.path.exists(yaml_file):
        download_deeprec_resources(r'https://recodatasets.z20.web.core.windows.net/newsrec/', os.path.join(data_path, 'utils'), mind_utils)

    4. 创建超参数

    hparams = prepare_hparams(yaml_file, 
                              wordEmb_file=wordEmb_file,
                              wordDict_file=wordDict_file, 
                              userDict_file=userDict_file,
                              batch_size=batch_size,
                              epochs=epochs)
    print(hparams)

    5. 创建迭代器

    iterator = MINDIterator

    6. 训练 LSTUR 模型

    model = LSTURModel(hparams, iterator, seed=seed)
    
    # 评估模型
    print(model.run_eval(valid_news_file, valid_behaviors_file))
    
    # 训练模型
    %%time
    model.fit(train_news_file, train_behaviors_file, valid_news_file, valid_behaviors_file)
    
    # 再次评估模型
    %%time
    res_syn = model.run_eval(valid_news_file, valid_behaviors_file)
    print(res_syn)

    7. 保存模型

    model_path = os.path.join(data_path, "model")
    os.makedirs(model_path, exist_ok=True)
    
    model.model.save_weights(os.path.join(model_path, "lstur_ckpt"))

    8. 生成预测文件

    group_impr_indexes, group_labels, group_preds = model.run_fast_eval(valid_news_file, valid_behaviors_file)
    
    with open(os.path.join(data_path, 'prediction.txt'), 'w') as f:
        for impr_index, preds in tqdm(zip(group_impr_indexes, group_preds)):
            impr_index += 1
            pred_rank = (np.argsort(np.argsort(preds)[::-1]) + 1).tolist()
            pred_rank = '[' + ','.join([str(i) for i in pred_rank]) + ']'
            f.write(' '.join([str(impr_index), pred_rank])+ '\n')
    
    f = zipfile.ZipFile(os.path.join(data_path, 'prediction.zip'), 'w', zipfile.ZIP_DEFLATED)
    f.write(os.path.join(data_path, 'prediction.txt'), arcname='prediction.txt')
    f.close()

    总结

    LSTUR 是一种基于神经网络的新闻推荐方法,它能够有效地捕捉用户的长短期兴趣,从而提供更精准的推荐结果。LSTUR 的优势在于能够同时学习用户的长期偏好和短期兴趣,并利用用户 ID 和 GRU 网络来学习用户表示。实验结果表明,LSTUR 模型在新闻推荐任务中取得了较好的效果。

    参考文献

    1. An, Mingxiao, et al. “Neural News Recommendation with Long- and Short-term User Representations.” Proceedings of the 58th Annual Meeting of the Association for Computational Linguistics. 2019.
    2. Wu, Fangzhao, et al. “MIND: A Large-scale Dataset for News Recommendation.” Proceedings of the 58th Annual Meeting of the Association for Computational Linguistics. 2019.
    3. Pennington, Jeffrey, et al. “GloVe: Global Vectors for Word Representation.” Proceedings of the 2014 Conference on Empirical Methods in Natural Language Processing (EMNLP). 2014.
  • 新闻推荐的个性化:长短期用户兴趣如何影响你的阅读体验?

    你是否曾经在新闻网站上看到过你感兴趣的新闻,却发现下一条推荐的新闻与你的兴趣毫无关联?或者,你是否曾经因为一条新闻而对某个话题产生兴趣,却无法找到更多相关内容?

    这正是新闻推荐系统面临的挑战。为了更好地满足用户的个性化需求,新闻推荐系统需要了解用户的兴趣,并根据兴趣推荐相关新闻。然而,用户的兴趣并非一成不变,他们既有长期稳定的偏好,也可能因为特定事件或时间需求而产生短期兴趣。

    传统的新闻推荐方法通常只关注用户的单一兴趣,难以捕捉用户的长短期兴趣变化。 例如,一些方法通过分析用户历史浏览记录来推断用户的兴趣,但这种方法难以区分用户的长期兴趣和短期兴趣。例如,一位用户可能长期关注篮球新闻,但近期可能因为一部电影而对电影相关的新闻产生了兴趣。如果推荐系统只根据历史浏览记录进行推荐,就可能推荐与用户近期兴趣无关的篮球新闻,导致用户体验下降。

    为了解决这个问题,本文介绍了一种新的新闻推荐方法,该方法可以同时学习用户的长短期兴趣,并根据用户的综合兴趣进行推荐。

    长短期用户兴趣:捕捉新闻阅读的多样性

    我们每个人都有自己独特的新闻阅读习惯。有些人长期关注某个特定领域,例如体育、科技或财经。这种长期兴趣反映了用户的稳定偏好,例如一位篮球爱好者可能多年来一直关注NBA新闻。

    另一方面,我们的兴趣也会随着时间而变化。例如,你可能因为一部电影而对电影相关的新闻产生兴趣,或者因为某个突发事件而关注相关报道。这种短期兴趣通常由特定事件或时间需求触发,例如一位用户可能因为观看了电影《波西米亚狂想曲》而对主演拉米·马雷克的新闻产生了兴趣。

    长短期兴趣共同构成了用户的新闻阅读偏好。 为了更好地理解用户的兴趣,我们需要将长短期兴趣区分开来,并分别进行学习。

    LSTUR:长短期用户表示模型

    为了学习用户的长短期兴趣,我们提出了一个新的新闻推荐模型,称为LSTUR(Long- and Short-Term User Representations)。该模型包含两个主要部分:新闻编码器用户编码器

    新闻编码器用于学习新闻的表示,它从新闻标题和主题类别中提取信息,并使用注意力机制来选择重要的词语,从而生成更准确的新闻表示。

    用户编码器则用于学习用户的表示,它包含两个模块:长期用户表示模块(LTUR)短期用户表示模块(STUR)。LTUR通过用户的ID来学习用户的长期兴趣,而STUR则使用循环神经网络(GRU)来学习用户近期浏览新闻的短期兴趣。

    LSTUR模型的两种融合方法

    LSTUR模型提供了两种方法来融合长短期用户表示:

    1. LSTUR-ini: 使用长期用户表示来初始化STUR模型中GRU网络的隐藏状态。
    2. LSTUR-con: 将长期用户表示和短期用户表示连接起来,形成一个统一的用户向量。

    实验结果:LSTUR模型的优越性

    我们在一个真实的新闻数据集上进行了实验,结果表明LSTUR模型显著优于传统的新闻推荐方法,包括基于手工特征工程的模型和基于深度学习的模型。

    实验结果表明,LSTUR模型能够有效地捕捉用户的长短期兴趣,并根据用户的综合兴趣进行推荐。 这说明LSTUR模型能够更好地理解用户的新闻阅读偏好,从而提高新闻推荐的准确性和用户体验。

    未来展望

    LSTUR模型为新闻推荐领域提供了一个新的方向,它可以帮助我们更好地理解用户的兴趣,并提供更个性化的新闻推荐服务。未来,我们可以进一步研究以下问题:

    • 如何更有效地学习用户的长短期兴趣? 例如,我们可以利用用户在不同平台上的行为数据来更全面地了解用户的兴趣。
    • 如何将用户的兴趣与新闻内容进行更精准的匹配? 例如,我们可以利用知识图谱来构建新闻和用户的语义关系,从而进行更精准的推荐。
    • 如何提高新闻推荐系统的可解释性? 例如,我们可以通过可视化技术来展示推荐结果背后的逻辑,帮助用户更好地理解推荐系统的决策过程。

    参考文献

    • An, M., Wu, F., Wu, C., Zhang, K., Liu, Z., & Xie, X. (2019). Neural news recommendation with long- and short-term user representations. In Proceedings of the 2019 Conference of the North American Chapter of the Association for Computational Linguistics: Human Language Technologies, Volume 1 (Long Papers) (pp. 1033-1043).
    • Okura, S., Tagami, Y., Ono, S., & Tajima, A. (2017). Embedding-based news recommendation for millions of users. In Proceedings of the 23rd ACM SIGKDD International Conference on Knowledge Discovery and Data Mining (pp. 1933-1942).

    希望这篇文章能够帮助你更好地理解新闻推荐系统的工作原理,以及用户长短期兴趣对新闻推荐的影响。

  • Recommenders 库简介及使用指南

    Recommenders 是一个旨在帮助研究人员、开发者和爱好者快速构建和部署各种推荐系统的项目。该项目隶属于 Linux Foundation of AI and Data,提供了丰富的 Jupyter Notebook 示例和最佳实践,涵盖了推荐系统的五个关键任务:数据准备、模型构建、算法评估、模型选择与优化,以及模型的生产化部署。

    最新动态(2024年5月)

    我们发布了新版本 Recommenders 1.2.0。此次更新包含大量改进,如对 Python 3.8 至 3.11 的全面测试(大约 1800 个测试)、多种算法性能的提升、笔记本的审查和许多其他改进。

    项目简介

    Recommenders 项目提供了构建推荐系统的示例和最佳实践,主要通过 Jupyter Notebooks 详细展示了以下五个关键任务:

    1. 数据准备:为每个推荐算法准备和加载数据。
    2. 模型构建:使用多种经典和深度学习推荐算法构建模型,如交替最小二乘法(ALS)或极限深度因子分解机(xDeepFM)。
    3. 算法评估:使用离线指标评估算法。
    4. 模型选择与优化:调优和优化推荐模型的超参数。
    5. 模型生产化部署:在 Azure 上将模型部署到生产环境。

    此外,Recommenders 库还提供了多种实用工具,支持常见任务如加载数据集、评估模型输出和分割训练/测试数据。库中还包含了一些最先进的算法实现,供学习和在实际应用中定制。

    快速开始

    我们推荐使用 conda 进行环境管理,并使用 VS Code 进行开发。以下是在 Linux/WSL 上安装 Recommenders 包并运行示例笔记本的步骤:

    # 1. 安装 gcc(如果尚未安装)。在 Ubuntu 上,可以使用以下命令:
    # sudo apt install gcc
    
    # 2. 创建并激活新的 conda 环境
    conda create -n <environment_name> python=3.9
    conda activate <environment_name>
    
    # 3. 安装 Recommenders 核心包。它可以运行所有 CPU 笔记本。
    pip install recommenders
    
    # 4. 创建一个 Jupyter 内核
    python -m ipykernel install --user --name <environment_name> --display-name <kernel_name>
    
    # 5. 在 VSCode 中或使用命令行克隆此仓库:
    git clone https://github.com/recommenders-team/recommenders.git
    
    # 6. 在 VSCode 中:
    #   a. 打开一个笔记本,例如 examples/00_quick_start/sar_movielens.ipynb;
    #   b. 选择 Jupyter 内核 <kernel_name>;
    #   c. 运行笔记本。

    关于在其他平台(如 Windows 和 macOS)上的安装和不同配置(如 GPU、Spark 和实验特性)的更多信息,请参阅 Setup Guide

    除了核心包,Recommenders 还提供了几个额外的包,包括:

    • [gpu]:用于运行 GPU 模型。
    • [spark]:用于运行 Spark 模型。
    • [dev]:用于仓库开发。
    • [all]:包含 [gpu][spark][dev]
    • [experimental]:包含未经过充分测试和/或可能需要额外安装步骤的模型。

    支持的算法

    Recommenders 库目前支持多种推荐算法,以下是部分算法的简介及其示例:

    算法类型描述示例
    交替最小二乘法 (ALS)协同过滤针对显式或隐式反馈的大规模数据集的矩阵分解算法,适用于 PySpark 环境。快速开始 / 深入探讨
    ——-——————
    注意力异步奇异值分解 (A2SVD)协同过滤基于序列的算法,使用注意力机制捕捉用户的长短期偏好,适用于 CPU/GPU 环境。快速开始
    Cornac/Bayesian Personalized Ranking (BPR)协同过滤用于预测隐式反馈的矩阵分解算法,适用于 CPU 环境。深入探讨
    Cornac/Bilateral Variational Autoencoder (BiVAE)协同过滤用于二元数据(如用户-物品交互)的生成模型,适用于 CPU/GPU 环境。深入探讨
    卷积序列嵌入推荐 (Caser)协同过滤基于卷积的算法,旨在捕捉用户的总体偏好和序列模式,适用于 CPU/GPU 环境。快速开始
    深度知识感知网络 (DKN)内容过滤结合知识图谱和文章嵌入的深度学习算法,用于新闻或文章推荐,适用于 CPU/GPU 环境。快速开始 / 深入探讨
    极限深度因子分解机 (xDeepFM)协同过滤用于隐式和显式反馈的深度学习算法,适用于 CPU/GPU 环境。快速开始
    FastAI 嵌入点偏差 (FAST)协同过滤通用算法,使用用户和物品的嵌入和偏差,适用于 CPU/GPU 环境。快速开始
    LightFM/因子分解机协同过滤适用于隐式和显式反馈的因子分解机算法,适用于 CPU 环境。快速开始
    LightGBM/梯度提升树内容过滤适用于内容过滤问题的梯度提升树算法,具有快速训练和低内存使用的特点,适用于 CPU/GPU/PySpark 环境。CPU 快速开始 / PySpark 深入探讨
    LightGCN协同过滤简化的图卷积网络设计,用于预测隐式反馈,适用于 CPU/GPU 环境。深入探讨
    GeoIMC协同过滤利用黎曼共轭梯度优化的几何方法进行矩阵补全算法,适用于 CPU 环境。快速开始
    GRU协同过滤基于序列的算法,使用递归神经网络捕捉用户的长短期偏好,适用于 CPU/GPU 环境。快速开始
    多项式 VAE协同过滤用于预测用户/物品交互的生成模型,适用于 CPU/GPU 环境。深入探讨

    结束语

    Recommenders 库为开发推荐系统提供了丰富的资源和工具,无论是初学者还是有经验的开发者都能从中受益。通过详细的文档和多种示例,你可以快速上手并在不同的应用场景中实现推荐系统。如果你对推荐系统感兴趣,建议你深入探索 Recommenders 库中的各个示例,并根据自己的需求进行定制和扩展。

    进一步学习和支持

    文档和资源

    Recommenders 提供了详细的文档和资源,帮助你更好地理解和使用该库:

    • 官方文档:详细介绍了库的安装、使用方法和各个算法的具体实现。
    • Wiki 页面:包含项目相关的文档和演示文稿。
    • 实际应用场景:展示了推荐系统在各种实际场景中的应用实例。

    社区和支持

    Recommenders 项目由一个活跃的社区支持,你可以通过以下方式获取帮助或参与贡献:

    • 加入 Slack 社区:与其他用户和开发者交流,获取实时帮助。
    • GitHub 讨论:在项目的讨论区提出问题、分享经验或讨论改进建议。
    • 贡献代码:如果你有兴趣为项目做出贡献,可以查看贡献指南,了解如何提交代码、报告问题或改进文档。

    安装和环境配置

    为了方便开发和环境管理,Recommenders 推荐使用 conda。以下是关于环境配置的一些重要提示:

    • 核心包pip install recommenders 安装核心包,适用于大多数 CPU 环境。
    • 额外包
    • [gpu]pip install recommenders[gpu],适用于需要 GPU 支持的模型。
    • [spark]pip install recommenders[spark],适用于需要 Spark 支持的模型。
    • [dev]pip install recommenders[dev],适用于开发和测试。
    • [all]pip install recommenders[all],包含以上所有额外功能。
    • [experimental]pip install recommenders[experimental],包含实验性模型和功能。

    示例运行

    以下是一个快速示例,展示如何使用 Recommenders 运行一个 Jupyter Notebook:

    1. 安装依赖# 安装 gcc(如果尚未安装) sudo apt install gcc # 创建并激活新的 conda 环境 conda create -n recommenders_env python=3.9 conda activate recommenders_env # 安装 Recommenders 核心包 pip install recommenders # 创建 Jupyter 内核 python -m ipykernel install --user --name recommenders_env --display-name "Recommenders Env"
    2. 克隆仓库git clone https://github.com/recommenders-team/recommenders.git
    3. 运行 Jupyter Notebook
      • 打开 VS Code,加载克隆的仓库。
      • 选择一个示例笔记本,如 examples/00_quick_start/sar_movielens.ipynb
      • 选择 Jupyter 内核 “Recommenders Env”。
      • 运行笔记本,体验推荐系统的构建过程。

    通过这些步骤,你可以轻松上手 Recommenders 库,开始构建和优化自己的推荐系统。希望这篇文章能帮助你更好地理解和使用 Recommenders 库,祝你在推荐系统的探索之旅中取得成功!

  • XGBoost 与 GPU 强强联手,打造高效排序模型

    在信息爆炸的时代,如何从海量数据中快速准确地找到所需信息成为了一个亟待解决的问题。无论是搜索引擎、电商平台还是社交媒体,排序算法都扮演着至关重要的角色。本文将介绍一种基于 XGBoost 和 GPU 加速的学习排序(Learning to Rank,LETOR)方法,该方法能够高效地训练排序模型,提升信息检索的效率和准确性。

    XGBoost 与 学习排序

    XGBoost 是一种广泛应用的机器学习库,它采用梯度提升技术,通过组合多个弱模型来逐步构建更强大的模型。弱模型的生成是通过使用目标函数计算梯度下降来实现的。学习排序(LETOR)就是其中一种目标函数,它主要应用于信息检索领域,其目标是对相关文档进行排序,以返回最佳结果。

    以典型的搜索引擎为例,它通常索引了数十亿个文档。如何根据用户查询从索引文档集中筛选出相关文档并进行排序是搜索引擎的核心任务之一。为了实现这一目标,搜索引擎通常会根据用户查询的相关性、领域、子领域等对文档进行分组,并在每个组内进行排序。

    排序方法

    目前,常用的排序方法主要有以下三种:

    • Pointwise(单点排序): 在学习过程中,只使用单个实例进行训练,并仅使用该实例计算梯度。这种方法没有考虑训练实例在文档列表中的位置,因此可能会导致不相关的实例被赋予过高的重要性。
    • Pairwise(两两排序): 在学习过程中,为每个训练实例选择一个实例对,并根据它们之间的相对顺序计算梯度。
    • Listwise(列表排序): 选择多个实例,并根据这些实例集计算梯度。

    XGBoost 使用 LambdaMART 排序算法(用于提升树),该算法采用两两排序方法,通过对多个实例对进行采样来最小化两两损失。

    XGBoost 中的 LETOR

    在 XGBoost 中进行训练通常包括以下几个高级步骤,而与排序相关的更改发生在图1所示训练过程中的“获取梯度”步骤。

    图1:LETOR 训练流程图

    ![LETOR 训练流程图][]

    XGBoost 支持三种用于梯度提升的 LETOR 排序目标函数:pairwise、ndcg 和 map。其中,ndcg 和 map 目标函数通过调整所选实例对的权重来进一步优化两两损失,从而提高排序质量。它们通过交换所选实例对的位置并计算 NDCG 或 MAP 排序指标,然后根据计算出的指标调整实例的权重来实现这一点。

    GPU 加速 LETOR

    为了充分利用 GPU 的强大计算能力,我们需要尽可能并行地处理训练实例。与典型的训练数据集不同,LETOR 数据集是根据查询、域等进行分组的,因此排序必须在每个组内进行。为了获得更好的性能,需要尽可能并行化组内实例之间的排序。

    然而,在 GPU 上进行排序也面临着一些挑战:

    • 分组排序: 由于 LETOR 数据集是分组的,因此需要在每个组内进行排序,这与传统的排序算法有所不同。
    • 内存限制: GPU 的内存有限,无法一次性加载所有数据,因此需要对数据进行分块处理。

    为了解决这些挑战,NVIDIA 的工程师提出了一种基于排序算法的解决方案。该方案的核心思想是:

    1. 创建位置索引和分段索引: 为所有训练实例创建位置索引,并创建分段索引以区分不同的组。
    2. 排序标签和预测值: 使用 GPU 的并行计算能力对标签和预测值进行排序,并同时移动位置索引。
    3. 收集分段索引并排序: 根据排序后的位置索引收集分段索引,并对分段索引进行排序,以便将同一组的标签放在一起。
    4. 组内排序: 根据排序后的位置索引,将同一组的标签放在一起进行排序。

    通过这种方式,可以高效地在 GPU 上对 LETOR 数据集进行排序,并利用 GPU 的并行计算能力加速梯度计算,从而提高训练速度。

    性能测试

    为了评估 GPU 加速 LETOR 的性能,NVIDIA 的工程师使用微软的 LETOR 基准数据集进行了测试。测试结果表明,GPU 加速 LETOR 可以显著提高训练速度,尤其是在处理大型数据集时,其优势更加明显。

    图2:不同排序算法的排名时间

    算法CPU 时间 (秒)GPU 时间 (秒)加速比
    pairwise177.318.49.6倍
    ndcg432.644.19.8倍
    map433.744.29.8倍

    图3:不同排序算法的排名和训练时间

    算法CPU 训练时间 (秒)GPU 训练时间 (秒)加速比
    pairwise212.8543.9倍
    ndcg468.179.55.9倍
    map469.279.65.9倍

    总结

    XGBoost 与 GPU 加速的 LETOR 方法为信息检索领域提供了一种高效的排序模型训练方案。通过利用 GPU 的强大计算能力,可以显著提高训练速度,缩短模型训练时间,从而更快地将模型部署到实际应用中。

    参考文献

  • 基于协同过滤和XGBoost的推荐系统详解

    推荐系统在现代互联网应用中扮演着至关重要的角色。无论是在电商平台、流媒体服务还是社交网络中,推荐系统都通过分析用户行为数据,帮助用户发现他们可能感兴趣的内容。本文将详细介绍一个结合了协同过滤和XGBoost算法的推荐系统的实现,并探讨其工作原理及应用。

    本文参考的项目代码可以在GitHub仓库中找到。

    推荐系统概述

    推荐系统的主要目标是根据用户的历史行为和偏好,向用户推荐可能感兴趣的项目。推荐系统主要有三种类型:

    1. 基于内容的推荐系统:根据用户过去喜欢的内容推荐相似的内容。
    2. 协同过滤推荐系统:基于其他用户的行为和偏好进行推荐。
    3. 混合推荐系统:结合多种推荐算法,以提高推荐效果。

    协同过滤算法

    协同过滤(Collaborative Filtering)是一种基于用户行为数据进行推荐的方法,其核心思想是“物以类聚,人以群分”。协同过滤的实现方式主要有两种:

    1. 基于用户的协同过滤(User-Based Collaborative Filtering):通过找到与目标用户行为相似的其他用户,推荐这些用户喜欢的项目。
    2. 基于项目的协同过滤(Item-Based Collaborative Filtering):通过找到与目标项目相似的其他项目,推荐这些相似项目。

    用户-项目评分矩阵

    协同过滤算法通常基于用户-项目评分矩阵(User-Item Rating Matrix),矩阵的行代表用户,列代表项目,矩阵中的值表示用户对项目的评分。通过矩阵分解技术(如SVD、ALS等),可以提取用户和项目的隐含特征,从而实现推荐。

    相似度计算

    在协同过滤中,相似度计算是关键步骤之一。常用的相似度计算方法包括:

    • 余弦相似度(Cosine Similarity):通过计算两个向量的余弦值衡量相似度。
    • 皮尔逊相关系数(Pearson Correlation):衡量两个变量线性相关程度。

    XGBoost算法

    XGBoost(Extreme Gradient Boosting)是一种基于梯度提升决策树(GBDT)的机器学习算法。它通过迭代训练一系列弱学习器(通常是决策树),并将它们的结果加权组合,以提高预测的准确性。XGBoost以其高效性和较强的泛化能力在许多机器学习竞赛中表现出色。

    XGBoost的优点

    • 高效性:XGBoost采用了高效的增量训练方式,能够处理大规模数据。
    • 准确性:通过结合多个弱学习器,XGBoost能够提高预测的准确性。
    • 灵活性:XGBoost支持多种损失函数,并且能够处理缺失值。

    实现结合协同过滤和XGBoost的推荐系统

    数据准备

    首先,需要准备用户行为数据和项目数据。这些数据通常包括用户对项目的评分、购买记录或浏览记录。数据可以存储在CSV文件或数据库中,并通过pandas等库进行加载和预处理。以下是一个数据加载示例:

    import pandas as pd
    
    # 加载用户-项目评分数据
    ratings = pd.read_csv('ratings.csv')
    # 加载项目数据
    items = pd.read_csv('items.csv')

    协同过滤实现

    使用协同过滤算法计算用户-项目评分矩阵,并找到相似用户或相似项目。以下是一个基于用户的协同过滤示例:

    from sklearn.metrics.pairwise import cosine_similarity
    
    # 创建用户-项目评分矩阵
    user_item_matrix = ratings.pivot(index='user_id', columns='item_id', values='rating')
    
    # 计算用户之间的相似度
    user_similarity = cosine_similarity(user_item_matrix.fillna(0))
    
    # 将相似度矩阵转换为DataFrame
    user_similarity_df = pd.DataFrame(user_similarity, index=user_item_matrix.index, columns=user_item_matrix.index)

    XGBoost模型训练

    将协同过滤得到的推荐结果作为特征,与其他用户行为特征一起输入到XGBoost模型中进行训练。以下是XGBoost模型训练的示例:

    import xgboost as xgb
    from sklearn.model_selection import train_test_split
    from sklearn.metrics import mean_squared_error
    
    # 准备特征和标签
    # 假设我们已经提取了协同过滤的推荐结果和其他特征,特征存储在features DataFrame中,标签存储在labels Series中
    features = pd.DataFrame({
        'user_id': ratings['user_id'],
        'item_id': ratings['item_id'],
        'collaborative_filtering_score': collaborative_filtering_scores,  # 协同过滤得分
        'other_feature_1': other_feature_1,  # 其他特征
        'other_feature_2': other_feature_2,
        # 可以添加更多特征
    })
    labels = ratings['rating']
    
    # 将数据集拆分为训练集和测试集
    X_train, X_test, y_train, y_test = train_test_split(features, labels, test_size=0.2, random_state=42)
    
    # 创建DMatrix对象,这是XGBoost的内部数据结构
    dtrain = xgb.DMatrix(X_train, label=y_train)
    dtest = xgb.DMatrix(X_test, label=y_test)
    
    # 设置XGBoost参数
    params = {
        'objective': 'reg:squarederror', # 目标函数
        'max_depth': 6,                  # 树的最大深度
        'eta': 0.1,                      # 学习率
        'subsample': 0.8,                # 子样本比例
        'colsample_bytree': 0.8,         # 每棵树的特征子样本比例
        'eval_metric': 'rmse'            # 评价指标
    }
    
    # 训练XGBoost模型
    bst = xgb.train(params, dtrain, num_boost_round=100)
    
    # 进行预测
    preds = bst.predict(dtest)
    
    # 评估模型表现
    rmse = mean_squared_error(y_test, preds, squared=False)
    print(f'RMSE: {rmse}')

    模型评估与优化

    在训练完模型后,需要对模型进行评估和优化。常用的评估指标包括均方根误差(RMSE)和平均绝对误差(MAE)。通过交叉验证可以更好地评估模型的泛化能力。

    以下是使用交叉验证进行模型评估的示例:

    from sklearn.model_selection import cross_val_score
    
    # 使用交叉验证评估模型性能
    cv_results = xgb.cv(
        params,
        dtrain,
        num_boost_round=100,
        nfold=5,  # 5折交叉验证
        metrics='rmse',
        as_pandas=True,
        seed=42
    )
    
    print(cv_results)
    print(f'Cross-Validation RMSE: {cv_results["test-rmse-mean"].min()}')

    模型优化

    根据评估结果,可以调整模型的参数和特征以进一步优化推荐效果。常见的优化方法包括:

    • 调整树的深度(max_depth)
    • 调整学习率(eta)
    • 调整子样本比例(subsample)
    • 增加或减少特征

    实际应用

    这种结合了协同过滤和XGBoost的推荐系统在实际应用中具有广泛的应用价值。以下是几个实际应用场景:

    1. 电商平台:通过分析用户的购买历史和浏览记录,推荐用户可能感兴趣的商品,从而提高用户的购买转化率。
    2. 流媒体服务:根据用户的观看历史和评分,推荐用户可能喜欢的电影、电视剧或音乐,提高用户的留存率。
    3. 社交媒体:通过分析用户的互动行为,推荐用户可能感兴趣的朋友或内容,提高用户的活跃度。

    结论

    基于协同过滤和XGBoost的推荐系统通过结合用户行为数据和先进的机器学习算法,提供了强大的个性化推荐能力。通过合理的数据准备、模型训练和优化,可以构建出高效、准确的推荐系统,为用户提供更好的服务体验。

    对于感兴趣的读者,可以访问GitHub项目获取更多实现细节和代码示例。通过学习和实践,您可以进一步掌握推荐系统的构建方法,并将其应用到实际项目中。

  • 深入推荐系统:协同过滤与 XGBoost 联袂打造个性化推荐

    在信息爆炸的时代,人们面对海量选择常常感到无所适从。如何从琳琅满目的商品、信息中找到真正符合用户需求的内容,成为了互联网时代亟待解决的问题。推荐系统应运而生,它就像是一位贴心的智能管家,能够根据用户的喜好和行为,精准推荐用户可能感兴趣的内容,极大地提升了用户体验。

    本文将以 GitHub 上一个名为 “Recommender-System-with-Collaborative-Filtering-and-XGBoost” 的项目为例,深入探讨如何利用协同过滤和 XGBoost 算法构建强大的推荐系统。

    一、协同过滤:知己知彼,百战不殆

    协同过滤(Collaborative Filtering)是推荐系统中应用最广泛的算法之一,其核心思想是“物以类聚,人以群分”。简单来说,就是根据用户过去的喜好和行为,找到那些“志趣相投”的用户群体,并根据他们的喜好来预测你的偏好。

    举个例子:

    假设用户 A 和用户 B 都购买了书籍 X 和 Y,而用户 C 只购买了书籍 X。根据协同过滤算法,系统会认为用户 A 和用户 B 的兴趣较为相似,进而将用户 B 购买过的其他书籍推荐给用户 A,例如书籍 Z。

    协同过滤主要分为两种类型:

    1. 基于用户的协同过滤 (User-Based CF): 这种方法侧重于找到与目标用户兴趣相似的其他用户,并将这些用户喜欢的物品推荐给目标用户。
    2. 基于物品的协同过滤 (Item-Based CF): 这种方法侧重于计算物品之间的相似度,并将与用户已经喜欢的物品相似的物品推荐给用户。

    二、XGBoost:为预测模型注入强劲动力

    XGBoost (Extreme Gradient Boosting) 是一种强大的机器学习算法,以其高效性和预测精度著称。它属于梯度提升树 (GBDT) 算法的一种,通过不断迭代训练弱学习器(决策树),并将它们组合成一个强学习器,从而实现对目标变量的精准预测。

    在推荐系统中,XGBoost 可以利用用户的历史数据,例如:

    • 用户的浏览历史记录
    • 用户的购买记录
    • 用户对商品的评分
    • 用户的个人信息(年龄、性别、地域等)

    通过学习这些数据,XGBoost 可以预测用户对特定商品或服务的评分、点击概率、购买意愿等,从而为推荐系统提供更精准的决策依据。

    三、强强联手:协同过滤与 XGBoost 的完美结合

    在 “Recommender-System-with-Collaborative-Filtering-and-XGBoost” 项目中,开发者巧妙地将协同过滤和 XGBoost 结合起来,构建了一个更加精准的推荐系统。

    1. 首先,利用协同过滤技术,系统可以找到与目标用户兴趣相似的用户群体。 例如,使用基于用户的协同过滤,可以找到与目标用户观看过相同电影、购买过相同商品的用户群体。
    2. 然后,利用 XGBoost 算法,系统可以根据这些相似用户的历史数据,预测目标用户对特定商品或服务的评分。 例如,将这些相似用户对某部电影的评分、评价作为 XGBoost 模型的输入特征,预测目标用户对该电影的评分。
    3. 最后,根据预测的评分,系统将评分较高的商品或服务推荐给目标用户。

    这种结合了协同过滤和 XGBoost 的推荐系统,既可以充分利用用户之间的相似性,又可以利用 XGBoost 强大的预测能力,从而实现更加精准的个性化推荐。

    四、结语

    推荐系统已经成为互联网时代不可或缺的一部分,它不仅可以提升用户体验,还可以帮助企业更好地了解用户需求,制定更精准的营销策略。协同过滤和 XGBoost 作为推荐系统中常用的算法,它们的结合为构建更加精准、高效的推荐系统提供了新的思路。

    当然,推荐系统的设计和实现并非易事,需要根据具体的应用场景和数据特点选择合适的算法和策略。希望本文能够帮助读者更好地理解推荐系统的基本原理,并激发对这一领域的探索兴趣。

  • 突破次元壁的推荐系统:解密“套娃表征学习”

    在信息爆炸的时代,个性化推荐系统已经成为我们生活中不可或缺的一部分,从电商平台的商品推荐到社交媒体的内容推送,都离不开推荐系统的默默支持。而推荐系统成功的关键,在于如何精准地捕捉用户的喜好和物品的特征。近年来,深度学习技术的兴起为推荐系统带来了革命性的突破,其中,表征学习方法更是成为了研究的热点。

    传统的表征学习方法,要么平等地对待用户的每个偏好和物品的每个特征,要么将它们简单地划分到不同的类别中。然而,现实世界中,用户的偏好和物品的特征往往是以一种更为复杂和微妙的层次结构呈现的。例如,喜欢科幻小说的用户,可能对太空歌剧、赛博朋克等子类型有不同的偏好;而一部电影,也可能同时具备动作、爱情、悬疑等多种元素。

    为了更好地模拟这种层次化的结构,本文提出了一种全新的表征学习方法——套娃表征学习 (Matryoshka Representation Learning for Recommendation, MRL4Rec)。

    什么是套娃表征学习?

    顾名思义,套娃表征学习的灵感来源于俄罗斯套娃,它将用户和物品的向量表示重构为套娃表征。想象一下,每一个套娃都代表着用户偏好或物品特征的一个层次,从最外层的广泛兴趣到最内层的细粒度偏好,层层递进,形成一个多层次的结构。

    更具体地说,套娃表征是由维度递增且相互重叠的向量空间构成的。每个向量空间对应着用户偏好或物品特征的一个特定层次,而空间之间的重叠则反映了不同层次之间的关联性。这种巧妙的设计,使得套娃表征能够更全面、更精细地刻画用户和物品的信息。

    如何构建有效的套娃表征?

    构建有效的套娃表征,关键在于如何针对每个层次的特征学习到准确的向量表示。研究表明,针对每个层次构建特定的训练三元组至关重要。

    为此,本文提出了一种名为套娃负采样 (Matryoshka Negative Sampling) 的机制。简单来说,就是在每个层次上,根据用户的历史行为和当前层次的特征,选择合适的负样本,从而构建出更有效的训练数据。

    套娃表征学习的优势在哪里?

    相比于传统的表征学习方法,套娃表征学习具有以下优势:

    • 更精细的刻画能力: 能够更准确地捕捉用户和物品在不同层次上的特征,从而提高推荐的精准度。
    • 更强的可解释性: 每个层次的向量表示都对应着用户或物品的特定特征,便于理解推荐结果背后的原因。
    • 更广泛的适用性: 可以应用于各种类型的推荐系统,例如基于内容的推荐、协同过滤推荐等。

    实验结果表明,在多个真实数据集上,MRL4Rec 的表现都优于现有的多种先进方法,展现出了巨大的应用潜力。

    参考文献

    [1] Riwei Lai, Li Chen, Weixin Chen, Rui Chen. Matryoshka Representation Learning for Recommendation. arXiv preprint arXiv:2406.07432, 2024.


    Matryoshka 表征学习:下一代推荐系统的革新

    在现代信息社会中,推荐系统已经成为人们生活中不可或缺的一部分。从电商平台到流媒体服务,推荐系统帮助用户找到他们可能感兴趣的商品或内容。然而,如何更准确地捕捉用户的偏好和物品的特征,始终是推荐系统研究中的一个重要课题。今天,我们将探讨一项名为“Matryoshka 表征学习”的新方法,看看它如何在这个领域中实现突破。

    推荐系统的核心:表征学习

    推荐系统的核心在于表征学习,即如何在固定维度的用户和物品向量中捕捉用户偏好和物品特征。传统方法通常将每个用户偏好和物品特征视为均等,或者将它们分类到离散的集群中。然而,现实世界中的用户偏好和物品特征往往是层次化的。因此,我们需要一种新的表征学习方法来更好地捕捉这些层次关系。

    Matryoshka 表征学习方法

    正如俄罗斯套娃(Matryoshka)一样,用户偏好和物品特征可以在不同的层次上被表达和组织。基于这一理念,Riwei Lai 等人提出了一种名为“Matryoshka 表征学习”的新方法(MRL4Rec)。这种方法通过在逐渐增加维度和重叠的向量空间中重构用户和物品的向量,从而显式地表示不同层次的用户偏好和物品特征。

    理论基础

    MRL4Rec 的一个关键点在于,为每一层构建特定的训练三元组,这对于保证准确的 Matryoshka 表征学习至关重要。具体来说,构建这些训练三元组的方法被称为 Matryoshka 负采样机制。这一机制不仅确保了 Matryoshka 表征学习的有效性,还能够更好地捕捉层次化的用户偏好和物品特征。

    实验结果

    通过在多个真实数据集上的实验,研究人员发现 MRL4Rec 能够持续并显著地超越多种当前最先进的方法。这表明 Matryoshka 表征学习在捕捉用户偏好和物品特征的层次关系方面具有巨大潜力,为推荐系统的开发提供了一个新的方向。

    结语

    Matryoshka 表征学习为推荐系统带来了新的思路,通过层次化的表征方法,更加准确地捕捉用户偏好和物品特征。随着这一方法的不断发展和完善,我们有理由相信,未来的推荐系统将变得更加智能和高效。

    参考文献

    • Riwei Lai, Li Chen, Weixin Chen, Rui Chen. Matryoshka Representation Learning for Recommendation. arXiv:2406.07432. 2024. 链接

    Matryoshka Representation Learning for Recommendation: Summary and Answers

    This paper introduces Matryoshka Representation Learning for Recommendation (MRL4Rec), a novel approach to representation learning for recommendation systems. Here’s a breakdown of the key points:

    Problem: Existing representation learning methods struggle to capture the inherent hierarchical structure of user preferences and item features. They either treat all features uniformly or rely on discrete clustering, which can be limiting.

    Solution: MRL4Rec proposes a new representation structure called matryoshka representations. These representations organize user and item vectors into nested, incrementally dimensional vector spaces, resembling Russian nesting dolls (Matryoshka dolls). This structure allows for the explicit representation of user preferences and item features at different levels of granularity.

    Key Innovations:

    1. Matryoshka Representations: The hierarchical structure allows capturing broad preferences at higher levels and more specific interests at lower levels.
    2. Level-Specific Training Triplets: The paper argues that constructing training triplets specific to each level of the hierarchy is crucial for accurate representation learning.
    3. Matryoshka Negative Sampling: A novel negative sampling mechanism is proposed to generate effective training triplets, ensuring the model learns meaningful hierarchical relationships.

    Results: Experiments on real-life datasets demonstrate that MRL4Rec consistently outperforms state-of-the-art recommendation models.

    Code Availability: The authors have made their code publicly available (link provided in the paper).

    Answering your potential questions based on this paper:

    • What is the main contribution of this paper?
      • Introducing MRL4Rec, a novel representation learning method that uses matryoshka representations to capture the hierarchical nature of user preferences and item features for improved recommendation accuracy.
    • How does MRL4Rec differ from previous approaches?
      • Unlike methods treating features uniformly or using discrete clusters, MRL4Rec employs nested vector spaces to represent hierarchical relationships between preferences and features explicitly.
    • What is the significance of level-specific training triplets?
      • They ensure that the model learns accurate representations at each level of the hierarchy by providing targeted training data.
    • What is the role of matryoshka negative sampling?
      • It generates effective negative samples, crucial for training the model to distinguish between positive and negative relationships within each level of the hierarchy.

    This summary and the answers provide a comprehensive understanding of the key contributions and findings of the paper.


  • GPT4Rec:流式推荐中的图提示调优

    在个性化推荐系统领域,适应不断变化的用户偏好以及新用户和新项目的持续涌入是一个重要的挑战。传统的推荐模型通常依赖于静态的训练-测试方法,难以跟上这些动态需求。流式推荐,尤其是通过连续图学习,已经成为一种新颖的解决方案,吸引了学术界和工业界的广泛关注。然而,现有的方法要么依赖于历史数据重放,这在数据隐私法规日益严格的情况下变得越来越不切实际;要么无法有效解决过度稳定性问题;要么依赖于模型隔离和扩展策略,这需要大量的模型扩展,由于参数集庞大而导致更新耗时。为了解决这些困难,我们提出了GPT4Rec,一种用于流式推荐的图提示调优方法。

    1. 引言

    推荐系统(RS)在塑造个性化体验方面变得不可或缺,广泛应用于电子商务、在线流媒体、网络搜索等多个领域。推荐系统不仅指导用户在海量选项中做出选择,还推动了用户参与和客户满意度,使其成为数字平台成功的关键因素。在解码复杂用户偏好的多种技术中,图神经网络(GNN)因其能够巧妙地揭示用户-项目交互的复杂模式,在提升推荐精度和效果方面表现突出。

    然而,这些方法在现实世界中的应用往往未能兑现其通过基准数据集所做出的承诺。这种差异主要源于其传统的离线训练和测试方法。在这些场景中,模型在大型静态数据集上进行训练,然后在有限的测试集上进行评估,这一过程并未考虑现实世界数据的动态性质。与此形成鲜明对比的是,现实世界的推荐系统处于不断变化的状态,新用户偏好、项目和交互不断涌现,导致数据分布随时间变化。这不仅使得基于历史数据训练的模型难以有效处理新的多样化数据,同时在更新模型以适应新数据时,也面临着“灾难性遗忘”的风险。这一问题在推荐系统中尤为突出,因为保留旧的但相关的信息对于维持对用户偏好和行为的整体理解至关重要。

    2. 相关工作

    2.1 流式推荐

    传统的推荐系统受到静态数据集的限制,难以预测不断变化的用户偏好和趋势。流式推荐是一种动态方法,通过随时间更新数据和模型来解决这些挑战。初期研究主要关注项目的流行度、新颖度和趋势分析,最近的进展则将协同过滤和矩阵分解方法引入流式推荐中。此外,在线聚类的Bandits和协同过滤Bandits方法也逐渐兴起。图神经网络在流式推荐模型中的应用因其复杂关系建模能力而受到关注,这一转变代表了该领域的重大进步。

    2.2 连续学习

    连续学习(CL)旨在通过策略防止灾难性遗忘,并实现知识转移。主要算法分为三类:经验重放、模型正则化和模型隔离。最近,连续图学习在流式推荐系统中的应用引起了广泛关注,其重点是处理按时间顺序连续到达的数据,而不仅仅是按任务分割的数据。

    2.3 图提示调优

    提示调优广泛应用于自然语言处理(NLP)和计算机视觉(CV)领域,旨在弥合预训练任务和微调任务之间的差距。最近,这一技术在图形场景中的应用也逐渐增多,凸显了其多样性和有效性。在图神经网络(GNN)领域,多种创新的提示调优方法相继出现,如GPPT、GraphPrompt和All-in-One等。

    3. 预备知识

    我们首先形式化流式推荐的连续图学习问题,然后简要介绍本文中使用的三种经典图卷积推荐模型。

    3.1 定义与公式

    定义 1. 流式推荐。大规模用户-项目交互数据 ˜𝐷 持续流入工业推荐系统。为了方便,连续的数据流被分割为具有相同时间跨度的连续数据段 𝐷1, …, 𝐷𝑡 , …, 𝐷𝑇。在每个时间段 𝑡,模型需要优化在 𝐷𝑡 上的推荐性能,同时继承 𝐷1, 𝐷2, …, 𝐷𝑡 −1 的知识。推荐性能沿整个时间线进行评估。

    定义 2. 流式图。流式图表示为图的序列 𝐺 = (𝐺1, 𝐺2, …, 𝐺𝑡 , …𝐺𝑇),其中 𝐺𝑡 = 𝐺𝑡 −1 + Δ𝐺𝑡。𝐺𝑡 在时间 𝑡 是一个带属性的图,包含邻接矩阵 𝐴𝑡 和节点特征 𝑋𝑡。Δ𝐺𝑡 = (Δ𝐴𝑡 , Δ𝑋𝑡) 表示图结构和节点属性的变化。

    定义 3. 连续图学习。给定流式图 𝐺 = (𝐺1, 𝐺2, …, 𝐺𝑡 , …𝐺𝑇),连续图学习(CGL)的目标是在序列学习 Δ𝐺𝑡 (𝐷𝑡) 的同时,有效转移历史知识到新图段。

    4. 方法论

    我们提出了GPT4Rec方法,以应对流式推荐中的连续图学习问题。首先,我们分解复杂的用户-项目交互图为多个视图,以捕捉图中的独特交互模式。然后,我们设计了节点级和结构级的提示,分别用于适应节点属性变化和图结构变化。最后,我们创新性地设计了跨视图级提示以聚合多视图信息。

    4.1 复杂图的分解策略

    用户-项目交互图因其动态和互连特性而复杂。GPT4Rec通过一系列线性变换将图分解为多个视图,每个视图捕捉特定的交互方面。这种分解允许模型分别处理不同级别的关系变化,从而提高模型的适应性和精确性。

    4.2 提示设计

    4.2.1 节点级提示

    节点级提示主要针对图中单个节点的属性或特性,通过一组可学习参数引导模型适应节点特征的变化。这些提示通过上下文引导机制,在新数据到来时动态调整模型的关注点,使其能够快速适应新的节点特性。

    4.2.2 结构级提示

    结构级提示侧重于图中更广泛的连接模式和关系,通过消息传递机制适应整体图结构的变化。每个视图设计了一组可学习的结构级提示,以捕捉动态的图关系。

    4.3 分解表示的聚合

    多视图信息的聚合对于提供动态用户-项目交互的全面理解至关重要。我们提出了跨视图级提示来增强模型的动态适应性,通过更新一小组“代码簿”提示来调整注意力机制,从而高效地聚合多视图信息。

    4.4 讨论

    与传统的模型隔离和扩展方法不同,GPT4Rec通过一组上下文自适应提示实现知识的动态存储和适应。这些提示不直接存储知识,而是通过修改模型对新数据的解释和处理方式,以灵活、轻量的方式引导模型学习。

    4.5 理论分析

    我们进行了理论分析,以保证GPT4Rec在动态图上的正确性。理论分析表明,GPT4Rec至少具有与使用全数据进行全局微调相同的表达能力。

    5. 实验

    我们在四个真实世界的时间戳推荐数据集上进行了实验,以验证我们的提案。实验结果表明,GPT4Rec在各个数据集上均表现出色,显著优于现有基线方法。

    6. 结论

    本文提出了GPT4Rec,一种用于流式推荐的图提示调优方法。通过分解复杂的用户-项目交互图并设计多级提示,GPT4Rec能够高效地捕捉和适应动态交互模式,保持历史知识的完整性,并实现对新数据的快速适应。广泛的实验验证了GPT4Rec的有效性和效率。

    参考文献

    1. Kian Ahrabian, et al. “Structure aware experience replay for incremental learning in graph-based recommender systems.” CIKM (2021).
    2. Jie Cai, et al. “Multimodal continual graph learning with neural architecture search.” WWW (2022).
    3. Andreas Lommatzsch, et al. “Real-time recommendations for user-item streams.” SAC (2015).
    4. Mingchen Sun, et al. “GPPT: Graph pre-training and prompt tuning to generalize graph neural networks.” KDD (2022).

    本文展示了GPT4Rec在流式推荐系统中的应用,通过创新性的图提示调优方法,解决了传统方法在动态数据环境中的诸多挑战,为推荐系统的持续学习和适应性提供了新的思路。


    GPT4Rec: A Summary and Analysis

    The provided document introduces GPT4Rec, a novel approach for streaming recommendation using graph prompt tuning. Here’s a breakdown of the paper’s key aspects:

    Problem: Traditional recommender systems struggle to adapt to the dynamic nature of user-item interactions. New users, items, and preferences constantly emerge, leading to a distribution shift between training and real-world data. This often results in catastrophic forgetting, where models lose valuable knowledge from past data while trying to learn from new information.

    Existing Solutions and their limitations:

    • Replay Buffer: These methods store a subset of past data and replay it during training. However, they are limited by buffer size and raise privacy concerns.
    • Model Regularization: These techniques constrain model parameters to prevent drastic changes. However, they struggle when new data significantly deviates from past patterns.
    • Model Isolation and Expansion: These approaches isolate old knowledge and create new learning spaces for new data. However, they lead to increased model complexity and slow updates.

    GPT4Rec’s Approach:

    1. Disentangling Complex Graphs: GPT4Rec divides the user-item interaction graph into multiple views using linear transformations. This allows the model to focus on specific aspects of the graph, such as user-to-item interactions or item-to-item similarities, without losing sight of the overall interconnectedness.
    2. Adaptive Learning with Prompts: GPT4Rec employs three types of prompts to guide the model’s learning process:
      • Node-Level Prompts: These prompts capture changes in individual node attributes or properties. They are weighted based on their relevance to specific nodes, allowing the model to focus on the most pertinent information.
      • Structure-Level Prompts: These prompts capture broader patterns of connectivity and relationships within the graph. They decompose sub-graph structures into smaller, more manageable components, enabling the model to adapt to changes in the overall graph topology.
      • View-Level Prompts: These prompts aggregate information from the different disentangled views, ensuring a comprehensive understanding of the evolving graph.

    Advantages of GPT4Rec:

    • Efficient Adaptation: GPT4Rec’s prompt-based approach allows for rapid adaptation to new data streams without requiring extensive model modifications.
    • Knowledge Preservation: By strategically utilizing prompts, GPT4Rec retains valuable knowledge from past data while effectively incorporating new information.
    • Theoretical Guarantees: The paper provides theoretical analysis demonstrating that GPT4Rec possesses at least the expressive power of global fine-tuning.

    Evaluation:

    The paper claims that GPT4Rec outperforms state-of-the-art baselines on four real-world datasets, demonstrating its effectiveness for streaming recommendation.

    Overall, GPT4Rec presents a promising solution for addressing the challenges of streaming recommendation by leveraging graph prompt tuning. Its ability to disentangle complex graphs, adapt to evolving data patterns, and preserve valuable knowledge makes it a significant contribution to the field.

  • Pyraformer: 低复杂度金字塔注意力在长序列时间序列建模和预测中的应用

    时间序列数据的分析和预测在许多领域中具有重要意义,如决策制定和风险管理。本文将介绍一种名为Pyraformer的新模型,该模型通过探索时间序列的多分辨率表示,提出了一种低复杂度的金字塔注意力机制用于长序列时间序列的建模和预测。

    引言

    时间序列预测是许多下游任务的基础,例如决策制定和风险管理。例如,在线流量的可靠预测可以为云系统中潜在风险提供早期预警,同时也为动态资源分配提供指导,以最小化成本而不降低性能。除了在线流量,时间序列预测在疾病传播、能源管理以及经济和金融等领域也有广泛应用。

    时间序列预测的主要挑战在于构建一个强大但简洁的模型,能够紧凑地捕捉不同范围的时间依赖性。时间序列通常表现出短期和长期重复模式,考虑这些模式是精确预测的关键。特别是处理长范围依赖的任务更加困难,这通常通过信号传递路径的长度来衡量。路径越短,依赖关系捕捉得越好。同时,为了让模型学习这些长期模式,输入的历史数据也应该足够长。因此,低时间和空间复杂度是优先考虑的。

    现有的最先进的方法难以同时实现这两个目标。RNN和CNN在时间复杂度方面表现良好,但它们的信号传递路径长度较长,难以学习远距离的位置依赖。另一方面,Transformer虽然缩短了信号传递路径,但增加了时间复杂度。为了在模型能力和复杂度之间找到平衡,出现了一些Transformer的变种,如Longformer、Reformer和Informer。然而,很少有方法能够在大幅降低时间和空间复杂度的同时实现短的最大路径长度。

    Pyraformer模型概述

    为了解决上述问题,本文提出了一种新型的基于金字塔注意力的Transformer模型(Pyraformer)。具体来说,开发了一种金字塔注意力机制,通过在金字塔图上基于注意力的消息传递来描述时间序列的时间依赖性。该图中的边可分为两组:跨尺度和同尺度连接。跨尺度连接构建了原始序列的多分辨率表示,而同尺度连接捕捉了各分辨率下的时间依赖性。这样,该模型通过在较粗的分辨率下捕捉长范围的行为,提供了对远距离位置之间长期时间依赖性的紧凑表示,从而缩短了信号传递路径的长度。此外,在不同尺度上通过稀疏的邻接同尺度连接建模不同范围的时间依赖性显著降低了计算成本。

    金字塔注意力模块(PAM)

    金字塔注意力模块(PAM)是Pyraformer的核心。通过金字塔图以多分辨率的方式描述观察到的时间序列的时间依赖性。金字塔图可以分解为两部分:跨尺度和同尺度连接。跨尺度连接形成了一棵C叉树,其中每个父节点有C个子节点。例如,如果将金字塔图的最细尺度与原始时间序列的小时观察值相关联,则较粗尺度的节点可以看作是时间序列的每日、每周甚至每月模式。因此,金字塔图提供了原始时间序列的多分辨率表示。此外,通过简单地连接邻近节点来捕捉各分辨率下的时间依赖性,可以在较粗尺度上更容易地捕捉长范围依赖性。

    粗尺度构建模块(CSCM)

    CSCM的目标是初始化金字塔图在较粗尺度上的节点,从而促进后续的PAM在这些节点之间交换信息。具体来说,通过在对应的子节点上执行卷积操作,逐层引入粗尺度节点。卷积层的步长和核大小均为C,经过多层卷积操作后,得到不同尺度上的序列,形成一棵C叉树。为了减少参数和计算量,在输入嵌入序列到卷积层之前,通过全连接层减少每个节点的维度,并在所有卷积操作完成后恢复原始维度。

    预测模块

    对于单步预测,在输入嵌入层之前,向历史序列的末尾添加一个结束标记。在PAM编码序列后,收集金字塔图中所有尺度上的最后一个节点的特征,进行串联后通过全连接层进行预测。

    对于多步预测,提出了两种预测模块。第一种与单步预测模块相同,但将所有尺度上的最后一个节点映射到所有未来时间步。第二种则采用具有两个全注意力层的解码器。具体来说,类似于原始Transformer,将未来时间步的观测值替换为0,嵌入它们并将观测值、协变量和位置嵌入的和称为“预测标记”。第一个注意力层将预测标记作为查询,PAM的输出作为键和值,生成解码器输出。第二层将解码器输出作为查询,解码器输出和PAM的输出作为键和值。历史信息直接输入到两个注意力层中,因为这些信息对精确的长范围预测至关重要。

    实验结果与分析

    在四个真实世界数据集上进行了广泛的实验,包括Wind、App Flow、Electricity和ETT。结果显示,Pyraformer在单步和长范围多步预测任务中表现出色,且时间和内存消耗较低。

    单步预测

    在Electricity、Wind和App Flow数据集上进行了单步预测实验。结果表明,Pyraformer在NRMSE和ND指标上优于其他Transformer变种,且具有最少的查询-键点积数量。

    长范围多步预测

    在Electricity、ETTh1和ETTm1数据集上进行了长范围多步预测实验。结果显示,无论预测长度如何,Pyraformer在所有数据集上的表现均优于其他模型,并且具有最少的查询-键点积数量。

    计算时间和内存消耗

    通过实验验证了基于TVM实现的定制CUDA内核的效率。结果表明,Pyraformer的时间和内存消耗与序列长度近似呈线性关系,且显著低于全注意力和概率稀疏注意力机制,特别是对于较长的时间序列。

    结论与展望

    本文提出了Pyraformer,一种基于金字塔注意力的新型模型,能够在低时间和空间复杂度下有效描述短期和长期时间依赖性。实验结果表明,Pyraformer在单步和长范围多步预测任务中均优于现有最先进模型,且计算时间和内存消耗较低。未来的工作将探索如何从数据中自适应地学习超参数,并将Pyraformer扩展到自然语言处理和计算机视觉等其他领域。

    参考文献

    • Shizhan Liu, Hang Yu, Cong Liao, Jianguo Li, Weiyao Lin, Alex X. Liu, Schahram Dustdar. “Pyraformer: Low-Complexity Pyramidal Attention for Long-Range Time Series Modeling and Forecasting.” ICLR 2022. PDF
    • Vaswani, Ashish, et al. “Attention is all you need.” Advances in neural information processing systems. 2017.
    • Zhou, Haoyi, et al. “Informer: Beyond efficient transformer for long sequence time-series forecasting.” AAAI. 2021.
    • Beltagy, Iz, Matthew E. Peters, and Arman Cohan. “Longformer: The long-document transformer.” arXiv preprint arXiv:2004.05150 (2020).
    • Kitaev, Nikita, Łukasz Kaiser, and Anselm Levskaya. “Reformer: The efficient transformer.” International Conference on Learning Representations. 2019.

    Summary of “Pyraformer: Low-Complexity Pyramidal Attention for Long-Range Time Series Modeling and Forecasting”

    This paper proposes Pyraformer, a novel Transformer-based model designed to address the challenges of long-range time series forecasting. The key innovation lies in its pyramidal attention module (PAM), which efficiently captures both short-term and long-term dependencies in time series data.

    Here’s a breakdown of the paper’s key aspects:

    Problem: Existing time series forecasting methods struggle to balance computational efficiency with the ability to capture long-range dependencies. RNNs and CNNs are efficient but struggle with long sequences, while Transformers, while good at capturing long-range dependencies, suffer from quadratic complexity.

    Proposed Solution: Pyraformer

    • Pyramidal Attention Module (PAM):
      • Employs a multi-resolution pyramidal graph to represent the time series.
      • Inter-scale connections: Form a C-ary tree where each level summarizes information at a different resolution (e.g., hourly, daily, weekly).
      • Intra-scale connections: Capture temporal dependencies within each resolution by connecting neighboring nodes.
      • This structure allows for efficient modeling of long-range dependencies by capturing them at coarser resolutions.
    • Coarser-Scale Construction Module (CSCM): Initializes the nodes at coarser scales using convolutions applied to finer-scale representations.
    • Prediction Module:
      • Single-step forecasting: Gathers features from all scales and uses a fully connected layer for prediction.
      • Multi-step forecasting: Offers two options:
        • Similar to single-step but maps to multiple future time steps.
        • Utilizes a decoder with two full attention layers for incorporating historical information.

    Advantages:

    • Low Complexity: Achieves linear time and space complexity (O(L)) thanks to the sparse connections in the pyramidal graph.
    • Long-Range Dependency Capture: Maintains a constant maximum signal traversing path length (O(1)), enabling efficient modeling of long-range dependencies.
    • Improved Accuracy: Outperforms existing methods in both single-step and long-range multi-step forecasting tasks.

    Key Results:

    • Pyraformer consistently achieves higher prediction accuracy compared to other Transformer variants and traditional methods on various real-world datasets.
    • It achieves this while maintaining significantly lower time and memory consumption, especially for long sequences.

    Overall, Pyraformer presents a promising solution for long-range time series forecasting by effectively balancing model complexity and the ability to capture long-term dependencies.


  • 使用卷积神经网络发现有影响力的文本

    作者:Megan Ayers, Luke Sanford, Margaret E. Roberts, Eddie Yang
    所属机构:1耶鲁大学, 2加州大学圣地亚哥分校

    摘要

    在社会科学中,实验方法常用于估计文本对人类评价的影响。然而,实验环境中的研究人员通常只限于测试少量预先指定的文本处理方法。这些处理方法往往是主观选择的,可能无效或缺乏外部效度。近年来,对未结构化文本进行挖掘以寻找因果影响特征的努力不断增加,但这些模型主要集中于文本的主题或特定词汇,而这些可能并不是效果的机制。我们将这些努力与自然语言处理(NLP)可解释性技术相结合,提出了一种方法,利用卷积神经网络(CNN)灵活地发现预测人类对文本反应的相似文本短语簇。在实验环境中,该方法可以在某些假设下识别文本处理及其效果。我们将该方法应用于两个数据集,第一个数据集验证了模型检测已知导致结果的短语的能力,第二个数据集展示了其灵活发现具有不同文本结构的文本处理的能力。在两种情况下,模型学习到的文本处理比基准方法更多样化,并且这些文本特征在预测结果方面定量上达到或超过了基准方法的能力。

    引言

    文本对许多领域的结果和决策产生影响。例如,研究人员已经调查了竞选信息对投票的影响(Arceneaux 和 Nickerson,2010),帖子内容对审查的影响(King 等人,2014),临床笔记对诊断和治疗的影响(Sheikhalishahi 等人,2019),以及书面简介对公民身份决定的影响(Hainmueller 和 Hangartner,2013)。大多数估计文本对人类评价影响的实验方法是随机分配一些受试者到由研究人员事先选择的少量处理文本。这些处理方法通常是主观选择的,可能无效或缺乏外部效度。最近的计算社会科学文献试图从未结构化文本中发现对感兴趣结果有影响的处理方法(Fong 和 Grimmer,2016;Pryzant 等人,2018)。

    在这项工作中,我们将这些使用文本处理进行因果推断的努力与可解释机器学习领域相结合(Jacovi 等人,2018;Alvarez Melis 和 Jaakkola,2018)。以文本为处理方法的因果推断方法旨在识别对结果产生因果影响的低维文本特征表示。我们引入了一种新的应用,结合了上下文化的词嵌入、卷积神经网络(CNN)和可解释性方法,以检测和解释这些潜在的文本表示。与之前识别文本处理的方法不同,这些学习到的表示可以在长度和结构上变化,不受限于表示文档级别的一组主题或特定词汇。我们将该方法应用于两个数据集:微博上的社交媒体帖子,结果是帖子是否被审查,以及提交给消费者金融保护局的投诉,结果是投诉者是否及时收到回应。在这两种情况下,我们的方法提取了质量上不同的处理,并且在定量性能指标上达到或超过了基准方法。

    相关工作

    计算社会科学与因果推断

    之前的工作生成了方法来同时发现处理并估计其效果(Fong 和 Grimmer,2016;Pryzant 等人,2018;Egami 等人,2018;Fong 和 Grimmer,2021;Feder 等人,2022)。这些模型通常集中于估计主题或单词作为处理。Fong 和 Grimmer(2016)应用监督的印度自助餐过程,既发现特征(主题),又在随机对照试验(RCT)设置中估计其对结果的影响。Pryzant 等人(2018)使用 n-gram 特征代替主题,并使用一种从网络权重中提取特征重要性的方法构建了神经架构。我们的模型扩展了这项工作,允许将一般相似的短语组(而不是主题或唯一单词)识别为处理。我们预计我们的方法在结果可能由灵活表达的概念(例如,可以用可互换同义词传达的情感)而非特定单词或文档的全部主题内容引起的情况下效果特别好。

    可解释的 NLP

    许多方法已经被提出用于解释和解释 NLP 模型,以及这些方法的元评估(Lei 等人,2016;Alvarez Melis 和 Jaakkola,2018;Rajagopal 等人,2021;Alangari 等人,2023;Crothers 等人,2023;Lyu 等人,2023)。这些方法大多集中于解释和解释个体样本级别的预测。相比之下,我们的方法旨在学习和解释在语料库级别发生的更广泛的模式。在这方面,Rajagopal 等人(2021)要求他们的模型使用“全局”概念解释预测,Jacovi 等人(2018)专门解释 CNN 学习到的潜在特征,最接近我们的工作。个别标记对人类来说不可解释或单独有说服力,因此如 Alvarez Melis 和 Jaakkola(2018)一样,我们要求网络在表示学习组件之后有一个可解释的最终层。与试图理解网络做出预测的原因不同,我们寻求的是科学家可以在后续实验中测试其效果的有影响力的语料库级特征的表示。例如,如果模型识别出日历日期的存在是确定及时回应投诉的全球性有影响力特征,研究人员可能设计两个文本,仅通过包括日期进行区分,并在受控实验中比较其效果。

    其他现有的 NLP 技术可以适应这种方法。例如,说服性和非说服性文本之间的差异(Zhong 等人,2022)可以用来识别有说服力的概念。虽然任何能够学习有影响力文本特征的语料库级低维表示的方法都可以用于识别文本处理,但关键挑战是能够捕捉复杂的特征表示,同时保持人类可解释。这需要在表示学习中具备复杂性,但在理解所学的文本处理的效果的估计中保持清晰。在实验中,我们提出的模型有效地实现了这种平衡。

    从潜在表示中提取有影响力的文本

    我们的目标是提取代表潜在的、可概括的处理的短语簇,这些处理会影响特定结果。为此,我们想象 N 个文本(Ti)被随机分配到一个过程中,通过该过程它们被映射到一个结果(Yi)。让 i 也索引评估文本 i 的个体。我们寻求识别和估计这些文本的 m 维潜在表示(Zi)的效果,该表示总结了可能在反复实验中影响结果的短语或概念簇。我们将 Zi 称为文本 i 的“文本处理”。例如,Zi 的每个元素可以表示某个短语或语法结构的存在或不存在,Zi ∈ {0, 1}m。Zi 也可以包含表示连续文本特征的实值元素,如与某个词汇或概念一致的相似性。

    为了模拟一个顺序实验设置,我们遵循 Egami 等人(2018)的做法,将样本分为训练集和测试集。我们首先训练模型,在训练集内使用交叉验证进行调整和模型选择。然后,我们使用测试数据集解释发现的潜在文本处理,并在附加假设下估计其对结果的影响。我们的主要贡献在于第一阶段:在文本数据和文本处理(Zi)之间发现映射的 CNN 模型的新颖使用。

    Fong 和 Grimmer(2016,2021)概述了在处理为二进制的情况下,该一般过程识别文本处理对结果的因果效应的条件。他们假设:1)个体的处理仅取决于其分配的文本,2)任何非文本特征或不被模型捕获的潜在文本特征对评估者的反应(Yi)的影响是独立于模型捕获的潜在特征的,3)在给定未测量的文本特征的情况下,每个评估者接收任何可能的文本处理的概率是非零的,4)文本是随机分配的,5)潜在处理不是完全共线的。如果这些假设成立,我们的模型可以识别发现的潜在特征的处理效应。在连续处理变量的情况下,与连续处理变量的线性建模假设一起,可以使用线性回归估计这些效应。然而,由于很难评估这些假设是否成立—特别是假设2,我们建议在可能的情况下,实践者使用我们的方法建议在受控实验中研究的处理。

    方法论

    我们建议利用 CNN 的结构来识别有影响力的文本处理。卷积层中的滤波器将文本短语投影到低维表示空间,然后在每个样本的所有短语中进行最大池化,以预测结果(图1)。通过训练模型生成预测的最大池化表示,激励滤波器检测有影响力的 n-gram 模式(Jacovi 等人,2018)。这些模式可以对应于特定的关键词或具有相似词汇、语法结构或语调的关键词簇。例如,研究人员可以测试这些模式在文本中出现时对结果的影响。

    上下文编码器

    我们使用预训练的 BERT 模型(Devlin 等人,2019)对输入文本样本(Ti)进行标记,并获得上下文相关的词嵌入。我们将这些嵌入表示为 ei,j ∈ RD,其中 i 索引每个文本样本,j 索引标记(ui,j),D 表示嵌入维度。考虑到社会科学家的可访问性,我们使用了缩小版模型(Jiao 等人,2020),并且没有进行微调。对于计算预算较少的研究人员来说,使用更大或更复杂的模型并/或在其结果上微调这些模型可能会发现模型性能有所提高。任何提供文本嵌入的模型都可以替代 BERT。我们在创建训练-测试划分之前执行嵌入步骤,但选择微调其嵌入模型的研究人员应逆转这些步骤,以便仅在训练集上进行微调和训练。

    模型架构

    输入的文本嵌入序列 {ei,j}j 传递给一维卷积层 C,或者传递给平行的 M 个这种层(Cl),每个层具有灵活的核大小 Kl 和 F 个滤波器。唯一核大小的平行卷积层的数量决定了平行卷积层的数量。更高数量的滤波器 F 对应于学习更多潜在的文本特征。在我们的实现中,所有卷积层学习相同数量的滤波器。核大小 K 决定了滤波器窗口的大小,即每个卷积层考虑的短语长度。包括多种核大小的滤波器允许模型捕捉不同长度的模式。对于层 C 中核大小为 K = 5 的滤波器 f,卷积操作在输入文本的五个标记短语 pi,1, …, pi,P ∈ RK×D 上生成新特征 ai,f = g(Wf · pi + b),其中 Wf 和 b 是滤波器 f 的学习权重和偏差,g 是 sigmoid 激活函数。我们将这些特征称为“滤波器激活”,ai,f ∈ RP。通过最大池化层对每个文本样本进行汇总,仅保留每个滤波器在文本短语中的最高激活。然后将每个滤波器的最大池化激活 apooled
    i,f ∈ R 连接在平行卷积层之间。然后将连接的最大池化激活传递到最终的全连接层。最终层的激活 ˆYi 对应于模型预测。

    训练

    模型使用 Adam 优化器(Kingma 和 Ba,2017)训练,损失函数如下:

    [
    L = – \frac{1}{N} \sum_i \left( Y_i \log(\hat{Y_i}) + (1 – Y_i) \log(1 – \hat{Y_i}) \right) + \lambda_{\text{conv}} \sum_{\text{ker},k,d,f} (W_{\text{conv}}^{\text{ker}}){k,d,f}^2 + \lambda{\text{conv}} \sum_{\text{act}} \max(R) + \lambda_{\text{out}} \sum_{\text{ker}} |W_{\text{out}}^{\text{ker}}|
    ]

    其中 R 是一个 F x F 矩阵,定义如下:

    [
    R_{f,g} = \begin{cases}
    \max(\text{cor}(\tilde{a_f}, \tilde{a_g}), 0) & \text{for } f \neq g \
    0 & \text{for } f = g
    \end{cases}
    ]

    其中 (\tilde{a_f} \in \mathbb{R}^{N \cdot P}) 表示滤波器 f 在所有 N 样本的 P 短语中的激活向量。第一个项是相对于模型预测的二进制交叉熵损失。我们选择了这个全局损失,因为在我们这里展示的两个应用中,结果都是二进制的,但可以很容易地替换为 RMSE 或者更适合连续结果的其他损失。第二项是应用于卷积层权重 (W_{\text{conv}} \in \mathbb{R}^{K \times D \times F}) 的 L2 正则化惩罚。第三项表示一个活动正则化,惩罚两个滤波器激活之间的最大非负相关性。这惩罚了学习冗余滤波器的模型(通过高相关性激活测量),鼓励卷积层识别更多不同的文本特征(附录 A:图 4)。对于 M > 1 的模型,第二和第三项在每个卷积层的和中重复。第四项是应用于最终全连接层权重 (W_{\text{out}} \in \mathbb{R}^{F \cdot M}) 的 L1 正则化惩罚。每个惩罚的强度由 (\lambda_{\text{conv}}, \lambda_{\text{act}}) 和 (\lambda_{\text{out}}) 控制。

    这些惩罚强度和其他超参数是通过使用训练集的五折交叉验证程序确定的。由于这些模型的动机主要是解释学习到的特征,而不是预测性能,模型选择比简单地选择最高准确率的参数设置更为主观。我们根据准确率、特征冗余的相关性程度以及学习到的“有用”滤波器数量的组合选择模型。应用中选择的模型参数设置在附录中报告。然后使用整个训练集重新训练最终选择的模型,随机抽取的 20% 作为验证集,并使用未见的测试集进行评估。

    识别和测试有影响力的文本特征

    为了解释模型学习到的潜在表示并发现每个文本的文本处理(Zi),我们利用了三个模型组件:

    1. 每个滤波器 f 的每个文本样本短语的滤波器激活(ai,f);
    2. 输出层权重(W out ∈ RF ·M);
    3. 输入文本样本(Ti)。

    滤波器激活表示每个短语与每个滤波器学习到的表示的强度。为了便于解释并为每个滤波器分配手动标签,我们检查每个滤波器的最大激活短语。最终层权重确定每个文本表示如何对最终结果预测做出贡献。最后,原始输入文本样本为高激活的短语提供上下文。由于文本嵌入是上下文相关的,每个短语的嵌入包含比单个标记更多的信息,这些标记缺乏整个样本的上下文。然而,由于文本嵌入维度难以解释,人类读者在阅读整个样本时分配给短语的上下文无法确认与编码的上下文一致。

    评估方法

    我们通过将模型与两种基准方法进行比较来评估我们的模型。第一种是 Fong 和 Grimmer(2016)提出的方法,该方法使用主题建模方法发现和解释潜在的文本处理。我们将这种方法缩写为 F&G。第二种是对语料库中的 n-gram 词汇进行正则化逻辑回归,我们将其缩写为 RLR。通过评估线性模型使用每种方法识别的文本处理预测结果变量的调整 R 平方,以及评估这些线性模型在样本外文本上的均方误差,进行定量比较。我们通过计算数据的 1000 个自助样本的指标,使这些比较对采样变异性具有鲁棒性,固定训练好的模型(因此也固定了学习到的潜在特征)。为了更好地了解我们提出的模型和基准模型的训练过程的稳定性,我们重复了这个过程,但另外在训练数据的 150 个自助样本上重新训练模型(固定调整的参数设置)。通过评估学习到的文本特征的可解释性和多样性进行定性比较。在审查应用中,已知哪些短语导致审查的真实信息使我们能够通过其恢复已知因果效应的文本处理的能力来比较方法。基准方法的实现细节和完整的解释结果包括在附录 B 中。

    实验

    为了充分展示我们的方法能够实现的定性和实质性结果,我们集中在两个数据集上进行实验。第一个数据集因为稀有的真实信息而被选中,第二个数据集因为其在相关研究中的使用而被选中,以探索有影响力的文本特征可能表现出复杂和多样结构的设定。我们采用深度优先而不是广度优先的方法,但未来的工作应在更大范围的数据集上评估这种方法。虽然该方法可以推广到任何文本被认为会导致结果的数据集,但具有关于这种关系的真实信息的数据集是理想的(尽管罕见),因为它们可以展示成功识别因果关系和效应。

    微博帖子审查

    数据集和设置

    对于我们的第一个应用,我们使用了28,386条来自Weibo-Cov数据集的微博帖子(Hu等人,2020)。这些是关于COVID的社交媒体帖子,发布于2020年2月的微博上。为了获取每个帖子的审查标签,我们使用了来自百度的内容审核API。该API是一个分类器,为每个帖子返回审查的概率。API仅在社交媒体帖子包含在百度黑名单上的单词或短语时返回概率1。由于API还返回标记的关键词和短语,这使我们能够验证我们的模型是否可以恢复导致审查的关键词和短语。

    我们训练我们的模型来预测帖子是否被API标记为审查概率为1。尽管这个结果不是由直接的人类决策决定的,但我们可以将黑名单视为一个完美实现一组人类定义偏好的决策者(这些偏好可能或可能不代表更广泛的审查政策)。为了对这些文本进行标记和嵌入,我们使用了由哈尔滨工业大学和iFLYTEK联合实验室提供的预训练BERT中文语言模型MiniRBT-h288(Yao等人,2023)。该模型具有288维的嵌入维度和12.3M参数。我们使用BERT模型最后一个隐藏状态的嵌入作为我们模型架构的输入特征。数据集中帖子示例、其审查概率及其审查词(如适用)及其英文翻译见附录A表3。附录A表4显示了所有审查概率为1的样本中前10个审查词、其翻译及对应的审查样本比例。

    结果

    训练好的模型在测试集上获得了0.87的准确率。在模型重复训练在重新采样数据并重新评估的迭代中,模型分类准确率相对稳定(值在[0.84, 0.88]之间,平均为0.86)。这表明模型学习到了有用的表示,这些表示可以预测该时期的微博帖子是否会被审查。基于参数调优结果,该模型由两个卷积层组成,核大小分别设置为5和7个中文字符。我们在表1中重点解释了最相关的表示,所有表示的解释见附录A表7。我们发现,模型清晰地识别出了两种最常被审查的短语,“武汉病毒”(23.9%的被审查帖子)和“国家危机”(4.9%的被审查帖子),它们在模型的第一个和第二个滤波器中被识别出来。最大池化激活对这些滤波器的最大贡献见于表中的W out列。滤波器3和9的最高激活短语共同具有另外两个已知的审查短语,“省委书记”和“新天地教会”,滤波器10的最高激活短语完全集中在同一个短语上,该短语涉及第五个已知的审查短语“蒋超良”。完整的表示解释集显示了滤波器学习到的关键词存在某种冗余。在其他设置中,它们在句子结构和上下文中的差异可能具有启发性,尽管在这种情况下,已知这些短语的包含单独影响结果。作为概念验证,我们包括了通过对测试样本的最大池化滤波器激活进行回归获得的效应估计,尽管这种设置不符合典型的实验设计。尽管估计效应的大小与输出层权重不同(很大程度上因为输出层权重对应于sigmoid而不是线性激活),但它们在哪些文本处理被发现对审查最有影响方面相对一致。

    模型验证

    我们发现这种方法成功恢复了导致最多帖子被审查的短语。在没有审查理由的情况下,我们相信研究人员可以使用这个模型确定至少五种最常见的审查短语。相比之下,我们发现F&G方法学习到的主题与任何最常见的审查短语都不清晰对齐(附录B:表12)。逻辑回归模型选择的n-gram词组部分对应于三个常见的审查短语:“武汉病毒”,“蒋超良”和“省委书记”(附录B:表13)。我们的模型在图2报告的两个指标上都优于基准方法,这表明我们模型学习到的特征解释审查结果的变异性显著更多,并且在预测能力方面比基准方法学习到的主题和关键词更好。

    消费者金融保护局投诉响应

    数据集和设置

    对于我们的第二个应用,我们使用了Egami等人(2018)从2015年3月到2016年2月提交给消费者金融保护局(CFPB)的54,816个消费者投诉叙述的数据集。结果变量表示投诉者是否及时收到了公司的回应。由于结果变量严重不平衡,我们继续使用一个包含及时响应(5136个及时响应和1712个非及时响应)的子样本,并结合一个类别加权的损失函数。为了对投诉文本进行标记和嵌入,我们使用了由Google Research训练的预训练BERT英文语言模型bert-tiny(Turc等人,2019;Bhargava等人,2021)。该模型具有128维的嵌入维度和4M参数。

    结果

    训练好的模型在测试集上获得了0.76的准确率和0.33的F1分数。在模型重复训练在重新采样数据并重新评估的迭代中,模型分类准确率相对一致,值在[0.72, 0.79]之间,平均为0.75。F1分数观察到较大的变化,值在[0.12, 0.44]之间,平均为0.31。考虑到使用的数据集的有限规模、类别不平衡和这个学习任务的相对复杂性,模型获得较低的性能并不意外,但学习到的表示仍提供了关于数据集中文本处理的有意义的见解。

    表2总结了模型学习到的前8个表示(根据最终层权重)的解释。所有滤波器的解释见附录A表10。该模型具有一个卷积层,核大小设置为5个标记,这是通过参数调优选择的。我们推断,提到信用纠纷和银行业务流程可能与及时响应正相关,而提到试图收债、电话或语音邮件、以前的互动或发薪日贷款可能与及时响应负相关。除了这些较广泛的主题之外,我们还发现,在描述争议行动时使用不定式动词可能会增加及时响应的可能性,而使用缩略形式可能会产生相反的效果。表2还包括测试集标签与文本的最大池化滤波器激活进行回归的效应估计。同样,我们认为这些效应的因果解释假设不太可能成立,但估计仍可以作为研究人员探索后续实验的文本处理的有用工具。

    模型评估

    在这个应用中,我们无法访问投诉收到或未收到及时响应的真实原因,并且设想各种文本特征可能会影响这个结果。两种基准方法都检测到某些金融主题似乎与及时响应相关(附录B:表15、16)。特别是,所有模型的结果都表明提到收债与及时响应负相关,而提到银行业务流程和信用问题与及时响应正相关,尽管估计的大小有所不同。除了这些共享的主题之外,我们的模型独特地学习到预测结果的语法文本特征。尽管所有模型在其识别的文本特征的样本外预测能力方面表现相似,我们的模型结果在R2 adj值方面比基准方法略高(图3)。

    结论

    我们提出了一种新的方法,通过灵活长度的短语簇来发现有影响力的文本特征。我们的方法受到计算社会科学和可解释NLP先前工作的启发,并在其基础上进行改进,为实验者提供了一种定量工具,用于识别后续实验中测试的有前景的文本处理。当研究人员愿意做出第3节讨论的更强的识别假设时,使用模型识别的文本处理还可以直接用于估计测试集上的因果效应。我们的应用展示了模型学习有用和多样化潜在文本表示的能力,以及恢复已知有影响力文本特征的能力。未来工作的重要方向包括进行人类可解释性评估,以严格比较我们的方法与基准方法的定性方面。评估跨模型运行识别的潜在文本处理的稳定性的方法对进行后续受控实验的实践者也将是有用的。

    参考文献

    • Arceneaux, K., & Nickerson, D. W. (2010). Comparing negative and positive campaign messages: Evidence from two field experiments. American Politics Research, 38(1), 54-83.
    • King, G., Pan, J., & Roberts, M. E. (2014). Reverse-engineering censorship in China: Randomized experimentation and participant observation. Science, 345(6199), 1-10.
    • Sheikhalishahi, S., Miotto, R., & Weng, C. (2019). Natural language processing of clinical notes on chronic diseases: Systematic review. JMIR Medical Informatics, 7(2), e12239.
    • Hainmueller, J., & Hangartner, D. (2013). Who gets a Swiss passport? A natural experiment in immigrant discrimination. American Political Science Review, 107(1), 159-187.
    • Fong, C., & Grimmer, J. (2016). Discovery of treatments from text corpora. Proceedings of the 54th Annual Meeting of the Association for Computational Linguistics (Volume 1: Long Papers), 1608-1617.
    • Pryzant, R., Diaz, M., & Liu, Y. (2018). Deconfounded lexicon induction for interpretable social science. In Proceedings of the 2018 Conference on Empirical Methods in Natural Language Processing, 1686-1695.
    • Jacovi, A., & Goldberg, Y. (2018). Towards faithfully interpretable NLP systems: How should we define and evaluate faithfulness? In Proceedings of the 2018 Conference on Empirical Methods in Natural Language Processing, 4198-4208.
    • Alvarez Melis, D., & Jaakkola, T. S. (2018). Towards robust interpretability with self-explaining neural networks. In Advances in Neural Information Processing Systems, 7775-7784.
    • Rajagopal, D., & Mooney, R. (2021). Global explanations of neural networks: Mapping the landscape. In Proceedings of the 2021 Conference of the North American Chapter of the Association for Computational Linguistics: Human Language Technologies, 124-131.

    Q: 这篇论文试图解决什么问题?

    A: 这篇论文试图解决的问题是如何在社会科学研究中,使用计算模型来发现和评估文本数据对人类评价影响的特征。具体来说,它关注以下几个方面:

    1. 文本对人类评价的影响:研究者们一直在探索文本(如竞选信息、社交媒体帖子、临床笔记等)如何影响人们的决策和评价。
    2. 实验方法的局限性:传统实验方法通常限制在测试研究者预先指定的少量文本处理(text treatments),这可能带来主观性,并且可能缺乏外部有效性。
    3. 文本特征的自动发现:近年来,计算社会科学领域的研究试图从未结构化的文本中挖掘出影响结果的特征,但这些模型主要集中在文本的主题或特定词汇上,这可能并不总是影响效果的机制。
    4. NLP解释性技术的结合:论文提出了一种新的方法,结合了自然语言处理(NLP)的解释性技术,使用卷积神经网络(CNN)来灵活地发现预测人类对文本反应的文本短语集群。
    5. 因果推断与文本处理:论文还探讨了如何使用文本作为处理手段来进行因果推断,目的是识别出影响结果的文本特征的低维表示。
    6. 模型的灵活性和多样性:与以往的方法相比,论文提出的方法能够学习到不同长度和结构的文本表示,不受文档级别的主题集或特定词汇集的限制。
    7. 实验设置中的应用:论文提出的方法在实验设置中可以识别文本处理及其在一定假设条件下的效果,这为研究者提供了一种新的工具,用于在后续的确认性分析中发现和测试文本处理。

    总的来说,这篇论文试图通过结合计算社会科学和可解释机器学习的方法,提供一个能够自动发现并解释文本中影响人类评价特征的模型,以提高研究的客观性和外部有效性。

    Q: 有哪些相关研究?

    A: 论文中提到了以下几类相关研究:

    1. 计算社会科学和因果推断:先前的研究集中在同时发现处理方法和估计其效果的方法。例如,Fong和Grimmer (2016) 应用监督的印度自助餐过程在随机对照试验(RCT)设置中发现特征(主题)并估计它们对结果的影响。Pryzant等人 (2018) 使用n-gram特征而不是主题,并使用一种神经架构来从网络权重中提取特征重要性。
    2. 可解释的NLP:许多方法被提出来解释和解释NLP模型,以及这些方法的元评估。这些方法主要集中在在个体样本层面上解释和理解预测。与此相反,本文提出的方法旨在学习和解释在语料库层面发生的更广泛的模式。
    3. 文本特征的发现和效果估计:以往的工作通常集中在估计主题或单个词作为处理的效果。例如,Fong和Grimmer (2016) 将监督的印度自助餐过程应用于发现特征(主题)并估计它们在RCT设置中对结果的影响。
    4. 文本的低维表示:因果推断方法旨在识别文本特征的低维表示,这些特征在因果上影响结果。本文通过使用上下文化的词嵌入、卷积神经网络(CNNs)和解释性方法,对这一设置进行了创新性的应用。
    5. 文本处理的模拟实验:本文提出的方法和它建立在之上的方法试图模拟针对特定潜在文本特征的因果效应的实验。然而,只有在满足强假设的情况下,才能直接识别效果。
    6. 文本特征的解释性:本文提出的方法使用解释性方法灵活地发现文本中的潜在处理方法。这与主要关注提高黑盒预测模型解释性的NLP工作形成对比。
    7. 文本特征的因果效应估计:尽管本文提出的方法和它建立的方法试图模拟实验以针对特定潜在文本特征的因果效应,但效果只能在满足强假设的情况下直接识别。

    这些相关研究为本文提出的新方法提供了理论基础和对比,展示了在文本特征发现和因果推断方面的最新进展。

    Q: 论文如何解决这个问题?

    A: 论文通过提出一种基于卷积神经网络(CNN)的方法来解决发现和评估文本数据对人类评价影响的特征的问题。具体的解决步骤包括:

    1. 使用预训练的BERT模型:利用预训练的BERT模型对输入文本进行分词并获取上下文相关的词嵌入。
    2. 模型架构设计:设计一个包含一维卷积层的神经网络模型,这些卷积层可以并行工作,每个层具有不同的内核大小和数量,以便捕获不同长度的文本模式。
    3. 最大池化操作:通过最大池化层汇总每个文本样本中每个卷积核的最高激活值,以预测结果。
    4. 训练模型:使用Adam优化器和特定的损失函数来训练模型,包括二元交叉熵损失和正则化项,以鼓励模型学习到不同的文本特征。
    5. 解释模型学习到的表示:通过分析每个卷积核的激活情况,以及它们在最终预测中的贡献,来解释模型学习到的文本特征。
    6. 文本特征的发现和测试:利用模型的组件(如滤波器激活、输出层权重和原始文本样本)来识别和测试影响特定结果的文本特征。
    7. 评估方法:通过与两种基准方法(Fong和Grimmer (2016) 的主题建模方法和基于词汇表的n-gram的正则化逻辑回归)进行比较,量化评估模型预测结果的能力。
    8. 实验验证:在两个数据集上应用该方法,一个是Weibo社交媒体帖子的审查数据集,另一个是消费者金融保护局(CFPB)的投诉数据集,以展示模型发现文本处理的能力和与基准方法相比的性能。
    9. 结果解释和应用:根据模型结果,研究人员可以设计后续的实验来测试模型识别的文本特征,或者直接在强假设条件下估计文本处理的因果效应。

    通过这种方法,论文提供了一种新的工具,使研究人员能够在不同的文本数据集中发现和评估影响人类评价的文本特征,同时保持了结果的可解释性。

    Q: 论文做了哪些实验?

    A: 论文进行了两个主要的实验来验证所提出方法的有效性:

    1. Weibo帖子审查实验
      • 数据集:使用了来自Weibo-Cov数据集的28,386条关于COVID-19主题的社交媒体帖子。
      • 实验目的:预测帖子是否会被审查,以及识别导致审查的文本特征。
      • 实验方法:使用百度的内容审查API来获取每个帖子的审查标签,并训练CNN模型来预测审查结果。
      • 结果:模型能够以0.87的准确率预测帖子是否会被审查,并成功识别出与审查相关的关键词和短语。
    2. 消费者金融保护局(CFPB)投诉响应实验
      • 数据集:使用了54,816条提交给CFPB的消费者投诉叙述,时间范围从2015年3月到2016年2月。
      • 实验目的:预测投诉者是否从被投诉公司那里获得了及时的回应。
      • 实验方法:由于结果变量的严重不平衡,研究者选择了一个子样本,并使用类加权损失函数来训练CNN模型。
      • 结果:模型在测试集上获得了0.76的准确率和0.33的F1分数,揭示了与及时回应相关的文本特征。

    在这两个实验中,论文的方法不仅能够预测结果,还能够通过模型的解释性组件来识别和解释影响结果的文本特征。这些特征包括关键词、短语、语法结构等,它们在不同的实验设置中表现出了不同的影响力。

    此外,论文还与两种基准方法进行了比较:

    • Fong和Grimmer (2016) 提出的方法,使用主题建模来发现和解释潜在的文本处理。
    • 正则化逻辑回归(RLR),使用词汇表中的n-gram作为特征。

    通过这些实验,论文展示了其方法在不同数据集上的应用能力,并与现有方法进行了定量和定性的比较。

    Q: 有什么可以进一步探索的点?

    A: 论文在第6节“Conclusion”和第7节“Limitations”中提出了一些可以进一步探索的点,以下是几个关键的研究方向:

    1. 模型的可解释性评估:进行更严格的人类可解释性评估,以比较所提出方法与现有基准方法在定性方面的差异。
    2. 模型性能与计算成本的权衡:研究模型性能提升与计算成本(时间和内存)之间的权衡,特别是在使用更大或更高级的模型时。
    3. 实验成本与可解释性之间的权衡:探索在直接测试潜在文本处理与设计后续实验以测试明确文本特征之间的权衡。
    4. 模型不确定性的纳入:研究如何将识别潜在文本处理过程中的模型不确定性纳入因果效应估计。
    5. 实验文本的设计:研究如何设计实验文本以隔离感兴趣的处理,以及如何克服在不直接影响文本其他部分的情况下操纵特定文本特征的挑战。
    6. 跨模型运行的稳定性评估:开发方法来评估在不同模型运行中识别潜在文本处理的稳定性。
    7. 使用不同的BERT模型:研究使用不同大小、经过微调或更先进的BERT模型对模型性能的影响。
    8. 跨数据集的计算成本比较:在更广泛的数据集范围内比较所提出方法与现有方法的计算成本。
    9. 伦理和滥用风险:进一步探讨模型可能被滥用以提高操纵能力的风险,并权衡这些风险与开源模型的潜在益处。
    10. 模型的泛化能力:评估模型在不同类型的文本和不同领域中的泛化能力。
    11. 模型的可扩展性:研究模型在处理大规模数据集时的可扩展性和效率。
    12. 模型的健壮性:评估模型对于不同类型的噪声和异常值的健壮性。

    这些点提供了对现有工作深入理解和未来研究方向的基础。

    Q: 总结一下论文的主要内容

    A: 这篇论文的主要内容可以总结如下:

    1. 问题背景:论文讨论了在社会科学中,文本如何影响人类评价和决策,并指出了传统实验方法在测试文本影响时的局限性。
    2. 研究目标:提出了一种新的方法,使用卷积神经网络(CNN)结合自然语言处理(NLP)的解释性技术,来发现和解释预测人类对文本反应的文本短语集群。
    3. 方法论
      • 使用预训练的BERT模型来获取文本的上下文相关嵌入。
      • 设计了一种CNN模型架构,通过一维卷积层和最大池化层来捕捉文本中的模式。
      • 通过训练模型来学习文本数据和文本处理(潜在的文本特征)之间的映射。
    4. 实验设计
      • 在Weibo帖子审查数据集上进行实验,验证模型预测帖子是否会被审查的能力。
      • 在消费者金融保护局(CFPB)的投诉数据集上进行实验,预测消费者是否获得及时反馈。
    5. 结果分析
      • 模型在两个数据集上均取得了良好的预测性能,并能够识别出与结果相关的文本特征。
      • 通过与现有方法的比较,展示了所提方法在解释性和预测性能方面的优势。
    6. 方法贡献
      • 提供了一种新的视角,将计算社会科学中的文本处理与可解释机器学习相结合。
      • 允许研究人员发现文本中的潜在处理方法,并在后续实验中进行测试。
    7. 局限性和未来工作
      • 讨论了使用小BERT模型的局限性,以及未来可能的改进方向,如模型的可解释性评估、计算成本、实验设计等。
    8. 伦理考量:论文最后讨论了模型可能被滥用的风险,以及对社会有益应用的潜力。

    整体而言,这篇论文提出了一种结合了深度学习和解释性NLP的方法,用于分析文本数据对人类行为的影响,并在两个不同的数据集上验证了其有效性。


  • 人工智能能否胜任口译评估?探索机器与人类评估之间的关联

    口译质量评估一直是专业口译和学术研究中的重要课题。评估结果对于口译客户、用户、从业者、教育者、认证机构和研究人员都具有重要意义。然而,由于口译的复杂性和主观性,评估口译质量一直是一项挑战。

    口译质量评估的挑战

    传统的口译质量评估主要依靠人工评估,这种方法既有优点也有缺点。人工评估可以全面地考虑口译过程中的各个方面,例如内容、语言和表达,从而提供更细致入微的评估结果。然而,人工评估也存在着一些弊端,例如耗费人力、时间和成本,而且评估结果的推广性有限。

    随着人工智能技术的快速发展,人们开始探索使用自动指标来评估口译质量。虽然传统的统计指标,如BLEU,在捕捉用户视角的翻译质量方面效果有限,但语义向量和预训练的大型语言模型的出现为口译质量评估带来了新的希望。

    语义向量与大型语言模型的应用

    语义向量是一种将词语或文本片段映射到多维空间中的一种方法,可以有效地捕捉文本的语义信息。大型语言模型,如BERT和GPT,在自然语言处理领域取得了显著的成果,可以用于计算语义相似度。

    在口译研究中,人们开始尝试使用语义向量和大型语言模型来评估口译质量。例如,一项研究表明,GPT-3.5模型在评估源语言和目标语言之间的语义相似度方面,与人类的判断高度一致。

    本研究的意义

    本研究旨在评估自动指标在评估口译质量方面的可靠性,并分析其与人类评估之间的关联。研究人员使用了一个包含12段英语演讲的语料库,并将其翻译成西班牙语。 每段演讲都由人类专业口译员和机器翻译系统进行翻译。

    研究人员使用三种神经网络模型来计算语义向量:all-MiniLM-L6-v2、GPT-Ada和USEM。 此外,他们还使用GPT-3.5模型的提示功能来评估句子对的语义相似度。

    研究结果

    研究结果表明,GPT-3.5模型在评估翻译质量方面表现最佳,其与人类评估之间的相关性最高。 此外,研究还发现,GPT-3.5模型在评估人类口译员的翻译质量方面比评估机器翻译的质量更强。 这可能与人类口译员在翻译过程中经常引入一些细微的语境、语气和习语调整有关,这些调整更符合GPT-3.5模型的训练数据。

    未来研究方向

    本研究为使用自动指标评估口译质量提供了初步的探索,但仍存在一些局限性。例如,人类评估者之间的一致性较低,这可能影响了相关性值和结果的推广性。 未来研究需要扩大语料库规模,并进一步探索自动指标在评估不同类型错误方面的能力。

    总结

    本研究表明人工智能技术在评估口译质量方面具有很大的潜力。 GPT-3.5模型等大型语言模型可以有效地捕捉翻译的语义信息,并与人类的判断高度一致。随着人工智能技术的不断发展,自动指标在口译质量评估中的应用将更加广泛。

    参考文献

    • Fantinuoli, C., & Prandi, D. (2021). A user-centric framework for the evaluation of interpreting quality. Interpreting, 23(3), 267-286.
    • Han, Z. (2022). The nature of interpreting quality: A critical review. Routledge.
    • Kocmi, T., & Federmann, C. (2023). Evaluating translation quality with large language models. arXiv preprint arXiv:2302.06042.
    • Wang, X., & Fantinuoli, C. (2024). Exploring the correlation between human and machine evaluation of simultaneous speech translation. arXiv preprint arXiv:2406.10091.

    Q: 这篇论文试图解决什么问题?

    A: 这篇论文主要探讨了如何评估同声传译(simultaneous interpretation)的质量,特别是自动评估方法与人工评估之间的相关性。论文指出,评估口译服务的表现是一个复杂的任务,因为口语翻译的微妙性、口译员应用的策略以及用户不同的期望。当应用自动化评估方法时,这种复杂性更加明显,尤其是因为口译文本由于口译员采用的策略,在源语言和目标语言之间表现出的非线性特征。

    研究的主要问题包括:

    1. 是否存在一种自动度量方法,能够与人工判断紧密对齐,从而可以用于自动化评估口语翻译的准确性?
    2. 这些度量方法在评估人工生成的翻译、机器生成的翻译,或者两者上是否同样有效?

    论文通过分析自动度量方法与人工评估之间的相关性,旨在评估自动度量方法在评估同声传译中的可靠性,特别是翻译准确性或忠实度这一特定特征的质量。论文使用了人类专家的语言评估作为基准,来评估句子嵌入(sentence embeddings)和大型语言模型(Large Language Models)与人类评估的相关性,并且量化了源文本和翻译文本之间的语义相似性,而没有依赖于参考翻译。

    Q: 有哪些相关研究?

    A: 相关研究主要集中在以下几个领域:

    1. 机器翻译质量评估(MTQE):传统上,计算机科学领域使用诸如BLEU、NIST、METEOR和TER等自动度量方法来评估机器翻译的质量。这些度量方法主要关注n-gram的精确度和召回率。
    2. 语义向量和预训练语言模型:随着语义向量和大规模生成语言模型的出现,特别是在书面翻译领域,这些方法展现出了有希望的结果。这些方法逐渐扩展到口语翻译领域。
    3. 神经网络架构:研究了循环神经网络(RNNs)、卷积神经网络(CNNs)和Transformer模型在语义相似性计算方面的潜力。特别是基于Transformer的模型如BERT和GPT因其在多种自然语言处理(NLP)任务中的卓越表现而受到学术界的广泛关注。
    4. 口译研究:在口译研究领域,传统的准确性评估方法包括基于参考的评估和无参考的评估。一些研究通过错误分析和命题分析来评估翻译的准确性,而较新的研究则强调使用评分标准来评估口译表现。
    5. 自动评估工具的有效性:一些研究探索了各种度量方法在评估翻译质量或口译表现方面的有效性。例如,有研究指出BLEU和METEOR与人工评估之间的强相关性,以及BERT模型在评估口译表现方面的潜力。
    6. 无参考翻译评估:尽管已有研究表明BLEU和METEOR等度量方法与人工评估有中等至强相关性,但据作者所知,目前还没有研究使用语言模型进行无参考口译评估。本研究旨在填补这一空白。

    这些相关研究为本文的研究提供了理论基础和方法论指导,同时也指出了现有方法的局限性和未来研究的方向。

    Q: 论文如何解决这个问题?

    A: 论文通过以下步骤解决评估同声传译质量的问题:

    1. 数据集构建:研究者创建了一个包含12场英语演讲并翻译成西班牙语的数据集,这些演讲来自不同场合,如讲座、商业演示、现场教程和政治演讲。所有演讲都被专业口译员和机器翻译系统(KUDO AI Speech Translator)同时翻译,并进行了人工转录和校对。
    2. 人工评估:使用由Fantinuoli和Prandi(2021)提出的方法,通过Likert量表评估口译的准确性和可理解性。本研究专注于准确性评估,并由18位评估者(包括专业口译员和双语个体)进行。
    3. 机器评估:采用基于句子嵌入和大型语言模型提示技术的方法来评估语义相似性。研究者使用了all-MiniLM-L6v2、GPT-Ada和Universal Sentence Encoder Multilingual(USEM)三种神经网络模型来生成句子嵌入,并通过余弦相似性计算源文本和翻译文本之间的相似度。此外,还测试了利用GPT-3.5的提示功能来评估句子对的语义相似性。
    4. 计算相关性:将人工评估和机器评估结果整合在评估矩阵中,使用皮尔逊相关系数探索人工评估与机器评估(包括GPT-3.5、all-MiniLM-L6-v2、GPT-Ada和USEM模型计算的余弦相似度)之间的关系。
    5. 窗口大小的影响:研究者考察了“窗口大小”(即合并成单个单元的段落数量)对模型上下文理解的影响,以及对语义相似性评估精度的潜在影响。通过计算不同窗口大小下的相似度,研究者分析了跨段落上下文的可用性如何影响人工和机器评估之间的语义相似性。
    6. 结果分析:研究者从不同角度(包括评估方法间的相关值比较、人工翻译与机器翻译间的比较,以及基于窗口大小的相关值比较)制定了图表来分析数据。
    7. 伦理考量:论文还讨论了自动评估可能引发的伦理问题,如隐私权侵犯、持续监控感、就业决策的公正性和偏见问题。
    8. 结论:研究发现GPT-3.5在Likert量表上的质量评估与人类评估的相关性最高,表明GPT-3.5是评估翻译质量的最有前途的工具,无论是对人工还是机器生成的翻译。

    通过这些步骤,论文旨在开发一种能够与人类判断一致地反映口译质量的度量方法,并探讨了这种方法在实际应用中的可行性和局限性。

    Q: 论文做了哪些实验?

    A: 论文中进行的实验主要包括以下几个方面:

    1. 数据集创建:研究者从真实场景中筛选了12场英语演讲并翻译成西班牙语的视频,这些视频涵盖了不同的性别、口音、演讲类型,并且包含了一定数量的语言标记(tokens)。
    2. 人工评估实验:根据Fantinuoli和Prandi(2021)提出的方法,使用Likert量表对人工和机器翻译的准确性和可理解性进行评估。评估者包括专业口译员和双语个体,他们对视频的翻译进行了盲评估,即不知道翻译是由人类还是机器完成的。
    3. 机器评估实验:利用句子嵌入和大型语言模型来评估翻译的语义相似性。研究者使用了以下三种神经网络模型来生成句子嵌入:
      • all-MiniLM-L6v2
      • GPT-Ada
      • Universal Sentence Encoder Multilingual (USEM)
      并计算了源文本和翻译文本之间的余弦相似度。此外,还使用了GPT-3.5模型通过直接提示来评估句子对的语义相似性。
    4. 相关性分析:将人工评估和机器评估的结果整合在评估矩阵中,使用皮尔逊相关系数来探索两者之间的相关性。
    5. 窗口大小影响分析:研究者考察了不同窗口大小(即合并成单个单元的段落数量)对于评估结果的影响。具体来说,分析了从1到5个段落窗口大小的余弦相似度,以了解跨段落上下文如何影响人工和机器评估之间的语义相似性。
    6. 结果可视化:通过图表展示了不同机器评估方法之间的相关值分布、人工翻译与机器翻译之间的平均相关性差异,以及不同窗口大小下的语义相似性相关值变化。

    这些实验的目的是为了评估自动度量方法在评估同声传译质量方面的可靠性,特别是它们与人类评估的相关性,并探索影响这种相关性的因素。

    Q: 有什么可以进一步探索的点?

    A: 根据论文的结论和讨论部分,以下是一些可以进一步探索的点:

    1. 训练数据集的特性:研究GPT-3.5等模型的训练数据集特性,以及这些特性如何与现实世界中的口译任务对齐。
    2. 评估窗口大小:考虑对更大的窗口大小进行评估,以捕获更广泛的上下文信息,并分析其对评估结果的影响。
    3. 错误类型的细微差别:探索GPT-3.5区分不同类型的错误(如语法错误、词汇选择错误等)的能力,而不仅仅是提供总体评分。
    4. 人类评估的一致性:研究如何提高人工评估的一致性,以减少评估者之间由于期望不同而导致的变异性。
    5. 模型的适应性:研究如何使模型更好地适应特定类型的口译任务,例如专业领域(如医疗、法律等)的口译。
    6. 多模态输入的处理:考虑将音频和视频输入纳入评估过程,以更全面地捕捉口语翻译的质量。
    7. 实时评估的可行性:探索自动评估工具在实时或准实时反馈中的应用,以及如何优化这些工具以满足实际教学和训练需求。
    8. 伦理和可接受性问题:深入研究自动评估在伦理和社会可接受性方面的问题,以及如何在实际应用中解决这些问题。
    9. 跨语言和文化因素:研究在不同语言和文化背景下,自动评估工具的表现和适应性。
    10. 用户定制和个性化:探索如何根据用户的具体需求定制评估标准和反馈,以提供更个性化的评估结果。
    11. 长期影响研究:研究自动评估工具在长期内对口译员职业发展和教育的影响。
    12. 技术集成:研究如何将自动评估工具与其他教育技术或翻译辅助工具集成,以提供更全面的解决方案。

    这些探索点可以帮助研究者更深入地理解自动评估工具的潜力和局限性,并为未来的研究和开发提供方向。

    Q: 总结一下论文的主要内容

    A: 这篇论文《Exploring the Correlation between Human and Machine Evaluation of Simultaneous Speech Translation》主要探讨了自动评估方法在同声传译质量评估中的可靠性,尤其是与人类评估的相关性。以下是论文的主要内容总结:

    1. 研究背景:同声传译质量的评估是一个复杂任务,涉及到口语翻译的微妙性、口译员的策略以及用户的不同期望。自动化评估方法的应用增加了这一任务的复杂性。
    2. 研究目的:评估自动度量方法在评估同声传译准确性方面的可靠性,并分析其与人类评估的相关性。
    3. 数据集:研究者创建了一个包含12场英语演讲及其西班牙语翻译的数据集,这些演讲来自不同的真实场景。
    4. 人工评估:使用Likert量表对翻译的准确性和可理解性进行评估,评估者包括专业口译员和双语个体。
    5. 机器评估:利用句子嵌入和大型语言模型(如GPT-3.5、all-MiniLM-L6-v2、GPT-Ada和USEM)来评估翻译的语义相似性。
    6. 相关性分析:通过皮尔逊相关系数分析人工评估与机器评估结果之间的相关性。
    7. 窗口大小影响:研究了不同窗口大小对评估结果的影响,以了解上下文信息对评估的相关性。
    8. 结果:GPT-3.5模型在Likert量表上的质量评估与人类评估显示出最高的相关性,表明其在评估翻译质量方面具有潜力。
    9. 伦理考量:讨论了自动评估可能引发的伦理问题,如隐私权、持续监控感、就业决策的公正性和偏见问题。
    10. 结论:GPT-3.5被认为是评估翻译质量的最有前途的工具,但研究也指出了人工评估的一致性问题和样本范围的限制,并建议未来的研究应进一步探索模型的适应性、错误类型的细微差别和伦理问题。

    论文通过实验和分析,为自动评估工具在同声传译领域的应用提供了初步的可行性研究,并指出了未来研究的方向。