Loading [MathJax]/jax/output/CommonHTML/config.js
部署DeepSeek模型,进群交流最in玩法!
立即加群
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >解锁数据潜力:信息抽取、数据增强与UIE的完美融合

解锁数据潜力:信息抽取、数据增强与UIE的完美融合

作者头像
汀丶人工智能
发布于 2023-10-11 10:30:01
发布于 2023-10-11 10:30:01
69300
代码可运行
举报
文章被收录于专栏:NLP/KGNLP/KG
运行总次数:0
代码可运行

解锁数据潜力:信息抽取、数据增强与UIE的完美融合

1.信息抽取(Information Extraction)

1.1 IE简介

信息抽取是 NLP 任务中非常常见的一种任务,其目的在于从一段自然文本中提取出我们想要的关键信息结构。

举例来讲,现在有下面这样一个句子:

新东方烹饪学校在成都。

我们想要提取这句话中所有有意义的词语,例如:

机构

新东方烹饪学校

城市

成都

这个关键词提取任务就叫做**命名实体识别(Named Entity Recognition, NER)**任务,文中的「新东方烹饪学校」和「成都」就被称为实体(Entity)。

如果我们还想进一步的知道这些词语之间的关系,例如:

实体 1

关系名

实体 2

新东方烹饪学校

所在地

成都

这种提取实体之间关系的任务就叫做**关系抽取(Relation Extraction, RE)**任务。

1.2 信息抽取的几种方法

1.2.1 序列标注(Sequence Labeling)

序列标注通常是指对文中的每一个字(以下简称 token)进行分类,即本质是 token classification 任务。

我们对第一小节中的例子做序列标注任务,得到的结果如下:

...

B - 机构

I - 机构

I - 机构 * N

I - 机构

I - 机构

O

B - 城市

I - 城市

可以看到,我们对句子中的每一个字(token)都打上了一个类别标签,我们期望模型要做的事就是去学会每一个字所属的类别是什么。

Note: 这里用的标注方法是「BIO 标记法」,其中「B-」代表该位置 token 是某一个实体词语(span)的起始 token;「I-」代表该位置 token 处于某一个词语的中间(或结尾),「O」则代表该位置 token 不在任何一个实体词语中。除了「BIO 标记法」外,还有许多其他的标注方式(如 BIOES 等),其本质思路都很类似。

1.2.2 指针网络(Pointer Network)

序列标注模型有一个天然的缺陷,无法解决解决实体重叠(overlap)的问题。

举例来讲,如果今天我们不仅要提取「机构」,还同时要提取「机构类型」,那么我们期望的提取结果应该为:

机构

新东方烹饪学校

机构类型

学校

城市

成都

可以看到,对于「学校」这两个字,即属于「新东方烹饪学校」(机构)这个词,也存在于「学校」(机构类型)这个词,那我们在给这两个字打标签的时候,究竟应该打成哪个类别呢?

B - 机构

I - 机构

I - 机构

O

B - 城市

I - 城市

由此我们可以看到,因为在进行分类时我们通常对一个字(token)只赋予一个标签,这就导致了 token classification 不能很好的解决实体重叠(一字多标签)的复杂情况。

Note: 存在一些技巧可以解决该问题,例如可以从单字单分类(CE)衍生到单字多分类(BCE),这里不展开讨论。

指针网络(Pointer Network)通过分别对每一个实体单独做预测来解决了实体之前的重叠冲突问题。

例如,我们现在要同时预测「机构」和「机构类型」这两个实体,那么我们就可以设计一个多头网络(Multi-Head)来分别预测这两个实体的实体词。

其中,

「机构」实体头中「起始」向量代表这一句话中是「机构」词语的首字(例子中为「新」);

「机构」实体中「结束」向量代表这一句话中时「机构」词语的尾字(例子中为「校」)。

通过「起始」和「结束」向量中的首尾字索引就能找到对应实体的词语。

可以看到,通过构建多头的任务,指针网络能够分别预测「机构」和「机构类型」中的实体词起始 / 终止位置,即「学校」这个词语在两个任务层中都能被抽取出来。

1.3. UIE —— 基于 prompt 的指针网络

1.3.1 UIE 中的 prompt 是什么?

多头指针网络能够很好的解决实体重叠问题,但缺点在于:不够灵活。

