使用 AWS Media Intelligence 和 Hugging Face BERT PlatoBlockchain Data Intelligence 构建基于分类的上下文定位。 垂直搜索。 哎。

使用 AWS Media Intelligence 和 Hugging Face BERT 构建基于分类的上下文定位

随着 GDPR(通用数据保护条例,2017 年)等新数据隐私法规的生效,客户在遵守新规则的同时将媒体资产货币化的压力越来越大。 在尊重隐私法规的同时将媒体货币化需要能够从互联网规模的文本、图像、视频和音频文件等资产中自动提取精细的元数据。 它还需要一种可扩展的方式来将媒体资产映射到促进内容发现和货币化的行业分类法。 此用例对于广告行业尤为重要,因为数据隐私规则导致使用第三方 cookie 的行为定位发生转变。

第三方Cookie 帮助为网络用户启用个性化广告,并让广告商接触到他们的目标受众。 在没有第三方 cookie 的情况下投放广告的传统解决方案是上下文广告,它根据页面上发布的内容在网页上放置广告。 然而,上下文广告带来了从媒体资产中大规模提取上下文以及使用该上下文将资产货币化的挑战。

在这篇文章中,我们将讨论如何构建一个机器学习 (ML) 解决方案,我们称之为上下文智能分类映射器 (CITM),以从数字内容中提取上下文并将其映射到标准分类法以产生价值。 虽然我们将此解决方案应用于上下文广告,但您可以使用它来解决其他用例。 例如,教育技术公司可以使用它将其内容映射到行业分类法,以促进自适应学习,根据学生的个人需求提供个性化的学习体验。

解决方案概述

该解决方案包括两个组件: AWS 媒体智能 (AWS MI) 功能用于从网页内容中提取上下文,以及 CITM 用于将内容智能映射到行业分类。 您可以访问解决方案的 代码库 有关我们如何实现其组件的详细视图。

AWS 媒体智能

AWS MI 功能支持自动提取元数据,提供对网页内容的上下文理解。 您可以结合计算机视觉、语音转文本和自然语言处理 (NLP) 等 ML 技术,从文本、视频、图像和音频文件中自动生成元数据,以用于下游处理。 托管的人工智能服务,例如 亚马逊重新认识, 亚马逊转录, 亚马逊领悟亚马逊Textract 使用 API 调用使这些 ML 技术可访问。 这消除了从头开始训练和构建 ML 模型所需的开销。 在这篇文章中,您将了解如何使用 Amazon Comprehend 和 Amazon Rekognition 进行媒体智能,从而实现大规模的元数据提取。

上下文智能分类映射器

从媒体内容中提取元数据后,您需要一种将元数据映射到行业分类的方法,以促进上下文定位。 为此,您需要构建 Contextual Intelligence Taxonomy Mapper (CITM),它由 Hugging Face 的 BERT 句子转换器提供支持。

BERT 句子转换器使 CITM 能够使用上下文相关的关键字对 Web 内容进行分类。 例如,它可以根据文章中的文字和使用的图像,使用行业分类中的关键字(例如“健康烹饪和饮食”、“跑步和慢跑”等)对有关健康生活的网络文章进行分类。 CITM 还提供了根据您的标准选择映射的分类术语以用于您的广告竞价过程的能力。

下图说明了 CITM 架构的概念视图。

IAB(互动广告局)内容分类法

对于这篇文章,我们使用 IAB 技术实验室的内容分类 作为上下文广告用例的行业标准分类法。 通过设计,IAB 分类法可帮助内容创建者更准确地描述其内容,并为程序化广告流程中的各方提供通用语言。 使用通用术语至关重要,因为为用户访问的网页选择广告必须在几毫秒内完成。 IAB 分类作为一种标准化的方式来对来自各种来源的内容进行分类,同时也是实时竞价平台用于广告选择的行业协议。 它具有层次结构,可为广告商提供分类术语的粒度和增强的上下文。

解决方案工作流程

下图说明了解决方案的工作流程。

CITM 解决方案概述

步骤如下:

  1. 亚马逊简单存储服务 (Amazon S3) 存储 IAB 内容分类和提取的 Web 内容。
  2. Amazon Comprehend 执行主题建模以从文章集合中提取常见主题。
  3. 亚马逊识别 对象标签 API 检测图像中的标签。
  4. CITM 将内容映射到标准分类。
  5. 或者,您可以将内容存储到元数据存储中的分类映射。

