前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Using side features: feature preprocessing

Using side features: feature preprocessing

原创
作者头像
XianxinMao
修改于 2021-07-30 08:37:42
修改于 2021-07-30 08:37:42
44600
代码可运行
举报
文章被收录于专栏:深度学习框架深度学习框架
运行总次数:0
代码可运行

One of the great advantages of using a deep learning framework to build recommender models is the freedom to build rich, flexible feature representations.

These need to be appropriately transformed in order to be useful in building models:

  • User and item ids have to be translated into embedding vectors: high-dimensional numerical representations that are adjusted during training to help the model predict its objective better.
  • Raw text needs to be tokenized (split into smaller parts such as individual words) and translated into embeddings.
  • Numerical features need to be normalized so that their values lie in a small interval around 0.

The MovieLens dataset

Let's first have a look at what features we can use from the MovieLens dataset:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import pprint
​
import tensorflow_datasets as tfds
​
ratings = tfds.load("movielens/100k-ratings", split="train")for x in ratings.take(1).as_numpy_iterator():
  pprint.pprint(x)

There are a couple of key features here:

  • Movie title is useful as a movie identifier.
  • User id is useful as a user identifier.
  • Timestamps will allow us to model the effect of time.

The first two are categorical features; timestamps are a continuous feature.

Turning categorical features into embeddings

A categorical feature is a feature that does not express a continuous quantity, but rather takes on one of a set of fixed values.

Most deep learning models express these feature by turning them into high-dimensional vectors. During model training, the value of that vector is adjusted to help the model predict its objective better. For example, suppose that our goal is to predict which user is going to watch which movie. To do that, we represent each user and each movie by an embedding vector. Initially, these embeddings will take on random values - but during training, we will adjust them so that embeddings of users and the movies they watch end up closer together. Taking raw categorical features and turning them into embeddings is normally a two-step process:

  1. Firstly, we need to translate the raw values into a range of contiguous integers, normally by building a mapping (called a "vocabulary") that maps raw values ("Star Wars") to integers (say, 15)
  2. Secondly, we need to take these integers and turn them into embeddings.

Defining the vocabulary

The first step is to define a vocabulary. We can do this easily using Keras preprocessing layers.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import numpy as np
import tensorflow as tf
​
movie_title_lookup = tf.keras.layers.experimental.preprocessing.StringLookup()

The layer itself does not have a vocabulary yet, but we can build it using our data.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
movie_title_lookup.adapt(ratings.map(lambda x: x["movie_title"]))print(f"Vocabulary: {movie_title_lookup.get_vocabulary()[:3]}")

Once we have this we can use the layer to translate raw tokens to embedding ids:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
movie_title_lookup(["Star Wars (1977)", "One Flew Over the Cuckoo's Nest (1975)"])

Note that the layer's vocabulary includes one (or more!) unknown (or "out of vocabulary", OOV) tokens. This is really handy: it means that the layer can handle categorical values that are not in the vocabulary. In practical terms, this means that the model can continue to learn about and make recommendations even using features that have not been seen during vocabulary construction.

Using feature hashing

We can take this to its logical extreme and rely entirely on feature hashing, with no vocabulary at all. This is implemented in the tf.keras.layers.experimental.preprocessing.Hashing layer.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# We set up a large number of bins to reduce the chance of hash collisions.
num_hashing_bins = 200_000
​
movie_title_hashing = tf.keras.layers.experimental.preprocessing.Hashing(
    num_bins=num_hashing_bins
)

We can do the lookup as before without the need to build vocabularies:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
movie_title_hashing(["Star Wars (1977)", "One Flew Over the Cuckoo's Nest (1975)"])

Defining the embeddings

Now that we have integer ids, we can use the Embedding layer to turn those into embeddings.

An embedding layer has two dimensions: the first dimension tells us how many distinct categories we can embed; the second tells us how large the vector representing each of them can be.

When creating the embedding layer for movie titles, we are going to set the first value to the size of our title vocabulary (or the number of hashing bins). The second is up to us: the larger it is, the higher the capacity of the model, but the slower it is to fit and serve.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
movie_title_embedding = tf.keras.layers.Embedding(
    # Let's use the explicit vocabulary lookup.
    input_dim=movie_title_lookup.vocab_size(),
    output_dim=32
)

