Embedding词向量

Embedding

一种将离散变量转为连续变量的方式。字面理解-嵌入语义空间到向量空间的映射
两种应用

  • 1.NLP word embedding
  • 2.categories data entity embedding

Embedding 有三个主要目的

  • 在embedding 空间中查找最近邻,这可以很好的用于根据用户的兴趣来进行推荐
  • 作为监督学习任务的输入
  • 用于可视化不同离散变量之间的关系
Onehot

缺点:
1.对于多类型的类别变量,变换后向量维度太大,过于稀疏
2…映射之间完全独立,并不能表示出不同类别之间的关系
【Onehot无法考虑语义间的相互关系,但是Embedding的训练需要借助Onehot】
表示类别变量的理想解决方案,则是我们是否可以通过较少的维度表示出每个类别,并且还可以以一定的表现出不同类别变量之间的关系,这也是Embedding出现的目的.

keras.layers.Embedding(input_dim, output_dim, input_length)

参数

  • input_dim:这是文本数据中词汇的取值可能数。例如,如果您的数据是整数编码为0-9之间的值,那么词汇的大小就是10个单词;
  • output_dim:这是嵌入单词的向量空间的大小。它为每个单词定义了这个层的输出向量的大小。例如,它可能是32或100甚至更大,可以视为具体问题的超参数;
  • input_length:这是输入序列的长度,就像您为Keras模型的任何输入层所定义的一样,也就是一次输入带有的词汇个数。例如,如果您的所有输入文档都由1000个字组成,那么input_length就是1000。
Go straight to code!
from tensorflow.keras.layers import Dense,Flatten, Embedding,Input
from tensorflow.keras.models import Model
from tensorflow.keras.preprocessing import sequence,text
from tensorflow.keras.metrics import binary_accuracy
from tensorflow.keras.preprocessing.sequence import pad_sequences
from tensorflow.keras.preprocessing.text import one_hot
import numpy as np

# define documents
docs = ['Well done!',
        'Good work',
        'Great effort',
        'nice work',
        'Excellent!',
        'Weak',
        'Poor effort!',
        'not good',
        'poor work',
        'Could have done better.']

# define class labels
labels = np.array([1, 1, 1, 1, 1, 0, 0, 0, 0, 0])

max_length=4
size=50
encode_docs=[one_hot(d,size) for d in docs]

encode_docs

paded_docs=pad_sequences(encode_docs,maxlen=max_length,padding='post')

在这里插入图片描述

input=Input(shape=(4,))
x=Embedding(size,8,input_length=max_length)(input)

x=Flatten()(x)
x=Dense(1,activation='sigmoid')(x)
model=Model(inputs=input,outputs=x)
model.compile(optimizer='adam',loss='binary_crossentropy',metrics=['acc'])
model.summary()

在这里插入图片描述

model.fit(paded_docs,labels,epochs=100,verbose=0)
loss,accuracy=model.evaluate(paded_docs,labels,verbose=0)

在这里插入图片描述

预测
test=one_hot('hei',50)
padded_test=pad_sequences([test],maxlen=max_length,padding='post')
padded_test
#array([[23,  0,  0,  0]])
model.predict(padded_test)
#array([[0.53474814]], dtype=float32)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Elvis_hui

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值