首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我应该如何使用BERT嵌入来进行聚类(而不是对一个受监督的任务的BERT模型进行微调)

我应该如何使用BERT嵌入来进行聚类(而不是对一个受监督的任务的BERT模型进行微调)
EN

Data Science用户
提问于 2020-08-21 02:00:07
回答 2查看 6.3K关注 0票数 8

首先,我想说,我问这个问题是因为我对使用BERT嵌入作为文档特性进行集群感兴趣。我用的是拥抱脸库里的变形金刚。我在考虑平均每个文档的所有单词片段嵌入,这样每个文档都有一个唯一的向量。然后,我将使用这些向量进行聚类。如果你认为这不是一个好主意,或者如果我遗漏了什么或者不理解什么,请随时发表评论。

我看到的问题是,您只使用max_length在拥抱Face库中指定的第一个N标记。如果第一个N标记不是该文档的最佳表示,怎么办?随机选择N个标记不是更好,还是更好地随机选择N个令牌10次?

此外,我认识到使用WordPiece标记器可以代替柠檬化,因此标准的NLP预处理应该更简单。但是,由于我们已经只使用第一个N个标记,如果我们没有消除停止词,那么无用的停止词将出现在第一个N标记中。据我所见,在拥抱脸的例子中,没有人在标记之前做过更多的预处理。

参见下面的标记化示例(来自拥抱面),文档的前64个标记

因此,我在此提出几个问题(请只回答一个问题,或提供我可以阅读的论文或资源的参考资料):

  1. 为什么选择第一个N标记,而不是随机选择? 1a)有什么东西可以随机地选择N个令牌吗?
  2. 与问题1类似,是否有更好的选择令牌的方法?也许用TF-以色列国防军在代币上至少排除某些无用的标记?
  3. 在使用字片标记器之前,人们通常会使用更多的预处理吗?
  4. max_length的选择在多大程度上影响性能?
  5. 为什么拥抱面库中有512最大长度的限制?为什么不直接使用最长文档的长度呢?
  6. 对WordPiece嵌入进行平均处理以获得矩阵(如果您想进行集群)是个好主意吗?
  7. 使用BERT嵌入来获取可以集群的文档的特性以便找到类似的文档组是个好主意吗?还是有其他更好的方法?

原件:'Trump tries to smooth things over with GOP insiders. Hollywood, Florida (CNN) Donald Trump\'s new delegate guru told Republican Party insiders at a posh resort here on Thursday that the billionaire front-runner is recalibrating the part "that he\'s been playing" and is ready

令牌化:

代码语言:javascript
复制
['[CLS]',
 'trump',
 'tries',
 'to',
 'smooth',
 'things',
 'over',
 'with',
 'go',
 '##p',
 'insider',
 '##s',
 '.',
 'hollywood',
 ',',
 'florida',
 '(',
 'cnn',
 ')',
 'donald',
 'trump',
 "'",
 's',
 'new',
 'delegate',
 'guru',
 'told',
 'republican',
 'party',
 'insider',
 '##s',
 'at',
 'a',
 'po',
 '##sh',
 'resort',
 'here',
 'on',
 'thursday',
 'that',
 'the',
 'billionaire',
 'front',
 '-',
 'runner',
 'is',
 'rec',
 '##ali',
 '##bra',
 '##ting',
 'the',
 'part',
 '"',
 'that',
 'he',
 "'",
 's',
 'been',
 'playing',
 '"',
 'and',
 'is',
 'ready',
 '[SEP]']
EN

回答 2

Data Science用户

回答已采纳

发布于 2020-08-21 09:10:07

以下是答案:

  1. 在序列建模中,我们期望一个句子是有序的序列,因此我们不能采用随机词(不像袋子中的单词,我们只是为单词而不是真正的顺序而烦恼)。例如:一包字:“我吃冰淇淋”和“冰淇淋吃我”是一样的,而对于把整个句子当作有序序列来处理的模型则不是这样。因此,您不能以随机顺序选择N个随机单词。
  2. 选择令牌是依赖于模型的。如果停止词和其他内容(如符号、数字等)比信息更有噪音,则可以随时对其进行预处理。
  3. 我要澄清的是,符号化和文字符号化是不一样的。例如,在柠檬化中,“玩”和“玩”被命名为“玩”。但如果是文字符号化,根据词汇表的不同,很可能会分为"play"+"##ing“或"play"+"ed”。因此,保存了更多的信息。
  4. max_length的选择应该是最优的,这样你们中的大多数句子都会被充分考虑。(也就是说,在标记化之后,大多数句子应该比max_length短)。有一些模型考虑完全序列长度。示例:通用语句编码器( use )、Transformer等。但是,请注意,您也可以使用更高的批处理大小和较小的max_length,这使得培训/微调速度更快,有时会产生更好的效果。
  5. 预训练模型用MAX_LEN为512进行训练。这是模型的局限性。
  6. 特别是BERT,正如本文所声称的,对于[CLS]令牌的分类嵌入是足够的。由于它基于注意的模型,[CLS]令牌将捕获整个句子的组成,因此就足够了。但是,您也可以对所有令牌的嵌入进行平均值。我尝试过这两种方式,在我的大多数作品中,所有文字标记的平均值已经产生了更高的性能。另外,一些工作甚至建议您从最后4个层中获取平均嵌入。这只是一个设计上的选择。
  7. 使用句子嵌入通常是可以的。但是,你需要用文献来验证。总会有更好的技术。另外,还有一些特定于句子嵌入的模型(使用就是这样的模型),您可以检查它们。
票数 8
EN

Data Science用户

发布于 2020-08-25 14:47:01

由于你的许多问题已经得到回答,我只能与你分享我个人的经验:

( 7)使用BERT嵌入来获取可以集群的文档的特性以便找到类似的文档组是一个好主意吗?还是有其他更好的方法?

我认为一个好主意是从更简单的方法开始。特别是在处理长文档时,依赖于向量者(如tf-idf )可以获得更好的结果,同时具有复杂度较低和通常更易于解释的优点。

我刚刚完成了一个较长文档的集群练习,并经历了类似的思考过程和实验。最后,我用tf-idf特性获得了最好的结果。我使用的管道包括:

  1. 处理数据(停止字删除、引线等)
  2. 适合tf-以色列国防军矢量器(或者你也可以尝试doc2vec)。
  3. 运行某种降维算法(在我的例子中是PCA)。
  4. (K-均值)聚类--评估最优聚类数。

如果您渴望在下游任务中使用包含长文档的BERT,则可以查看以下两种主要方法:

截断方法

  • 头(头512个代币)
  • 只尾(最后512个代币)
  • head+tail

例如,根据您的领域,如果每个文档都有一个执行摘要,那么只有尾才能提高结果。

层次化方法

  • 平均池
  • 最大池

如前所述,这里截断方法适用于BERT模型(令牌)的输入,而分层方法适用于Bert模型的输出(包括)。

票数 6
EN
页面原文内容由Data Science提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://datascience.stackexchange.com/questions/80595

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档