当前位置:   article > 正文

Keras简单情感建模分析_情感分析建模

情感分析建模
  1. from tensorflow.keras.layers import Dense, Flatten, Input
  2. from keras.layers.embeddings import Embedding
  3. from tensorflow.keras.models import Model
  4. from tensorflow.keras.preprocessing.sequence import pad_sequences
  5. from tensorflow.keras.preprocessing.text import one_hot
  6. import numpy as np
  7. def pre():
  8. docs = ['Well done!',
  9. 'Good work',
  10. 'Great effort',
  11. 'nice work',
  12. 'Excellent!',
  13. 'Weak',
  14. 'Poor effort!',
  15. 'not good',
  16. 'poor work',
  17. 'Could have done better.']
  18. # 1表示正面评价,0表示负面评价
  19. labels = np.array([1, 1, 1, 1, 1, 0, 0, 0, 0, 0])
  20. # one - hot对其进行encode
  21. vocab_size = 50 # 将词汇表大小设置为50,大大减少了hash函数的冲突概率
  22. encoded_docs = [one_hot(d, vocab_size) for d in docs] # one-hot编码到[1,n],不包括0
  23. print('encoded_docs: ', encoded_docs)
  24. # 我们用padding对编码进行填充,保证它们的长度一致,这里将长度设置为4
  25. max_length = 4
  26. # padding填充到最大的词汇长度(此处为4),用0向后填充(post)
  27. padded_docs = pad_sequences(encoded_docs, maxlen=max_length, padding='post') #序列预处理和序列填充
  28. print('padded_docs: ', padded_docs)
  29. return padded_docs,labels
  30. def net():
  31. vocab_size= 50
  32. max_length = 4
  33. input = Input(shape=(4,)) # input为一维数组,里面有4个元素
  34. # 第一个参数表示input_dim文本数据中词汇的取值可能数
  35. # 第二个参数表示output_dim嵌入向量空间的大小(为每个单词定义了这个层的输出向量的大小)
  36. # 第三个参数表示input_length,输入序列的长度(一次输入带有的词汇个数)
  37. # 嵌入层的输出是4个向量,每个向量8
  38. x = Embedding(vocab_size, 8, input_length=max_length)(input) # 这一步参数两为50×8(包含50个词的词汇表、一个8维的向量空间,每个词包含4个词)
  39. # 将其展平为一个32个元素的向量,以传递给Dense输出层
  40. x = Flatten()(x) # Embedding层的输出是一个 4×8 矩阵,它被Flatten层压缩为一个 32 元素的向量。
  41. x = Dense(1, activation='sigmoid')(x)
  42. model = Model(inputs=input, outputs=x) #使用Keras的另外一种建模方式,不是Sequence
  43. model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['acc']) #优化设置
  44. print(model.summary())
  45. padded_docs,labels=pre()
  46. # 拟合模型
  47. model.fit(padded_docs, labels, epochs=100, verbose=0)
  48. # 评估模型
  49. loss, accuracy = model.evaluate(padded_docs, labels, verbose=0)
  50. print('Accuracy: %f %%' % (accuracy * 100))
  51. # test一下经过embedding层之后,模型的拟合能力。
  52. test = one_hot('good', 50)
  53. padded_test = pad_sequences([test], maxlen=max_length, padding='post')
  54. #输入序列test,最大长度是maxlen,padding['pre','post'],post是指后面添加,pre是指前面开始,默认前面,truncating=post从后面开始,truncating=pre表示从头开始
  55. print(model.predict(padded_test))

这里需要将pad_sqquences这个函数解释一下:

tf.keras.preprocessing.sequence.pad_sequence(
                                             sequences, maxlen=None,dtype='int32', padding='pre'
                                             truncating='pre',value=0.0 )
 

测试一下:

  1. from tensorflow.keras.preprocessing.sequence import pad_sequences
  2. x = [[3],[5,6],[7,8,9]]
  3. y= pad_sequences(x) #默认输出[3,3] ,不够就补零
  4. print(y)
  5. y1= pad_sequences(x,maxlen=2) #最大长度是2
  6. print(y1)
  7. y2= pad_sequences(x,padding='post') #从后面向前补零
  8. print(y2)
  9. y3= pad_sequences(x,padding='pre') #从前向后面补零
  10. print(y3)
  11. y4= pad_sequences(x,maxlen=2,truncating="post") #从后面向前保留
  12. print(y4)
  13. y5= pad_sequences(x,maxlen=2,truncating="pre") #从前向后面保留
  14. print(y5)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/秋刀鱼在做梦/article/detail/769845
推荐阅读
相关标签
  

闽ICP备14008679号