我们在创建字典时,字典(word2id)通常的格式都是{word:value},我们自己构造的字典或是torchtext这样的库构建的字典中,整个字典会按照value的顺序来排列,比如说为“小红 是 摸鱼郎”这个句子创建字典,那么情况是:
[0] 小红
[1] 是
[2] 摸鱼郎
而当我们词嵌入的时候,会创建一个[vocab_size,embedding_dim]的矩阵,其中vocab_size就是字典的长度,而在词嵌入之中,会照着每个单词的value值来在这个词向量矩阵中进行索引,所以这就代表着单词的value值是不能超过词表的长度的。
否则就会报如下的错误:
RuntimeError: index out of range: Tried to access index 9 out of table with 5 rows.
新手常见的操作错误就是在原生数据量不大的情况下,采用enumerate的方式来建立字典(词表),这是绝对错误的,因为如果词汇量较少,而单词又在下文中重复出现,就会导致上述的value值大于vocabsize的情况,看一个范例:
import jieba
sentences = ["小红喜欢毛球"