导读: 深耕技术研发数十载,坚持自主可控发展路。星环科技一路砥砺前行、坚持创新为先,建设了全面的产品矩阵,并于2022年作为首个独立基础软件产品公司成功上市。星环科技在今年的向星力•未来技术大会上发布了分布式向量数据库Transwarp Hippo以及两款领域大模型“无涯”和“求索”。关于星环科技在向量数据库领域的建树和背后的故事、以及对该领域的看法,墨天轮邀请到星环科技基础架构部副总经理刘熙分享他的观点与见解。



简介星环科技基础架构部副总经理 刘熙 在星环科技工作达10年,一直从事数据库方面的研究工作,在关系型数据库、搜索引擎、时序数据库、时空数据库、向量数据库等产品领域具有丰富的实践经验,主导和参与了泛金融、能源制造等多个行业上百个大数据项目

所属公司: 星环科技致力于打造企业级大数据基础软件,围绕数据的集成、存储、治理、建模、分析、挖掘和流通等数据全生命周期提供基础软件与服务,构建明日数据世界。经过多年自主研发,星环科技建立了多个产品系列:一站式大数据基础平台TDH、分布式分析型数据库ArgoDB及交易型数据库KunDB、基于容器的智能数据云平台TDC、大数据开发工具TDS、智能分析工具Sophon和超融合大数据一体机TxData Appliance 等,并拥有多项专利技术。目前公司产品已经在十几个行业应用落地,拥有超过1400家终端用户。2022年10月,成功登陆上交所科创板。

—— 以下为采访全文 ——

1、首先请您用通俗易懂的话给大家科普一下什么是向量数据库,主要解决什么样的问题,和传统关系型数据库有什么区别?

刘熙: 传统数据库主要处理数值和字符类型的数据,通常是高质量的关系型表。当然,现在也有许多处理半结构化数据(如JSON数据)的数据库,例如MongoDB、Elasticsearch等。然而,这些数据的语义通常只表现在表面,没有深层次的含义。向量数据库则与众不同,它处理的是非结构化数据,如图片、视频、长文本和音频等。这些数据的意义不在于其物理表示,并不仅仅是一堆字节,真正有意义的地方在于隐藏的语义。

对于传统数据库,我们无法通过其直接处理语义问题。那么如何解决这个问题呢?通过采用AI技术,例如典型的神经网络,来识别、提取和编码非结构化数据背后的语义特征。最终,将这种数据的语义映射或嵌入到高维的向量空间中。这样做有什么好处呢?这实际上将数据库无法直接处理的语义问题,转化为向量空间中的搜索问题。简而言之,我们利用AI技术将数据库无法直接处理的数据背后的语义转化为一个结构化的过程。

在处理非结构化数据时,我们通常不仅提取特征向量这一个维度,还会提取一些结构化的属性标签。举个例子,我们正在开发的金融大模型,从财经新闻中通过实体识别算法提取企业法人等信息。这些信息并不仅仅是向量,它们更像是一些属性标签。类似地,在以前的电商中,对于商品图片,除了特征向量外,还可能提取价格、颜色等结构化标签。

因此可以说,没有AI技术,就不会有向量数据库这样细分的数据库品类。另一方面,向量数据库能够很好地解决AI技术落地的问题。

大模型近来非常受关注,但大模型的能力是有限的,它无法回答它从未见过的问题,即无法回答训练语料库中没有的知识,例如一些私密数据或专业领域的数据,通常不会存在于通用语料库中。当面对需要回答专业问题的情况时,大模型可能会提供错误答案。在以前的小模型时代,我们通常会进行精细调整,但如今的模型参数可能达到数千亿、万亿级别。在这种情况下,精细调整的成本非常高,并且无法解决大模型无法获取最新数据的问题。因此,通过将知识从大模型中分离出来,引入向量数据库,实际上为大模型添加了一个记忆单元,这就是所谓的大模型+向量数据库+Prompt(MVP)架构。在这种架构下,整个大模型的技术实现更加容易。通过使用向量数据库,我们可以处理私密数据或实时数据,并且可以更好地控制数据的安全性。因此,向量数据库作为一种基础的AI设施,可以有效地解决AI技术在实际应用中的问题。

综上,可以看出向量数据库与AI的关系非常密切。它源自AI,同时又为解决AI技术应用问题提供了有效的解决方案。