在以下部分中,我们将详细介绍每个步骤。

Amazon S3 存储 IAB 内容分类和提取的 Web 内容

我们将从网络文章集合中提取的文本和图像存储在 S3 存储桶中。 我们还存储 IAB 内容分类。 作为第一步,我们连接分类法上的不同层以创建组合分类法术语。 当 BERT 句子转换器为每个关键字创建嵌入时,这种方法有助于维护分类法的层次结构。 请参阅以下代码:

def prepare_taxonomy(taxonomy_df):
    
    """
    Concatenate IAB Tech Lab content taxonomy tiers and prepare keywords for BERT embedding. 
    Use this function as-is if using the IAB Content Taxonomy
    
    Parameters (input):
    ----------
    taxonomy_df : Content taxonomy dataframe

    Returns (output):
    -------
    df_clean : Content taxonomy with tiers in the taxonomy concatenated
    keyword_list: List of concatenated content taxonomy keywords
    ids: List of ids for the content taxonomy keywords
    """
    
    df = taxonomy_df[['Unique ID ','Parent','Name','Tier 1','Tier 2','Tier 3']] 
    df_str = df.astype({"Unique ID ": 'str', "Parent": 'str', "Tier 1": 'str', "Tier 2": 'str', "Tier 3": 'str'})
    df_clean = df_str.replace('nan','')
    
    #create a column that concatenates all tiers for each taxonomy keyword
    df_clean['combined']=df_clean[df_clean.columns[2:6]].apply(lambda x: ' '.join(x.dropna().astype(str)),axis=1)
    
    #turn taxonomy keyords to list of strings a prep for encoding with BERT sentence transformer
    keyword_list=df_clean['combined'].to_list()
                       
    #get list of taxonomy ids
    ids = df_clean['Unique ID '].to_list()                  
            
    return df_clean, keyword_list, ids

taxonomy_df, taxonomy_terms, taxonomy_ids = prepare_taxonomy(read_taxonomy)

下图说明了具有组合层的 IAB 上下文分类。

具有级联层的 IAB 内容分类法

Amazon Comprehend 执行主题建模以从文章集合中提取常见主题

借助 Amazon Comprehend 主题建模 API,您可以使用潜在狄利克雷分配 (LDA) 模型分析所有文章文本。 该模型检查语料库中的每篇文章,并根据它们在整个文章集合中出现的上下文和频率将关键词分组到同一主题中。 为确保 LDA 模型检测到高度一致的主题,您在调用 Amazon Comprehend API 之前执行预处理步骤。 您可以使用 gensim 图书馆的 CoherenceModel 用于确定要从文章或文本文件集合中检测的最佳主题数量。 请参阅以下代码:

def compute_coherence_scores(dictionary, corpus, texts, limit, start=2, step=3):
    """
    Compute coherence scores for various number of topics for your topic model. 
    Adjust the parameters below based on your data

    Parameters (input):
    ----------
    dictionary : Gensim dictionary created earlier from input texts
    corpus : Gensim corpus created earlier from input texts
    texts : List of input texts
    limit : The maximum number of topics to test. Amazon Comprehend can detect up to 100 topics in a collection

    Returns (output):
    -------
    models : List of LDA topic models
    coherence_scores : Coherence values corresponding to the LDA model with respective number of topics
    """
    coherence_scores = []
    models = []
    for num_topics in range(start, limit, step):
        model = gensim.models.LdaMulticore(corpus=corpus, num_topics=num_topics, id2word=id2word)
        models.append(model)
        coherencemodel = CoherenceModel(model=model, texts=corpus_words, dictionary=id2word, coherence='c_v')
        coherence_scores.append(coherencemodel.get_coherence())

    return models, coherence_scores

models, coherence_scores = compute_coherence_scores(dictionary=id2word, corpus=corpus_tdf, texts=corpus_words, start=2, limit=100, step=3)

在获得最佳主题数量后,您可以将该值用于 Amazon Comprehend 主题建模作业。 为 Amazon Comprehend 中的 NumberOfTopics 参数提供不同的值 StartTopicsDetectionJob 操作 导致放置在每个主题组中的关键字分布发生变化。 NumberOfTopics 参数的优化值表示提供具有更高上下文相关性的最连贯的关键字分组的主题数量。 您可以将来自 Amazon Comprehend 的主题建模输出以其原始格式存储在 Amazon S3 中。

