王林,字符级NLP好坏剖析:在某些场景中比词向量更好用,谶

admin 2周前 ( 04-04 01:26 ) 0条评论
摘要: 字符级NLP优劣分析:在某些场景中比词向量更好用...

选自LightTAG

参加:熊猫

在处理 NLP 问题时,你挑选的根本处理单位是词仍是字符?LightTag 近来的一篇博文介绍了字符级 NLP 模型的优势和短板,并介绍了一些更合适字符级模型的运用场景。需求留意的是,本文首要环绕英语等单个字符无详细意义的言语编写,关于汉语这种词与字符之间存在许多堆叠的言语,或许还需求一些新的思索。

NLP 体系就像人生相同,充满了挑选与权衡。其间一个欲医挑选是指定咱们的模型所看到的最小单位。一般而言,咱们处理言语的办法是处理「词(word)」。本文则将探究另一个不太直观的挑选——字符(character),并将介绍字符级处理办法的优缺陷。

字符级模型抛弃了词所具有的语义信息,也抛弃了即插即用的预练习漆黑之王和五灵王合体词向量生态体系。另一方面,字符级深度学习模型又有两个根本优势:它们能缓解咱们在模型输入上遇到的词汇库问题,还能防止在模型输出上的核算瓶颈。

在输入神魔磕头方面,它们能极大地丧野求生攻略贴身妖孽保安提高咱们的模型所能处理的词汇量,并且能弹性地处理拼写过错和稀有词问题。在输出方面,由于字符级模型的词汇库很小,所以核算本钱更低。这样的性质使得在预算有限时也能运用某些练习技能(比方联合练习一个言语模型)并到达较快的练习速度。

本文将按以下结构打开。咱们首先会介绍咱们在词层面常遇到的且可用字符级模型处理的问题。由于字符级模型不行直观,所以咱们会看看它们是否能学习到重要的信息,并会展现一些处理这一问题的研讨。然后咱们会谈论在字符层面处理言语的优势和缺陷,最终会以处理这一问题的其它技能作结。

王林,字符级NLP好坏分析:在某些场景中比词向量更好用,谶
梅文少将

油井分析——一个启示示例

WellLine 供给了「用于油井优化的 AI 驱动的油井时刻线」,并且也是 LightTags 最早的客户之一。他们的一部分作用是将自然言语处理技能运用于人类书写的每个油井的出产日志。

运用 LightTag 标示的油井日志

WellLine 的数据域简直算得上是一种英语次级方言。许多词都是英语,但也有许多不是,其间有许多只要范畴专家才干了解的缩写和行话。由于这个域的数据在互联网上并不富余,词向量等常用的预处理 NLP 处理计划并没有合适 WellLine 的词汇库。

在 WellLine 这个状况中,衡量和单位都很重要,但在运用模型之前将它们 token 化或许会有问题。比方标示为「Rig Equipment」的「9 7/8" BHA」这一项;规范的 token 化办法(对词有规范的假定)会将这些数字分隔,让咱们得到 [9,7,/,8,"]。要得到更精确的 token 化办法,需求王林,字符级NLP好坏分析:在某些场景中比词向量更好用,谶许多范畴专业常识和工程开发作业。

行业界的许多 NLP 用例都遵从类似的办法,虽然相关文本的言语是英语,但它们往往都有特有的词汇、缩写和标点符号,乃至还有应战传统的 token 界说的表情符号。正如咱们之前看到的那样,运用了规范 token 化假定的直接可用的处理计划往往无法到达预期的方针。可是,构建一个范畴特定的 token 化器又或许需求十分多的时刻和金钱。

在这样的事例中,咱们以为运用字符级模型更合理。它们的运用场景或许远远超出你的意料——不管是用于处理金融谈天、政治推文、生物学记载、医药处方文本,仍是用于希伯来语或阿拉伯语等形状丰厚的言语。一般而言,咱们并不关怀整个词汇库的 token 化或语义。咱们只关怀能否在这些文本中找到咱们需求的信息。

在这些状况中,字符级模型能给出让人服气的作用。依据界说,字符级模型能让咱们免除 token 化的费事,然后让咱们能够处理恣意巨细的词汇库,并且核算本钱也很低,这有助于比利的早年生计无 TPU pod 的预练习和联合练习技能。

字符级模型有用吗?

