
NLP
文章平均质量分 83
用来记录NLP相关的学习知识点
xhsun1997
这个作者很懒,什么都没留下…
展开
-
transformers中生成模型(GenerationModel)如何获取生成路径的分数
import transformersprint(transformers.__version__)from transformers import BertTokenizer, BartForConditionalGenerationbart_path="/home/xhsun/NLP/huggingfaceModels/Chinese/chinese-bart-base/"tokenizer = BertTokenizer.from_pretrained(bart_path)model = B原创 2022-04-07 14:03:47 · 5620 阅读 · 4 评论 -
测试基于sentence-transformers和Faiss搭建的检索服务的耗时情况
前期准备安装包faiss-cpu==1.7.0机器配置我用的是cpu,30核104线程数实验参数主要考虑两个实验参数,即向量个数和向量维度其中向量维度主要实验512和768两个维度而主要实验向量个数,向量个数对时间的影响很大。每组实验循环查询500次,召回个数为5(这个参数对耗时无影响),取平均消耗时间:向量个数向量维度平均耗时8000512/768/10000512/768/15000512/768/20000512/768/原创 2021-11-29 10:15:15 · 1128 阅读 · 0 评论 -
transformer结构
前期准备nn.ModuleListModuleList是一个容器,可以存储各种module,类似于python的list,可以存储各种类型的数据。不同的是ModuleList会将存储的module自动注册到网络,也就是说网络的参数已经包含了ModuleList中存储的各个模块的参数class Network(nn.Module): def __init__(self): super(Network,self).__init__() self.modulelist原创 2021-03-02 21:15:13 · 482 阅读 · 1 评论 -
朴素贝叶斯
简单说明原理当我们想用朴素贝叶斯算法进行文本分类时:我们的一个样本就是一个句子和它的标签,即:{(x(i),y(i)}\{(x^{(i)},y^{(i)}\}{(x(i),y(i)}指的是第iii个样本x(i)x^{(i)}x(i)和对应标签y(i)y^{(i)}y(i),如果是二分类,那么y(i)y^{(i)}y(i)要么是0,要么是1.x(i)x^{(i)}x(i)有mmm个属性,这里的mmm其实就是指x(i)x^{(i)}x(i)有mmm个单词。因为我们是根据这mmm个单词来对x(i)x^{(i原创 2021-02-28 20:13:18 · 228 阅读 · 0 评论 -
解读(Solving Math Word Problems with Multi-Encoders and Multi-DEcoders)的代码(模型部分)
数据处理数据处理部分见数据处理部分我们已经知道,prepare_train_batch函数返回14个变量每一个变量都是一个列表,有batch个元素id_batches[i]代表的是第i个batch中batch个问题的idinput1_batches[i]代表的是第i个batch中的batch个问题,每一个问题文本的id序列,根据这些id就可以查找对应的词向量input2_batches[i]代表的是第i个batch中的batch个问题,每一个问题文本对应的词性标注的id序列,因为要将每一个单词原创 2021-02-22 20:56:20 · 833 阅读 · 0 评论 -
解读(Solving Math Word Problems with Multi-Encoders and Multi-DEcoders)的代码(数据处理部分)
导入必要的包import os,json,time,re,copy,randomfrom collections import Counterimport numpy as npimport torchimport torch.nn as nn加载数据的函数def load_raw_data(filename): data=[] with open(filename,encoding='utf-8') as f: lines=f.readlines()#lin原创 2021-02-13 20:53:46 · 872 阅读 · 1 评论 -
隐马尔可夫模型HMM实战命名实体识别NER
HMM是关于时序的有向概率图模型。HMM是对含有隐变量的马尔可夫链进行建模的生成模型。马尔可夫链是指时间和状态都是离散的马尔可夫过程。马尔可夫过程是指满足马尔可夫假设的随机过程。马尔可夫假设是指状态的无后效性。在做NER任务之前,我们先看一个例子,通过这个例子来学习viterbi算法我们直接来看统计学习方法的例10.3我们的目的就是当给定观测序列{红白红}的条件下,求出这个观测序列对应的最有可能的状态序列,也就是红白红分别来自哪一个盒子。由于状态的取值空间是3(3个盒子),序列的长度是3原创 2021-01-30 19:56:23 · 1531 阅读 · 1 评论 -
简单总结机器阅读理解模型中输出答案层融入强化学习的思想
利用预测答案与标签的f1分数作为奖励相关论文Reinforced Mnemonic Reader for Machine Reading ComprehensionDCN+: MIXED OBJECTIVE AND DEEP RESIDUALCOATTENTION FOR QUESTION ANSWERING在抽取式阅读理解任务当中,模型最终的预测是答案的起始位置和终止位置。损失函数是预测的起始位置和标签的起始位置的交叉熵+预测的终止位置和标签的终止位置的交叉熵这就有一个问题:过于严格因原创 2021-01-27 20:45:14 · 522 阅读 · 3 评论 -
搞懂到底怎么做的多头注意力
假设我们有个句子“数学应用题”,每一个字用一个64维的向量表示也就是下面的每一个有颜色的一条框。自注意力我们如何做自注意力呢:下面几幅图展示了这个过程不再一个一个展示,假设最终到下面这幅图因为句子长度是5,所以我们得到的是(5,5)的矩阵。经过softmax之后,第一行表示的含义就是“数”这个字,对整个句子"数学应用题"的每一个字的相关程度.这一行就可以看成关于数字“数”的权重,然后对整个矩阵加权求和,如下图(为了简便,我没有softmax,知道这个意思就好)以此类推,就得到了注意力原创 2021-01-11 16:17:52 · 3456 阅读 · 2 评论 -
seq2seq中的曝光偏差(exposure bias)现象以及利用REINFORCE算法训练seq2seq模型
mismatch between train and testexposure bias在训练阶段,我们采用的是teacher forcing (教师指导)方式,也就是在decoder端的当前时间步的输入是上一个时间步的真实标签,而不是模型在上一个时间步的预测值然而测试阶段,当前时间步的输入是模型上一时间步的预测值,此时没有教师指导。所谓exposure bias(曝光偏差),就是因为模型在训练阶段从来没有看过自己的输出,也就是自己的输出从来没有曝光出来,然而测试阶段却始终看到的是自己的输出.评估原创 2021-01-10 14:45:27 · 1748 阅读 · 0 评论 -
解读数学问题自动求解领域的一篇论文A Goal-Driven Tree-Structured Neural Model for Math Word Problems以及论文的代码
论文链接代码链接模型大概框架:这篇论文的思想就是:传统的seq2seq模型是序列式的从左到右生成表达式,缺少一种“目标驱动”机制,而这种目标驱动机制在人类解题过程中是常见的。例如这么一道题:小明正在将他的饼干装进包中,一个包里面要装6块饼干。如果他有23块巧克力饼干,25块曲奇饼干,那么他需要几个包?对于这个问题,我们在解答的时候,首先看出来问题的目标是计算需要几个包,针对这个目标,我们提取相关的信息:一个包里面装6个饼干;有23块巧克力饼干;有25块曲奇饼干。于是乎我们知道,要想得到最终目标.原创 2020-12-26 21:18:52 · 2464 阅读 · 6 评论 -
Ubuntu安装pyltp
sudo apt install gitsudo apt install cmake安装ltpgit clone https://gitee.com/fastsource/ltpcd ltppip install -r requirement.txtpython setup.py install回到ltp的上级目录git clone https://gitee.com/fastsource/pyltpcp -r ltp/ pyltp/cd pyltpgit submodule i原创 2020-11-18 09:40:58 · 716 阅读 · 0 评论 -
解决NLP任务中安装spacy的问题: Can‘t find model ‘en_core_web_sm‘. It doesn‘t seem to be a shortcut link,
第一步pip install spacy第二步import spacynlp=spacy.load("en_core_web_sm")果然报错,接下来我们看看怎么弄en_core_web_sm如果是python -m spacy download en_core_web_sm基本是下载不下来的。解决办法en_core_web_sm直接从github上下载第三步wget https://github.com/explosion/spacy-models/releases/d原创 2020-10-28 16:00:04 · 20085 阅读 · 5 评论 -
利用gensim的word2vec API训练自己的语料库
import osos.system("pip install gensim")import gensimmodel=gensim.models.word2vec.Word2Vec(["A","list","represents","one","sentence"],min_count=0,size=100,window=2)model=gensim.models.word2vec.Wor...原创 2020-04-12 17:00:11 · 1025 阅读 · 0 评论 -
详细介绍多分类任务(例如实体识别等)中的评估指标(精确率,召回率,F1 score)
先上一张图,这是典型的二分类任务。对于多分类任务类似。比如对于命名实体识别或者词性标记这种序列标注任务,可以把这类任务看成是多分类任务,例如实体识别就是要将文本中的单词识别出相应的地名,人名,机构名等。我以四个标签(PER,LOC,ORG,O)的实体识别为例,也就是四分类任务,做出如下表格标签PERLOCORGOPER80234LOC5903...原创 2020-03-10 10:58:29 · 4313 阅读 · 0 评论 -
神经机器阅读理解方法综述
MatchLSTM+Ptr在没有预训练模型之前,不仅仅这五篇论文,其它的MRC领域的模型都可以用如下四层概括(注: 虽然BiDAF和QANet两篇论文在做完注意力交互后又通过了几层网络,但是那些可以算在答案输出层内)MatchLSTM+Ptr单词嵌入层没什么好说的,最普通的词嵌入或者加一些字符嵌入来缓解OOV问题,因为这五篇都没有用到预训练模型,所以词嵌入采用的不是word2vec就是GloVe。语义编码层采用的是BiLSTM。接下来重点来了:Match-LSTM Layer如果类比于机器原创 2020-07-01 18:24:11 · 689 阅读 · 0 评论 -
区间答案型阅读理解的测评方式F1值,自由回答型阅读理解的测评方式ROUGE-L
区间答案型精确率(precision)是指预测的答案有多大比例的单词在标准答案中出现召回率(recall)是指标准答案中的单词有多大比例在预测答案中出现标准答案预测答案精确匹配精确率召回率F1今天|八点上午|八点|出发01/31/20.4ROUGE-LROUGE(Recall-Oriented Understudy for Gisting Evaluation)面向召回率摘要评估研究。这个评估方式通常用在摘要生成任务的评估中。ROUGE-L计算预原创 2020-06-25 15:38:22 · 1122 阅读 · 0 评论 -
详细介绍有关RACE数据集上经典的机器阅读理解模型如Co-Matching Model for Multi-choice, DCMN,DCMN+
A Co-Matching Model for Muti-choice Reading Comprehension对于RACE这种多项选择式阅读理解数据集,不同于片段抽取式数据集,因为多项选择式是有三个句子成分的,(passage,question,choice)。以往的做法是用句子匹配的方式,比如把(question,choice)连在一起看成一个句子,然后与passage做匹配,如果这个这个choice是正确答案,那么匹配结果为1。或者先让passage和question做匹配,匹配出来一个向量,然后原创 2020-06-20 17:45:05 · 2757 阅读 · 0 评论 -
机器阅读理解根据输出答案类型的不同设计不同的输出层
机器阅读理解根据输出的答案类型可以分为:填空式阅读理解,抽取式阅读理解,多项选择式阅读理解,生成式阅读理解填空式阅读理解对于填空式阅读理解,具体的做法如图一篇文章对应一个问题,词嵌入之后送入模型,注意就算一篇文章有多个问题,那么也仍然是一篇文章对应一个问题,如图所示,模型返回的张量shape==(passage_length,1),因为填空式问答只有一个空需要填,所以对应的标签是one_hot形式的张量,只有答案单词那个位置是1。抽取式阅读理解抽取式阅读理解指的就是从文章中提取出来一段连续的原创 2020-06-18 18:20:08 · 683 阅读 · 1 评论 -
解读ACL 2020的一篇paper (Recurrent Chunking Mechanisms for Long-text machine reading comprehension)的源码
本文的目的是解读Recurrent Chunking Mechanisms for Long-text machine reading comprehension这篇论文的GitHub上的代码。我会在代码的基础上添加尽可能多的注释。首先:def read_coqa_examples(input_file,is_training=True,use_history=False,n_history=-1): ''' 由于CoQA是对话型阅读理解数据集,所以后面的问题依赖于前面的问题与答案,但原创 2020-10-21 16:00:17 · 955 阅读 · 4 评论 -
解读ACL2020的一篇机器阅读理解方向的论文(Recurrent Chunking Mechanisms for Long-text machine reading comprehension)
摘要与引言BERT在MRC任务上已经达到了很高的效果,但是缺点在于BERT的输入最多只能512个单词。而对于MRC任务来说,有的数据集的文章特别长。因此想要用BERT处理这类数据集,就必须将文章切分开。每一篇文章与问题独立的构成一个example,也就是一个样本作为BERT的输入。拿BERT的源码举例:import collectionslength_of_doc_tokens=700#文章的长度为700max_seq_length=512length_of_query_tokens=9#问题长原创 2020-10-17 20:56:29 · 1010 阅读 · 3 评论 -
基于BERT+CRF做中文NER
本篇博客是在BERT的最初始的google版本的基础上改进,我们唯一需要修改的就是run_classifier.py数据的形式为下面我们一步一步的来更改:首先是导入包并且定义参数,我们将那些关于tpu的参数都去掉,因为我们基本上都是用gpu,而TPUEstimator在GPU上是不打印loss的,这也是为什么我们微调BERT时候只有看到最终结果,中间根本不知道训练的状况第一部分:import collectionsimport osimport picklefrom absl impor原创 2020-09-30 15:45:26 · 9070 阅读 · 11 评论 -
机器阅读理解经典模型RNet 实战 -----构建模型篇(二)
数据处理篇在数据处理篇的那个博客我们已经了解到输入给模型的数据有七个部分context_token_ids 它用来做context中单词的词嵌入context_token_char_ids 它用来做context中单词的字符嵌入question_token_idsquestion_token_char_idsy1 代表答案在context中的起始位置的单词y2 代表答案在context中的终止位置的单词question_id 代表当前question的序号...原创 2020-08-10 19:40:04 · 760 阅读 · 2 评论