赞
踩
自然语言处理(NLP)是机器学习的应用之一,用于分析、理解和生成自然语言,以便人类与计算机,人类与人类更好的交流。自然语言处理按照任务类型可以分为分类、匹配、翻译、结构化预测、与序贯决策过程这五类。
本篇参考自TensorFlow官方文档,旨在让大家能够通过简单的代码,快速上手自己的第一个nlp模型
使用annaconda傻瓜化安装,不会的,可以参考这篇
TensorFlow安装(国内源,速度飞快)
已经安装的,跳过这一步
机器学习之所以看上去可以解决很多复杂的问题,是因为它把这些问题都转化为了数学问题。⽽ NLP 也是相同的思路,⽂本都是⼀些「⾮结构化数据」,我们需要先将这些数据转化为「结构化数据」,结构化数据就可以转化为数学问题了,⽽分词就是转化的第一步。
本篇先以英文为例,中文分词后续会介绍
例:
# 导包
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras.preprocessing.text import Tokenizer
from tensorflow.keras.preprocessing.sequence import pad_sequences
# 句子列表
d=[
'i love my dog',
'i love my cat',
'you love me!'
]
tokenizer=Tokenizer(num_words=100) # 实例化一个分词器对象 参数:保留最大单词数,超出则忽略
tokenizer.fit_on_texts(d) # 开始分词 传入一个列表
word_index=tokenizer.word_index # 使用分词器的word_index方法获得分词索引
print(word_index) # 打印分词索引
输出:
从输出结果,我们可以看到:
在 TensorFlow 中,texts_to_sequences
是将文本转换为序列的函数。它可以将一个包含多个句子的文本数据集转换为一个由单个整数组成的序列,每个整数代表该句子在数据集中的位置。
具体来说,texts_to_sequences
函数接受两个参数:
input
:表示输入的文本数据集,通常是一个二维的字符串矩阵,每行代表一个句子。seq_length
:表示每个句子的长度,如果不指定,则默认为最大句子长度。例:
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras.preprocessing.text import Tokenizer
from tensorflow.keras.preprocessing.sequence import pad_sequences
d=[
'i love my dog',
'i love my cat',
'you love me!'
]
tokenizer=Tokenizer(num_words=100,oov_token='<OOV>') # 实例化一个分词器对象 参数:保留最大单词数,超出则忽略 oov是没有见过的词
tokenizer.fit_on_texts(d) # 开始分词 传入一个列表
word_index=tokenizer.word_index # 使用分词器的word_index方法获得分词索引
sequences=tokenizer.texts_to_sequences(d) # 使用分词器的texts_to_sequences方法将句子转换为数字序列
print(word_index)
print(sequences)
输出:
为什么要填充,我们看以下几个句子:
我们可以看到,句子的长度是不一样的,这样,转换序列后的长度也肯定是不一样的!
如果数据长度不一致,我们无法进行后续的训练,所以,需要处理成一样的。
例:
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras.preprocessing.text import Tokenizer
from tensorflow.keras.preprocessing.sequence import pad_sequences
d=[
'i love my dog',
'i love my cat',
'do you think my dog is amazing!'
]
tokenizer=Tokenizer(num_words=100,oov_token='<OOV>') # 实例化一个分词器对象 参数:保留最大单词数,超出则忽略 oov是没有见过的词
tokenizer.fit_on_texts(d) # 开始分词 传入一个列表
word_index=tokenizer.word_index # 使用分词器的word_index方法获得分词索引
print("分词索引:")
print(word_index)
sequences=tokenizer.texts_to_sequences(d) # 使用分词器的texts_to_sequences方法将句子转换为数字序列
print("句子序列:")
print(sequences)
pad=pad_sequences(sequences) # 使用pad_sequences对序列后的数据进行长度一致填充
print("填充处理后的句子序列:")
print(pad)
输出:
可以看到,填充处理后的长度,是一致的。
且长度以所有句子最长那个为准。
我们也可以定义填充函数pad_sequences()
的参数:
如:pad_sequences(d, padding='post')
下一篇我们一起搭建一个最简单的nlp模型
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。