需要了解SubwordTextEncoder标记器背后的概念

0 人关注

我目前正在使用转化器模型来完成我的NLP任务。我正在研究转化器模型 解释 from Tensorflow.org.

我理解整个模型背后的概念,但我在标记化部分有点卡壳。

标记化使用SubwordTextEncoder API,我们需要首先建立词汇表,然后用标记集替换句子(以便被模型理解),我们使用其.encode()函数。

当我看了tensorflow网站上给出的用法后,我发现这种编码方式对自我注意有什么帮助,有点令人费解。

为了验证我对其实施的理解,我用2个句子创建了自己的词汇--['我叫xyz.我在做实验'],如下所示

my_tokenizer = tfds.deprecated.text.SubwordTextEncoder.build_from_corpus(
   (ex for ex in ['My name is xyz. I am doing experiments.']), target_vocab_size=258)

在这之后,我试着对几个句子进行编码。

First,

Code -->

tokenized_string = my_tokenizer.encode('I am doing xyz.')
for ts in tokenized_string:
  print ('{} ----> {}'.format(ts, my_tokenizer.decode([ts])))

Output -->

8 ----> I 
6 ----> am 
5 ----> doing 
1 ----> xyz
56 ----> .

另一个字符串是--

Code -->

tokenized_string = my_tokenizer.encode('very nice.')
for ts in tokenized_string:
  print ('{} ----> {}'.format(ts, my_tokenizer.decode([ts])))

Output -->

128 ----> v
111 ----> e
124 ----> r
131 ----> y
42 ---->  
120 ----> n
115 ----> i
109 ----> c
111 ----> e
56 ----> .

谁能告诉我这对实现更好的自我关注有什么帮助?或者这是执行标记化的老方法,因为我可以看到这个特定的API即将被废弃?

python
tensorflow
deep-learning
nlp
transformer-model
Pallavi
Pallavi
发布于 2021-01-08
1 个回答
Andrey
Andrey
发布于 2021-01-08
已采纳
0 人赞同

基本上,你有三种选择来对你的文本数据进行编码。

  • based on characters (small vocabulary)
  • based on words (huge vocabulary)
  • based on subwords (vocabulary of any predefined size).
  • 理想情况下,最好的选择是第二种,因为每个词都有其语义,可以通过NN学习。但你的词汇量可能太大,除非你的模型是在一个小领域中工作。神经网络只能有效地处理大约3万个词组。