NLP 深度学习中的 N-gram

数据挖掘 神经网络 深度学习 nlp 喀拉斯
2021-09-26 04:10:09

在深度神经网络中使用 word 的 n-gram 是真的吗?

例如,句子列表包含在带有“句子”列的 X_train 数据框中。我以以下方式使用 Keras 的标记器:

tokenizer = Tokenizer(lower=True, split=' ')
tokenizer.fit_on_texts(X_train.sentences)
X_train_tokenized = tokenizer.texts_to_sequences(X_train.sentences)

后来我使用填充:

X_train_sequence = sequence.pad_sequences(X_train_tokenized)

我也使用简单的 LSTM 网络:

model = Sequential()
model.add(Embedding(MAX_FEATURES, 128))
model.add(LSTM(32, dropout=0.2, recurrent_dropout=0.2,
               activation='tanh', return_sequences=True))
model.add(LSTM(64, dropout=0.2, recurrent_dropout=0.2, activation='tanh'))
model.add(Dense(number_classes, activation='sigmoid'))
model.compile(loss='categorical_crossentropy', optimizer = 'rmsprop',
              metrics=['accuracy'])

在这种情况下,tokenizer 执行。在 Keras 文档中:https : //keras.io/preprocessing/text/ 我只看到字符处理,但它不适合我的情况。

我的主要问题:我可以将 n-grams 用于具有深度学习的 NLP 任务(不是必要的情感分析,任何抽象的 NLP 任务)。

事实上,在许多教程或书籍中,我没有看到任何用于文本处理的剩余 n-gram,只有嵌入。

澄清一下:我想考虑的不仅仅是单词,而是单词的组合——我想尝试一下我的任务。

1个回答

从理论上讲,您可以使用 n-gram 对文本序列进行建模。但是有一些很好的理由说明它在教科书中不经常提到。

直观地说,建模序列是在学习 a、b 和 c 之后是 d。因此,如果您的序列是:

“你好,我叫鲍勃,今天真是美好的一天,你好吗?”

从技术上讲,a = “Hello”、“H”还是“Hello,my name is Bob”并不重要。对于您的模型,它只会知道在一件事之后,另一件事来等等。

所以是的,你可以使用 n-gram。但问题是您需要确保 ngram 的拆分方式是有意义的(即“你好,我的”可能比“我的名字是”更糟糕,这可能更频繁地发生)

但别担心,使用 LSTM 的全部意义在于网络的内存部分将模仿使用 n-gram,只要它有助于整体性能。这意味着,如果它需要考虑更多的词来预测下一个词,它会根据你的网络深度进行。