假定今天我们已经通过指针网络训练好了一个提取「机构」、「机构类型」的模型,即将交付时甲方突然提出一个新需求:我们想再多提取一个「机构简称」的属性。

草(一种植物)。

从 2.2 节中的示意图中我们可以看到,每一个实体类型会对应一个单独的网络头。

这就意味着我们不仅需要重标数据,还需要为新属性添加一个新的网络头,即模型结构会随着实体类型个数改变而发生变化。

那,能不能有一种办法去固定住模型的结构,不管今天来多少种类型要识别都能使用同样的模型结构完成呢?

我们思考一下,模型结构变化的部分是和实体类型强绑定的「头」部分。

而不同「头」之间结构其实是完全一样的:一个「起始」向量 + 一个「终止」向量。

既然「头」结构完全一样,我们能不能干脆直接使用一个「头」去提取不同实体类型的信息呢?

不同「头」之间的区别在于它们关注的信息不同:「机构头」只关注「机构」相关的实体词,「城市头」只关注「城市」相关的实体词。

那么我们是不是可以直接在模型输入的时候就告诉模型:我现在需要提取「某个头」的信息。

这个用来告诉模型做具体任务的参数就叫 prompt,我们把它拼在输入中一并喂给模型即可。

通过上图可以看到,我们将不同的「实体类型」作为 prompt 参数喂给模型,用于「激活」模型参数跟当前「实体类型」相关的参数,从而输出不同的抽取结果。

Note: 「通过一个输入参数去激活一个大模型中的不同参数,从而完成不同任务的思路」并不是首次出现,在 meta-learning 中也存在相关的研究,这里的 prompt 参数和 meta-parameter 有着非常类似的思路。

通过引入 prompt,UIE 也能很方便的解决实体之间的关系抽取(Relation Extraction)任务,例如:

1.3.2 UIE 的实现

看完了基本思路,我们来一起看看 UIE 是怎么实现的吧。

  1. 模型部分

UIE 的模型代码比较简单,只需要在 encoder 后构建一个起始层和一个结束层即可:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class UIE(nn.Module):

    def __init__(self, encoder):
        """
        init func.
        Args:
            encoder (transformers.AutoModel): backbone, 默认使用 ernie 3.0
        
        Reference:
            https://github.com/PaddlePaddle/PaddleNLP/blob/a12481fc3039fb45ea2dfac3ea43365a07fc4921/model_zoo/uie/model.py
        """
        super().__init__()
        self.encoder = encoder
        hidden_size = 768
        self.linear_start = nn.Linear(hidden_size, 1)
        self.linear_end = nn.Linear(hidden_size, 1)
        self.sigmoid = nn.Sigmoid()

    def forward(
        self,
        input_ids: torch.tensor,
        token_type_ids: torch.tensor,
        attention_mask=None,
        pos_ids=None,
    ) -> tuple:
        """
        forward 函数,返回开始/结束概率向量。
        Args:
            input_ids (torch.tensor): (batch, seq_len)
            token_type_ids (torch.tensor): (batch, seq_len)
            attention_mask (torch.tensor): (batch, seq_len)
            pos_ids (torch.tensor): (batch, seq_len)
        Returns:
            tuple:  start_prob -> (batch, seq_len)
                    end_prob -> (batch, seq_len)
        """
        sequence_output = self.encoder(
            input_ids=input_ids,
            token_type_ids=token_type_ids,
            position_ids=pos_ids,
            attention_mask=attention_mask,
        )["last_hidden_state"]
        start_logits = self.linear_start(sequence_output)       # (batch, seq_len, 1)
        start_logits = torch.squeeze(start_logits, -1)          # (batch, seq_len)
        start_prob = self.sigmoid(start_logits)                 # (batch, seq_len)
        end_logits = self.linear_end(sequence_output)           # (batch, seq_len, 1)
        end_logits = torch.squeeze(end_logits, -1)              # (batch, seq_len)
        end_prob = self.sigmoid(end_logits)                     # (batch, seq_len)
        return start_prob, end_prob
  1. ** 训练部分**

训练部分主要关注一下 loss 的计算即可。

由于每一个 token 都是一个二分类任务,因此选用 BCE Loss 作为损失函数。

分别计算起始 / 结束向量的 BCE Loss 再取平均值即可,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
criterion = torch.nn.BCELoss()
...