虽然字符级模型听起来很有潜力,但它们的确也违背直觉。词有语义意义,字符则没有,因而咱们不能明显地预期模型能够经过处理字符来学习了解一段文本的语义内容。幸运的是,咱们站在伟人的膀子上,咱们来看看他们的一些作业作用。

字符级模型能够学习非普通的句法

2015 年时,Andrej Karpathy 宣布了《循环神经网络不合理的有用性》https://karpathy.github.io/2015/05/21/rnn-effectiveness/,其间他练习了一个能够写出根本上合理的 C 代码的循环神经网络。下面是一个来自他的文章的示例:

/*

* Increment the size拜乐生物杀蟑饵剂 file of the new incorrect UI_FILTER group information

* of the size generatively.

*/

staticin日月星三部曲t indicate_policy( void)

{

int error;

if(fd == MARN_EPT) {

/*

* The kernel blank will coeld it to userspace.

*/

if(ss->segment < mem_total)

unblock_graph_and_set_blocked();

else

ret = 1;

goto bail;

}

segaddr = in_SB( in.addr);

selector = seg / 16;

setup_works = true;

for(i = 0; i < blocks; i++) {

seq = buf[i++];

bpf = bd->bd.next + i * search;

if(fd) {

current = blocked;

}

}

rw->name = "Getjbbregs";

bprm_self_clearl(&iv->version);

regs-> new= blocks[(BPF_STATS << info->historidac)] | PFMR_CLOBATHINC_SECONDS << 12;

returnsegtable;

}

Yoav Goldberg 在 Karpathy 的这篇博客下跟了一个谈论:

很凶猛,对吧?网络是怎样学会仿照这样的输入的?的确如此,我也觉得适当了不得。可是,我觉得这篇文章的大部分读者感到震慑的原因是过错的。这是由于他们不了解非滑润的最大似然字符级言语模型以及它们在生成适当可信的自然言语输出上那不合理的有用性。……在我看来,一次一个字符地生成英语并没有那么凶猛。这个 RNN 需求学习之前 nn 个字母,其间 nn 比较小,便是这样。

可是,这个生成代码的比方却十分凶猛。为什么?由于上下文感知。留意,在这儿贴出的全部比方中,代码是有很好缩进的,大括号和小括号嵌套正确,乃至注释都有正确的开端和完毕。这不是经过简略检查前 nn 个字母就能完结的。

从这个意义上讲,Karpathy 的演示标明咱们能够合理地预期字符级模型能够学习和运用言语的「深度」结构。Karpathy 练习了一个言语模型,它自身虽然不是很有用,但咱们还会回来解说咱们为什么以为这标明了字符级模型在运用 NLP 上的超卓才能。

字符级模型能够「了解」心情

2017 年,OpenAI 发布了一篇博客和论文《Learning to Generate Reviews and Discovering Sentiment》介绍他们练习的一个字符级言语模型,这个模型是在亚马逊谈论上练习得到的,作用发现该模型自己学会了辨认心情。该试验的一些细节让其听起来有些不切实践。

咱们首先在一个包含 8200 万条亚马逊谈论的语料库上练习了一个有 4096 个单元的乘法 LSTM,用来猜测一节文本的下一个字符。练习进程在 4 个英伟达 Pascal GPU 上用去了一个月的时刻,咱们的模型每秒处理 12500 个字符。

虽然如此,其论文还指出这个字符级模型能够习得文本的语义特点,这首要来自榜首原理(first principle)。

字符级模型能够翻译

DeepMind 的《Neural Machine Translation in Linear Time》和 Lee et al 的《Fully Character-Level Neural Machine Tran忍者高飞slation without Explicit Segmentation》展现了在字符层面上完结的翻译。这些作用特别有目共睹,由于翻译使命需求对根底文本有十分好的语义了解。

Lee 论文的模型有很好的弹性

DeepMind 论文的相关性或许会有些疑问,由于他们的模型运用的是卷积,而不是常用的 RNN/LSTM。实践上,这使得模型能够更快地练习,无需很大的核算预算或 TPU 集群就能进行迭代和探究。

在字符层面上处理的优势

了解了字符级模型的作用,我王林,字符级NLP好坏分析:在某些场景中比词向量更好用,谶们来看看它们能带来哪些优势以及咱们或许想要运用它们的原因。咱们需求在两个当地在字符和词之间做出挑选,即模型的输入和模型的输出。在输入方面,挑选字符时词汇库要宽松得多,并且能够处理更长的序列(更多核算),但语义信息会削减。在输出方面,核算功能会有明显的提高,咱们将在后边胪陈这一点。

