Personalized Web Search总结

  • 定义
  • 历史背景
  • 基础知识
    • 用户剪影——User Profiling
    • 基于内容分析的个性化搜索——Personalized
    • 基于超链接分析的个性化网络搜索——Personalized Web Search Based on Hyperlink Analysis
    • 基于社区的个性化网络搜索——Community-based Personalized Web Search
    • 服务器端和客户端的实现——Server-Side and Client-Size Implement
    • 个性化搜索的挑战——Challenges of Personalized Search
  • 关键应用——Key Application
  • 实验结果——Experimental Results
  • 后话

定义

对于一个查询(query),个性化网络搜索(Personalized Web Search)可以为不同的用户提供不同的查询结果,或是针对用户以不同的方式来组织搜索结果,这是基于用户的兴趣、喜好和信息需求。Personalized web search和一般的网络搜索不同,普通网络搜索(generic web search)对于同一个query返回的都是同样的搜索结果,而忽略了用户的兴趣和信息需求。
简单一句话:个性化网络搜索可以根据用户特点来找出最能满足用户预期的结果~

历史背景

搜索引擎为互联网和社会做了巨大贡献,他们使得在网络上进行信息搜索更加快捷方便,但是他们还有很大的提升空间。普通搜索引擎的主要缺点是遵循“one size fits all”模型(个人理解就是同一query不同人搜索的结果相同),这并不适用于单个用户。下面有几个典型的例子

  1. 不同的用户有不同的背景和兴趣。当输入同一个query的时候,他们也许有着完全不同的信息需求和目标。例如:一个生物学家输入“mouse”时也许是期望得到“啮齿动物”的信息,而程序员也许是希望查找有关电脑外设的信息。当这种query被提出时,一般的搜索引擎将会返回各种主题的一系列文档,用户需要选择哪些信息是他/她真正想要的,这会浪费时间,同时也使得影响用户体验。像“mouse”这种类型的query通常被称作“ambiguous queries”. 统计结果表明大量的query是短且具有歧义的。对于这种query普通网络搜索通常不能提供令人满意的结果。
  2. 用户不是静止不变的。用户的信息需求也许会随着时间而变化。不同环境不同时间下用户将会有不同的需求。例如:当用户正在看关于鼠疫的新闻时,也许使用“mouse”去查找与啮齿动物有关的信息,而当他购买新电脑时,也许会使用“mouse”来查找关于电脑鼠标的信息。普通搜索引擎不能分辨这两种情况的不同。

个性化网络搜索被认为是一个解决这些问题的理想方案,因为他可以基于用户的喜好和信息需求来提供不同的搜索结果。它在学习query所指的意义时利用了用户的信息和搜索的上下文(search context)。再来看一下上面提到的“mouse”:个性化网络搜索可以通过搜集用户的以下信息来消除query的二义性:

  1. 用户是一位程序猿/媛,而不是一位生物学家。
  2. 用户刚刚输入了“keyboard”这个query,而不是“biology”或者“genome”。在输入这个query的时候,用户刚刚浏览了这样一个网页:该网页带有许多和电脑鼠标有关的单词,例如“computing”,“input device”,"keyboard”。

基础知识

用户剪影——User Profiling

为了能够为用户提供个性化的搜索结果,Persionalized web search为每一个用户都维护了一个“user profile”(用户剪影,可以理解为描述用户的信息)。一个user profile存储了用户的兴趣喜好品味等。它是通过挖掘用户有关的信息来生成和更新的。这信息包括:

  1. 人口统计和地理统计信息,包括年龄,性别,教育背景,语言,国家,住址,兴趣区(暂时理解为各种标签)和其他信息。
  2. 搜索历史,包括之前的queries和点击过的文档。当浏览网页时的用户浏览行为(user browsing behavior)也是一个重要挖掘的用户兴趣的元素,例如停留时间(dwelling time),鼠标点击(mouse click),鼠标移动(mouse movement),滚动…(scrolling),打印(printing)和书签添加(bookMarking)。
  3. 其他用户文档。例如书签,最喜爱的网址,浏览过的网页和电子邮件。 Teevan et al. 15 and Chirita et al. 1阐述过,存储在用户客户端的外部用户数据对于个性化搜索结果十分有用。