start_prob, end_prob = model(input_ids=batch['input_ids'].to(args.device),
                                        token_type_ids=batch['token_type_ids'].to(args.device),
                                        attention_mask=batch['attention_mask'].to(args.device))
start_ids = batch['start_ids'].to(torch.float32).to(args.device)    # (batch, seq_len)
end_ids = batch['end_ids'].to(torch.float32).to(args.device)        # (batch, seq_len)
loss_start = criterion(start_prob, start_ids)                       # 起止向量loss -> (1,)
loss_end = criterion(end_prob, end_ids)                             # 结束向量loss -> (1,)
loss = (loss_start + loss_end) / 2.0                                # 求平均 -> (1,)
loss.backward()
...

该项目将借用transformers库来实现paddlenlp版本中UIE,已实现:

  • UIE 预训练模型自动下载
  • UIE Fine-Tuning 脚本
  • 信息抽取、事件抽取数据增强(DA)策略(提升 recall)
  • 信息抽取、事件抽取自分析负例生成(Auto Neg)策略(提升 precision)
  • 环境安装

本项目基于 pytorch + transformers 实现,运行前请安装相关依赖包:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pip install -r ../requirements.txt


torch
transformers==4.22.1
datasets==2.4.0
evaluate==0.2.2
matplotlib==3.6.0
rich==12.5.1
scikit-learn==1.1.2
requests==2.28.1

2. 数据集准备

项目中提供了一部分示例数据,数据来自DuIE数据集中随机抽取的100条,数据在 data/DuIE

若想使用自定义数据训练,只需要仿照示例数据构建数据集构建prompt和content即可:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{"content": "谭孝曾是谭元寿的长子,也是谭派第六代传人", "result_list": [{"text": "谭元寿", "start": 4, "end": 7}], "prompt": "谭孝曾的父亲"}
{"content": "在圣保罗书院中学毕业后,曾钰成又在中学会考及大学入学考试中名列全港前十名", "result_list": [{"text": "曾钰成", "start": 12, "end": 15}], "prompt": "人物"}
{"content": "在圣保罗书院中学毕业后,曾钰成又在中学会考及大学入学考试中名列全港前十名", "result_list": [{"text": "圣保罗书院", "start": 1, "end": 6}], "prompt": "曾钰成的毕业院校"}
...

doccano导出数据如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{"text": "谭孝曾是谭元寿的长子,也是谭派第六代传人", "entities": [{"id": 42517, "label": "人物", "start_offset": 0, "end_offset": 3, "text": "谭孝曾"}, {"id": 42518, "label": "人物", "start_offset": 4, "end_offset": 7, "text": "谭元寿"}], "relations": [{"id": 0, "from_id": 42517, "to_id": 42518, "type": "父亲"}]}
...

可以运行 doccano.py 来将标注数据(doccano)转换为训练数据(prompt)。

3. 模型训练

修改训练脚本 train.sh 里的对应参数, 开启模型训练:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
python train.py \
    --pretrained_model "uie-base-zh" \
    --save_dir "checkpoints/DuIE" \
    --train_path "data/DuIE/train.txt" \
    --dev_path "data/DuIE/dev.txt" \
    --img_log_dir "logs/" \
    --img_log_name "UIE Base" \
    --batch_size 32 \
    --max_seq_len 256 \
    --learning_rate 5e-5 \
    --num_train_epochs 20 \
    --logging_steps 10 \
    --valid_steps 100 \
    --device cuda:0

正确开启训练后,终端会打印以下信息:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
...
  0%|          | 0/1 [00:00<?, ?ba/s]
100%|██████████| 1/1 [00:00<00:00,  6.91ba/s]
100%|██████████| 1/1 [00:00<00:00,  6.89ba/s]
global step 10, epoch: 1, loss: 0.00244, speed: 2.08 step/s
global step 20, epoch: 1, loss: 0.00228, speed: 2.17 step/s
global step 30, epoch: 1, loss: 0.00191, speed: 2.17 step/s
global step 40, epoch: 1, loss: 0.00168, speed: 2.14 step/s
global step 50, epoch: 1, loss: 0.00149, speed: 2.11 step/s
global step 60, epoch: 1, loss: 0.00138, speed: 2.15 step/s
global step 70, epoch: 2, loss: 0.00123, speed: 2.29 step/s
global step 80, epoch: 2, loss: 0.00112, speed: 2.12 step/s
global step 90, epoch: 2, loss: 0.00102, speed: 2.15 step/s
global step 100, epoch: 2, loss: 0.00096, speed: 2.15 step/s
Evaluation precision: 0.80851, recall: 0.84444, F1: 0.82609
best F1 performence has been updated: 0.00000 --> 0.82609
...