字符级模型支撑敞开的词汇库

考虑一下下列来自深海石油钻井渠道保护日志中的以下语句(是的,它们有日志):

Set 10 3/4" csg slips w/ 50K LB王林,字符级NLP好坏分析:在某些场景中比词向量更好用,谶S.

它是说「设置十又四分之三英寸的…」,仍是「设置十个四分之三英寸的…」。

slips 的后缀 s 供给了一个强有力的头绪,通知咱们有 10 个数量的 3/4 英寸的 slip,所以第二种解读是对的。能够意料词级模型能轻松地处理这个问题,可是,咱们需求问自己,咱们的模型终究会看到什么 token?

由于当咱们在词层面操作时,咱们有必要事前挑选一个词汇库,也便是说咱们的模型能够处理的词汇列表是固定的,其它词都会被映射到 UNK(不知道词)。一个宽松的模型的词汇库一般有 1-3 万个最常用的词。

在 GoogleNews 上练习的词向量不包含这些 token:10、3/4"、csg、w/、50K。

更进一步,与 slips 最接近的词是 slip、fall 等——标明模型以为 slip 是一个动词,slips 是动词的一种变形办法。也便是说,咱们的模型会把语句「Set 10 3/4" csgslips w/ 50K LBS」读取为「Set UNK UNK UNK falls UNK UNK Location_Based」。

假如咱们想要运用 NLP 来了解咱们的油井中的状况,运用词向量(单纯地)会让咱们很快迷失方向。另一方面,字符级模型对词汇库没有实践的约束,能以输入原本的姿态读取它。回想一下 Goldberg 有关上下文的谈论,很难幻想字符级模型能够将标明复数的 s 后缀与 10 联络起来,然后「了解」10 是一个数量。

这样的优势并不局限于油井分析。将 NLP 运用于用户生成的文本是一种常见做法,这样的文本一般充满着拼写过错、emoji、缩写、俚语、范畴特定的行话和语法。最重要的是,言语还会不断演化出新的词汇和符号。虽然字符级模型不能处理人类文本的全部问题,但它们的确能让咱们的模型更稳健地处理这样的文本。

字符级模型能移除练习使命的瓶颈

运用 NLP/文本发掘的一个更常见问题是查找文本中的实体并消除歧义,比方上面比方中的「10」。也便是说,咱们并不总是需求生成文本。可是,现已能够坚信,在一个言语建模使命上联合练习或预练习咱们的模型是有协助的,原因包含:1)有助于泛化,2)削减必定验证精确度所需的标签的数量。

言语模型的方针是依据之前的 token 猜测下一个 token。规范的做法是最终一层在词汇表的每个 token 上核算一个 softmax。当词汇库较大时,softmax 过程和相关的梯度核算就会成为练习言语模型的功能瓶颈。

字符级模型由于一开端词汇库就很小,也就隐含地防止了这一问题。这让咱们能够快速地预练习或联合练习一个与咱们的首要方针共同的言语模型。虽然你的确能够经过投入更多预算、硬件和工程开发来战胜这一瓶颈,但那一起也会推高你的开发和布置本钱。事实上,涉及到运用 NLP 的事务都很垂青出资回报率,最好还要快,并且能够投入到一个给定问题上的资金是有限的。

字符级 NLP 模型的缺陷

字符级模型也并非全能,相同存在自己的缺陷。最显眼的两个缺陷是缺少输入的语义内容(字符是没有意义的)以及输入长度的添加。英语的均匀词长为 5 个字符,这意味gay104着依据架构的不同,能够预期核算需求会有 5 倍的添加。

字符没有王林,字符级NLP好坏分析:在某些场景中比词向量更好用,谶语义

抛弃词的语义内容不是一个简略的决议,也不是常能在当时最佳体系中看到的。在写作本文时,Google 的 BERT 模型是当时最佳,并且在 100 种言语上预练习过。没有多少组织机构有运转 BERT 预练习的核算才能,所以不能容易抛弃运用这些模型。话虽如此,值得留意的是用于亚洲言语的 BERT 模型是在字符层面上有用作业的。

更长的序列会添加核算本钱

在词层面进行有用的处理会将你的序列的长度乘以词的均匀字符数。比方在英王林,字符级NLP好坏分析:在某些场景中比词向量更好用,谶语中,词的均匀字符数为 5,假如假定你按序列处理你的输入,那么你需求 5 倍的核算。运用字符级模型的一个重要理由是核算本钱低,这好像刚好拔苗助长。

