精华内容
下载资源
问答
  • 需求很简单,就是有两个句子(大概一百字左右不会太长),一个正确答案一个考生作答,我需要知道这个按照这个标准答案考生的作答应该给几分。 关键点:NLP的方向、语义相似度的任务,中文的。 看我博客的...

    一、前言

    需求很简单,就是有两个句子(大概一二百字左右不会太长),一个是正确答案一个是考生作答,我需要知道这个按照这个标准答案考生的作答应该给几分。

    关键点是:NLP的方向、语义相似度的任务,中文的。

    看我博客的应该都知道我是做CV方向的,最近有了这么个需求让我做,这明明是NLP方向的东西啊 (╯‵□′)╯︵┻━┻

    首先花了大概4~5天的时间学习了一下NLP的基础知识:词向量,词袋模型,LSTM之类的东西。ε≡٩(๑>₃<)۶ 一心向学

    根据CV的经验这件事一定是用深度学习做的,因为身边没有懂NLP的朋友,就只能硬着头皮上了,先去机器之心pro搜一下排行榜(类似于paperwithcode,奈何实在是打不开)

    找到了一个mt-dnn花了两天时间在这上面,坑超级多。熬夜加班(/"≡ _ ≡)/~┴┴

    然后就查资料,哟BERT很出名啊,然后就下了个BERT和它的权重,跑了GLUE数据集的9个任务,为了知道每个任务都是什么类型的,最简单的办法就是打开数据集看看~

    当我看到STS-B的时候惊了,这不就是我想要的嘛。两个句子的相似度并不是简单的0或者1,只有相似或者不相似。STS-B是把两句话在【0-5】之间打了个分,比如0.05可以理解为基本没啥关系驴唇不对马嘴,精神!(((o(*゚▽゚*)o)))♡

    尝试用BERT跑通STS-B的时候我发现,官方代码只能计算分类任务,就是【0,1,2,3】这类的离散变量,没有办法做连续值标签这种回归任务,关于STS-B根本就没写(╯‵□′)╯︵┻━┻

    没写我就自己写呗,觉得无非就是重写DataProcess类,写着写着发现事情并不简单,老子不会(っ ̯ -。) 眼快瞎了

    GLUE有个排行榜,就是那几个任务看看谁比较厉害,能跑多少的准确率,发现个ALBERT。(σ゚∀゚)σ..:*☆哎哟不错哦

    这个东西听上去比上一代BERT厉害不少,我直接看他的源代码,官方内置STS-B的解析,厉害了~(= ̄ω ̄=)喵了个咪

    接下来就是做环境,试试跑一下MNLI(我还没敢先跑STS-B怕希望越大失望越大)卧槽一点问题没有,准确率还挺高。ㄟ( ▔, ▔ )ㄏ  

    然后跑了个STS-B卧槽准确率也非常高。到这里我感觉成功了一大半,我按照这个数据集做了个中文的数据集( ̄▽ ̄)/

    跑的时候发现有个spm的参数填不上,spm是啥???(๑⁼̴̀д⁼̴́๑)ドヤッ‼ What are you 弄啥嘞!

    继续查资料,发现根本不用填这个参数,在run_classifier.py最下面把那个flags.mark_flag_as_required("spm_model_file")给注释掉就可以,直接用ALBERT_large_zh里面自带的vocab.txt就可以。

    据说这个词表和那个spm模型作用等同。网上有一个ALBERT_ZH的千万不要用,这个鬼东西我发现①代码很旧,不知道从哪里改起②他也没写关于连续值的任务数据处理类③这个项目停止维护很久了。

    下面说一下怎么用ALBERT做0.56,5.23,4.68这种连续值的中文语义相似度判定任务。

    二、数据下载

    项目下载地址:【https://github.com/google-research/albert】当前更新时间为2020-12-14 不保证未来项目可用。

    预训练权重: 【https://github.com/google-research/albert】 就在这个里面,需要科学上网,后面看情况我可能会把代码和权重都传上来。

    自定义数据集: 【这个没有办法公开,简单说就是有一个表头,第一列是序号,第二列是text_a,第三列是text_2,第四列是label的浮点型分值,然后每一列之间用tab也就是\t分隔开,文件后缀是tsv,跟GLUE格式没啥两样】

    三、需要修改的地方

    1、run_classifier.py里面把flags.mark_flag_as_required("spm_model_file")给注释掉

    2、run_classifier.py里面main()函数的processors这个字典里面把你自定义的数据处理类加进去,比如     “csts”: classifier_utils.CSTSProcessor,               

    3、classifier_utils.py里面把那个STSB那个处理类复制一下改个名字,对应自定义数据集的列号,也对应上一点那个字典里面的值

    4、上一点里面那个数据处理类注意吧STS-B给换掉,那个既是任务名字也是文件路径,换成自己的就行,把自己的数据也放进去

    就这么多,其实很简单,但是查不到资料真的没有头绪。

    四、配置环境运行

    首先是我的本机环境介绍:RTX2080,CUDA=10.1,CUDNN=7.6.5,NVIDIA-DRIVER=440.95.1,Ubuntu18.04,Anaconda3 5.2.0,Python=3.6.12(顺便提一句再生龙真的超级好用)

    然后根据项目中的requirements.txt :(这个豆瓣源超级好用,清华的太垃圾了)

    先新建一个虚拟环境

    conda create --name albert python=3.6
    source activate albert
    pip install -r requirements.txt -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com

    基本环境装好之后安装TensorFlow 1.15

    conda install tensorflow-gpu=1.15.0

    注意它会下载一堆跟你驱动和cuda都不配套的东西,不要怕,这些东西都被隔离到了虚拟环境里面,不会干扰外面的物理机环境,前提是你要在虚拟环境里面安装(我也是第一次知道的)

    然后import tensorflow as tf

    还有验证代码试试tensorflow-gpu究竟有没有调用成功。

    环境配置基本就这样了。下一步运行项目。

    对了,要把项目改名,albert-master -> albert

    python -m albert.run_classifier  \     # -m的意思是把py文件当做模块来用,所以你要在albert文件夹外面执行这个代码
        --data_dir=/home/nvidia/Downloads/nlp/datasets/   \   # 这个是数据集目录,写到这里,然后文件夹里面应该是有个CSTS文件夹,里面三个tsv文件
        --output_dir=xxxxx \ # 这个没啥好说的,输出目录,训练过程中的中间文件和产出的权重都会保存在这里
        --init_checkpoint=xxxxxxxxxx.ckpt \ # 这个要注意你下载好的权重文件叫做model.ckpt-best.data.00000-data-00001,还有旁边的两个文件,总共有三个文件都带“-best”,要把这个删掉,但是在这里填路径的时候要把.ckpt后面的东西全部删掉
        --albert_config_file=xxxx.json   \ #下载的权重文件里面.json的配置文件
        --vocab_file=......\vocab_chinese.txt  \  #就在旁边有个词表文件
        --do_train   \    # 这波训练
        --do_eval    \    # 没啥好说的
        --do_predict  \   # 训练完了做测试
        --do_lower_case  \  # 全部用小写做训练
        --max_seq_length=128  \  # 超参数之一,最大字符长度
        --optimizer=adamw \ #指定优化器
        --task_name=csts \ #自定义的任务名字
        --warmup_step=1000 \ # 玄学预热的次数
        --learning_rate=3e-5  \ # 最重要的超参数——学习率
        --train_step=5000 \ # 训练轮数
        --save_checkpoints_steps=500  \ #每个多少轮保存一次权重
        --train_batch_size=16 # batch size 尽量填满

    上面这个只是介绍参数含义,懒得写可以复制github上面的官方命令,readme里面有。

    最后就是打开tensorboard看看loss

    tensorboard --logdir=....\out\
    # 路径写绝对路径,直接复制out那个文件夹就行,一定要在外一层执行,它会自己寻找tensorboard文件

    基本情况就是这些了,有问题留言吧,趁我还记得这些~

    展开全文
  • matlab中绿色的代码的英文如何谈论高斯生成模型 2020年12月26日 我感谢您的评论。 给我发电子邮件! 雇用我! :smiling_face_with_smiling_eyes: 因此,我们刚刚看到了多元高斯函数,它任意维度数据的流行而强大的...
  • 一、CMMI认证指的是什么:CMMI认证就是能力成熟度模型集成的意思,英文全称:(Capability Maturity Model Integration)。CMMI认证是世界一流的的绩效提升框架,能够帮助组织实现高绩效运营。北京CMMI认证不仅能...

    一、CMMI认证指的是什么:CMMI认证就是能力成熟度模型集成的意思,英文全称:(Capability Maturity Model Integration)。CMMI认证是世界一流的的绩效提升框架,能够帮助组织实现高绩效运营。北京CMMI认证不仅能帮助组织改善过程,还能结合CMMI认证自身拥有的一系列实践,帮助组织改善提高绩效提升的方法,让组织能够获得丰厚的投入回报。

    CMMI认证

    二、CMMI认证级别介绍:
    1、初始级(Initial)
    软件过程是无序的,有时甚至是混乱的,对过程几乎没有定义,成功取决于个人努力。管理是反应式的。
    2、可重复级/受管理级(Repeatable)
    建立了基本的项目管理过程来跟踪费用、进度和功能特性。制定了必要的过程纪律,能重复早先类似应用项目取得的成功经验。
    共7个过程域:
    1)需求管理 Requrements Management
    2)项目规划 Project Planing
    3)项目跟踪和控制 Project Monitoring and Control
    4)供应商协议管理 Supplier Agreement Management
    5)度量与分析 Measurement and Analysis
    6)过程与产品质量保证 Process and Product Quality Assurance
    7)配置管理 Configuration Management
    3、已定义级(Defined)
    已将软件管理和工程两方面的过程文档化、标准化,并综合成该组织的标准软件过程。所有项目均使用经批准、剪裁的标准软件过程来开发和维护软件,软件产品的生产在整个软件过程是可见的。
    共14个过程域:
    1)需求开发 Requirements Development
    2)技术解决方案 Techical Solution
    3)产品集成 Product Integration
    4)验证 Verification
    5)确认 Validation
    6)组织过程焦点 Organization Process Focus
    7)组织过程定义 Organization Process Defintion
    8)组织培训 Orgnizational Training
    9)集成项目管理 Integrated Project Management
    10)风险管理 Risk Management
    11)决策分析和解决 DecisionAnalysis and Resolution
    12)集成团队 Integrated Teaming
    13)集成组织环境 Organizational Environment for Integration
    14)集成供应商管理 Integrated Suppliers Management
    其中12、13是针对大型软件团队提出的要求,一般情况下中小型软件企业可以不用。14是如果软件企业需要管理大量的供应商,则需要考虑这个PA。
    4、量化管理级(Managed)
    分析对软件过程和产品质量的详细度量数据,对软件过程和产品都有定量的理解与控制。管理有一个作出结论的客观依据,管理能够在定量的范围内预测性能。
    共2个过程域:
    1)组织过程性能 Orgnizational Process Performance
    2)量化项目管理 Quantitative Project Management
    5、优化管理级(Optimizing)
    过程的量化反馈和先进的新思想、新技术促使过程持续不断改进。
    共2个过程域:
    1)组织创新及部署 Orgnizational Innovation and Deployment
    2)原因分析与决策 Causal Analysis and Resolution
    在组织进行CMMI认证或者提升级别的过程中,可以了解到很多关于组织提升方面的知识,认证机构不但可以让企业获得相应证书,也是对组织进行了一个系统化的组织能力提升。

    展开全文
  • 高光谱图像分类)稀疏表示

    千次阅读 2016-10-18 14:44:26
    下图一个稀疏表示模型 1.稀疏系数: 先看到右边的α, 白色小格子表示0,有色小格子表示非0数(0,1),稀疏的意思就是非零系数很少的含义。 2.字典:相信大家在做科研的时候,应该都听说过字典Dictionary,那什么是...

    什么是稀疏系数?什么是字典?稀疏系数如何表示信号?

    下图是一个稀疏表示模型

    这里写图片描述
    1.稀疏系数: 先看到右边的α, 白色小格子表示0,有色小格子表示非0数(0,1),稀疏的意思就是非零系数很少的含义。
    2.字典:相信大家在做科研的时候,应该都听说过字典Dictionary,那什么是字典呢?字典,从名称来看,可以用来查询的字典,那查询什么呢?查询(或者叫匹配)字典当中的训练样本。训练样本是一种模版,是一种已知类别的样本。

    字典的构成:我现在告诉你字典的一列表示一个训练样本,它可以属于某一个类,那么图中的M列就有M个训练样本。结合前面的高光谱图像知识,高光谱图像数据的一个像素就相当于字典中的一列(或者一个训练样本)了。现在你应该大概知道怎么获取训练样本了吧。
    字典的构建:没错,从高光谱图像数据中按比例为每一个类别的所有样本随机选取像素(采样)作为训练样本,其他就作为测试样本(图中的x表示一个测试样本)。样本的行的数值表示物质在不同波段光谱下的表现。

    3.稀疏系数如何表示样本: 如果把非零数有色格子在系数中的行数表示测试样本x在字典D中匹配到的训练样本(模版)对应的列数 的相似性,那相似性最大的那个列数(或行数)所属的列是不是就是我们的最佳分类结果?是的,这就是稀疏表示的概念。

    还要补充一下:这里的样本可以是什么呢?样本一直会是以一个向量的形式表示的。对于高光谱图像,样本就可以是一个光谱维的像素。对于人脸识别,样本就可以是一张二维人脸转换成一维之后的向量。其他的就依此类推了。

    展开全文
  • 众所周知,在自然语言处理就是要预先读取数据,并分析里数据想表达的意思,所以数据的读取就尤为重要了,特别在数据分析、挖掘那一块。 使用不了jupyter botebook的读取 不知道什么原因,无法使用jupyter notebook...

    引言

    接着上一篇所介绍的自然语言处理中的几种处理算法,以及模型的评价标准,在这一篇里就着重讲数据的读取。众所周知,在自然语言处理就是要预先读取数据,并分析里数据想表达的意思,所以数据的读取就尤为重要了,特别是在数据分析、挖掘那一块。

    使用不了jupyter botebook的读取

    不知道什么原因,无法使用jupyter notebook,所以只能在.py文件处理数据了。这里载入的数据集是文新闻文本类数据,分为两列,一列label,一列text,里面不同的中文字符映射为不同的数字。

    载入数据集

    import pandas as pd
    
    dictKey = {'科技': 0, '股票': 1, '体育': 2, '娱乐': 3, '时政': 4, '社会': 5, '教育': 6, '财经': 7, '家居': 8, '游戏': 9, '房产': 10, '时尚': 11, '彩票': 12, '星座': 13}
    
    train_df = pd.read_csv('train_set.csv', sep='\t', nrows=100)
    print(train_df.head()) 
    

    这里因为数据太大了,有将近20w条,一次性载入内存打印出来的话压力还不小,所以这里这输出100条,需要输出全部的话只需把 nrows=100去掉就可以了。
    另外可以通过train_df.head()来查看前五行,函数里的行数默认为5,当然你可以在函数里设置打印的行数。

    在这里插入图片描述

    使用describe分析

    train_df['text_len'] = train_df['text'].apply(lambda x: len(x.split(' ')))
    print(train_df['text_len'].describe())
    

    你可以通过train_df[‘text_len’]=…来为df表格赋予新的一列。
    pandas中可以很方便地查看数据的最大值、最小值、均值等等这些指标,只需要调用describe这个函数就可以了。但是在这里,因为原先的数据只有label和text,不好查看前面我们所说的那些均值、最大值指标,所以我们需要先要新定义一列,这一列就为text文本的长度吧。

    在这里插入图片描述

    比较高级的describe()

    describe()函数只能够查看这些中规中矩的指标,我们也可以自己编写函数,来获取数据集的峰值,中位数,四分位距,变异系数等等。不过这里df的列好像也没几个适合获取中位数、变异系数这些。所以,你可以在另外的数据集中使用。

    def get_con(df):
        subsets = ['text_len']
        data={}
        for i in subsets:
            data.setdefault(i, [])
            data[i].append(df[i].skew())
            data[i].append(df[i].kurt())
            data[i].append(df[i].mean())
            data[i].append(df[i].std())
            data[i].append(df[i].std()/df[i].mean())
            data[i].append(df[i].max()-df[i].min())
            data[i].append(df[i].quantile(0.75)-df[i].quantile(0.25))  #分位数
            data[i].append(df[i].median())
        data_df = pd.DataFrame(data, index=['偏度', '峰度', '均值', '标准差', '变异系数', '极差', '四分位距', '中位数'], columns=subsets)
        return data_df.T
    # 保存为csv文件
    df2=get_con(train_df)
    df2.to_csv('eval.csv')
    

    df中的统计数数功能

    counts = train_df['label'].value_counts().tolist()   #100条
    print(counts )
    

    比方说,我们想记录一下这一百条里,娱乐类新闻有多少,社会类新闻有多少,就可以使用上面的语句了。结果输出为:
    在这里插入图片描述
    我们也可以查看在这么多文章中,是哪几个字符比较多,哪几个字符比较少。

    from collections import Counter
    all_lines = ' '.join(list(train_df['text']))
    word_count = Counter(all_lines.split(" "))
    word_count = sorted(word_count.items(), key=lambda d:d[1], reverse=True)
    
    print(len(word_count))
    print(word_count[0])
    print(word_count[-1])
    
    train_df['text_unique'] = train_df['text'].apply(lambda x: ' '.join(list(set(x.split(' ')))))
    all_lines = ' '.join(list(train_df['text_unique']))
    word_count = Counter(all_lines.split(" "))
    word_count = sorted(word_count.items(), key=lambda d:int(d[1]), reverse=True)
    
    print(word_count[0])
    print(word_count[1])
    print(word_count[2])
    

    经过上面的程序,我们发现‘3750’字符出现的次数最多,有3702次,而最少的字符只有一次,叫‘5034’。
    以及通过打印word_count[0],word_count[1],word_count[2],也可以分别看出出现最多的前三字符是哪几个。

    数据处理分析的神器,画图

    _ = plt.hist(train_df['text_len'], bins=200)
    plt.xlabel('Text char count')
    plt.title("Histogram of char count")
    plt.show()
    
    train_df['label'].value_counts().plot(kind='bar')
    plt.title('News class count')
    plt.xlabel("category")
    plt.show()
    '''
    或者这样
    plt.bar([i for i in range(len(counts ))], counts)
    plt.show()
    '''
    

    如果我们只是单单看数字,这样就很枯燥并且不易理解,那么将数据可视化的应用就应运而生了,python中自带一个库matplotlib就是专门为数据可视化而来。它和numpy,pandas称为三剑客。
    在这里,我们使用这个库来可视化不同新闻类别的个数统计以及一篇文章中字符总数的统计。
    在这里插入图片描述在这里插入图片描述

    其他操作

    我们发现,‘3750’,‘900’,‘648’这几个字符出现频率较高,所以初步推断出它们可能是标点符号。那么我就在想,那么我们可以通过这几个标点符号,来断句。
    那么,一篇文章大概是由多少个句子组成的呢?下面我们来揭晓!

    sentenceCount = 0
    for i in range(len(train_df)):
        split1 = train_df['text'][i].split('3750')
        for j in range(len(split1)):
            split2 = split1[j].split(' 900 ')
            for k in range(len(split2)):
                split3 = split2[k].split(' 648 ')
                sentenceCount += 1
    print("average sentences in each news are : ", sentenceCount / 100)
    

    注意我们这里考虑到可能出现3900,3646,2648,1900这种字符,所以在900,648前后加了空格来加以区分,避免错误处理了其他字符。但是感觉这是个骚操作,不知道大家还有什么其他更好的方法呢?
    在这里插入图片描述
    另外,如果我们想统计每一类新闻中,出现次数最多的字符,那么又应该怎么做呢?

    groupInfo = train_df[['label', 'text']].groupby('label').count()  #首先先进行分组
    # print(groupInfo)
    for i in range(len(groupInfo)):
        classes = train_df[train_df['label'] == i]
        # print("classes['text']")
        # print(classes['text'])
        allText = ''.join(list(classes['text']))
        word_count = Counter(allText.split(" "))
        word_count = sorted(word_count.items(), key=lambda d:d[1], reverse=True)
        print(word_count[0])  #你也可以打印word_count全部信息或者出现第二多,出现最少的字符
    

    结果发现好像还是‘3750’,‘648’这些字符居多
    在这里插入图片描述

    展开全文
  • 什么是NoSQL数据库?

    2014-07-21 23:24:20
    NoSQL数据库是什么 NoSQL说起来简单,但实际上到底有多少种呢?我在提笔的时候,到NoSQL的官方网站上确认了一下,竟然已经有122种了。另外官方网站上也介绍了本书没有涉及到的图形数据库和对象数据库等各个类别。...
  • 用gensim.doc2vec 建模、利用相似度做文本分类

    千次阅读 热门讨论 2017-11-20 21:04:31
    想看看doc2vec的效果怎么说,按照 基于gensim的Doc2Vec简析 上面的实验做了下,发现用随机森林做的模型二分类的准确率50%,换sklearn的KNN,分类结果也50¥上下。看了半天觉得过程什么的没什么错误,之后就又...
  • 下面让我们分别来看一下这几个指标分别是什么意思。 针对一个二分类问题,将实例分成正类(postive)或者负类(negative)。但是实际中分类时,会出现四种情况. (1)若一个实例是正类并且被预测为正类,即为真正类(True...
  • 绘制ROC曲线

    2019-11-29 10:32:35
    ROC曲线是什么意思,书面表述为: “ROC 曲线(接收者操作特征曲线)是一种显示分类模型在所有分类阈值下的效果的图表。” 好吧,这很不直观。其实就是一个维曲线,横轴是FPR,纵轴是TPR: 至于TPR,FPR怎么...
  • 一种分类模型,其基本模型定义为特征空间上的间隔最大的线性分类器,其学习策略便间隔最大化,最终可转化为一个凸次规划问题的求解。 基本概念1 间隔给定训练样本集D={(x1,y1),(x2,y2),……,(xm.....
  •   首先,我们要知道,SVM一个二分类模型,当然我们能够用它实现多分类,但一个SVM本质上就只是一个二分类模型,它的原理就是找到一个超平面(在二维中就是一条直线)既能有效区分两个类别又能使得两个类别到该超...
  • 机器学习性能指标精确率、召回率...下面让我们分别来看一下这几个指标分别是什么意思。 针对一个二分类问题,将实例分成正类(postive)或者负类(negative)。但是实际中分类时,会出现四种情况. (1)若一个实例是正类...
  • 下面让我们分别来看一下这几个指标分别是什么意思。 针对一个二分类问题,将实例分成正类(postive)或者负类(negative)。但是实际中分类时,会出现四种情况. (1)若一个实例是正类并且被预测为正类,即为真正类...
  • 1.2 混淆矩阵里的内容是什么意思? 以二分类为例: 正例(Positives):希望识别出的类别。 负例(Negaives):其他类别。 TP:True Postive,真阳性,预测是正类,真值也是正类; FP:False Posit
  • 这是《python机器学习基础教程》的第章——监督学习,上一章笔记中说,我们需要让模型去学习某种数据和正确答案之间的关系(比如鸢尾花的分类,机器在...另外还介绍了泛化,过拟合和欠拟合分别是什么意思,以及...
  • “应对关系增长”什么意思呢?让我们联系现实生活:现实生活中的关系,无穷无尽的,而且会不断增长,也就是会出现新关系。 目前关系抽取问题一般可以转换为关系分类问题。想要处理新关系,按照一般做法来说就需要...
  • 假设一个二分类问题,样本有正负两个类别。那么模型预测的结果和真实标签的组合就有4种:TP,FP,FN,TN,如下图所示。这4个分别表示:实际为正样本你预测为正样本,实际为负样本你预测为正样本,实际为正样本你预测...
  • JAVA面试题最全集

    2010-03-13 13:09:10
    87.UNIX中QT是什么意思? 88.在软件开发生命周期中的哪个阶段开始测试? 89.dotnet与J2EE的比较? 90.什么是ActiveX? 91.Java中IDL是什么? 92.ISO9000和CMM是什么?IS09000和CMM(软件能力成熟度模型)认证是国际上...
  • 2、b/s表示什么意思。( ) A、每秒钟传送的进制位数; B、每秒钟传送的字符数 C、每秒钟传送的字节数 D、每秒钟传送的十进制位数 3、OSI参考模型的下三层指( ) A、应用层、表示层、会话层 B、会话层、传输层...

空空如也

空空如也

1 2 3
收藏数 42
精华内容 16
关键字:

二分类模型是什么意思