2、请您介绍下星环科技向量数据库诞生的背景,以及产品名Hippo、Logo的寓意。

刘熙: 在谈论星环科技向量数据库诞生的背景前,我想分享一些当时的故事。大约在2018年左右,那时我们星环科技还专注于开发多模型统一处理技术。我们逐步将一些数据库的通用功能,如分布式存储、分布式计算、安全性和资源管理等功能,从紧耦合的架构转化为松耦合的架构。我们当时的目标是通过统一的架构来更好地支持各种数据库,例如图数据库和时序数据库。

在这段时间里,我们公司内部的AI团队找到我,告诉我有一类数据叫做向量数据,对于我们的AI业务非常重要。然而,他们手头只有一个叫做Faiss的库来处理这类数据。当时Faiss的版本可能是1.1或者1.2,还处于比较早期的阶段。他们面临的问题是,这些数据需要他们自己编写代码来进行管理,基本上每个项目都需要重复进行这样的工作,非常费时费力,而且可能无法保证高可用性和安全性。因此,他们希望我们能够开发一个专门处理向量数据的数据库,供他们的AI团队使用。

我们当时进行了一些调研,最终的结论是,尽管当时市场还不大,但这项技术有很大的潜力。即使可能不能立即商业化,但我们仍然认为有必要为将来做这样的技术储备。于是,我们决定着手进行这项工作。从0到1的第一个版本,进展迅速,因为需求相对明确,而且内部团队也不需要太多考虑面向客户的问题。我们的第一个版本基本上只是将Faiss库改造成了一个分布式库,通过基于数据ID的分片方式,每个分片下有一些副本,并通过Raft算法确保数据一致性。这个时期我们已经完成了之前提到的解耦工作,手上有很多可直接复用的技术组件,所以我们第一个版本很快就交付给了AI团队,整个过程不到两个月的时间。

AI团队使用后感觉还不错,有了一个数据库来管理向量数据,而且非常可靠。随后,他们也提出了许多需求。接下来,我们为这个数据库添加了独立的存储和查询向量索引,逐步添加数据的增删改查功能,以及标量和向量的混合搜索,标量索引等等。简而言之就是,快速开发第一个版本并持续添加功能。

当大模型概念兴起的时候,我们意识到向量数据库这项能力应该作为一个独立的数据库产品来支持,而不仅仅是作为一个内部组件存在。因此,我们开始了产品化的工作,并投入了大量时间,包括解决安全性、开箱即用的易用性、运维管理能力等。作为一个面向市场用户的完整产品,我们必须综合考虑各种方面的问题。最终,我们在今年5月的发布会上,正式对外发布了我们的向量数据库Transwarp Hippo。

正如前面所说的,向量数据库承担了中间存储的角色,我们认为向量数据库就是大语言模型的海马体,是一个记忆体。因此,产品名Hippo源自于海马体英文的前缀,而logo我们也是精心设计的,融入了海马体形状和数据库常用的图标元素,并最终由多维向量元素表示。

3、最近市场上突然出现了很多向量数据库产品,请问您觉得向量数据库的技术门槛高吗,向量数据库有哪些挑战?

刘熙: 这个现象是有点意思的。有些人可能猜测,向量数据库到底真的有需求,还是这些厂商跟风才推出的,这种短时间推出的产品能不能用?

实际上,研发一款新的数据库产品有很多方面的问题要克服,需要投入大量的时间和人力资源,而且向量数据库又涉及到多个领域的知识,包括交叉的 AI 知识、数据库知识和安全等,从头开始构建一个向量数据库的时间和实践成本都很高。

对于我们星环科技的情况呢,前面那个问题已经回答过了,我们的产品是从几年前AI团队内部的需求演进而来的。结合我们这几年的实践,我们认为技术上的挑战主要包含几个方面。

首先就是扩展性问题。随着AIGC等应用的发展,特别是大模型的兴起,对嵌入(embedding)和向量化这块能力的需求急剧增加。大模型的普及也让向量数据的规模不断增大,从百万级别的数据体量已经变为千万级别,甚至更大。这就需要数据库能够有效地支持大规模向量数据的存储和检索,这对硬件资源提出了更高的要求,特别是在云上部署时成本可能成为一个重要问题。