我们可以向用户搜集信息(explicitly collecting)或者从用户的历史活动来学习用户信息(implicitly collecting)。由于大量的用户不愿意提供任何有关搜索结果和他们兴趣的显示反馈,许多个性化网络搜索的工作都聚焦于如何在没有用户直接帮助的情况下自动学习用户的喜好6 8 9 10 13。搜集到的的用户信息被处理并组织成了一个“user profile”,这是一个基于个性化算法需求的特定结构,可以通过创建URLs、域、关键字、话题类别、张量等向量来完成。

一个user profile总是可以集中用户的历史信息并且表示用户的长期兴趣(long-term interests)(或者说是信息需求,information needs)。一些工作调查了这样一个long-term user profile是否在某些情况下无效。让我们来想一下在“历史背景”这一节里提到的第二个例子:一个用户在不同的环境和时间里会有不同的需求。在这种情景下,基于用户的长期兴趣的个性化搜索也许不会表现出令人满意的性能,因为他会返回相似的搜索结果(因为只基于用户长期兴趣的话,同一人的同一query的搜索结果是相同的,并没有考虑到环境的变化)。一些工作10已经考虑利用用户的活动环境(active context)来表达短期的信息需求(short-term information needs)。查询环境(search context)被并入到了“user profile”里,或者是被构建成了一个独立的短期用户模型/剪影(short-term user model/profile),被用来帮助推断用户的信息需求(information needs)。

基于内容分析的个性化搜索——Personalized

Search Based on Content Analysis个性化检查网页和user profile的相似性可以实现个性化网络搜素。