这是一个实践存在的并且往往令人懊丧的缺陷,但只要在你按序列处理你的输入时才会有这个问题。假如你乐意并且能够运用卷积(比方 Bytenet)或 Transformers(比方 BERT),那么模型固有的并行才能能有用地抵消长序列的本钱。这依然需求权衡,根本上而言,假如想要收成字符级模型的最大优势,对架构的挑选会遭到「温文的」约束。

你不关怀字符

假如你要完结一个序列标示使命(比方命名实体辨认),你或许并不在乎单个字符。你的模型应该要能分辩一个特定的词是否是实体,并会在那样的输出上得以衡量。运用字符级模型意味着你得到的输出何寻何寻也是字符级的,这会让你需求完结更多的作业。

还有更糟糕的呢。字符级模型不满足任何 token 化计划,必定也不满足你挑选用来点评你的模型的计划。能够推知,没有什么能阻挠你的模型依据子词(subword)进行猜测或许与你的 token 化计划(比方将你想要保留成一个 token 的缩略词分隔)各走各路。从作用上讲,这会引进一类新的过失,你在评价模型时需求考虑到这一点。

当然,这一问题也存在处理计划/补偿办法。将 B-I-O 计划运用于你的模型是有协助的,由于这能鼓励模型明确地学习词的鸿沟。学习线性的 CRF 或运用波束解码器也有助于缓解这一问题。

针对字符级模型所能处理的问题的其它处理计划

正如咱们之前说的那样,挑选字符或词需求权衡,但两者之间也存在一个接连规划。有些办法集中了两者的优势,但或许也会有自己的缺陷。这一节咱们将看看其间一些办法,并谈论一下它们的相对优势和缺陷。

运用大词汇库

在输入方面,字符级模型处理的首要问题是处理恣意巨细的大词汇库的才能,包含对拼写过错和其它人类文本过失的抗性。常用的办法有两种,但或许还有一些咱们还不知道的办法。

有一类嵌入技能是用于在嵌入预练习进程中处理子词单元的。运用这些技能的最前期论文之一是《Neural Machine Translation onaughtyamericaf Rare Words with Subword Units》,其开篇写道:

神经机器翻译(NMT)模型一般用于处理固定巨细的词汇库,但翻译是一个敞开词汇库的问题。……在这篇论文中,咱们引进了一种更简略且更高效的办法,让 NMT 模型能够经过将稀有和不知道的词编码成子词单元的序列来履行敞开词汇库的翻译。这依据这样一个直觉:不同的词类别能够经过比词更小的单位进行翻译,比方姓名(经过字符层面的仿制或转写)、复合词(经过翻译成分)、同源词和借词(经过语音和形状改换)。

这一类型的体系包含 Facebook 的 fastText、谷歌的 SentencePiece 和 SpaCy 的 HashEmbed(其依靠于 Bloom Embedding)。

咱们的内部研讨发现这些体系很令人懊丧。咱们常常需求处理有丰厚形状或范畴的言语,其间单个字符都或许在语句中有不同的意义。在这些事例中,子词嵌入会遗落某些所需的东西。

Primer.ai 的 Leonard Apeltsin 曾写过一篇关于俄语 NLP 的文章:https://primer.ai/blog/Russian-Natu飓风猪ral-Language-Proces赖诗滢sing/,其间,他在经过 RusVectors 构建的嵌入空间中查找了与词 Vodka 最近的词。RusVectors 是运用有关俄语形状学的常识构建的,这与 FastText 的状况不同。作用很有意思:

与 Vodka 最近邻的 RusVectors

与 Vodka 最近邻的 FastText

与 Vodka(已包含弯曲化)最近邻的 FastText

结合词嵌入与字符表征

另一个特别引进重视的办法是既输入词嵌入,又处理每个词的字符,然后再将处理作用与对应的词向量连接起来。

字符与词相结合,来自《Named Entity Recognition with Bidirectional LSTM-CNNs》

就词的形状而言,这种办法好像是在子词单元上的改善王林,字符级NLP好坏分析:在某些场景中比词向量更好用,谶。由于没有事前承认子词单元是什么,模型能够自由地学习「词」的最优表征办法。

下降 softmax 的本钱

这些办法自身都没有缓解 softmax 层较大的问题,而咱们能够看到这个问题常常是网络的功能瓶颈。一般来说,咱们的中心 NLP 使命并不需求大的 softmax,但咱们的确想要联合练习或预练习一个言语模型来提高咱们的模型的功能和数据功率。

