NLP
文章平均质量分 55
samoyan
分享技术成长的日常
展开
-
T5与BART的区别
BART也采用了encoder-decoder结构,但与T5不同的是,BART在预训练阶段使用了类似于BERT的双向Transformer作为encoder,使用了类似于GPT的单向Transformer作为decoder。扰动的方式包括了词序打乱、词缺失、词替换等。总的来说,T5和BART在模型结构、预训练任务和生成方式上都有所不同,但都是将NLP任务视为序列到序列的转换问题,都采用了自回归的生成方式。T5在生成时,采用了自回归的方式,即每次生成一个词,然后将生成的词作为新的输入,进行下一个词的生成。原创 2024-05-21 14:31:21 · 1189 阅读 · 0 评论 -
LayerNormalization 和 RMSNormalization的计算方法和区别
Layer Normalization(层归一化)和RMSNormalization(均方根归一化)都是神经网络中用于稳定训练过程的归一化技术。在ChatGLM或其他神经网络模型中替换归一化技术时,需要仔细考虑模型的特定需求和归一化技术的特性,以及可能对训练动态和最终性能产生的影响。RMS值是激活的平方的均值的平方根。: Layer Normalization通过计算一个层内所有激活的均值和标准差,并用这些统计量对激活进行归一化,使得输出的均值为0,方差为1。原创 2024-03-18 16:34:14 · 2026 阅读 · 0 评论 -
双数组Trie树原理理解以及具体示例
双数组Trie树是Trie树的一种高效实现方式,它使用两个数组来表示Trie树的结构,通常这两个数组分别称为BASE和CHECK。双数组Trie树的优势在于它能够在保持Trie树快速检索的同时,大幅减少内存的使用,并且提高了缓存的利用率。当我们要查找一个字符串时,从根节点开始,对于字符串中的每一个字符,都会使用BASE和CHECK数组进行计算和验证,以确定下一步的跳转位置。相比于传统的Trie树,双数组Trie树在内存使用上更加紧凑,因为它避免了指针的使用,并且数组的连续性有利于CPU缓存的优化。原创 2024-02-22 11:42:40 · 1063 阅读 · 0 评论 -
解释LoRA参数
LoRA是一种参数效率的模型调整技术,它通过在预训练模型的权重矩阵上添加低秩矩阵来实现。这种方法允许模型在微调阶段保持大部分参数不变,从而节省存储空间和计算资源,同时允许模型适应新的任务。这意味着在训练过程中,将使用LoRA技术对模型进行适应,其中秩为128,学习率缩放因子为256。: LoRA代表"Low-Rank Adaptation",是一种模型参数化技术,用于在不显著增加参数数量的情况下调整预训练模型。这个参数影响了低秩矩阵的更新速度。参数指的是LoRA中的秩(rank),它决定了低秩矩阵的大小。原创 2024-01-24 14:45:50 · 7424 阅读 · 0 评论 -
大模型用model.generate 直接产生文本的id以及获得模型生成文本概率的方法
方法直接产生文本时,通常返回的是文本的 token ID 序列。为了获得每个 token 的生成概率,你需要使用模型的。是模型在softmax层之前的输出,表示模型对每个可能的下一个 token 的置信度。应用softmax函数,我们可以得到每个 token 的生成概率。当使用大型语言模型(如 GPT-2、GPT-3、BERT 等)的。应用softmax函数,可以得到概率分布。使得模型返回生成每个 token 时的。以下是一个简化的例子,展示如何在使用。原创 2024-01-23 17:44:42 · 5200 阅读 · 3 评论 -
一个汉字在python2 和 python3 中分别以 gbk和utf-8中分别占几个字节,和unicode 关系
在GBK编码中,无论是Python 2还是Python 3,一个汉字都占用2个字节。在UTF-8编码中,无论是Python 2还是Python 3,一个汉字通常占用3个字节。原创 2024-01-08 10:51:21 · 622 阅读 · 0 评论 -
最大似然与交叉熵之间的关系以及互相推导过程
交叉熵是衡量两个概率分布( p )和( q )之间差异的指标。在机器学习中,( p )通常代表真实分布,而( q )代表模型预测的分布。原创 2024-01-03 16:51:44 · 1349 阅读 · 0 评论 -
条件随机场 (CRF) 的损失函数以及faiss 的原理介绍
这里,T 是序列的长度,fk 是特征函数,λk 是对应的权重,求和是对所有可能的标记序列y′进行。分子是当前标记序列y的得分,而分母是所有可能标记序列的得分之和,也称为配分函数(partition function),用于确保概率之和为1。其中,N 是训练样本的数量,x(i) 是第i个样本的输入序列,y(i) 是对应的真实标记序列,θ 是模型参数,p(y∣x;在训练CRF模型时,目标是最小化损失函数L(θ)。总的来说,CRF的损失函数是负对数似然函数,它衡量的是模型输出与真实标记序列的匹配程度。原创 2024-01-03 16:34:17 · 1185 阅读 · 0 评论 -
HNSW-分层可导航小世界 算法学习
虽然K-NN方法没有显式的学习过程,但在确定新样本的类别时,需要计算新样本与每一个已知样本的距离并找出前k个近邻,这在高维度的大数据集上的计算复杂度非常高。在NSW的基础上,HNSW利用多层的图结构来完成图的构建和检索,使得通过将节点随机划分到不同的层,从上层图到下层图的检索中,越往下层节点之间的距离越近, 随机性也越差,聚类系数越高。它通过逐一比较新样本与已有样本的相似度,挑选出与新样本最接近的k个已有样本,然后根据这些样本的类别,通过投票或加权的方式来决定新样本的类别。为此,引入了分层图的概念。原创 2023-10-23 17:18:10 · 871 阅读 · 0 评论 -
lora 微调时,各个大模型使用的modules_mapping配置
LoRA是一种新的预训练微调框架,它可以在保持预训练模型性能的同时,显著减少微调所需的计算资源。在使用LoRA进行微调时,需要为每个大模型配置一个。在这个配置中,每个大模型都被映射到了一个由字符串组成的列表,这个列表指定了需要微调的模块。例如,对于BERT模型,需要微调的模块是。配置是LoRA框架的关键之一,它可以帮助用户快速、准确地指定需要微调的模块,从而加速微调过程。,以指定哪些模块需要微调。对于LayoutLM模型,需要微调的模块是。对于GPT-2模型,需要微调的模块是。以下是各个大模型使用的。原创 2023-08-22 10:37:57 · 1760 阅读 · 0 评论 -
多语言多模态(融合图像和文本)大模型-mPLUG-Owl论文解读
论文名称:mPLUG-Owl: Modularization Empowers Large Language Models with Multimodalitygithub地址:https://github.com/X-PLUG/mPLUG-Owl。原创 2023-08-17 15:13:56 · 1230 阅读 · 0 评论 -
使用代码下载开源的大模型文件示例以及中文微调llama资源汇总:
一、下载示例 二、资源汇总Chinese Llama 2 7B 链接:LinkSoul/Chinese-Llama-2-7b · Hugging FaceOpenBuddy-LLaMA2-13B 链接:OpenBuddy/openbuddy-llama2-13b-v8.1-fp16 · Hugging Facefirefly-llama2-13b 链接:GitHub - yangjianxin1/Firefly: Firefly(流萤): 中文对话式大语言模型(全量微调+QLoRA),支持微调Llma原创 2023-08-08 10:39:32 · 1607 阅读 · 1 评论 -
训练自己业务的行业垂类大模型-生成式模型:从0到1复现ChatGLM的p-tuning和lora 微调
ChatGLM-6B:我是一台人工智能助手,可以回答各种各样的问题,例如学术、语言、文化等方面的问题,提供有关历史、地理、科学、技术、社会和文化等各个领域的信息和知识,帮助用户解决问题和获取信息。我的功能是基于预先训练的大规模语言模型,通过对输入文本的响应来回答问题或完成任务。如果输出的是 Anaconda 中安装的 Python 的路径(例如:/home/user/anaconda/bin/python),则说明 Anaconda 环境已经成功激活了。ChatGLM-6B:你好👋!原创 2023-06-15 16:52:45 · 2439 阅读 · 0 评论 -
EMNLP2022 信息抽取和实体识别相关论文汇总
1、ner 相关文档。原创 2022-10-25 21:03:49 · 1160 阅读 · 0 评论 -
多模态ner 论文和代码 资源整理
多模态ner 论文和代码 资源整理原创 2022-10-24 11:24:38 · 2143 阅读 · 5 评论 -
多模态信息抽取之多模态ner发展综述
Sun等人提出了基于文本-图像关系传播的多模态BERT模型(RP-BERT)的多模态BERT模型,用于文本-图像关系分类(TRC),并在MNER上训练该模型RP-BERT。每个单词充当一个文本节点。在两个基准数据集上的实验中,该模型的F1值高于其他方法的F1值,UMGF对多模态命名实体识别具有较好的效果。目前,已有的单模态表示学习方法取得了良好的效果,为多模态表示的获取奠定了基础。目前,多模态命名实体识别已经取得了很大的进展,但大多数研究都集中在英语上,而以往的中文命名实体识别研究大多集中在单模态文本上。原创 2022-10-18 16:26:53 · 3162 阅读 · 0 评论 -
融合词典特征的ner模型:LEBERT 复现与优化
1、github:GitHub - yangjianxin1/LEBERT-NER-Chinese: 基于词汇信息融合的中文NER模型基于词汇信息融合的中文NER模型. Contribute to yangjianxin1/LEBERT-NER-Chinese development by creating an account on GitHub.https://github.com/yangjianxin1/LEBERT-NER-Chinese2、论文:https://arxiv.org/abs/210原创 2022-06-16 21:00:09 · 1981 阅读 · 2 评论 -
在finetune的时候优化bert中优化器AdamWeightDecayOptimizer
# bert源码中的AdamWeightDecayOptimizerclass AdamWeightDecayOptimizer(tf.train.Optimizer): """A basic Adam optimizer that includes "correct" L2 weight decay.""" def __init__(self, learning_rate, weight_decay_rate=0.0.原创 2022-04-26 15:25:09 · 1495 阅读 · 1 评论 -
bert 中的四次dropout都在哪些位置?
第一次:(1) embedding 的 output第二次: (2) attention softmax(q*k/sart(d)) 的输出第三次: (3) attention 层的输出第四次: (4) ffn 的输出(1) embedding output # Add positional embeddings and token type embeddings, then layer # normalize and perform dropout. ...原创 2022-04-20 20:44:41 · 2954 阅读 · 0 评论 -
使用 tf.estimator 训练或者finetune bert时,更改默认保存5个checkpoint 文件
通过更改tf.estimator.RunConfig 的配置项即可run_config = tf.estimator.RunConfig( model_dir=FLAGS.output_dir, save_summary_steps=FLAGS.save_summary_steps, save_checkpoints_steps=FLAGS.save_checkpoints_steps, session_config=sess_config.原创 2022-04-18 14:28:26 · 861 阅读 · 0 评论 -
bert 三种模型保存的方式以及调用方法总结(ckpt,单文件pb,tf_serving使用的pb)
1、在训练的过程中保存的ckpt文件:保存时主要有四个文件:1)checkpoint:指示当前目录有哪些模型文件以及最新的模型文件内容举例: model_checkpoint_path: "model.ckpt-2625" all_model_checkpoint_paths: "model.ckpt-2000" all_model_checkpoint_paths: "model.ckpt-2625"2)model.ckpt-2625.data-00000-of-000...原创 2022-04-01 20:36:01 · 5924 阅读 · 0 评论 -
文本数据增强的四种方法总结
1、文本增强方法:1)EAD(同义词替换、随机插入、随机替换、随机删除)以及回译2)受限变分自编码器(Conditional Variational Auto-Encoders,CVAE),他是通过在回译的中间过程增加一些噪声,但增加过程很可能导致标签的变化,因此使用CVAE来同时考虑标签和文本来丰富中间过程的语言,最后可以翻译成原来的语言。(大佬的博客,https://zhuanlan.zhihu.com/p/34998569)在 VAE 中,它的 Encoder 有两个,一个用来计算均值,一原创 2021-12-27 14:25:27 · 4666 阅读 · 1 评论 -
python 手动实现gelu,sigmod
import matplotlib.pyplot as pltimport numpy as npdef sigmod(x): return 1.0/(1+np.exp(-x))def gelu(x): # gelu 为高斯误差线性单元,gelu(x) = xΦ(x),Φ(x) 正态分布的累积分布函数Φ(x)没有解析表达式,它的值可以通过数值积分、泰勒级数、或者渐近序列近似得到。 # return 0.5*x*(1+ np.tanh(np.sqrt(2/np.pi)*(x.原创 2021-12-14 16:52:20 · 2840 阅读 · 0 评论 -
文本检测和识别综述
参考ReLaText: Exploiting Visual Relationships for Arbitrary-Shaped Scene Text Detection with Graph Convolutional Networks在深度学习时代之前,只有少数作品关注任意形状的文本检测。Shivakumara 等人。 [43] 提出了一种基于四叉树的方法来检测视频中的弯曲文本。法布里齐奥等人。 [44] 提出将提取的候选文本 CC 分组为一个图形,其中基于某些规则属性检测任意形状的文.原创 2021-12-13 10:41:31 · 3551 阅读 · 0 评论 -
python 手动实现维特比解码(可用于序列标注解码)
# 维特比解码# 输入模型 lamda = (A,B,pi),以及观测序列 O(大写英文字母O)# A 为隐藏状态转移概率矩阵,B 为 从隐藏状态到观测状态的发射概率矩阵,pi 为隐藏状态的初始概率# 输入例子:import numpy as np# A 代表选择三个盒子之间的转移概率,为N*N 的方针,盒子序号1,2,3,没有0A = np.array([[0.5, 0.2, 0.3], [0.3, 0.5, 0.2], .原创 2021-12-06 16:34:52 · 1727 阅读 · 1 评论 -
python 手动实现transformer中的绝对位置编码
PE(pos,2i) = sin(pos/10000^(2i/d_model))PE(pos,2i) = cos(pos/10000^(2i/d_model))实现主要是使用numpy的分片方法,提高效率。import numpy as npdef getPosEncodingMatrix(max_len,d_emb): pos_enc = np.array([[pos/np.power(10000,2*(j//2)/d_emb) for j in range(d_emb)] if原创 2021-11-25 09:36:57 · 1750 阅读 · 4 评论 -
bert参数统计
bert主要的实现是基于transformer的encoder部分,参数维度不同的地方是1)输入多了一项segment embedding,2)中间维度基本是768,以及多头注意力以及前向网络重复了12次。在统计bert参数的时候,一共要考虑5部分。1)第一部分:输入层包含三项token embedding 词表大小*768 position emb max_len(512*768) segment emb 两个取值0,1(2*768) 2)第二部分:多头注意力原创 2021-11-08 14:29:33 · 1370 阅读 · 1 评论 -
fastText、word2vec以及glove之前的区别
1) word2vec主要是指CBOW。原创 2021-10-19 11:32:00 · 208 阅读 · 0 评论 -
NLP范式近年来变化
Slides:https://txsun1997.github.io/slides/nlp-paradigm-shift.pdf主要是邱锡鹏老师团队做的一个总结,感谢dalao原创 2021-10-18 13:46:35 · 210 阅读 · 0 评论 -
python 实现 Trie 树并返回句子搜索命中的词
import collectionsclass TrieNode: def __init__(self): self.children = collections.defaultdict(TrieNode) self.is_word = Falseclass Trie: """ In fact, this Trie is a letter three. root is a fake node, its function is only.原创 2021-07-07 11:33:27 · 434 阅读 · 1 评论 -
LTP4.0 docker 安装使用说明;ltp工具包使用说明
ltp4.0 6月份放出来了,一个模型进行多任务学习,立马测试了一下效果,确实不错。1、首先下载docker,使用pytorch1.4版本,python版本3.7https://hub.docker.com/r/pytorch/pytorch/tagsdocker pull pytorch/pytorch:1.4-cuda10.1-cudnn7-devel2、docker run 一个容器nvidia-docker run -p 8889:8888 --name torch_py..原创 2020-07-21 15:11:36 · 2863 阅读 · 7 评论 -
使用LDA(潜在迪利克雷)进行文本聚类
# -*- coding: utf-8 -*-import jiebafrom sklearn.feature_extraction.text import CountVectorizerfrom sklearn.decomposition import LatentDirichletAllocationfrom sklearn.decomposition import PCAimport matplotlib.pyplot as pltimport matplotlibmatplotli.原创 2021-03-23 11:38:05 · 662 阅读 · 0 评论 -
使用kmeans进行文本聚类
直接上代码# -*- coding: utf-8 -*-import jiebafrom sklearn.feature_extraction.text import CountVectorizerfrom sklearn.feature_extraction.text import TfidfTransformerfrom sklearn.cluster import KMeansfrom sklearn.decomposition import PCA,KernelPCAimport原创 2021-03-23 11:36:20 · 2785 阅读 · 2 评论 -
抽取bert某几层参数保存
import tensorflow as tfimport ossess = tf.Session()last_name = 'bert_model.ckpt'model_path = 'chinese_L-12_H-768_A-12'imported_meta = tf.train.import_meta_graph(os.path.join(model_path, last_name + '.meta'))imported_meta.restore(sess, os.path.jo...原创 2021-03-10 15:38:33 · 864 阅读 · 0 评论 -
pytorch 使用bert的中间某几层隐藏层的结果以及使用pytorch_pretrained_bert 的问题以及解决方法
首先使用from pytorch_pretrained_bert import BertTokenizer, BertModelmodel = BertModel.from_pretrained(--bert_model)的时候1、在一个程序中,多次进行all_hidden_states,encoded_main=model(input_ids=main_x,attention_mask=main_mask),多次加载GPU,原来的也不释放。2.后改用fromtran...原创 2020-12-25 17:40:51 · 5391 阅读 · 1 评论 -
tokenization 的两种方式 BEP 和wordPiece 的区别
1、BEP:BPE 不断的迭代将出现频率最高的字符或字符序列进行合并2、wordPiece根据语言模型进行合并,它是从所有可能的subword单元中,选择一个subword单元加入语言模型后,如果该单元能最大程度地增加训练数据LM概率,则将该单元作为新的单元...原创 2020-12-17 10:07:30 · 1229 阅读 · 0 评论 -
在bert上使用领域的数据集继续预训练
1、下载bert或者roberta的源码以及开源的预训练模型https://github.com/brightmart/roberta_zh2、准备好自己的领域数据格式是:一行一句话,多个文本之间使用空行隔开为了解决这个问题,很自然的想法就是词作为一个整体要么都 Mask 要么都不 Mask,这就是所谓的 Whole Word Masking。这是一个很简单的想法,对于 BERT 的代码修改也非常少,只是修改一些 Mask 的那段代码。对于英文来说,分词是一个(相对)简单的问题。哈工大原创 2020-11-25 14:50:31 · 3282 阅读 · 2 评论