第二个挑战是成本问题。在向量搜索中,索引的大小和存储是关键因素,而向量索引的成本通常较高。以前在数据量较小的情况下,可能只需要几台机器就足够了,成本并不是关键问题。但随着数据规模的增大,需要更多的资源来支持,这就涉及到成本的考虑。

第三个挑战是易用性问题。与传统的关系型数据库不同,向量搜索涉及到更多维度的考量,包括性能和召回率等。为了平衡性能和召回率,需要调整各种参数,但这可能对用户来说不太友好。因此,简化参数选择,提高用户体验是一个重要的挑战。

最后一个挑战是混合搜索中的路径优化问题。与传统的优化器相比,向量搜索的优化器更加复杂,因为它需要考虑多维度的因素。如何设计一个能够描述向量搜索代价的模型,以实现性能和召回率的平衡,是一个需要解决的难题。

当然,向量数据库还面临着其他有趣的挑战,比如在向量搜索中实现向量相似度过滤,以及如何在不同数据集间进行相似性join等问题。这些问题都需要深入的研究和解决,使得向量数据库能够更好地应对现实世界的各种应用场景。

4、自从GPT 3.5发布以来,向量数据库突然火了,投融资项目及规模空前,您怎么看待这波“向量热”,您觉得这个热度会一直持续下去吗?

刘熙: 目前,国内的向量数据库以及AIGC在行业内的火热程度不言而喻。如之前我所说的,向量数据库源自AI,同时又为解决AI技术应用问题提供了有效的解决方案。大模型的兴起为向量数据库等领域带来了巨大的关注度,同时也催生了更多的产品和解决方案,促使市场快速成熟。

我们星环科技这半年的时间里,与很多家客户及合作伙伴的交流中,我们发现,客户对这些深度学习应用非常感兴趣。然而,客户们目前仍处于学习和选型的阶段。我们与多个客户合作,进行了深入的原型验证工作。在客户将新技术引入实际业务之前,他们需要时间来适应和了解这些新概念。我们认为在下半年,国内的大模型应用可能会迎来一个高潮。

在未来的几个月内,我们将会看到更多客户开始在实际业务中应用这些新技术,因为每次与客户交流时,他们对于如何应用这些技术以及如何在他们的企业中发挥作用都会有更清晰的认识,这是一个逐步推进的过程。

5、目前市面上的向量数据库应该已经有很多了,有插件的、专用的,用户在做向量数据库选型时应该注意哪些点?

刘熙: 整体上目前向量数据库有2条技术路线,一种是基于传统关系型数据库封装向量计算功能,一种是专业的向量数据库。基于我们星环科技的实践经验,如果只是小数据量、访问并发延迟这类要求也不高的情况下,从原有数据库里封装向量计算的方法可能是可行的,但如果数据规模、访问并发这类指标上去以后,处于性能、扩展性、资源弹性方面的原因,我们其实是需要专业的向量数据库的。

我们其实⼀开始就抛弃了基于lucene去扩展向量计算这条路,这个主要是java语言的执行效率以及jvm堆内存管理方面的限制,对向量计算这种重cpu大内存的workload很难做得高效。

如果是基于关系型数据库,现在的做法都是把向量作为⼀个列,有些实现会做⼀个单独的向量数据类型,有些实现就直接用float数组表示,然后为这个向量列建向量索引,最后扩展⼀下SQL语法或者搞几个UDF,让向量搜索语法能够被SQL这套语言表示。看起来好像挺简单的,但这种做法有⼀些架构性的问题,导致向量搜索很难做得高效。

第一个问题在于,我们要在数据库里扩展新的索引实现,是需要按照数据库的索引规范实现的,这会造成向量索引的性能损失,而向量索引是向量数据库最核心的逻辑,这也直接导致现在这类通用向量数据库的性能会弱于专用向量数据库。向量这块有很多公开的数据集和测试结果,网络上很容易找到的,通过简单的测试就可以发现这种方式的性能瓶颈。另外在查询效率上,因为类似的原因也会造成明显的性能损耗。