logs/UIE Base.png 文件中将会保存训练曲线图:

4. 模型预测

完成模型训练后,运行 inference.py 以加载训练好的模型并应用:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 if __name__ == "__main__":
    from rich import print
    sentences = [
        '谭孝曾是谭元寿的长子,也是谭派第六代传人。'
    ]
    
    # NER 示例
    for sentence in sentences:
        ner_example(
            model,
            tokenizer,
            device,
            sentence=sentence, 
            schema=['人物']
        )

    # SPO 抽取示例
    for sentence in sentences:
        information_extract_example(
            model,
            tokenizer,
            device,
            sentence=sentence, 
            schema={
                    '人物': ['父亲'],
                }
        )

NER和事件抽取在schema的定义上存在一些区别:

  • NER的schema结构为 List 类型,列表中包含所有要提取的 实体类型
  • 信息抽取的schema结构为 Dict 类型,其中 Key 的值是所有 主语Value 对应该主语对应的所有 属性
  • 事件抽取的schema结构为 Dict 类型,其中 Key 的值是所有 事件触发词Value 对应每一个触发词下的所有 事件属性
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
python inference.py

得到以下推理结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[+] NER Results: 
{
    '人物': ['谭孝曾', '谭元寿']
}

[+] Information-Extraction Results: 
{
    '谭孝曾': 
            {
                '父亲': ['谭元寿']
            }, 
    '谭元寿': {
                '父亲': []
            }
}

5. 数据增强(Data Augmentation)

信息抽取/事件抽取的数据标注成本较高,因此我们提供几种针对小样本下的数据增强策略。

包括:

  • 正例:SwapSPO、Mask Then Fill
  • 负例:自分析负例生成(Auto Neg)

所有实现均在 Augmenter.py 中,为了便于使用,我们将其封装为 web 服务以方便调用:

平台使用 streamlit 搭建,因此使用前需要先安装三方包:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pip install streamlit==1.17.0

随后,运行以下命令开启标注平台:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
streamlit run web_da.py --server.port 8904

在浏览器中访问 ip + 端口(默认8904)即可打开标注平台。

5.1 正例:SwapSPO 策略介绍

Swap SPO 是一种基于规则的简单数据增强策略。

将同一数据集中相同 P 的句子分成一组,并随机交换这些句子中的 S 和 O。

  • 策略输入:

《夜曲》周杰伦 作曲 的一首歌。

《那些你很冒险的梦》 是当下非常火热的一首歌,作曲林俊杰

  • Swap SPO 后的输出:

《夜曲》 是当下非常火热的一首歌,作曲周杰伦

5.2 正例:Mask Then Fill 策略介绍

Mask Then Fill 是一种基于生成模型的信息抽取数据增强策略。

对于一段文本,我们其分为「关键信息段」和「非关键信息段」,包含关键词片段称为「关键信息段」。

下面例子中标粗的为 关键信息片段,其余的为 非关键片段

大年三十 我从 北京 的大兴机场 飞回成都

我们随机 [MASK] 住一部分「非关键片段」,使其变为:

大年三十 我从 北京 [MASK] 飞回成都

随后,将该句子喂给 filling 模型(T5-Fine Tuned)还原句子,得到新生成的句子:

大年三十 我从 北京 首都机场作为起点,飞回成都

Note: filling 模型是一个生成模型,示例中我们使用中文 T5 微调得到 DuIE 数据集下的模型(暂未开源)。您可以参考 这里 微调一个更适合您自己数据集下的 filling 模型,并将训练好的模型路径填写至 web_da.py 中对应的位置。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
...
device = 'cpu'                                                 # 指定设备
generated_dataset_height = 800                                 # 生成样本展示高度                
max_show_num = 500                                             # 生成样本最大保存行数
max_seq_len = 128                                              # 数据集单句最大长度
batch_size = 128                                               # 负例生成时的batch_size

filling_model_path = '这里'                                     # fine-tuned filling model
...

5.3 负例:自分析负例生成(Auto Neg)策略介绍