这一问题的处理计划分为两类。榜首类是以某种更核算友爱的办法近似 softmax。Sebastian Ruder 在他的博客中对 softmax 近似办法进行了超卓的介绍:http://ruder.io/word-embeddings-softmax/

第二类是经过寻觅代替方针来绕过 softmax。来自 Spacy 的 Matt Ho悚然候选者nnibal 一直在尽力将这类办法参加 Spacy 库,在相关的一个 GitHub 问题中,他写道:

我的处理计划则是载入一个预练习的向量文件,然后运用向量-空间作为方针。这意味着咱们仅需求猜测为每个词猜测一个 300 维的向量,而不是企图在 10000 个 ID 等事物上进行 softmax。这还意味着咱们能够学习十分大的词汇库,这很能让人满足。

不幸的是,这项技能现在的作用并不好,Matt 给出了记载:https://github.com/honnibal/spacy-pretrain-polyaxon#experiment-2-ontonotes-ner-fasttext-vectors

该范畴另一项风趣的作业是近期的《Semi-Supervised Sequence Modeling with Cross-View Training》:

因而,咱们提出了 Cross-View Training(CVT),这是一种半监督学习算法,可混合运用有标示和无标示数据来提高 Bi-LSTM 语句编码器的表征。在有标示的样本上,咱们运用规范的监督学习。在无标示的样本上,CVT 会教能看到输入的受限视角(比方语句的一部分)的辅佐猜测模块匹配能看到完好输入的整个模型的猜测。由于辅佐模块与完好模型同享中心表征,所以这反过来又能改善整个模型。

简略来说,这项技能假定你有一些有标示数据和许多无标示数据。你能够在有标示的数据批和无标示的数据批之间切换。在有标示的数据批上,网络按一般办法练习。在无标示的数据批上,仅有一部分输入的「辅佐网络」会测验猜测整个模型会依据整个输入猜测出什么作用。由于每个辅佐网络只能看到输入的一个不同的部分,由于每个辅佐网络都有必要学习补偿缺失的部分。但由于辅佐网络和主网络的权重是同享的,因而整个模型都能从中获益。要害的是,从 softmax 的视点看,在辅佐过程核算的丢失是每个网络猜测的 KL 间隔(较小的 softmax),而不是在整个词汇库上核算得到的。

总结

文章挺长,这儿咱们简略总结一下。字符级模型能处理词级模型的一些问题。值得提及的是,它们让咱们能够处理简直恣意大的词汇库,并让预练习或联合练习言语模型的本钱降至可接受的规划。虽然有这些草木之心护肤本相曝光潜力,它们99核工厂在实践中的作用还并不明亮。咱们看到了 Andrej Karpathy 和 OpenAI 在字符级言语模型上的研讨作用,也才智了 DeepMind 的字符级翻译体系。这些研讨标明字符级模型能够了解文本中的语义。

咱们也介绍了字符级模型的一些缺陷,包含有用序列规划的倍数添加、字符中固有意义的缺少以及它们与咱们想要完结的实践言语方针的间隔。

最终,咱们介绍了一些字符级模型的代替办法,咱们看到有一些嵌入办法运用了子词单元以及补偿缺陷的模型架构。咱们还看到有些办法企图绕过运用 softmax 办法进行言语建模的本钱——不管是经过近似 softmax 自身,仍是略微修正言语建模使命。

在 LightTag,字符级模型为咱们供给了很好的效劳——它们可习惯多个言语范畴,练习轻松且快速,并且没有需求办理的外部依靠。和日子中的全部工作相同,挑选你的模型所处理的根本单位是一个权衡。已然你现已读到了这儿,信任关于怎么在你自己的用例中怎么挑选,你现已有了自己的观念。

原文链接:https://www.lighttag.io/blog/character-level-NLP/

本文为机器之心编译,转载请联络本大众号取得授权。

开发 人类 技能
声明:该文观念仅代表作者自己,搜狐号系信息发布平手牵手王雪台,搜狐仅供给信息存储空间效劳。
文章版权及转载声明:

作者:admin本文地址:http://www.changjiangzy.cn/articles/566.html发布于 2周前 ( 04-04 01:26 )
文章转载或复制请以超链接形式并注明出处竞技宝app安卓下载_竞技宝app官方下载_竞技宝app二维码