【问题标题】:Interpreting the output tokenization of BERT for a given word解释给定单词的 BERT 输出标记化
【发布时间】:2021-06-25 04:48:36
【问题描述】:
from bert_embedding import BertEmbedding
bert_embedding = BertEmbedding(model='bert_12_768_12', dataset_name='wiki_multilingual_cased')
output = bert_embedding("any")

我需要澄清 mBERT 嵌入的输出。我知道 WordPiece 标记化用于分解输入文本。我还观察到,在提供一个单词(比如“any”)作为输入时,输出的长度等于输入中的字符数(在我们的例子中为 3)。 output[i] 是一个列表元组,其中第一个列表包含位于第 ith 位置的字符,其前后有“未知”标记作为数组中的不同元素。紧随其后的是三个(= 输入字的长度)数组(嵌入),每个数组的大小为 768。为什么输出似乎是按字符标记的(而不是单词标记)?

还发现当输入在列表中给出时输出形式发生变化:bert_embedding(["any"])。现在的输出是一个以 ['[UNK]', 'state', '[UNK]'] 作为第一个元素的单个元组,后面跟着三个不同的嵌入,可能对应于上面列出的三个标记。

如果我需要为给定的输入词嵌入最后一个子词(不仅仅是最后一个字符或整个词),我该如何访问它?

【问题讨论】:

    标签: python nlp pytorch bert-language-model


    【解决方案1】:

    the code看来,输入应该是一个句子列表,因此['any']

    对于wordpiece,我从未使用过这个库,但可能会尝试更长的单词。我在这里的假设是“any”是一个单词。

    【讨论】:

      【解决方案2】:

      查看了他们的github page。关于输入格式:是的,它应该是一个列表(字符串)。这个特定的实现还提供了令牌(= word)级别的嵌入;因此无法直接检索子词级别的嵌入,尽管它提供了如何从其子词组件中派生词嵌入的选择(通过采用默认的 avg 或采用 sum 或仅最后一个子词嵌入)。请参阅 BERT 的 Hugggingface 接口,以更好地控制嵌入的获取方式,例如来自不同的层并使用哪些操作。

      【讨论】:

        猜你喜欢
        • 2021-12-18
        • 2021-10-19
        • 1970-01-01
        • 1970-01-01
        • 2020-10-08
        • 2015-02-07
        • 2020-11-16
        • 2021-10-06
        • 2020-04-27
        相关资源
        最近更新 更多