信息抽取中通常会存在 P混淆 的问题,例如:

王文铭,76岁,是西红市多鱼村的大爷。

当我们同时生成 年龄去世年龄 这种非常近义的 prompt 进行抽取时,可能会出现 误召回 的情况:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
prompt: 王文铭的年龄     answer: 76-> 正确
prompt: 王文铭的去世年龄  answer: 76-> 错误

因此,我们基于一个已训练好的模型,自动分析该模型在 训练集 下存在哪些易混淆的 P,并为这些 P 自动生成负例,以提升模型的 Precision 指标。

将新生成的负例加入 原始训练数据集,重新训练模型即可。

5.4 各种 DA 策略的实验效果

在 DuIE 100 条数据下测试,各种 DA 策略的效果如下所示(以下 P / R / F1 均取 F1 最高的 Epoch 指标):

DA Policy

Precision(best)

Recall(best)

F1(best)

baseline

0.8085

0.8444

0.8260

Swap SPO

0.8409(↑)

0.8222

0.8314(↑)

Auto Neg

0.8297(↑)

0.8666(↑)

0.8478(↑)

Mask Then Fill

0.9000(↑)

1.0000(↑)

0.9473(↑)

Mask Then Fill & Auto Neg

0.9777(↑)

0.9777(↑)

