BIO是怎么实现的

费劲巴拉的花费半天时间 画了一下 bio时序图,最后发现 关键的就 4 个方法

一个网络连接,就是 一个 int 型的 数字,一个数字 代表一个连接。

服务端创建一个 socket,比如数字是 1440

操作系统就会在 1440 上监听 连接请求,当接收到连接请求时,会返回一个 新的数字,比如 1864

后续 服务端 和 客户端 就是通过这个 1864 来进行数据传输的。

操作系统 此时 仍然在 1440 上监听 连接请求,如果有新的连接过来,会再返回一个 新的数字,比如 1880,以此类推。

1440 是固定的 一个用于服务端监听连接的,新的连接生成的 是 随机的。

 

这里服务端的 socket 编码是 1396

接收到了 两个连接,分别是 1408 和 1400

通过命令查看,再 8182端口上, 51621端口 和 51737端口 是这次的连接。所以 这里查看的 是 连接 ip:port,不是 socket的编码

需要注意的是,这里accept 和 socket的读写操作都是 阻塞型的,也就是 会消耗掉一个 线程。这也就是 BIO 效率低的原因。

大概花了5h,就简单记录下吧。

### BIO标注的实现方法 BIO 是一种常见的序列标注方案,在自然语言处理领域广泛应用于命名实体识别(NER)、分词以及其他任务中。以下是关于如何实现 BIO 标注的具体说明: #### 1. 数据准备 在实现 BIO 标注之前,需要准备好带标签的数据集。这些数据应包含原始文本及其对应的标注信息。例如,对于句子“张三在纽约工作”,其 BIO 标注可以如下所示: ``` 字符 标注 张 B-Person 三 I-Person 在 O 纽 B-Location 约 I-Location 工 O 作 O ``` 这里,“Person” 和 “Location” 表示两个不同的实体类别,而 `B-` 和 `I-` 则分别代表该位置上的标记属于某个实体的起始部分还是内部部分[^1]。 #### 2. 预处理阶段 为了使模型能够理解并学习这种结构化的标注方式,需先对输入数据做适当预处理。主要包括以下几个方面: - **分词**:将连续字符串切分成单独词语或者子单元作为后续操作单位[^2]; - **映射表创建**:建立从实际标签名称到整数编号之间的对应关系以便于计算过程简化以及提高效率; #### 3. 构建模型架构 当完成上述准备工作之后,则可着手设计适合解决当前问题类型的深度学习框架。以BERT为例,由于其具备强大的上下文感知能力,因此非常适合用来执行此类复杂的分类作业[^3]。具体而言,可以通过微调已有的大型语言模型来适应特定应用场景下的需求——即调整最后一层全连接网络参数直至达到预期效果为止。 #### 4. 训练与评估 最后一步就是利用划分好的训练集合验证集合来进行迭代优化,并定期测试新版本的表现情况直到满足既定标准才停止整个流程。期间要注意监控各项指标变化趋势比如精确率(Precision),召回率(Recall)还有F1分数等等,以此判断现有策略是否合理有效[^4]。 ```python import torch from transformers import BertTokenizer, BertForTokenClassification tokenizer = BertTokenizer.from_pretrained('bert-base-chinese') model = BertForTokenClassification.from_pretrained('bert-base-chinese', num_labels=9) sentence = '张三在纽约工作' tokens = tokenizer.tokenize(sentence) input_ids = tokenizer.encode(tokens, add_special_tokens=True) logits = model(torch.tensor([input_ids])).logits predictions = torch.argmax(logits, dim=-1).numpy() print(predictions) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值