第十五章 广告检索系统(一)

本文介绍了广告检索服务的功能,包括媒体方请求的详细信息,如媒体标识、基本信息、匹配信息等,并详细阐述了如何根据流量类型对推广单元进行预筛选,涉及AdUnitObject的判断和AdUnitIndex的匹配过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

此博客用于个人学习,来源于网上,对知识点进行一个整理。

1. 广告检索服务功能的介绍:

前面针对我们的广告检索服务,我们进行了全量索引和增量索引的设计与实现,接下来就是对于广告检索系统的功能进行一个介绍。
在这里插入图片描述

广告检索服务是我们广告检索系统中最重要的服务功能,它能实现根据媒体方的请求信息返回对应的广告数据。我们比较常见的媒体方,比如地铁里面的通道大屏,手机的屏幕里打开的一些 APP,里面会展示一些广告,这些广告载体就被称为媒体方。它们是用来播放这些广告创意的。媒体方会向我们的检索系统发起请求,这个请求实际上是非常复杂的,里面包含非常多详细的信息。首先,按细来分,可以将请求信息分为三个类型:

  • 媒体方标识 mediaId:需要在我们的平台先定义,所以我们的平台通常有媒体方的标识。媒体方的标识就是告诉我们是哪个媒体方发起的广告检索请求。
  • 请求基本信息:这个就是对媒体方自身的描述信息及对广告位的描述信息,我们对基本信息做拆分:
    • 唯一请求 id:每一次请求,都会要求媒体方去发送一个请求 id,方便我们做后续的校验,通过一个 id 确定是唯一的一次广告请求。
    • 广告位信息:包含广告位的编码,能够通过这个编码找到唯一的广告位;广告位的宽,高,广告位的信息。
    • 终端信息:也被称为应用信息,因为对于媒体方来说,不管它是通过通道大屏还是手机屏幕,实际上发起请求是某个应用,是一个 APP。应用里面有一项代码,对应我们的广告检索系统发起请求,我们需要得知是哪个应用发起的请求就需要终端的信息,比如应用的编码,应用的名字。
    • 地域信息:当前媒体方的地域信息,比如经度,维度,城市,省份等等。
    • 设备信息:也是用来标识设备的信息,比如设备的 ip,设备的 mac,屏幕的编码,设备的尺寸等等,作为广告数据打印日志,同样也是可以和媒体方进行核对。
  • 请求匹配信息:是广告数据的决定性因素,向我们的检索系统发起请求需要带一些限制,比如我需要什么信息,不要什么信息。我们根据推广单元设置了三类限制——关键词限制,地域限制,兴趣限制。对于请求匹配信息,其中包含一个关系 AND/OR,前者是媒体方提供的匹配信息都要完全包含所有限制才会通过这个检索;后者是提供了很多匹配信息,但只有其中一两中符合也可以。

检索系统的响应过程就是匹配与过滤过程,首先去初始化“筛选”这些推广单元,也就是我们的广告位,然后再去对各个限制维度进行过滤。之后再根据推广单元和推广计划的状态进行过滤,最后根据广告位信息进行创意的过滤。

总结来讲,检索系统就是不断的对媒体方的请求条件进行一个过滤筛选的过程,最终会返回符合媒体方要求的一些返回类型数据,进行响应。

2. 媒体方请求对象的定义:

根据前面的描述,媒体方请求对象包含——媒体方标识,请求基本信息和请求匹配信息,其中请求基本信息包含,唯一的请求 id,广告位的信息,终端信息,地域信息和设备信息,请求匹配信息包含关键字限制,地域限制和兴趣限制。考虑到这两种数据类型比较复杂,我们先构建它们的子对象。

2.1 构建请求基本信息的子对象:

广告位信息:

/**
 * 广告位信息
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class AdSlot {
   
   

    // 广告位编码
    private String adSlotCode;
    // 流量类型
    private Integer positionType;
    // 宽和高
    private Integer width;
    private Integer height;
    // 广告物料类型: 图片, 视频
    private List<Integer> type;
    // 最低出价
    private Integer minCpm;
}

终端信息:

/**
 * App终端信息
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class App {
   
   

    // 应用编码
    private String appCode;
    // 应用名称
    private String appName;
    // 应用包名
    private String packageName;
    // activity 名称
    private String activityName;
}

地域信息:

/**
 * 地域信息
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Geo {
   
   

    //纬度
    private Float latitude;
    //经度
    private Float longitude;
    //城市
    private String city;
    //省份
    private String province;
}

设备信息:

/**
 * 设备信息
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Device {
   
   

    // 设备 id
    private String deviceCode;
    // mac
    private String mac;
    // ip
    private String ip;
    // 机型编码
    private String model;
    // 分辨率尺寸
    private String displaySize;
    // 屏幕尺寸
    private String screenSize;
    // 设备序列号
    private String serialName;
}

2.2 构建请求匹配信息的子对象:

关键字限制:

/**
 * 关键词
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class KeywordFeature {
   
   

    private List<String> keywords;
}

地域限制:

/**
 * 地域
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class DistrictFeature {
   
   

    private List<ProvinceAndCity> districts;

    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    public static class ProvinceAndCity {
   
   

        private String province;
        private String city;
    }
}

兴趣限制:

/**
 * 兴趣
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class ItFeature {
   
   

    private List<String> its;
}

各限制条件的关系:

public enum FeatureRelation {
   
   

    OR,
    AND
}

2.3 请求对象的构建:

@Data
@NoArgsConstructor
@AllArgsConstructor
public class SearchRequest {
   
   

    // 媒体方的请求标识
    private String mediaId;
    // 请求基本信息
<think>好的,我需要帮助用户了解如何用AI技术构建基于书籍内容的知识库。首先,我得理清步骤,结合之前看到的引用内容,尤其是引用[2]和[3]提到的本地知识库问答应用和大模型的应用。 首先,数据采集是关键。用户需要将书籍数字化,可能需要OCR技术处理扫描版书籍,确保文本准确。然后数据清洗,去除无关内容,结构化处理章节和段落,这部分引用[2]提到数据采集层的重要性。 接下来是文本向量化,也就是把文字转换成向量,方便后续的语义搜索。这里得用嵌入模型,比如BERT或OpenAI的Embeddings,把每个段落转化为向量,存储到向量数据库,比如FAISS或Pinecone。引用[2]也提到了语义理解和总结能力需要大模型的支持。 然后是大模型的选择和集成,像GPT-3.5或Llama 2这样的模型,处理用户的查询,结合本地知识库的内容生成回答。引用[3]里提到的FastGPT可能就是类似的工具,通过流程优化降低成本。 开发应用层的话,可能需要个前端界面让用户提问,后端处理查询,调用向量数据库和模型API返回结果。测试优化环节也很重要,确保回答准确,可能需要调整模型参数或增加上下文长度,引用[3]提到的可控性和合规性问题需要注意。 最后,维护更新知识库,定期添加新内容,监控系统性能。案例部分,可以想想企业用类似方法管理内部文档,或者图书馆建立智能检索系统,引用[1]和[2]都有相关的应用场景。 用户可能的问题包括处理扫描书籍的具体工具,如何选择适合的嵌入模型,或者如何处理大模型的回答不致问题。得确保每个步骤都解释清楚,引用相关部分,比如数据清洗时引用[2],模型集成引用[3]。</think>### 如何利用AI技术构建基于书籍内容的知识库? #### 1. **数据采集与预处理** - **书籍数字化**:将纸质书籍通过扫描和OCR技术(如Tesseract、Adobe Acrobat)转换为可编辑的文本。若已有电子书(如PDF、EPUB),可直接提取文本[^2]。 - **数据清洗**:去除无关内容(如页眉、页脚、广告),按章节或段落分割文本,确保结构清晰。 - **示例代码(文本分割)**: ```python import re def split_text_by_chapter(text): return re.split(r'\n第[二三四五六七八九十]+章\s', text) ``` #### 2. **文本向量化与存储** - **嵌入模型选择**:使用预训练模型(如BERT、Sentence-BERT或OpenAI的`text-embedding-ada-002`)将文本段落转换为向量。 - **向量数据库搭建**:使用FAISS、Pinecone或Milvus存储向量,支持高效相似性搜索[^2]。 - **技术细节**: $$ \text{向量相似度计算:} \cos(\theta) = \frac{\mathbf{A} \cdot \mathbf{B}}{\|\mathbf{A}\| \|\mathbf{B}\|} $$ #### 3. **大模型集成与优化** - **模型选型**:选择适合场景的大模型(如GPT-4、Llama 2或开源框架FastGPT),通过API或本地部署集成[^3]。 - **提示词工程**:设计上下文增强的提示模板,例如: ```text 根据以下书籍内容回答问题: {检索到的相关段落} 问题:{用户输入} ``` #### 4. **应用开发与部署** - **前后端架构**: - 前端:Web界面或Chatbot(如React + Flask/Django)。 - 后端:处理用户查询→向量搜索→调用大模型生成回答。 - **代码示例(简化流程)**: ```python from transformers import pipeline qa_pipeline = pipeline("question-answering", model="bert-base-chinese") def answer_question(context, question): return qa_pipeline(context=context, question=question)['answer'] ``` #### 5. **测试与迭代** - **评估指标**:准确率、响应时间、用户反馈。 - **优化策略**: - 增加上下文窗口长度(如从512扩展到2048词)。 - 对模糊查询添加澄清追问逻辑(如“您是指X还是Y?”)。 #### 6. **案例与扩展** - **企业知识库**:引用[1]中提到的私有知识库可扩展为书籍知识管理系统。 - **教育场景**:将教材转化为互动问答系统,支持知识点溯源。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值