0.9777(↑)

  • 原作者实现地址:https://github.com/universal-ie/UIE
  • paddle官方:https://github.com/PaddlePaddle/PaddleNLP/tree/develop/model_zoo/uie
  • https://github.com/HarderThenHarder/transformers_tasks/blob/main/UIE
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-10-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
中国数据复制第一股:英方软件做对了什么?
2023年1月19日,英方软件成功登陆科创板,中国数据复制第一股自此诞生。此举对于整个数字技术产业意义非凡。在数据成为社会经济发展最重要生产要素的今天,数字技术除了需要芯片、算力等硬科技外,亦需要数据复制、容灾备份等软实力。
大数据在线
2023/02/28
4330
中国数据复制第一股:英方软件做对了什么?
英方软件敲开科创板大门,抓住数据复制的市场机遇,半日大涨172.84%
1月19日,数据复制领域的龙头企业,成立于2011年的英方软件以发行价38.66元成功登陆上交所科创板。上市后英方软件股价立刻跳升超过100%,截至午间收市为止,上涨至105.48元,涨幅高达172.84%,市值达到88.08亿元。据悉,英方软件本次发行数量为2094.6737万股,预计募集资金约8.10亿元。
数据猿
2023/03/03
4070
英方软件敲开科创板大门,抓住数据复制的市场机遇,半日大涨172.84%
英方软件周华:以“数据复制”为起点来赋能行业,目标是做到全球第一 | 镁客 · 请讲
今年,国内某银行的生产中心因存储设备发生故障,导致该行包括核心业务系统在内的多个业务系统发生中断,缺失6个小时的业务数据。
镁客网
2021/06/08
4420
首个冲刺科创板的国产数据库:78岁老教授打磨四十年,每一行代码都自主可控
整理 | 褚杏娟、Tina 2022 年 6 月 29 日,科创板受理武汉达梦数据库股份有限公司上市申请。 根据招股书,本次发行股份全部为新股,原股东不公开发售股份。本次拟公开发行股票数量不超过 1,900.00 万股,且不低于发行后公司总股本的 25%。发行后总股本不超过 7,600.00 万股。其中,招商证券为其保荐机构,华英证券为联席主承销商。 据招股书显示,达梦本次募资主要用于集群数据库管理系统升级项目、高性能分布式关系数据库管理系统升级项目、新一代云数据库产品建设项目、达梦中国数据库产业基地和达
深度学习与Python
2023/03/29
7540
首个冲刺科创板的国产数据库:78岁老教授打磨四十年,每一行代码都自主可控
星宸科技5年估值暴涨300亿,这家新芯企业对资本的吸引力在哪?
2022年12月16日,深交所官网显示,星宸科技股份有限公司(下称“星宸科技”)首发顺利过会,深交所创业板将迎来一位新成员。
数据猿
2023/03/03
1.1K0
星宸科技5年估值暴涨300亿,这家新芯企业对资本的吸引力在哪?
英方软件挂牌,云灾备市场容量或将大爆发|新三板
成立于 2011 年 8 月 12 日的上海英方软件股份有限公司,于 2015 年 8 月 26 日完成股。2016 年 7 月 7 日成功登陆新三板。 2009 年 70% 的容灾复制市场都为传统存储厂商所占据,另外一部分则为数据复制软件厂商所占有。 整个市场面临 2 个巨大变化:其一,行业用户 IT 变化带来了灾备市场的新增量;另一方便,用户正在从企业级蔓延到中小企业,甚至个人增量市场。无论哪一种方式,灾备的终极意义是保护业务的连续性。 据国家统计局 2013 年,我国灾备中心行业销售收入达到 65.3
人称T客
2018/03/22
1.2K0
英方软件挂牌,云灾备市场容量或将大爆发|新三板
神舟软件抢登科创板,他会是站在光背后的英雄吗?
航天业便是最接近那片深蓝的行业,这也是中国一直支持的重点行业。“2021年中国全年航天发射次数达55次,位居世界第一!”。航天工程、航天机电、航天动力、航天电子、中国卫星等航天领域的公司均已经成功上市。作为航天企业理应是“风光无限”,可是北京神舟航天软件技术股份有限公司(以下简称:神舟软件),却一直默默存在于航天企业的背后。
数据猿
2022/09/04
5730
神舟软件抢登科创板,他会是站在光背后的英雄吗?
用科创板给国产中间件打上一剂兴奋剂!
一波三折后,中创软件商用中间件股份有限公司(下称“中创软件”)正稳步推进上市进程,目前已经通过上市委会议。
数据猿
2023/03/03
3790
用科创板给国产中间件打上一剂兴奋剂!
谁将成为中国的“甲骨文”?
近年来,在国内数字化转型以及信创建设持续推进的大背景下,我国信创产业发展持续加速,数据库国产化替代速度加快,行业迎来前所未有的发展机遇。
数据猿
2023/03/03
6190
谁将成为中国的“甲骨文”?
广联科技IPO:主营业务面临消亡,转型SaaS萎靡不振,靠新业务SaaS+能撑起IPO?
而且拆解广联科技招股书可发现,其赖以起家的传统车载联网硬件业务,在汽车智能化大潮下,已日益式微;而转型SaaS服务又难以打开局面,目前已经开始下滑;新业务SaaS+服务虽然增长迅猛且毛利较高,但它是建立在SaaS服务之上的,目前SaaS服务业务已经开始萎缩,这将导致新业务缺乏支撑。
数据猿
2023/09/27
3260
广联科技IPO:主营业务面临消亡,转型SaaS萎靡不振,靠新业务SaaS+能撑起IPO?
AR小巨头微美全息的上市困顿
与AI、云计算等技术相比,AR在应用范围和认知度上一直是“第二梯队”,但在此次抗疫防疫战中,AR也站到了一线,在精度和效率上支持着多地的防疫工作。
刘旷
2020/02/14
6200
AR小巨头微美全息的上市困顿
光学镜头“后起之秀”中润光学冲刺科创板,业务总体向好但供应链隐忧值得关注
一是一家拥有五十余年历史的综合光学元件及产品的生产商凤凰光学,意欲通过重组使主营业务变更为半导体材料的梦想没能实现。
数据猿
2022/09/04
5770
光学镜头“后起之秀”中润光学冲刺科创板,业务总体向好但供应链隐忧值得关注
网筑赴港IPO:建材云的好生意和坏生意
装修、建材行业一直是大市场小企业的格局,市场盘子大,但是企业集中度很低。云和AI兴起后,这些年不少资本和玩家都在寻求做大的机会,尝试用平台化模式给装修和建材做整合,推出数字化系统产品,比如齐家网、土巴兔等家装类玩家,以及云筑、采筑、快塑网等建材类玩家。
刘旷
2021/10/11
2920
英方获灾备行业骄人成绩,源自“数据不丢,业务不停”的匠心理念
本文介绍了英方在灾备行业取得的技术成果和成功案例,包括英方在灾备领域的核心技术、产品特点、解决方案以及服务理念等方面的内容。英方在灾备行业已经形成了较为完整的产品线和服务体系,能够为用户提供高效、智能、安全的灾备解决方案,满足用户个性化需求,助力用户实现业务连续性和数据安全。
挖掘大数据
2018/01/08
1.1K0
吃着“国家饭”的昆仑太科,却为何做不大?
自昆仑太科(北京)技术股份有限公司(以下简称“昆仑太科”)上交所问询已过去近半年时间,终于在2022年年底迎来最新进展,因已更新提交相关财务资料,上交所恢复昆仑太科科创板IPO发行上市审核,中信证券股份有限公司为其独家保荐人。
数据猿
2023/03/03
5920
吃着“国家饭”的昆仑太科,却为何做不大?
背靠中芯国际这颗大树,灿芯股份的IPO之路能否闯关成功?
近几年来,半导体市场起伏严重,纷争也愈加剧烈,但是这并不能抵挡半导体公司们扎堆科创板上市的脚步。
数据猿
2023/03/03
2840
背靠中芯国际这颗大树,灿芯股份的IPO之路能否闯关成功?
IPO前“紧急”分红7500万,上市对赌背后,这家功率半导体公司到底有多“硬”?
“缺芯”是近两年半导体产业的主旋律。由于功率半导体是电子装置中实现电能转换与电路控制的核心,因此下游应用广泛,加之疫情带来的供需错配,导致2021年全球功率半导体供不应求。
数据猿
2022/04/06
5710
IPO前“紧急”分红7500万,上市对赌背后,这家功率半导体公司到底有多“硬”?
可孚医疗的数字化突围
疫情推动了医疗器械赛道的发展,不少企业直接受惠于疫情期间防疫物资的售卖,营收直线上升。后疫情时代,医疗器械企业如雨后春笋般涌现,也有不少企业筹划上市,可孚医疗便是其中一员。
金融外参
2021/11/03
3100
思必驰刚折戟上交所,出门问问冲刺港交所能成功么?
2023年5月30日,AI独角兽公司出门问问(Mobvoi Inc.)向港交所递交招股书,拟在香港主板挂牌上市,中金公司和招银国际为联席保荐人。据透露,本次筹资规模或达2亿至3亿美元,主要用于未来数年的解决方案开发和营销,及扩大数据存储能力。
数据猿
2023/09/27
3560
思必驰刚折戟上交所,出门问问冲刺港交所能成功么?
星环科技终冲刺科创板,大数据基础软件厂商触电资本市场
在A股市场逐渐“满血复活”、走出“独立”行情的环境下,星环信息科技(上海)股份有限公司(下称“星环科技”)距离上市“鸣锣”又近了一步。
数据猿
2022/09/04
5760
星环科技终冲刺科创板,大数据基础软件厂商触电资本市场
推荐阅读
中国数据复制第一股:英方软件做对了什么?
4330
英方软件敲开科创板大门,抓住数据复制的市场机遇,半日大涨172.84%
4070
英方软件周华:以“数据复制”为起点来赋能行业,目标是做到全球第一 | 镁客 · 请讲
4420
首个冲刺科创板的国产数据库:78岁老教授打磨四十年,每一行代码都自主可控
7540
星宸科技5年估值暴涨300亿,这家新芯企业对资本的吸引力在哪?
1.1K0
英方软件挂牌,云灾备市场容量或将大爆发|新三板
1.2K0
神舟软件抢登科创板,他会是站在光背后的英雄吗?
5730
用科创板给国产中间件打上一剂兴奋剂!
3790
谁将成为中国的“甲骨文”?
6190
广联科技IPO:主营业务面临消亡,转型SaaS萎靡不振,靠新业务SaaS+能撑起IPO?
3260
AR小巨头微美全息的上市困顿
6200
光学镜头“后起之秀”中润光学冲刺科创板,业务总体向好但供应链隐忧值得关注
5770
网筑赴港IPO:建材云的好生意和坏生意
2920
英方获灾备行业骄人成绩,源自“数据不丢,业务不停”的匠心理念
1.1K0
吃着“国家饭”的昆仑太科,却为何做不大?
5920
背靠中芯国际这颗大树,灿芯股份的IPO之路能否闯关成功?
2840
IPO前“紧急”分红7500万,上市对赌背后,这家功率半导体公司到底有多“硬”?
5710
可孚医疗的数字化突围
3100
思必驰刚折戟上交所,出门问问冲刺港交所能成功么?
3560
星环科技终冲刺科创板,大数据基础软件厂商触电资本市场
5760
相关推荐
中国数据复制第一股:英方软件做对了什么?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验