We can put the two together into a single layer which takes raw text in and yields embeddings.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
movie_title_model = tf.keras.Sequential([movie_title_lookup, movie_title_embedding])

Just like that, we can directly get the embeddings for our movie titles:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
movie_title_model(["Star Wars (1977)"])

We can do the same with user embeddings:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
user_id_lookup = tf.keras.layers.experimental.preprocessing.StringLookup()
user_id_lookup.adapt(ratings.map(lambda x: x["user_id"]))
​
user_id_embedding = tf.keras.layers.Embedding(user_id_lookup.vocab_size(), 32)
​
user_id_model = tf.keras.Sequential([user_id_lookup, user_id_embedding])

Normalizing continuous features

Continuous features also need normalization. For example, the timestamp feature is far too large to be used directly in a deep model

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for x in ratings.take(3).as_numpy_iterator():
  print(f"Timestamp: {x['timestamp']}.")

We need to process it before we can use it. While there are many ways in which we can do this, discretization and standardization are two common ones.

Standardization

Standardization rescales features to normalize their range by subtracting the feature's mean and dividing by its standard deviation. It is a common preprocessing transformation.

This can be easily accomplished using the tf.keras.layers.experimental.preprocessing.Normalization layer:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
timestamp_normalization = tf.keras.layers.experimental.preprocessing.Normalization()
timestamp_normalization.adapt(ratings.map(lambda x: x["timestamp"]).batch(1024))for x in ratings.take(3).as_numpy_iterator():
  print(f"Normalized timestamp: {timestamp_normalization(x['timestamp'])}.")

Discretization

Another common transformation is to turn a continuous feature into a number of categorical features. This makes good sense if we have reasons to suspect that a feature's effect is non-continuous. To do this, we first need to establish the boundaries of the buckets we will use for discretization. The easiest way is to identify the minimum and maximum value of the feature, and divide the resulting interval equally:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
max_timestamp = ratings.map(lambda x: x["timestamp"]).reduce(
    tf.cast(0, tf.int64), tf.maximum).numpy().max()
min_timestamp = ratings.map(lambda x: x["timestamp"]).reduce(
    np.int64(1e9), tf.minimum).numpy().min()
​
timestamp_buckets = np.linspace(
    min_timestamp, max_timestamp, num=1000)print(f"Buckets: {timestamp_buckets[:3]}")

Given the bucket boundaries we can transform timestamps into embeddings:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
timestamp_embedding_model = tf.keras.Sequential([
  tf.keras.layers.experimental.preprocessing.Discretization(timestamp_buckets.tolist()),
  tf.keras.layers.Embedding(len(timestamp_buckets) + 1, 32)
])for timestamp in ratings.take(1).map(lambda x: x["timestamp"]).batch(1).as_numpy_iterator():
  print(f"Timestamp embedding: {timestamp_embedding_model(timestamp)}.")

Processing text features

We may also want to add text features to our model. Usually, things like product descriptions are free form text, and we can hope that our model can learn to use the information they contain to make better recommendations, especially in a cold-start or long tail scenario. While the MovieLens dataset does not give us rich textual features, we can still use movie titles. This may help us capture the fact that movies with very similar titles are likely to belong to the same series. The first transformation we need to apply to text is tokenization (splitting into constituent words or word-pieces), followed by vocabulary learning, followed by an embedding.

The Keras tf.keras.layers.experimental.preprocessing.TextVectorization layer can do the first two steps for us:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
title_text = tf.keras.layers.experimental.preprocessing.TextVectorization()
title_text.adapt(ratings.map(lambda x: x["movie_title"]))

Let's try it out:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for row in ratings.batch(1).map(lambda x: x["movie_title"]).take(1):
  print(title_text(row))

Each title is translated into a sequence of tokens, one for each piece we've tokenized.

We can check the learned vocabulary to verify that the layer is using the correct tokenization:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
title_text.get_vocabulary()[40:45]

This looks correct: the layer is tokenizing titles into individual words. To finish the processing, we now need to embed the text. Because each title contains multiple words, we will get multiple embeddings for each title. For use in a donwstream model these are usually compressed into a single embedding. Models like RNNs or Transformers are useful here, but averaging all the words' embeddings together is a good starting point.

Putting it all together

With these components in place, we can build a model that does all the preprocessing together.

User model