Amazon Rekognition 对象标签 API 检测图像中的标签

您使用以下方法分析从所有网页中提取的每个图像 Amazon Rekognition DetectLabels 操作. 对于每个图像,该操作提供一个 JSON 响应,其中包含在图像中检测到的所有标签,以及每个标签的置信度分数。 对于我们的用例,我们任意选择 60% 或更高的置信度分数作为下一步使用的对象标签的阈值。 您将对象标签以其原始格式存储在 Amazon S3 中。 请参阅以下代码:

"""
Create a function to extract object labels from a given image using Amazon Rekognition
"""

def get_image_labels(image_loc):
    labels = []
    with fs.open(image_loc, "rb") as im:
        response = rekognition_client.detect_labels(Image={"Bytes": im.read()})
    
    for label in response["Labels"]:
        if label["Confidence"] >= 60:   #change to desired confidence score threshold, value between [0,100]:
            object_label = label["Name"]
            labels.append(object_label)
    return labels

CITM 将内容映射到标准分类

CITM 将提取的内容元数据(文本中的主题和图像中的标签)与 IAB 分类法中的关键字进行比较,然后将内容元数据映射到分类法中语义相关的关键字。 对于此任务,CITM 完成以下三个步骤:

  1. 使用 Hugging Face 的 BERT 句子转换器为内容分类、主题关键字和图像标签生成神经嵌入。 我们从 亚马逊SageMaker. 在这篇文章中,我们使用 释义-MiniLM-L6-v2 模型,它将关键字和标签映射到 384 维密集向量空间。
  2. 使用它们的嵌入计算分类关键字和主题关键字之间的余弦相似度分数。 它还计算分类关键字和图像对象标签之间的余弦相似度。 我们使用余弦相似度作为评分机制来查找内容元数据和分类之间的语义相似匹配。 请参阅以下代码:
def compute_similarity(entity_embeddings, entity_terms, taxonomy_embeddings, taxonomy_terms):
    """
    Compute cosine scores between entity embeddings and taxonomy embeddings
    
    Parameters (input):
    ----------
    entity_embeddings : Embeddings for either topic keywords from Amazon Comprehend or image labels from Amazon Rekognition
    entity_terms : Terms for topic keywords or image labels
    taxonomy_embeddings : Embeddings for the content taxonomy
    taxonomy_terms : Terms for the taxonomy keywords

    Returns (output):
    -------
    mapping_df : Dataframe that matches each entity keyword to each taxonomy keyword and their cosine similarity score
    """
    
    #calculate cosine score, pairing each entity embedding with each taxonomy keyword embedding
    cosine_scores = util.pytorch_cos_sim(entity_embeddings, taxonomy_embeddings)
    pairs = []
    for i in range(len(cosine_scores)-1):
        for j in range(0, cosine_scores.shape[1]):
            pairs.append({'index': [i, j], 'score': cosine_scores[i][j]})
    
    #Sort cosine similarity scores in decreasing order
    pairs = sorted(pairs, key=lambda x: x['score'], reverse=True)
    rows = []
    for pair in pairs:
        i, j = pair['index']
        rows.append([entity_terms[i], taxonomy_terms[j], pair['score']])
    
    #move sorted values to a dataframe
    mapping_df= pd.DataFrame(rows, columns=["term", "taxonomy_keyword","cosine_similarity"])
    mapping_df['cosine_similarity'] = mapping_df['cosine_similarity'].astype('float')
    mapping_df= mapping_df.sort_values(by=['term','cosine_similarity'], ascending=False)
    drop_dups= mapping_df.drop_duplicates(subset=['term'], keep='first')
    mapping_df = drop_dups.sort_values(by=['cosine_similarity'], ascending=False).reset_index(drop=True)
    return mapping_df
                                               
#compute cosine_similairty score between topic keywords and content taxonomy keywords using BERT embeddings                                               
text_taxonomy_mapping=compute_similarity(keyword_embeddings, topic_keywords, taxonomy_embeddings, taxonomy_terms)

  1. 识别具有高于用户定义阈值的相似性分数的配对,并使用它们将内容映射到内容分类法上的语义相关关键字。 在我们的测试中,我们从余弦相似度得分为 0.5 或更高的配对中选择所有关键字。 请参阅以下代码:
#merge text and image keywords mapped to content taxonomy
rtb_keywords=pd.concat([text_taxonomy_mapping[["term","taxonomy_keyword","cosine_similarity"]],image_taxonomy_mapping]).sort_values(by='cosine_similarity',ascending=False).reset_index(drop=True)

