zoukankan      html  css  js  c++  java
  • ACL2020 Contextual Embeddings When Are They Worth It 精读

    Arxiv链接

    上下文嵌入(Bert词向量): 什么时候值得用?

    ACL 2018

    预训练词向量 (上下文嵌入Bert,上下文无关嵌入Glove, 随机)详细分析文章

    1 背景


    图1 Bert
    优点 效果显著
    缺点 成本昂贵 (Memory,Time,  Money) (GPT-3,1700亿的参数量)
    困惑 线上环境,资源受限(内存 CPU GPU) bert不一定是最佳 选择
    用word2vec, glove等词向量有时候也能取得近似效果
    但什么时候可以近似,需要实验说明,于是作者设计了实验

    2 三种词向量


    图2 三种词向量
    类型 说明 实验
    上下文词嵌入 BERT XLNet 作者实验中选BERT 768维
    上下文词无关嵌入 Glove Word2Vec FastText 作者实验中选Glove 300维
    随机嵌入 n*d矩阵 (n是词汇量, d是嵌入维度) 作者实验中选循环随机嵌入 800维, 空间复杂度O(nd) => O(n)

    3 实验和结论

    任务 模型
    命名实体识别 (NER) BiLSTM
    情感分析 (sentiment analysis) TextCNN

    3.1 影响因素一:训练数据规模


    图3 影响因素一:训练数据规模 01

    图4 影响因素一:训练数据规模 02

    在许多任务中,供充足的数据,GloVe这些词向量可匹配BERT

    3.2 影响因素二:语言的特性

    3.2.1 Complexity of setence structure

    NER: 实体占据几个token (George Washington)


    图5 NER中的句子复杂度

    Sentiment analysis:句子依存分析中依赖标记对之间的平均距离


    图6 Sentiment analysis中的句子复杂度

    3.2.2 Ambiguity in word usage

    NER: 实体有几个标签(George Washington可以作为人名、地名、组织名)


    图7 NER中的句子模糊度

    Sentiment analysis:
    egin{array}{l}
    Hleft( {frac{1}{{left| S ight|}}sumlimits_{w in S} {pleft( { + 1left| w ight.} ight)} } ight)
    { m{where }}Hleft( p ight) = - p{log _2}left( p ight) - left( {1 - p} ight){log _2}left( {1 - p} ight)
    end{array}


    图8 Sentiment analysis中的句子模糊度

    3.2.3 Prevalence of unseen words

    NER: token出现次数得倒数


    图9 NER中的未登录词流行度

    Sentiment analysis:
    给定一个句子,句子中未在训练集中出现token占比


    图10 Sentiment analysis中未登录词流行度

    图11 Bert和随机向量对比

    图12 Bert和Glove对比

    文本结构复杂度高和单词歧义性方面: BERT更好

    未登录词方面: GloVe 更好

    总结

    大量训练数据和简单语言的任务中,考虑算力和设备等,GloVe 代表的 Non-Contextual embeddings 是个不错的选择

    对于文本复杂度高和单词语义歧义比较大的任务,BERT代表的 Contextual embeddings 有明显的优势。

    未登录词方面: GloVe 更好

  • 相关阅读:
    最大子序列、最长递增子序列、最长公共子串、最长公共子序列、字符串编辑距离等问题
    暑假总结20160907
    数组指针和指针数组的区别
    Matlab GUI界面
    稀疏表示(sparse representation)和字典学习
    C++设计模式——策略模式
    volatile,可变参数,memset,内联函数,宽字符窄字符,国际化,条件编译,预处理命令,define中##和#的区别,文件缓冲,位域
    MultiByteToWideChar和WideCharToMultiByte用法详解
    MFC中Listbox控件的简单使用
    window.open("url?param="+paramvalue) 服务端 乱码问题解决
  • 原文地址:https://www.cnblogs.com/Kalafinaian/p/13429727.html
Copyright © 2011-2022 走看看