第二个问题在于,向量搜索的资源使用模式与传统数据库不同,这会导致这类向量数据库的扩展性以及资源弹性不如专业向量数据库。技术上还会有⼀些其他问题,比如如何设计⼀个兼容结构化数据和向量化数据的优化模型等等,那第三个问题,我想说的不在于技术,而在于用户成本。我们最开始聊"向量数据库"这个概念的时候有说过,向量数据库绝大多数情况下服务于AI应用场景,这些场景里传统数据库的存量功能其实很难产生实际的应用价值,那对于用户来说,相比与采购专用向量数据库,采购通用数据库来应用在向量场景其实可能是比较亏的。对于改造现有数据库系统,也可能会对现有业务正常开展产生不稳定的影响。

6、向量数据库的使用门槛好像比较高,您觉得哪类企业会第一批使用向量数据库。另外星环科技向量数据库目前有哪些成功案例?

刘熙: 向量数据库在大模型兴起之前可能并没有受到特别大的关注,但实际上已经有较长一段时间的发展了,也有了很多的应用。我们自己就一直在使用向量数据库,还有一些大型企业也在使用,以及像生成式AI的顶尖企业,此外,向量数据库在AIGC之外也有许多其他应用场景。

举例来说,电商领域主要专注于搜索、广告推荐等应用,这对于电商而言至关重要。自动驾驶领域也大量应用了向量数据库,例如用于自动化标注、场景识别等。在社交媒体中,向量数据库可以用于内容风控,帮助平台过滤掉敏感言论,以提高内容的质量和安全性。金融领域也能充分发挥向量数据库的应用,例如服务推荐等。此外,像生物医药、知识产权等领域也都有广泛的应用。

如之前所说,我们星环科技的向量数据库一开始是因为内部AI团队需求诞生的,所以也是有一些实践的。例如将一些交易所规则、期货法规、可研报告等材料处理后存储到向量数据库里,结合领域大模型来构建知识库,通过向量数据库来提升一些行业的、最新的知识的召回能力。类似的金融场景中,很多机构会构建金融法律法规问答库,通过向量数据库可以很好地解决这些问题。

7、在国内,向量数据库会不会和关系型数据库一样这么卷?以及星环科技计划如何破局并建立“先发”优势?

刘熙: 目前我们就能看到,很多厂商陆续发布自己的向量数据库产品,随着向量数据库技术的逐步成熟,以及客户实践之后逐渐意识到这块的价值,相信会有更多的产品出现。这么多的产品,星环科技该如何破局呢?我认为主要有几点。

首先,如前面谈到的,星环科技的向量数据库在早几年就已经在公司内部使用了,并且在今年5月份正式发布,算是国内较早正式发布向量数据库产品的,我觉得这个已经建立了一个“先发优势”。向量数据库涉及多个领域的知识,包括交叉的 AI 知识和数据库等知识,这些都需要积累的,不是简单拿个开源的检索库过来封装下就可以的。星环科技有这么多年的数据库技术和AI技术积累,以及向量数据库技术方面的实践,因此,在产品可用性和稳定性等方面,我们是绝对有信心的。最近,我们也发布了向量数据库社区版,有几个特性,免费获取、快速部署和简单易用,也是为了进一步降低用户使用向量数据库的门槛和成本,用户可以低成本、快速地基于已有向量数据库进行大模型领域的探索,实现业务的创新。

除了在向量数据库技术方面的优势,星环科技也有自己自研的行业垂类大模型,金融大模型“无涯”和大数据领域大模型“求索”,分别旨在促进金融分析和大数据分析的平民化,推动计算普惠和AI普及。通过大模型和向量数据库的结合,互相反哺,有利于进一步提升产品各自以及整体方案上的优势。

此外,星环科技也有自研的分布式向量数据库和知识图谱,通过将分布式向量数据库和分布式图数据库以及知识图谱结合,与大模型可视化端到端构建工具一起,提供了知识抽取融合、知识建模、知识图谱生成存储、基于大模型的知识问答等闭环功能,可以构建业务域知识图谱和业务系统的应用服务,激发出更多更深入的业务场景AI应用。

除了以上这些和AI强相关的方面,优秀的平台也离不开扎实的数据底座,星环科技在大数据领域有非常多的积累,有我们的一站式多模型大数据基础平台,可以处理关系型、图、时序、时空等业内主流的全部数据类型,也有基于容器化技术的数据云平台,还有各类丰富的数据开发工具等等,涵盖了数据全生命周期的产品,满足用户数据平台建设的各类需求。