#select keywords with a cosine_similarity score greater than your desired threshold ( the value should be from 0 to 1)
rtb_keywords[rtb_keywords["cosine_similarity"]> 50] # change to desired threshold for cosine score, value between [0,100]:

使用互联网规模的语言表示(例如在这个用例中)时,一个常见的挑战是您需要一个可以适应大多数内容的模型——在这种情况下,是英语中的单词。 Hugging Face 的 BERT 转换器已经使用大量英语维基百科帖子进行了预训练,以表示单词之间的语义含义。 您可以使用主题关键字、图像标签和分类关键字的特定数据集微调预训练模型。 当您将所有嵌入放在同一个特征空间中并将它们可视化时,您会看到 BERT 在逻辑上表示术语之间的语义相似性。

以下示例使用 BERT 将汽车类的 IAB 内容分类关键字可视化为向量。 BERT 将分类法中的汽车关键字放置在语义相似的术语附近。

分类关键字的 BERT 嵌入可视化

特征向量允许 CITM 比较同一特征空间中的元数据标签和分类关键字。 在这个特征空间中,CITM 计算分类关键词的每个特征向量和主题关键词的每个特征向量之间的余弦相似度。 在一个单独的步骤中,CITM 比较分类特征向量和图像标签的特征向量。 余弦分数最接近 1 的配对被识别为语义相似。 请注意,配对可以是主题关键字和分类关键字,也可以是对象标签和分类关键字。

以下屏幕截图显示了使用 BERT 嵌入计算的余弦相似度的主题关键字和分类关键字的示例配对。

主题到分类关键字配对

要将内容映射到分类关键字,CITM 从余弦分数符合用户定义阈值的配对中选择关键字。 这些关键字将在实时竞价平台上用于为网页的广告资源选择广告。 结果是在线内容与分类的丰富映射。

可选择将内容存储到元数据存储中的分类映射

从 CITM 中识别出上下文相似的分类术语后,您需要一种方法让低延迟 API 访问此信息。 在广告的程序化竞价中,低响应时间和高并发在内容货币化方面发挥着重要作用。 数据存储的架构需要灵活,以便在需要丰富投标请求时容纳额外的元数据。 Amazon DynamoDB 可以匹配此类服务的数据访问模式和操作要求。

结论

在这篇文章中,您学习了如何使用上下文智能分类映射器 (CITM) 构建基于分类的上下文定位解决方案。 您学习了如何使用 Amazon Comprehend 和 Amazon Rekognition 从媒体资产中提取精细元数据。 然后,您使用 CITM 将资产映射到行业标准分类法,以促进针对内容相关广告的程序化广告竞价。 您可以将此框架应用于需要使用标准分类法以提高现有媒体资产价值的其他用例。

要试验 CITM,您可以访问其 代码库 并将其与您选择的文本和图像数据集一起使用。

我们建议您详细了解本文中介绍的解决方案组件。 发现更多关于 AWS 媒体智能 从媒体内容中提取元数据。 此外,了解有关如何使用的更多信息 使用 Amazon SageMaker 的 NLP 拥抱人脸模型.


作者简介

使用 AWS Media Intelligence 和 Hugging Face BERT PlatoBlockchain Data Intelligence 构建基于分类的上下文定位。 垂直搜索。 哎。芳纶凯欣德 是 AWS 机器学习和人工智能领域的高级合作伙伴解决方案架构师。 她的职业生涯跨越多个行业的商业智能和高级分析领域。 她致力于帮助合作伙伴使用 AWS AI/ML 服务构建解决方案,以满足客户的创新需求。 她还喜欢建立人工智能和创意领域的交叉点,并喜欢与家人共度时光。

使用 AWS Media Intelligence 和 Hugging Face BERT PlatoBlockchain Data Intelligence 构建基于分类的上下文定位。 垂直搜索。 哎。阿努·古普塔(Anuj Gupta) 是首席解决方案架构师,与高速增长的公司合作进行云原生之旅。 他热衷于使用技术解决具有挑战性的问题,并与客户合作构建高度分布式和低延迟的应用程序。 他为开源无服务器和机器学习解决方案做出了贡献。 工作之余,他喜欢和家人一起旅行,写诗和写哲学博客。

时间戳记:

更多来自 AWS机器学习