一些工作已经用话题类别("opical categories”)来表示用户兴趣。用户的话题兴趣(topical interests)可以通过用户自己显式的反馈形成,也可以通过隐式的对用户数据进行分类来自动学习。搜索结果会通过检查其和user profile的相似性来过滤或者重新排序。在一些工作中2,一个user profile被结构化为一个概念/主题层次结构(concept/topic hierarchy)。用户提出的问题和用户选择的片段/文章被分类到了概念层次结构中,这样这个层次结构可以不断累积,用来形成user profile。当用户提出query时,每一个返回的片段/文章也被分类。这些文章基于他的类别和用户兴趣剪影的吻合度来被重新评级(re-rank)。Chirita et al. 2使用ODP(Open Directory Project,http://www.dmoz.org/)层次结构(ODP hierarchy)来实现个性化搜索。ODP hierarchy中表示用户最喜欢的主题的结点(node)是手动确定的。每一个文章被分类到了同一ODP hierarchy的一个或几个主题结点中,利用用户的主题结点和文章的主题结点之间的距离来重新排序搜索结果。

一些其他的工作使用关键字列表来表示用户兴趣。在13里,用多个独立的项(terms)以及整合用户历史点击来构建user profile向量(vector)。user profile vector和网页的特征向量的余弦距离被用来重新排序搜索结果。Shen et al. 10第一次使用了语言模型来挖掘瞬时搜索语境并且隐式的反馈信息。该方法从相关的历史queries和对应的搜索结果来选择合适的项(terms)去扩充当前query(更好的表达当前的query)。在一个请求会话(query session)中,浏览过的文章总和被用来即时重排序还未被浏览的文章(这样可以即时调整搜索结果)。Teevan et al.15 和 Chirita et al. 1利用丰富的用户兴趣模型,这种模型通过与搜索有关的信息以及其他关于用户的信息来构建,包括用户读写过的email和文章。在6里,关键词和类别相关,因此user profile由基于关键字类别的类别等级树(hierarchical category tree)来表示。

基于超链接分析的个性化网络搜索——Personalized Web Search Based on Hyperlink Analysis

大部分的普通网络搜索方式基于网络的链接结构来排列文章的重要性。一个直观的个性化搜索方法是改变这些算法,让他们去计算文章的个性化重要性。大部分的这种工作聚焦于个性化PageRank。PageRank是由Page和Brin 7提出的,是一种应用在网络搜索的流行的链接分析算法。PageRank的基本动机是迭代的思想:重要页面是由许多重要页面链接的页面。

这种迭代的思想可以被形式化为:在网络有向图GGG上的“随机冲浪模型”(“random surfer” model)7。<p,q><p,q><p,q>表示GGG的一个有向边,表示网页ppp有一个连接到网页 qqq的超链接。令O(p)O(p)O(p)表示网页ppp在图GGG的出度,相当于被ppp链接的网页数量。让AAA表示与GGG有关的矩阵,如果网页j连接到网页iii,Aij=1/O(j)A_{ij}=1/O(j)Aij​=1/O(j),否则Aij=0A_{ij}=0Aij​=0。在random surfer模型中,当冲浪者访问了网页ppp,他/她有1−c1-c1−c的概率随机点击外部链接(这个外部链接指当前页面里包含的超链接),同时有ccc的概率跳转到一个随机网页(给了进入孤立网页的机会,孤立网页也就是没有被其他网页引用的网页),ccc称为隐形传态约束或阻尼因子。一个网页ppp的PageRank定义为:冲浪者访问网页ppp的概率。计算PageRank的迭代计算式如下:
vk+1=(1−c)Avk+cuv^{k+1} = (1-c)Av^{k} + cuvk+1=(1−c)Avk+cu
uuu被定义为一个偏好向量,∣u∣=1|u|=1∣u∣=1,u(i)u(i)u(i)表示当冲浪者跳转到随机网页i时对于网页iii的喜好程度。

当对于任何网页都没有特殊的偏好时,例如:u=[1/n,1/n,1/n...]Tu=[1/n,1/n,1/n...]^{T}u=[1/n,1/n,1/n...]T计算全局PageRank向量。通过设置对于网页可变的偏好,可以生成一个具有网页重要性的个性化视图的PageRank向量。他能够递归式的喜好偏爱度高的网页,和由高偏爱度链接的网页(符合了前文提出的重要的页面是由许多重要页面链接的思想)。这种PageRank向量被称为“personalized PageRank vector”(PPV)(后文简称PageRank vector为PV)。为了实现个性化搜索,会为每一个用户给予他们的喜好计算一个PPV。例如:用户书签里的网页在uuu里被设置了高喜爱度。对于用户搜索结果的排序可以基于用户的PPV来偏差实现,而不是基于全局PageRank(没有网页偏好)。

不幸的是,计算PV通常需要多次扫描网络图7,这使得它无法线上运行来相应用户需求(相应需求需要即时性)。同时,当大量用户都是用搜索引擎时,不可能在线下计算和存储如此多的的PPV。因此许多后来的工作 4 5 努力去减小计算和存储的开销。 Jeh and Widom 5提出了一个概念:用户的偏好集合是中心页,hub page(中心页是对于个性化来说兴趣更大的页面,暂时不太理解这个xxxxx)HHH集合的一个子集,。对于每一个HHH里的中心页ppp,设置ppp的偏好为1,其余页面的为0,相应的PPV被称为“基础中心向量”(basis hub vector,后文称为BHV)。作者分解了每一个BHV为两部分:中心骨架向量,hub skeleton vector 和局部向量,partial vector。中心骨架向量代表了这些hub vector的常见的相互关系(网页链接关系),在线下计算。每一个中心页面ppp的局部向量表示了ppp自身唯一的中心向量一部分。 PV可以在构建时计算。最后,一个PPV可以表示为一组基础中心向量的线性组合,可以在query时间计算。实验表明这个方法在hub set的大小大于10410^{4}104时也是可行的。

这一段咋理解呢,个人感觉就是:如果按照之前计算PPV的方法,每个人都有一个个性化uuu,然后遍历一下网络图GGG,计算出来PPV,关键就是这个每次计算PPV都要遍历GGG,后面提出来的方法呢就是先把这些中心网页的相互关系(以每一个hub page为中心,相当于保存了∣H∣|H|∣H∣个相互关系,一个hub page对应一个)保存下来,这个就是骨架向量,然后局部向量就是一个网页ppp对应的偏好值为1,其他网页为0的一个向量,计算用户的PPV的时候就把相应的n个基础中心向量找出来,这个基础中心向量已经包含了网页相互关系(骨架)和感兴趣网页的偏好(partial),线性组合一下相关的基础中心向量就可以表示PPV。

Haveliwala 4 使用了个性化PageRank(personalized PageRank)来实现“主题敏感”的网络搜索(“topic-sensitive” web search)。这个方法大致如下:使用kkk个主题(topic)预计算kkk个PPV,例如:Open Directory里16个最高等级的主题(topic)。对于每一个topic iii,产生一个偏好向量(preference vector)uiu_iui​。(ui)j(u_i)_j(ui​)j​表示page jjj被分类到topic iii的可能性。PPV是依据偏好向量uiu_iui​来计算的。kkk个PPV在查询时被组合在一起,使用查询语境来计算这些主题的权重(topic weights)。实验证明使用PPV得分(personalized PageRank scores)可以改进网络搜索,但是被使用的PPV的数量受限于计算需求(算起来比较费时所以不能用太多PPV)。实际上,这种方法是基于query的主题和query的上下文来划分等级(ranking),而不是真正的依据特定的用户来个性化ranking。Qiu and Cho 9发展了一个方法,它可以自动的基于用户过去点击过的网页的“Topic-Sensitive PageRank score”来估计用户的主题倾向。然后使用主题偏好来偏向(有偏向性的排序)未来的搜索结果。

下面开始技术总结:
这一段“基于超链接分析的个性化网络搜索都围绕着一个中心词“PageRank”,PageRank,顾名思义,会对每个网页给出一个score,或者说优先级,表示他的重要性。根据文章中的解释,这是一个网络搜索中常用的链接分析算法。核心思想是一个递归的思想:“重要的网页是那些被许多重要网页链接的网页”。这个思想形式化后就是下面的公式:vk+1=(1−c)Avk+cuv^{k+1} = (1-c)Av^{k} + cuvk+1=(1−c)Avk+cu 这个vkv^kvk应该就是常说的PageRank vector,表示的是k次迭代后各个网页的重要程度。
更进一步的,PV还分为了“gloable PageRank vector”和“personalized PageRank vector”,简言之,gloable的uuu向量,各个page的喜好度都是一样的,而PPV的uuu的各个page的喜好度是不同的,这里因人而异,如此计算出来的vkv^kvk偏好网页以及偏好网页递归链接的网页的跳转概率高,这样就引入了个性化计算的思想,也包含了前文提到的PageRank的核心递归思想。
到此,我们介绍了基本的PPV的概念。但是完全基本算式的话,每计算一次PPV都要遍历网络图来做递归,无法满足查询的即时性要求。后面就开始提出了各种改进方案:
第一种方案,把所有可能被用户偏好的网页找出来,称为中心页“hug page”,对于每一个hug page都计算其PPV,这些都可以是线下进行的,之后计算用户的PPV时,因为其偏好网页集合是中心网页集合的子集,直接将hug page的PPV组合起来就可以表示用户的PPV。相较于原始PPV的“先组合,在计算"的思想,该方法“先计算,再组合”,成功把耗时的网络遍历放在了线下计算,这是其优点
第二种方案,改变了关注对象,从之前的基于用户喜好的思想变成了基于query及query context的思想。PPV的计算也是针对topic来计算,即每个高热度的topic都计算其对应的PPV(线下),这样对于当前的query和query context可以通过对其分析来获得各个topic的权重,据此组合起来作为当前查询的PPV。也是把网络遍历的过程放到了线下。更进一步的改进还有:通过计算用户点击过的网页的topic得分(网页属于各个topic的程度)来估计用户的话题偏好,这个话题偏好就可以在未来服务于排序搜索结果。
改进的中心思想:把遍历网络图放到线下~

基于社区的个性化网络搜索——Community-based Personalized Web Search

前文提到的大部分的个性化搜索策略,都是给每个用户记录一个独立的profile,将这个profile用来为该用户做个性化搜索。还有一些方法可以为志趣相投的用户社区来个性化搜索结果(object变成了一群兴趣相近的人)。这种方法称为“community-based personalized web search” 或者"collaborative web search"。 在这种网络搜索里,当用户输入一个查询时,和用户有相似兴趣的其它用户的搜索记录会被用来过滤orre-rank搜索结果。例如:对于目标query或者相似的query,社区选择过的文档会在re-rank时基于更高的优先级。Sugiyama et al. 13使用了一种改进的协同过滤算法来构建用户的profiles来实现个性化搜索。 Sun et al. 14提出了一个叫“CubeSDV”的新方法,这种方法通过分析用户、queries、点击数据中的网页之间的相关性来应用个性化网络搜索。Smyth et al. 12展示了协同网络搜索可以有效应用在许多搜索场景,当然,前提是可以确定搜索者的自然社区。

下面开始技术总结:
引入协同过滤思想!
1.相似的查询记录结果来re-rank搜索结果
2.通过协同过滤算法来构建用户的profile
3.分析用户、queries、点击数据中的网页之间的相关性
4.so on…
前提:能确定用户社区

服务器端和客户端的实现——Server-Side and Client-Size Implement

个性化搜索可以在服务器端(搜索引擎)或者客户端(在用户的电脑或者个性化代理)实现。

服务器端:用户profile在搜索引擎端建立、更新、存储。用户的信息直接包含进排序(ranking)过程,或者用来帮助处理原始搜索结果(我猜是过滤之类的)。这种架构的优点:搜索引擎可以利用他的所有资源。比如:整个互联网的链接结构。当然,没有客户端的支持也可以轻松调整个性化算法。一些常见的搜索引擎都应用了这种架构,例如谷歌个性化搜索。他的缺点是:当有百万级及以上的用户使用搜索引擎时,存储和计算开销很大,同时,用户的信息存储在服务器也会带来隐私问题。

客户端个性化搜索:用户信息搜集并存储在客户端(在用户的电脑或者个性化代理中),通常是下载一个客户端软件or一个插件。在客户端,用户的搜索行为、他的活动语境(例如之前浏览过的网页)以及个人信息(例如email、文章和书签)都可以合并进他的profile。这样能够构建更丰富的用户模型。同时因为用户profile是直接保存在客户端,隐私问题也得到了很好的解决。另一个优点是:计算和存储的整体开销可以分散到各个用户端。这种个性化搜索的主要缺点是个性化算法不能应用那些只能在服务器端可以得到的信息,例如:搜索结果的PageRank score(因为这个要遍历网络图来计算)。说点更深的东西吧,由于网络带宽的限制,用户端通常只能处理有限的比较热门的搜索结果

下面开始技术总结:
这一段挺短的,结构也很合理,直接看内容就行了~

个性化搜索的挑战——Challenges of Personalized Search

虽然个性化搜索看起来美滋滋,但是目前他还并没有被广泛应用。因为他还面临如下几个阻碍其实际应用的挑战:

  1. 隐私问题十分重要!个性化搜索,尤其是服务器端的实现,要求搜集整合大量的用户信息,包括query和点击历史。一个用户profile隐藏了大量的用户隐私信息,例如:爱好,假期,收入等级和政治倾向,很明显,这对用户来说是一个重要的问题11。这会使得许多用户害怕使用个性化搜索引擎。只有当个性化网络搜索很好的解决了隐私问题,他才会被大众接受。
  2. 精确的推断用户的信息需求是很困难的。用户不是静止不变的,他们也许会搜索一些他们完全不感兴趣的东西。。甚至有时会搜索其他人。。用户搜索历史肯定包含了一些与当前搜索无关的甚至是有害的噪音。这可能使得个性化搜索策略变的十分不稳定。。时好时坏?
  3. 不应该以相同的方式处理queries(同一个个性化算法对于一些query有用,可能对于其他的没用)。个性化搜索可能对某些查询影响很小。一些工作1 2 3研究了当前的网络搜索排序对于无歧义的queries是否足够了,因此个性化搜索就不是必须的。Dou et al. 3说明了个性化搜索对于那些具有较高的用户选择一致性的queries效果十分小。一个特定的个性化搜索对于不同的queries也会有不同的效果。甚至在某些情况下回影响搜索的准确性。例如:基于兴趣的主题个性化,在query是“mouse”的时候性能很好,但是query是“free mp3 download”时却没有效果。事实上,与“free mp3 download”相关的文章大部分都被划分到了相同的主题类别,这是基于兴趣的主题个性化搜索没有办法找到期望的文章。Dou et al. 3也揭示了基于兴趣的主题个性化搜索方法在现实生活中的搜索引擎上难以部署。他们对于一些queries能够提升搜索性能,但是可能会损害其他queries的搜索性能。

技术总结:
同上~(我不会承认码字码累了的=w=)

关键应用——Key Application

个性化网络搜索被看做是一个提升普通网络搜索性能的满意的处理方案。目前,谷歌和其他搜索引擎正在这方面努力。

实验结果——Experimental Results

实验结果表明:个性化网络搜索确实可以提高网络搜索的性能。更细致的实验结果可以在相关的参考文献中找到~ Dou et al. 3提出了一个基于大规模查询记录的个性化搜索的评估框架。

后话

这是我的第一篇博客,是以做笔记为目的撰写的(现在已经不是第一篇了…最开始没有发出来),方便自己以后回温,同时也以此纪念即将到来的博士生涯~ 刚刚接触个性化搜索这个领域,了解的知识还不够,因此这篇博客可能会有错误或者理解不到位的地方,欢迎大家批评指正~有交流才会有进步=v=

Personalized Web Search总结相关推荐

  1. Deteming the User Intent of Web Search Engine

    论文心得. 把搜索分为三种类型:informational, navigational, transactional The classifications of informational, nav ...

  2. Learning Deep Structured Semantic Models for Web Search using Clickthrough Data (DSSM)

    主要研究问题: 给定一个查询(query)和一组文档(document),返回一个排序(ranking),系统根据查询所对应文档的契合度高低排序. 论文主要结构: 一.Abstract 1.基于关键词 ...

  3. 归一化 均值归一化_归一化折现累积收益

    归一化 均值归一化 Do you remember the awkward moment when someone you had a good conversation with forgets y ...

  4. Best paper awards for AAAI, ACL, CHI, CIKM, FOCS, ICML, IJCAI, KDD, OSDI, SIGIR, SIGMOD, SOSP, STOC

    转载于:http://jeffhuang.com/best_paper_awards.html Best paper awards for AAAI, ACL, CHI, CIKM, FOCS, IC ...

  5. 计算机顶级会议的历年最佳文章 (1996-2013)

    本人博客地址:http://blog.csdn.net/wanrenwangxuejing Best Paper Awards in Computer Science (since 1996) ByC ...

  6. 【Paper】【Compute Vision】Best Paper Awards in Computer Science (since 1996)

    Best Paper Awards in Computer Science (since 1996) 转载之:http://jeffhuang.com/best_paper_awards.html 比 ...

  7. Google Ajax Search 参考

    Google AJAX Search API参考 Google AJAX Search API是一种允许您设置Google查寻到您的网页和其他 Web应用程序上的Javascript类库.要使用API ...

  8. IE 8 中自定义自己的 Search Provider (搜索提供程序)

    介绍 本文会为大家展示如果使用VS 2008 来创建基于IE8 的搜索提供程序, 以及在其中添加文本搜索建议和带有图片的搜索建议. 目的 学习如何使用VS 2008 来制作自己的搜索提供程序 步骤1 ...

  9. Web性能测试需监控的IIS性能指标

    [IT168 技术文档] IIS Global Active Flushed Entries Active Flushed Entries 是缓存文件句柄,当前传输全部完成后将关闭此句柄.IIS Gl ...

最新文章

  1. 从产品的适用性以及费用方面考虑
  2. bde oracle 商友的流程_BorlandC++使用BDE访问Oracle方法
  3. asp.netkg117《计算机网络》教学网站的设计与实现,《计算机网络》教学网站的设计与实现 毕业论文.doc...
  4. SharePoint 开发TimerJob 介绍
  5. 广州市科目三电子路考--大观路通过经验
  6. NMI watchdog: BUG: soft lockup - CPU#2 stuck for 23s!
  7. 命名实体识别(NER)资料收集
  8. POJ1426-Find The Multiple-深度优先搜索BFS
  9. jQuery Mobile 所有class选项,开发全解+完美注释
  10. c++11特性与cocos2d-x 3.0之std::bind与std::function
  11. PRML第三章3.2
  12. openwrt: ipq4019 路由 资料汇总
  13. 假设检验之t检验详解
  14. 视频教程-【国内首套H3C V7交换机实战课程-2】以太网端口和链路聚合配置与管理-H3C认证
  15. Unity3D Terrain 变成粉色(紫色/洋红色)解决方案!
  16. 《欲罢不能:刷屏时代如何摆脱行为上瘾》读书笔记
  17. SSH2远程连接例子
  18. 数字的大写字母的乱序整理
  19. 基于jsp+mysql+Spring+SpringMVC+mybatis的爱康医院专家预约管理系统
  20. python-爬取糗事百科段子

热门文章

  1. vue 汉字转拼音字母
  2. Docker学习——pinpoint部署
  3. [unity]在unity中创建圆锥体
  4. Karl Guttag:AR眼镜应根据用途来设计,VST并未解决技术难题
  5. 赚钱软件哪个赚钱多又容易?资深用户推荐人人都可以赚钱的APP
  6. 使用RecyclerView自定义实现二级联动列表
  7. 服务器应该租用哪家好?如何选择适合自己的服务器?
  8. 汽车半导体FMEDA的挑战和解决方案
  9. html盒子怎么定义,CSS盒状模型的定义
  10. 6种品牌打印机介绍及打印机旗舰店推荐