从以上可以看出,在这个领域市场里,从向量数据库这个点,到包括图数据库、知识图谱、领域大模型、大模型开发工具等等在内的布局,星环科技的产品体系已经形成了一个颇具规模的面,在市场竞争中是非常有竞争力的,这一点上我们是很有信心的。

8、针对搜索场景,类似Elasticsearch数据库目前被广泛应用,首先向量数据库是否能够满足Elasticsearch等擅长的文本搜索场景?另外传统的搜索数据库与向量数据库相比有哪些缺陷?

刘熙: 针对文本搜索场景,向量搜索和全文搜索擅长解决的问题并不完全相同,全文搜索更适合做关键字匹配,而向量搜索能找出字面上不同但语义上相近的内容。向量数据与全文数据在存储、计算上也有很大的差别,传统的搜索数据库比如Elasticsearch很难同时高效支持这两种场景,这个大家感兴趣可以去查看网上的公开数据集比如ann benchmark,Elasticsearch的性能远落后于专业的向量数据库,而且没记错的话,它的索引类型也只支持HNSW,不支持多种类向量索引,大家知道每一种索引类型都有各自的使用场景,HNSW在大数据量下性能稳定,但资源开销非常大。

根据我们的实践经验,在文本搜索场景里,使用向量加全文的联合召回,能够做到的精度比单独使用向量或者全文更高,我们星环科技即将发布的向量数据库Hippo1.1版本里就有这样的功能,叫hybrid search,在内部项目应用下来效果非常好。

9、您觉得向量数据库未来的技术趋势有哪些值得我们关注?

刘熙: 关于技术趋势,我认为有几个关键点需要强调。首先,对于向量数据库领域,要实现深度学习技术的最优应用,需要具备AI、数据库和安全等多方面的能力。数据库内通常会储存一些敏感数据,因此如何保证这些数据的安全性将成为一个极其重要的议题。尤其是随着向量数据库等领域逐渐引入深度学习技术,对AI能力和数据安全的需求将变得愈发迫切。

其次,我认为在短期内,随着大模型技术的迅速崛起,将会进一步加剧市场竞争的激烈程度。大模型的兴起为向量数据库等领域带来了巨大的关注度,同时也催生了更多的产品和解决方案,促使市场快速成熟。这对于技术从业者和用户都是利好,因为竞争带来了更多选择,也能获得更高性价比的解决方案。

我相信,在这个大数据时代,向量数据库领域具备巨大的潜力。同时,我想借此机会为对这一领域感兴趣的同学们打个小广告,欢迎与我们进行线上交流或投递简历。我们的团队将继续努力,不断积累和分享行业大模型的经验,与大家共同进步。


阅读原文:https://www.modb.pro/db/1701130013479358464

欲了解更多可浏览墨天轮技术社区,围绕数据人的学习成长提供一站式的全面服务,打造集新闻资讯、在线问答、活动直播、在线课程、文档阅览、资源下载、知识分享及在线运维为一体的统一平台,持续促进数据领域的知识传播和技术创新。

