NLP初学者的基础知识

591 阅读3分钟

自然语言处理(NLP)是指 理解、分析、处理和提取的能力。 意思的能力。 人类语言.为了更深入地了解NLP,我们需要考虑 词语如何被计算机处理.

为了更好地理解这一点,让我们来探讨一下以下概念 标记化.

标记化: 将文本分解成较小的单位(如字母、单词、短语、字符),供计算机处理。

字母可以通过使用称为ASCII的编码方案用数字表示。然而,如果我们用 ,进行标记化,我们可能有 相同的标记列表 两个或更多的词。因此,这使得 很难理解一个词的情感 并且不能表达句子的意思。

image.png

通过字母进行标记时**,** STOPPOST这两个词有相同的编码,只是顺序不同,这使得 很难理解一个词的情感*.因此,最好是对单词进行编码,而不是字母。*

通过单词进行标记,允许计算机理解和处理文本 以一种更有意义和更有背景的方式来理解和处理文本.

要做到这一点,请按照下面的代码,后面的注释来理解代码的含义:-

# import tokenizer from TensorFlow Kerasfrom tensorflow.keras.preprocessing.text import Tokenizer
sentences = [    'i love my dog',    'I, love my cat',    'You love my dog!']
Output: {'love': 1, 'my': 2, 'i': 3, 'dog': 4, 'cat': 5, 'you': 6}

符号化器足够聪明,可以发现带有标点符号的相同的词,而不是为创建一个新的符号**!**

如何对一个句子进行标记化:序列化

''将句子变成数据。''

我们将通过以下方式使标记化器进入下一个步骤 从句子中创建数字序列 并使用工具来处理它们,以便为训练神经网络做好准备。

标记器支持一个名为text_to_sequences() 的方法,它为我们完成了大部分的工作。

它创建了每个句子中的标记的序列。

import tensorflow as tffrom tensorflow import kerasfrom tensorflow.keras.preprocessing.text import Tokenizer
sentences = [    'I love my dog',    'I love my cat',    'You love my dog!',    'Do you think my dog is amazing?']
Output:[[4, 2, 1, 3], [4, 2, 1, 6], [5, 2, 1, 3], [7, 5, 8, 1, 3, 9, 10]]

当神经网络需要对文本进行分类,但文本中有些词以前从未见过时,会发生什么?

这可能会使标记器感到困惑。所以,你能想象你需要一个巨大的word_index 来处理那些不在训练集中的句子。

这可以通过使用**标记属性** 来处理,并将其设置为你不希望在语料库中看到的东西。标记化器将 创建一个标记为其创建一个标记,并 替换该词的不存在的词。

''的编码是 1*.''*

tokenizer = Tokenizer(num_words = 100, oov_token="<OOV>")tokenizer.fit_on_texts(sentences)word_index = tokenizer.word_index
sequences = tokenizer.texts_to_sequences(sentences)print(sequences)
Output:[[5, 3, 2, 4], [5, 3, 2, 7], [6, 3, 2, 4], [8, 6, 9, 2, 4, 10, 11]]

我们仍然会失去一些意义,但会少很多。保持序列的长度与句子的长度相同是有帮助的。

当句子的长度不同时,该怎么办?

这个问题的解决方案是RaggedTensorPadding是比较简单的解决方案。

填充:

我们通过语料库来填充序列,它通过在前面填充0来确保所有的句子都有同样大小的序列。在填充中,默认情况下 ,它挑选了 最长的句子的长度*.* ''填充值为 默认为0*.''*

Padding = "post" / "pre"

# Try with words that the tokenizer wasn't fit totest_data = [    'i really love my dog',    'my dog loves my manatee']
test_seq = tokenizer.texts_to_sequences(test_data)print("\nTest Sequence = ", test_seq)
Output:Test Sequence =  [[5, 1, 3, 2, 4], [2, 4, 1, 2, 1]]
Padded Test Sequence: (default)[[0 0 0 0 0 5 1 3 2 4] [0 0 0 0 0 2 4 1 2 1]]

当句子的长度超过指定的最大长度时会发生什么?

使用截断 参数来截断句末或句首的单词。

Truncating = "post" / "pre"

# add padding : pre by defaultpadded = pad_sequences(test_seq, truncating="post", maxlen=6)print("\nPadded Test Sequence with Truncating: ")print(padded)
Output:Padded Test Sequence with Truncating: [[0 5 1 3 2 4] [0 2 4 1 2 1]]