【问题标题】:I cannot understand the skipgrams() function in keras我无法理解 keras 中的 skipgrams() 函数
【发布时间】:2018-10-25 03:02:41
【问题描述】:

我正在尝试使用以下代码来理解 keras 中的skipgrams() 函数

from keras.preprocessing.text import *
from keras.preprocessing.sequence import skipgrams

text = "I love money" #My test sentence
tokenizer = Tokenizer()
tokenizer.fit_on_texts([text])
word2id = tokenizer.word_index
wids = [word2id[w] for w in text_to_word_sequence(text)]
pairs, labels = skipgrams(wids, len(word2id),window_size=1)

for i in range(len(pairs)): #Visualizing the result
    print("({:s} , {:s} ) -> {:d}".format(
          id2word[pairs[i][0]], 
          id2word[pairs[i][1]], 
          labels[i]))

对于“我爱钱”这句话,我希望以下 (context, word) 对与 keras 中定义的窗口大小 = 1:

([i, money], love)
([love], i)
([love], money)

根据我在 Keras 文档中的理解,如果 (word, word in the same window) 它将输出 1 标签,如果 (word, random word from the vocabulary) 输出标签 0。

由于我使用 1 的窗口大小,我希望以下对的标签为 1:

(love, i)
(love, money)
(i, love)
(money, love)

以下对的标签为0

(i, money)
(money, i)

然而,代码给了我这样的结果

(love , i ) -> 1
(love , money ) -> 1
(i , love ) -> 1
(money , love ) -> 1    
(i , i ) -> 0
(love , love ) -> 0
(love , i ) -> 0
(money , love ) -> 0

(love , i )(money , love ) 对如何同时标记为 0 和 1? 还有(i, money)(money, i) 的结果在哪里?

我是否错误地理解了 0 的标签都超出了我的预期?不过我好像很了解1这个标签。

【问题讨论】:

    标签: python machine-learning nlp keras text-processing


    【解决方案1】:

    那是因为您的词汇量非常小:它与("love", "i", "money") 单词相同。这就是为什么“词汇表中的随机词”总是来自同一个句子,而且来自同一个上下文。

    作为一个实验,这样做:

    text = "I love money" #My test sentence
    text2 = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, " \
            "sed do eiusmod tempor incididunt ut labore et dolore magna aliqua"
    tokenizer = Tokenizer()
    tokenizer.fit_on_texts([text, text2])
    ...
    

    基本上,让分词器知道文本中有更多单词。你应该看到现在反例大多是从第二句生成的,例如:

    (i , sit ) -> 0
    (love , i ) -> 1
    (love , money ) -> 1
    (love , ut ) -> 0
    (love , sit ) -> 0
    (money , consectetur ) -> 0
    (money , love ) -> 1
    (i , love ) -> 1
    

    【讨论】:

    • 谢谢!我现在明白了。
    • 附带问题:在skiagram词对生成过程中创建负样本有什么意义?
    猜你喜欢
    • 2019-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-25
    • 2021-04-23
    相关资源
    最近更新 更多