墨天轮专访星环科技刘熙:“向量热”背后的冷思考,Hippo如何打造“先发”优势?的更多相关文章

  1. Tapdata 与星环 KunDB 完成产品兼容互认证

      近日, Tapdata 实时数据即服务平台(Tapdata Real Time DaaS)与星环 KunDB 完成产品兼容互认证.经深圳钛铂数据有限公司和星环信息科技(上海)股份有限公司共同严格测 ...

  2. 9.7寸RK3188瑞芯微四核爱立顺M33平板电脑 - 深圳吉祥星晨科技有限公司 - 华强商情网

    9.7寸RK3188瑞芯微四核爱立顺M33平板电脑 - 深圳吉祥星晨科技有限公司 - 华强商情网 欢迎加入 2000人超级QQ群,平板电脑行业交流群:221371451,平板电脑产品及报价群:5765 ...

  3. 3星|《科技投资新时代》:TMT行业资讯汇编

    科技投资新时代:TMT投资方法.趋势与热点聚焦 全书共6章,前4章是一些投资与分析的基本方法与技巧,第5章集中讲通信行业的现状与趋势,第6章讲大数据.物联网.全面屏等TMT行业热点. 总体来说数据.信 ...

  4. 星环大数据安全组件Guardian与hadoop自带的安全组件区别

    在进行讲解之前,先带大家学习下hadoop关于hdfs自己的安全如何实现的--------------------------- 名词: ACL-访问控制列表(Access Control List, ...

  5. 展望 2017年商业智能BI 发展的趋势

    在展望2017年商业智能 BI 发展趋势前,我们先来了解一下商业智能 BI 发展的几个重要阶段. 传统 BI 和新型 BI 的分水岭(2013年) 大背景 在2013年以前相当长的一个周期(2005年 ...

  6. 2014 BDTC 參会有感

    中国大数据技术大会(Big Data Technology Conference,BDTC)是眼下国内最具影响.规模最大的大数据领域的技术盛会. 大会的前身是Hadoop中国云计算大会(Hadoop ...

  7. 我的第一本著作:Spark技术内幕上市!

    现在各大网站销售中! 京东:http://item.jd.com/11770787.html 当当:http://product.dangdang.com/23776595.html 亚马逊:http ...

  8. 2014 BDTC 参会有感

    中国大数据技术大会(Big Data Technology Conference,BDTC)是目前国内最具影响.规模最大的大数据领域的技术盛会.大会的前身是Hadoop中国云计算大会(Hadoop i ...

  9. CNCF LandScape Summary

    CNCF Cloud Native Interactive Landscape 1. App Definition and Development 1. Database Vitess:itess i ...

  10. 金三银四,磨砺锋芒;剑指大厂,扬帆起航(2020年最全大厂WEB前端面试题精选)上

    金三银四,磨砺锋芒:剑指大厂,扬帆起航(2020年最全大厂WEB前端面试题精选)上 引言 元旦匆匆而过,2020年的春节又接踵而来,大家除了忙的提着裤子加班.年底冲冲冲外,还有着对于明年的迷茫和期待! ...

随机推荐

  1. keycloak~为微信二维码添加动态kc认可的动态state

    本实例将通过keycloak社区登录实现微信二维码的登录,并且二微码不是keycloak动态生成,而是通过微信提供的js生成的,在页面上直接输出的方式实现的. 动态state 在Keycloak中使用 ...

  2. 倒装句&强调句

    倒装句 你[吃][胡萝卜]了吗? 吃胡萝卜了吗,[你]? 强调点不同 汉语常见于口语表达 英语则常见于书面用语 英语的语序是 主语 谓语(动词) 通常把谓语动词提前 1.完全倒装句 谓语部分完全放在主 ...

  3. Apache COC闪电演讲总结【OSGraph】

    大家能看到我最近一直在折腾与OSGraph这个产品相关的事情,之前在文章<妙用OSGraph:发掘GitHub知识图谱上的开源故事>中向大家阐述过这个产品的设计理念和应用价值.比方说以下问 ...

  4. 13、SpringMVC之异常解析器

    13.1.环境搭建 创建名为spring_mvc_exception的新module,过程参考9.1节和9.5节 13.1.1.创建错误提示页 <!DOCTYPE html> <ht ...

  5. Tomcat日志信息有乱码的处理方法

    1.问题描述 1.1.Idea中的tomcat日志有乱码 1.2.直接启动tomcat的日志有乱码 1.3.原因分析 问题是由于tomcat使用的编码和操作系统使用的编码不一致导致: Windows1 ...

  6. 【Java】Spring5学习

    基础环境与文档资料: 见黑马视频: https://www.bilibili.com/video/BV1P44y1N7QG 依赖坐标: <?xml version="1.0" ...

  7. 【Spring】01 快速入门

    Spring快速入门 空Maven项目创建 声明工程名称,完成 删除SRC目录,创建01 HelloSpring模块 导入依赖 Maven坐标: <!-- https://mvnreposito ...

  8. 强化学习中的“sample efficiency”应该如何翻译 —— “样本效率”还是“采样效率”

    问题: 强化学习中的"sample efficiency"应该如何翻译 -- "样本效率"还是"采样效率" 答案: 具体看上下文内容.如果是 ...

  9. CryptoHouse:由 ClickHouse 和 Goldsky 支持的免费区块链分析服务(ClickHouse 博客)

    我们很高兴地宣布 CryptoHouse,在 crypto.clickhouse.com 上可访问,这是一个由 ClickHouse 提供支持的免费区块链分析服务. https://crypto.cl ...

  10. 19-canvas绘制文字

    1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="U ...