- 博客(110)
- 收藏
- 关注
原创 oxml中创建CT_Document类
元类(MetaClass)是Python中的高级特性。元类是什么呢?Python是面向对象编程语言,在Python中一切事物都是对象。如实例是类对象的实例化结果,而类则是元类实例化的结果。简而言之,元类是创建“类”的“类”——通过元类的__new__与__init__特殊方法管理类的创建过程。其中type对象是Python中内置的元类对象。那为什么需要元类呢?元类有很强大的功能,本文仅从“为新创建的类自动创建方法”为例进行记录。")name参数是新创建类的类名称,bases参数是新创建类的父类元祖,
2025-01-07 14:51:31
1056
原创 conda 与 pip 工具笔记
conda与pip是Python开发中常用的两种工具,conda本质是管理工具,pip是管理工具,两者的功能有一定的重叠。本文主要记录开发工作中与两者相关的使用说明与注意事项。conda info。
2024-04-23 17:30:25
1375
1
原创 OPC【4】:从物理包到抽象包
"""类方法unmarshal将进一步处理序列化的包内节点集合与关系边集合,位置参数pkg_reader本质是一个封装序列化的包内节点与关系边的集合,package是抽象包,part_factory用于创建Part或其子类的实例——后续会介绍该部分。"""parts = {}本质是迭代序列化包内节点集合,并根据节点的content_type,实例化成Part或者其子类的实例对象。
2024-01-24 16:21:13
890
原创 为CT_P自动注册与CT_Run相关的方法
在docx.oxml.text.paragraph模块中定义了CT_P段落对象元素类,但是CT_P中并未定义add_r等与CT_Run相关的方法。在不断探索源码逻辑的过程中,对这种自动为类注册合适的方法的功能进行了梳理——xmlchemy这个模块设计的真好!!!本文以docx.oxml.text.paragraph.CT_P类创建为例,将重点对MetaOxmlElement元类、_BaseChildElement类的功能进行详细记录。
2024-01-16 14:55:44
1045
原创 创建Dataloader基础篇【一】
因为trainer默认是以aotu_batch方式加载与处理数据,因此本部分仅记录aotu_batch方式。另外本文仅记录trainer中创建dataloader的基础过程。对于一些个性化加载与处理、如长文档文本分类,如有必要,会另起一篇文章再进行记录。
2023-11-28 17:31:08
427
原创 transformers中的data_collator
使用huggingface的Dataset加载数据集,然后使用过tokenizer对文本数据进行编码,但是此时的特征数据还不是tensor,需要转换为深度学习框架所需的tensor类型。data_collator的作用就是将features特征数据转换为tensor类型的dataset。本文记录huggingface transformers中两种比较常用的data_collator,一种是default_data_collator,另一种是DataCollatorWithPadding。本文使用BertT
2023-11-23 17:18:26
2811
原创 datasets.Dataset.map方法学习笔记
可以将datasets中的Dataset实例看做是一张数据表。map方法会将输入的function按照指定的方式应用在每一行(每一行称为一个example)上。是map方法的核心,其介绍单独放在下列章节。
2023-11-23 14:45:58
7080
原创 OPC【2】:关系边
在python-docx中,类名如果以CT_为前缀,一般表示自定义元素类——类比lxml.etree.BaseElement,并且一般定义在oxml文件或者oxml子包内。
2023-08-15 15:21:30
685
原创 《LORA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS》论文笔记
这个思想与ALBERT中分解Embedding层的思想非常相似,只是LORA的作用范围主要应用在LLM中的注意力层。的秩值相同,则相当于Fine-tuning同等规模的模型参数,因此参数。注意在LORA中有两个重要的超参数,第一个是秩超参数。因此基于假设,作者提出将变量。缩放,控制新引入权重对预训练权重的影响程度。可以引入一个新的模型权重变量。,将毫无意义,因为在LLM中,变量。是预训练模型参数,如何在保持。不变的条件下,改变输出变量。的秩(RANK)远小于变量。分解为两个低维度的变量。
2023-07-07 15:45:50
809
原创 OPC【6】:docx读写文档属性信息
propertyCorePropertiesPart类的core_prepeties特性,返回的是CoreProperties代理类——定义于docx.opc.coreprops,该代理类初始化时传入的self.element是CT_CoreProperties实例——定义于docx.oxml.coreprops。CorePropertiesPart 类继承 docx.opc.part.XmlPart, docx.opc.part.XmlPart 继承 ocx.opc.part.Part。
2023-01-19 17:16:16
1339
原创 OPC【5】:从抽象包到物理包
打包(marshal)将抽象包信息写入到一个遵循zip规范的物理格式文件,如docx格式文件。打包相对解包过程而言,就简单很多了。
2023-01-19 09:59:04
2074
原创 OPC【3】:包内节点
将抽象包看成一个图数据结构,在OPC【2】中介绍了关系边的表示及功能,但是图中的包内节点对象如何表示呢?本文基于源码,记录Part节点的定义逻辑与相关功能。在介绍包内节点对象之前,首先需要介绍PackURI与MIME_TYPE两个概念,因为实例化一个包内节点,必须提供内容——包节点的唯一标识符、包节点包含的二进制字节流、以及字节流对应的媒体类型。唯一标识符用于标识包内节点位于物理包文件中的位置;媒体类型用于告知计算机如何处理包内节点对应的二进制字节流。
2023-01-18 11:31:54
821
原创 Python 多进程编程《*》:shared_memory 模块
目的是为了多进程编程提供共享内存功能,该模块主要包含两个类 SharedMemory 与 SharebleList, 后者在前者的基础之上进一步进行了封装。同时为了管理共享内存,在multiprocessing.managers定义了SharedMemoryManager, 进一步封装SharedMemory 与 SharebleList。...
2022-08-29 10:50:55
3788
原创 Python 多进程编程《*》: 共享内存 shared ctypes objects & sharedctypes 模块
在操作系统中,进程是相互隔离的,如果进程之间需要交流数据,可以通过“文件、数据库、socket套接字通信”等方式来交流数据,另外还有“共享内存”的方式,这种方式的优势是效率更高,同时需要注意“进程同步问题,避免多进程对共享内存的操作造成脏数据,可采用类似线程同步的锁机制来解决”。...
2022-08-26 15:25:02
1252
原创 Python 多进程编程《一》: 创建进程的三种模式
进程是操作系统分配资源的最小单位,进程之间是相互隔离的,一般一个应用程序就对应一个进程。进程中可以包含多个线程,同一进程内的多线程可以共享进程内的部分资源。由于进程之间有隔离机制,因此在并发编程中,进程之间更加注重通信(或者说资源共享),而多线程编程更加注重线程同步(协同执行)。Python中有 spawn、fork、forkserver 三种创建子进程的模式,创建子进程的模式与操作系统密切相关,不同模式下创建的子进程,所具有的共享资源有所差异。...
2022-08-17 14:28:25
2025
原创 Windows下后台运行Python程序,并终止特定程序
将上述命令写入一个“run.vbs”文件,vbs文件遵循Windows脚本语言规范,详细语法没有查阅。其中第一行表示创建一个shell对象, 第二行调用shell对象的run方法,执行批处理文件start.bat,默认从“run.vbs”同级目录下查找指定的批处理文件,如果没有找到,就沿着环境变量中指定的路径查找,也可以直接指定绝对路径。最后的参数vbhide表示隐藏执行命令的窗口。......
2022-08-15 11:24:49
4531
原创 Windows|Linux 环境下安装JDK11.0
JDK(JAVA Development Kits) 可以理解为集成开发环境,JDK-11及以上版本一般会包含JRE(JAVE Runtime Environment), JRE可以看着是Python语言类似的对象,JVM是用以编译JAVA对象的,JAR可以看作是JAVA脚本文件,类似于Python脚本文件。...
2022-08-12 17:09:56
1122
原创 Python多线程编程《四》:ThreadPoolExecutor 与 Future
标准库concurrent.futures对多线程编程中的线程池与期物进行了高阶封装,并且在多线程、多进程编程中,futures提供了高度一致的接口,因此学习ThreadPoolExecutor与Future不仅对Python多线程编程有很大的帮助,对Python多进程编程也有帮助。...
2022-07-15 16:55:27
2303
1
原创 《Do Transformers Really Perform Bad for Graph Representation?》论文笔记
论文提出 Graphormer 对“图数据结构”进行表征学习,Graphormer 是基于标准 Transformer 模型结构, 通过加入 Centrality Encoding、Spatial Encoding 、Edge Encoding 技术编码图结构信息, Centrality Encoding 主要用于编码节点的重要度信息, Spatial Encoding 主要用于编码节点位置结构信息。模型示意图如下: 给定一个图对象 G=(V,E)G=(V, E)G=(V,E), V={v1,v2,..
2022-06-07 17:23:09
389
原创 《ChineseBERT: Chinese Pretraining Enhanced by Glyph and Pinyin Information》论文笔记
ChineseBERT 与 BERT 非常相似,只是在 Embedding 层上,前者对每个输入单元还添加了“字形”、“拼音”信息。由于中文是象形文字,因此字形中也包含了一定的语音信息,而加入拼音信息主要是为了解决一字多音——不同的发音包含不同的语义信息, 模型整体结构如下所示:每个token的 Char embedding、Glyph embedding、 Pinyin embedding 会先进行 concatenate操作,然后经过全连接映射,最后与 Position embedding相加输入到
2022-06-06 16:31:45
395
原创 《ELECTRA: PRE-TRAINING TEXT ENCODERS AS DISCRIMINATORS RATHER THAN GENERATORS》论文笔记
ELECTRA 提出“替换词检测” 预训练任务,在计算损失时,考虑全部输入, 而非 MLM 中15%的输入;另一方面解决了[MASK] 在预训练与Fine-Tuning 阶段不一致的问题。 替换词检测替换词检测任务采用如下结构:生成器理论上可以采用任何模型,论文中采用的是Transformer Encoder,并进行 MLM 任务。MLM 任务会给出一个新的输入序列,这个新的输入序列会作为判别器的输入, 判别器的任务是检查新输入中的词是否是替换词,即对每一个词进行二分类。最终预训练的损失
2022-05-16 15:11:58
422
原创 《UNILMv2: Pseudo-Masked Language Models for Unified Language Model Pre-Training》论文笔记
UniLMsUniLMs由《Unified Language Model Pre-training for Natural Language Understanding and Generation》(2019)提出,其核心是通过不同的注意力机制,在同一模型下进行Unidirectional Language Model, Bidirectional Language Model, 与 Sequence to Sequence Language Model三种任务。Bidirectional LM:
2022-05-16 11:09:53
700
原创 《BART: Denoising Sequence-to-Sequence Pre-training》论文笔记
模型结构BART采用一种去噪自编码方法进行预训练,不同于BERT仅使用Transformer Encoder结构,BART使用Encoder-Decoder结构。Encoder类似BERT采用双向注意力,Decoder类似GPT采用Left2Right注意力。由于采用Seq2Seq结构,Encoder部分可以采用任意的“加噪声方法”, 注意一种极端的加噪声方式,就是完全遮盖掉Encoder的输入,此时就相当于GPT。模型结构如下图所示:在BART Base中,Encoder 与 Decoder 各为
2022-04-29 17:11:19
1749
原创 《Improving Language Understanding by Generative Pre-Training》论文笔记
引言GPT(Generative Pre-Training) 受到 《Semi-Supervised Sequence Learning》与《Universal Language Model Fine-tuning for Text Classification》的启发,采用“预训练 + Fine-tune” 两阶段的方式,在不降低模型效果的基础上,以统一的模型结构处理不同的NLP任务,并有效地降低有监督学习对标注数据的依赖。 预训练阶段GPT 采用 Transformer Decoder
2022-04-29 14:03:27
628
原创 Python GIL 学习笔记
什么是GIL在CPython中,线程执行之前,必须先获取全局解释锁。在某一特定时刻,由于全局解锁锁是唯一的——每一进程有自己独立的GIL,因此仅有一个线程对象持有全局解释锁,这种机制保证了数据修改操作的安全性。注意GIL保护的是Python 解释器的状态,比如对象的引用计数信息,如果确保用户数据对象的原子性操作,需要对用户对象进行加锁操作;GIL是一种字节码级别的互斥锁。 操作系统、cpu、进程、线程及其关系【转载参考资料2】基础概念操作系统: 从操作系统与CPU之间的关系上,操作系
2022-04-26 10:48:55
389
1
原创 Python 迭代协议
Python 迭代协议由__iter__方法与__next__方法构成,若对象具有__iter__方法,称该对象为“可迭代对象(iterable object)”。若对象具有__next__方法,称该对象为“迭代器(iterator)”。__iter__方法必须返回一个迭代器对象,__next__方法不断的返回下一元素,或者抛出StopIteration。__next__方法是 Python 迭代协议的核心,__iter__方法是迭代协议的辅助——将可迭代对象转换成迭代器。在大多数情况下,可迭代对象会自动
2022-04-21 14:00:59
959
原创 《Not Enough Data? Deep Learning to the Rescue》论文笔记
引言文本数据增强技术在小样本分类任务上,有助于模型效果的提升。已有的数据增强技术如EDA、Conditional BERT采用的是局部替换的方式,在预训练语言模型效果显著提升的背景下,作者试图采用GPT2,以文本生成的方式合成新样本,而非局部替换的方式,探索提升模型效果的方法。 LAMBADALAMBADA(Language Model Based Data Augmentation)是一种基于语言模型的数据增强方法,具体详情如下:输入部分需要“训练数据集合,分类算法、预训练语言模型、
2022-04-19 14:43:40
410
原创 《EDA: Easy Data Augmentation Techniques for Boosting Performance on Text Classification Tasks》论文笔记
EDA作者提出四种简洁有效的文本数据增强方法,可以提升分类任务的效果,称为EDA(Easy Data Augmentation),四种方法如下:同义词替换(Synonym Replacement):从输入中随机选择 N 个非停用词,对选中的词,从它们的同义词中随即选择一个替换原词。随机插入(Random Insertation):随机选择一个非停用词,然后随机选择该非停用词的一个同义词,将该同义词随机插入输入序列的任意位置上,重复 N 次。随机调换(Random Swap):随机选择输入序列中的一
2022-04-15 11:43:30
430
原创 Numpy(高维数组) |Pytorch(张量) 索引读操作笔记
张量是一种多维单一数据类型数组,pytorch 索引张量继承 numpy 索引多维数组。两者均遵守 x[obj] 索引语法,obj 称为索引对象。根据 obj 的不同情形,有“基础索引”, “高级索引”, “字段访问(field access)”三种形式, 本文主要记录前两者。 基础索引当索引对象是元组时,遵守基础索引规则, 注意x1, x2, x3 是元组 (x1, x2, x3)的等价形式。当只需索引单一元素时,类似于标准 python 序列对象索引操作,索引号从0开始, 支持负数。当
2022-04-13 16:29:45
2724
原创 《Conditional BERT Contextual Augmentation》论文笔记
Conditional BERT Contextual Augmentation直观来看,MLM 是一种非常好的“基于上下文”的数据增强方式(后面的实验结果也证明,直接使用Bert也可以取得较好的效果。), 但是在分类任务中,人工合成的数据不应丧失“标签信息”。比如原文“The movie is good.”,good 一词被 Mask, 而预测为 bad, 则改变了标签的信息。因此在预测替换词时,不仅需要考虑上下文信息,还应该考虑标签信息, 据此本文提出了Conditional Bert。
2022-04-12 14:53:46
1794
原创 《PERT: Pre-Training Bert With Pemuted Language Model》论文笔记
简介作者提出,预训练模型大致可以分为两大类,自编码(AutoEncoder) 与自回归(AutoRegressive),自编码的典型代表是BERT, 自回归的典型代表是GPT。Bert预训练阶段采用 MLM + NSP 预训练任务,在NLU中取得了非常好的成绩。为了提升预训练模型的能力,作者试图探索不同的预训练方法,即提出本文的“乱序语言模型”(Permuted Language Model)。实际上还有一大类预训练模型,这类模型试图结合“自编码 + 自回归”两者的优势,代表有XLNet, UniLMs
2022-04-12 10:17:03
853
原创 《Focal Loss & GHM Loss & Dice Los》论文笔记
Focal Loss在二分类问题中,交叉熵损失定义如下:yyy 表示真实值,取值0与1,ppp表示模型预测正类的概率,取值0到1。为了表述方便,将上述公式重新表述为:对于类别不平衡问题,我们可以为每个类别加不同的权重,使得每个类别对总损失的贡献程度有差异,如下所示,αt\alpha_tαt 表示每个类的权重值,一般可取值“类样本数的逆频数”。与类加权的思想非常相似,Focal Loss 在交叉熵损失的基础之上,添加了一个权重调节项(1−p)γ(1 - p )^\gamma(1−p)γ。如下
2022-04-11 15:18:05
4579
原创 《Improving BERT-Based Text Classification With Auxiliary Sentence and Domain Knowledge》论文笔记
模型模型部分与Bert论文完全一致,只是为分类任务的输入样本构建了“辅助序列”——这种方法只适用于“单序列分类”,对于“语句相似性”等句对分类任务不适用。上图输入部分的 aia_iai 表示的是人工构建的辅助序列的token。作者提出三种构建“辅助序列”的策略,1)辅助序列是一个不包含标签信息的问句, 用BERT4TC-AQ标识;2)辅助序列是只包含一个标签名称的文本描述,用BERT4TC-AA标识;3)辅助序列是一个仅包含一个标签名称与若干其它词的文本描述, 用BERT4TC-AWA标识。作者
2022-04-02 16:26:32
1015
原创 《How to Fine-Tune BERT for Text Classification》论文笔记
方法论作者提出三种FineTune Bert的方法:1)直接使用下游目标数据集进行FineTune;2)先在目标领域上进一步Pretraining Bert, 再利用目标数据集FineTune; 3)与方法2类似,但加入了Multi-Task FineTune。 进一步预训练已有很多研究表明,在目标领域进一步预训练预训练模型,能提升预训练模型在下游任务的表现,依据进一步预训练的数据集,可分为三类:1)预训练时,仅能使用下游目标标注数据集;2)预训练时,可以使用目标任务所在领域的大量数据,
2022-04-01 15:36:52
1530
原创 《Multi-Task Deep Neural Networks for Natural Language Understanding》论文笔记
摘要作者提出MT_DNN迁移学习方法,该方法试图结合 Multi-Task Learning 与 Pretraining LM 的优点。MT_DNN的示意图如下:MTL是指“同一模型同时在多个相关数据集上,进行多任务的学习”,这样的好处不仅可使模型利用更多的数据集,也具有正则效果。而加入预训练模型的优势,则是将预训练模型作为Encoder, 这个Encoder处于网络结构的底层,被多个任务所共享,而每个特定的任务具有特定的学习层则处于上层。 模型结构Encoder部分就是Bert,可参
2022-04-01 14:36:49
240
原创 《Universal Language Model Fine-tuning for Text Classification》论文笔记
摘要基于Pretrain-Finetune与语言模型的优点,作者提出 ULMFiT 迁移学习方法,降低深度学习模型对标注数据集的依赖, 以及提升模型表现。 ULMFiT 包含三个主要步骤, 第一,在大规模通用数据集上训练语言模型, 第二,将预训练模型在目标领域数据集上进行FineTune,使预训练模型学习目标数据集的特征,最后在目标数据集合上FineTune 目标分类器。 相关研究Multi-Task Learning多任务学习是指“使同一模型同时进行多个任务, 同时进行的任务可以在同一
2022-03-31 16:56:00
1510
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人