The full user model may look like the following:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class UserModel(tf.keras.Model):
​
  def __init__(self):
    super().__init__()
​
    self.user_embedding = tf.keras.Sequential([
        user_id_lookup,
        tf.keras.layers.Embedding(user_id_lookup.vocab_size(), 32),
    ])
    self.timestamp_embedding = tf.keras.Sequential([
      tf.keras.layers.experimental.preprocessing.Discretization(timestamp_buckets.tolist()),
      tf.keras.layers.Embedding(len(timestamp_buckets) + 2, 32)
    ])
    self.normalized_timestamp = tf.keras.layers.experimental.preprocessing.Normalization()
​
  def call(self, inputs):
​
    # Take the input dictionary, pass it through each input layer,
    # and concatenate the result.
    return tf.concat([
        self.user_embedding(inputs["user_id"]),
        self.timestamp_embedding(inputs["timestamp"]),
        self.normalized_timestamp(inputs["timestamp"])
    ], axis=1)

Let's try it out:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
user_model = UserModel()
​
user_model.normalized_timestamp.adapt(
    ratings.map(lambda x: x["timestamp"]).batch(128))for row in ratings.batch(1).take(1):
  print(f"Computed representations: {user_model(row)[0, :3]}")

Movie model

We can do the same for the movie model:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class MovieModel(tf.keras.Model):
​
  def __init__(self):
    super().__init__()
​
    max_tokens = 10_000
​
    self.title_embedding = tf.keras.Sequential([
      movie_title_lookup,
      tf.keras.layers.Embedding(movie_title_lookup.vocab_size(), 32)
    ])
    self.title_text_embedding = tf.keras.Sequential([
      tf.keras.layers.experimental.preprocessing.TextVectorization(max_tokens=max_tokens),
      tf.keras.layers.Embedding(max_tokens, 32, mask_zero=True),
      # We average the embedding of individual words to get one embedding vector
      # per title.
      tf.keras.layers.GlobalAveragePooling1D(),
    ])
​
  def call(self, inputs):
    return tf.concat([
        self.title_embedding(inputs["movie_title"]),
        self.title_text_embedding(inputs["movie_title"]),
    ], axis=1)

Let's try it out:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
movie_model = MovieModel()
​
movie_model.title_text_embedding.layers[0].adapt(
    ratings.map(lambda x: x["movie_title"]))for row in ratings.batch(1).take(1):
  print(f"Computed representations: {movie_model(row)[0, :3]}")

代码地址: https://codechina.csdn.net/csdn_codechina/enterprise_technology/-/blob/master/NLP_recommend/Using%20side%20features:%20feature%20preprocessing.ipynb

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
2527 万元、北京银行核心下移数据库设备项目
2022年3月2日,北京银行发布《核心下移数据库设备采购项目》招标公告,预算 2560 万元。 此次设备采购的主要目标为构建安全、可靠、高性能的数据库云平台用于逐步进行核心银行系统下移的工作。 中标结果 2022年3月29日发布中标结果,北京惠邦天地技术有限公司 25,269,100.00 元中标。 中标候选人第1名:北京惠邦天地技术有限公司 投标总价:¥25,269,100.00元 中标候选人第2名:北京瑞和世纪科技有限公司 投标总价:¥25,568,000.00元 中标候选人第3名:智信软件(北京)有限
云头条
2022/03/30
3250
255 万元、重庆银行「分布式数据库」项目:腾讯云中标
2022年3月11日,重庆银行股份有限公司发布《2022年分布式数据库项目》招标公告,采购 260 万元。 货物规格型号及数量:分布式数据库*1套。 具体要求如下: 1、16节点的数据库物理服务器授权(按同城双中心部署架构,共4套独立集群,每套4节点,含数据复制或实时同步许可) 2、4套分布式群集管理配置许可(按同城双中心部署架构计算,含数据库群集管理模块或许可、运维工具、性能分析工具、监控工具) 3、一年原厂7*24维保服务;一年原厂DBA驻场服务及分布式数据库规划与设计服务(交付物包括不限于:《重庆银
云头条
2022/04/08
7190
255 万元、重庆银行「分布式数据库」项目:腾讯云中标
3748 万、山脉科技中标:蒲白矿业矿井智能综合管控平台、数据中台、统一的透明矿井数字孪生管理平台、私有云、数据中心项目
2022年6月13日,陕西陕煤蒲白矿业有限公司发布《建新煤化矿井智能综合孪生管控平台及私有云数据中心建设购置项目》招标公告。 规模: 一是建设矿井智能综合管控平台:使各生产、安全、环境监测等各类子系统数据在异构条件下可进行有效集成和有机整合,实现相关联业务数据的综合分析,调度指挥人员或相关专业部门人员通过相应的权限对矿井安全信息进行统一的协调管理,为构建智能化示范煤矿做好坚实基础。 二是建立数据中台:对矿井产生的各类数据进行统一的收集、整理、存储,简历矿井的数据标准和数据执行制度,构建可扩展、可定制、科学化
云头条
2022/07/25
5060
3748 万、山脉科技中标:蒲白矿业矿井智能综合管控平台、数据中台、统一的透明矿井数字孪生管理平台、私有云、数据中心项目
浪潮云(5336万)被废标后:29 家竞标河北省“智慧交管”(第五包)
2021年11月23日,河北省公安厅高速公路交通警察总队发布《“智慧交管”项目开发统一应用门户、应用平台;公安网、视频专网云平台、地理信息平台等部分》招标公告。 项目概况:项目建设内容主要包括完善高速公路前端智能感知系统,建设高速交警总队智慧交管大脑、统一应用门户、智慧交管应用平台、一体化指挥调度平台、智能化统一管理平台,升级高速交警总队公安交通集成指挥平台,升级改造高速交警总队、11个支队、22个大队指挥中心配套设施,同时租赁移动警务服务、链路和机柜。 招标范围:(第五包)开发统一应用门户、应用平台;公安
云头条
2022/05/16
4460
浪潮云(5336万)被废标后:29 家竞标河北省“智慧交管”(第五包)
浪潮云被废标后、东华软件 5724 万中标:河北省“智慧交管”项目(第五包)
2021年11月23日,河北省公安厅高速公路交通警察总队发布《“智慧交管”项目开发统一应用门户、应用平台;公安网、视频专网云平台、地理信息平台等部分》招标公告。 项目概况:项目建设内容主要包括完善高速公路前端智能感知系统,建设高速交警总队智慧交管大脑、统一应用门户、智慧交管应用平台、一体化指挥调度平台、智能化统一管理平台,升级高速交警总队公安交通集成指挥平台,升级改造高速交警总队、11个支队、22个大队指挥中心配套设施,同时租赁移动警务服务、链路和机柜。 招标范围:(第五包)开发统一应用门户、应用平台;公安
云头条
2022/05/17
5890
浪潮云被废标后、东华软件 5724 万中标:河北省“智慧交管”项目(第五包)
3114万元、高价中标农信银云计算资源扩容项目:443套服务器(I系列和H系列)
2021年10月20日,农信银资金清算中心有限责任公司发布2021年度农信银云计算资源扩容项目招标公告。 招标范围:购买443套服务器(I系列和H系列),并提供5年原厂维保服务。 中标候选人公示 2021年11月12日中标候选人公示发布,可利邦 3113.8 万元中标 第一名:北京可利邦信息技术有限公司 投标总价:人民币31,137,986.54元 第二名:北京中科金财科技股份有限公司 投标总价:人民币29,982,552.00元 第三名:神州数码(中国)有限公司 投标总价:人民币29,310,944.
云头条
2022/03/18
4510
银联数据容器平台软件采购:谐云 12.8 万、凌云雀 30.8 万、博云 39.8 万
2022年3月22日,银联数据服务有限公司发布《容器平台软件采购项目》招标公告。 评标结果 2022年5月26日发布评标结果公示,谐云 12.8 万、凌云雀 30.8 万、博云 39.8 万。 评标结果 第1中标候选人:杭州谐云科技有限公司 预中标金额:人民币128,000.00 第2中标候选人:北京凌云雀科技有限公司 预中标金额:人民币308,000.00 第3中标候选人:江苏博云科技股份有限公司 预中标金额:人民币398,000.00
云头条
2022/06/06
4100
中国邮储银行 IT 集采:服务器、阵列、交换机、路由器、防火墙等
近日,中国邮政储蓄银行发布《2022年IT及网络设备集中采购项目》招标公告。 最近已陆续发布中标候选人公示,详情如下。 包1中档服务器: 包2低档服务器: 包3服务器(AI型): 1、云南南天电子信息产业股份有限公司 2、北明软件有限公司 包4闪存阵列: 1、云南南天电子信息产业股份有限公司 2、北明软件有限公司 3、四川长虹佳华信息产品有限责任公司 包5磁盘阵列: 云南南天电子信息产业股份有限公司 包6分布式存储: 1、北明软件有限公司 2、云南南天电子信息产业股份有限公司 3、烽火通信科技股份有限公
云头条
2022/07/20
9220
中国邮储银行 IT 集采:服务器、阵列、交换机、路由器、防火墙等
浪潮云 5336 万大单:废了。。。
2021年11月23日,河北省公安厅高速公路交通警察总队发布《“智慧交管”项目开发统一应用门户、应用平台;公安网、视频专网云平台、地理信息平台等部分》招标公告。 项目概况:项目建设内容主要包括完善高速公路前端智能感知系统,建设高速交警总队智慧交管大脑、统一应用门户、智慧交管应用平台、一体化指挥调度平台、智能化统一管理平台,升级高速交警总队公安交通集成指挥平台,升级改造高速交警总队、11个支队、22个大队指挥中心配套设施,同时租赁移动警务服务、链路和机柜。 中标候选人公示 2021年12月21日发布中标候选人
云头条
2022/04/21
4610
浪潮云 5336 万大单:废了。。。
2368 万元、中国民生银行定向采购:华为存储
2021年9月18日,中国民生银行股份有限公司发布2021年华为存储设备采购及扩容项目包1(涉及网络安全审查)、包2(不涉及网络安全审查)两个招标公告。 中标结果 2021年10月29日评标结果公示发布,睿银华信分别以 2270 万元中标(涉及网络安全审查)项目、98 万元中标(不涉及网络安全审查)。 包1-华为存储设备及扩容(涉及网络安全审查)评审结果: 第一、北京睿银华信科技有限公司 响应报价¥22,701,728.00 第二、北京先进数通信息技术股份公司 响应报价¥22,996,989.00 第
云头条
2022/03/18
5020
中国联通投诉称存在串标嫌疑:中国电信 946 万元中(A包)、中国移动 1090 万元中(B包)
2021年12月21日,滕州市公安局交警大队发布《滕州市智慧交通一期前端设备及软件系统项目》公开招标公告,预算 2223.2222 万元。 中标结果 2022年1月13日发布中标结果,中国电信 946 万元中标(A包)、中国移动 1089.7299 万元中标(B包)。 标包:A 中国电信集团系统集成有限责任公司 946 万元中标 经评审的投标人排序: 投标一览表: 评审结果: 中国电信集团系统集成有限责任公司(71.5、75.5、77.0、78.5、78.5、79.1、80.5) 同方德诚(山东)科
云头条
2022/07/25
7140
中国联通投诉称存在串标嫌疑:中国电信 946 万元中(A包)、中国移动 1090 万元中(B包)
中国邮政:腾讯云中标(国产关系型数据库);凯美瑞德(数据备份软件)
2022年9月5日,中国邮政集团有限公司发布《中国邮政技术中台国产关系型数据库和数据备份软件采购项目》招标公告。 包1、国产关系型数据库 采购国产关系型数据库为分布式混合事务和分析处理(HTAP)数据库,可统一支持在线事务处理(OLTP)类和在线分析处理(OLAP)类,同时支持分布式存储、分布式事务、动态扩缩容、多租户资源隔离、多副本数据安全保障等功能。采用“框架协议+订单”的方式,框架协议含数据迁移工具、数据管控平台以及数据库部署实施服务、维保基础服务和现场服务,有效期为四年,首批订单量为45台物理机的软
云头条
2022/10/09
6630
中国邮政:腾讯云中标(国产关系型数据库);凯美瑞德(数据备份软件)
2.26 亿安全大单:华为 1.4亿、东软 3457万、奇安信(恒安嘉新)1998万、恒安嘉新 1741万、神州泰岳 1439万
2022年3月11日,中国广电发布《5G核心网工程-安全系统项目》招标公告,预算 2.86 亿元。 项目概况:为加快推进安全系统工程建设,确保网络快速部署,现启动中国广电5G核心网工程-安全系统项目。本期拟选聘供应商为中国广电5G核心网工程-安全系统项目提供安全系统各类软硬件设备、工程服务等。 本次采购内容主要包括安全系统各类软硬件及相关服务等。 根据不同的采购内容,将本项目划分成6个标包,具体划分如下: 中标候选人公示 2022年4月3日发布中标候选人公示,奇安信(恒安嘉新)1998 万元(标包1)、东
云头条
2022/04/06
6580
2.26 亿安全大单:华为 1.4亿、东软 3457万、奇安信(恒安嘉新)1998万、恒安嘉新 1741万、神州泰岳 1439万
1160 台防火墙大单:山石网科 1453 万、启明星辰 997 万、迪普 886 万
2022年4月19日,中国移动发布《2022年至2024年Web应用防火墙(WAF)设备集中采购》招标公告。 本项目为集中招标项目。 本次采购WEB应用防火墙(WAF)共计1160台,其中典配1(10Gbps)360台,典配2(10Gbps,带硬件Bypass功能)800台。 本项目设置最高投标限价: 典配1(10Gbps)不含税投标总价限价1,260.00万元人民币; 典配2(10Gbps,带硬件Bypass功能)不含税投标总价限价3,840.00万元人民币; 投标人投标报价高于最高投标限价的,其投标将被
云头条
2022/07/19
4060
百度 295 万(落)、讯飞 306 万(落)、腾讯云 103 万(中):人保健康互联网保险虚拟数字人项目
2022年9月22日,中国人民保险集团股份有限公司发布《人保健康互联网保险虚拟数字人项目》招标公告。 招标范围:为促进公司数字化、智能化转型,用科技赋能品牌宣传、产品宣传及客户服务,项目拟采购互联网保险虚拟数字人及其相关产品和服务。 中标候选人公示 2022年10月12日发布中标候选人公示,腾讯云 1,025,600.00 元中标。 第一:腾讯云计算(北京)有限责任公司 含税总价(元):1,025,600.00 第二:北京百度网讯科技有限公司 含税总价(元):2,952,780.00 第三:科大讯飞股份有
云头条
2022/10/14
4070
百度 295 万(落)、讯飞 306 万(落)、腾讯云  103 万(中):人保健康互联网保险虚拟数字人项目
1720 万、备份软件大单:英方软件 1046 万、明和科技 674 万
2022年6月22日,中移(苏州)软件技术有限公司发布《云能力中心2022-2023年移动云备份软件(云化业务产品)项目》招标公告。 采购上限金额:2298万元(不含税),2596.74万元(含税)。 中标数量及原则:2家,按数量划分,第一名36557TB,第二名15667TB。 合同执行方式:框架合同+订单,数量上限框架,框架有效期自合同签订之日起至2023年6月30日。 中标候选人公示 2022年9月9日发布中标候选人公示,英方软件分得 1046 万、明和科技 674 万。 第1名:上海英方软件股份有限
云头条
2022/09/14
2910
1720 万、备份软件大单:英方软件 1046 万、明和科技 674 万
2415 万大单:奇安信 717万、新华三 491万、安恒 504 万、深信服 377万、绿盟 326万
2022年4月28日,安徽电信发布《等保护航一体机集中采购项目》招标公告。 本项目设置最高投标限价: 标包1等保一体机(等保二级套餐)不含税单价最高投标限价为60000元/台,等保一体机(等保三级套餐)不含税单价最高投标限价为80000元/台; 标包2天翼安全专线护航一体机不含税单价最高投标限价为50000元/台。 投标人投标报价超过最高投标限价,将否决其投标。 本次集中招标合同有效期为:两年。 标包1招标范围: 当有效投标人≥4时,中标人数量为3个,每个中标人对应的份额如下: 当有效投标人<4时,中标
云头条
2022/05/25
7470
2415 万大单:奇安信 717万、新华三 491万、安恒 504 万、深信服 377万、绿盟 326万
智慧呈贡:中移集成 8622 万、浪潮 7353 万、中软国际 9150 万;紫光软件、浩鲸云未通过初步评审
2021年6月22日,昆明市智慧呈贡一期建设项目招标公告发布,总投资24654.37万元。招标规模91900000元。 招标内容:包含”智慧呈贡”基础平台(包括1个大数据平台服务、1个时空信息平台服务)、城市运营管理中心(IOC软件系统)建设、智慧交通建设、智慧城管建设。 评标结果公示 2021年7月16日评标结果公示发布,详情如下: 第一中标候选人:中移系统集成有限公司 投标报价:86220792.00元 综合评分得分:89.37 第二中标候选人:浪潮软件集团有限公司 投标报价:73534913.
云头条
2022/03/18
7590
人保财险安全设备采购:天融信、启明星辰、浪潮、方德信安、安恒、中科软、信诺时代、银信长远中标
2022年3月24日,人保财险发布2021年安全设备采购项目(01-12包)招标公告。 采购内容: 中标候选人公示 2022年4月20日发布中标候选人公示,详情如下。 01包:IDS和IPS设备 第1名:北京天融信网络安全技术有限公司 投标报价:103.7万元 第2名:沈阳东软系统集成工程有限公司 投标报价:106.6万元 第3名:中科软科技股份有限公司 投标报价:108.4985万元 02包:Web应用防火墙 第1名:北京启明星辰信息安全技术有限公司 投标报价:316万元 第2名:赞华(中国)电子系
云头条
2022/04/24
9030
人保财险安全设备采购:天融信、启明星辰、浪潮、方德信安、安恒、中科软、信诺时代、银信长远中标
紫光云 4983 万元低价落标:中国电信 6995 万元高价中标国新私有云(一期)
2021年9月25日,国新数据有限责任公司发布国新私有云(一期)租用服务项目招标公告。 技术规格:统筹打造基于“云大物移智”、区块链等新一代信息技术的先进基础设施,搭建先进可靠、富有弹性的国新私有云(一期),实现计算、存储、网络等云服务的全栈供应。 中标候选人公示 2021年10月29日中标候选人公示发布,中国电信 6995 万元中标。 第一名:中国电信股份有限公司;投标报价:69,950,000.00元; 交货期: (1)2021年12月26日前国新私有云(一期)平台上线试运行。 (2)2022年2月22
云头条
2022/03/18
7000
推荐阅读
2527 万元、北京银行核心下移数据库设备项目
3250
255 万元、重庆银行「分布式数据库」项目:腾讯云中标
7190
3748 万、山脉科技中标:蒲白矿业矿井智能综合管控平台、数据中台、统一的透明矿井数字孪生管理平台、私有云、数据中心项目
5060
浪潮云(5336万)被废标后:29 家竞标河北省“智慧交管”(第五包)
4460
浪潮云被废标后、东华软件 5724 万中标:河北省“智慧交管”项目(第五包)
5890
3114万元、高价中标农信银云计算资源扩容项目:443套服务器(I系列和H系列)
4510
银联数据容器平台软件采购:谐云 12.8 万、凌云雀 30.8 万、博云 39.8 万
4100
中国邮储银行 IT 集采:服务器、阵列、交换机、路由器、防火墙等
9220
浪潮云 5336 万大单:废了。。。
4610
2368 万元、中国民生银行定向采购:华为存储
5020
中国联通投诉称存在串标嫌疑:中国电信 946 万元中(A包)、中国移动 1090 万元中(B包)
7140
中国邮政:腾讯云中标(国产关系型数据库);凯美瑞德(数据备份软件)
6630
2.26 亿安全大单:华为 1.4亿、东软 3457万、奇安信(恒安嘉新)1998万、恒安嘉新 1741万、神州泰岳 1439万
6580
1160 台防火墙大单:山石网科 1453 万、启明星辰 997 万、迪普 886 万
4060
百度 295 万(落)、讯飞 306 万(落)、腾讯云 103 万(中):人保健康互联网保险虚拟数字人项目
4070
1720 万、备份软件大单:英方软件 1046 万、明和科技 674 万
2910
2415 万大单:奇安信 717万、新华三 491万、安恒 504 万、深信服 377万、绿盟 326万
7470
智慧呈贡:中移集成 8622 万、浪潮 7353 万、中软国际 9150 万;紫光软件、浩鲸云未通过初步评审
7590
人保财险安全设备采购:天融信、启明星辰、浪潮、方德信安、安恒、中科软、信诺时代、银信长远中标
9030
紫光云 4983 万元低价落标:中国电信 6995 万元高价中标国新私有云(一期)
7000
相关推荐
2527 万元、北京银行核心下移数据库设备项目
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验