深度学习实战:语句的相关度分析(LSTM)

深度学习实战:语句的相关度分析(LSTM)

数学原理:

嵌入层:
X(嵌入向量)=V*v(索引向量)

LSTM层:
i=Wxi+Uhi+b
f=Wxi+Uhi+b
o=Wxi+Uhi+b
c=Wxi+Uhi+b

输出层:
分别将左右两个句子进过模型后得到的向量使用曼哈顿距离 exp(−||se− se||)∈ [0, 1]来衡量相似性度,进行优化。

其中

1:V是索引向量的系数,(1)词汇表的大小(Vocabulary Size):假设词汇表v的大小是 L,嵌入矩阵需要为 L 个不同的词汇提供嵌入表示。(2)嵌入维度(Embedding Dimension):这是每个词汇的嵌入向量的维度,通常表示为 d。V的大小就是L*d。令len(vocabulary)是词汇表的长度

2:LSTM层的输入是嵌入向量,而不是索引向量。xi属于X,代表的是嵌入后的一个向量,X的大小为input_dim(L*d)。故而xi的模长为embeding_dims,xi的系数W的size为=[ hidden_size,embeding_dims]

3:embeding_dims是每个tokens对应的维度,即嵌入向量的维度。每个词汇将被表示为一个 embedding_dim 维的向量。

4:hidden_size代表的是每一个时间步的维度,即,每一个embeding_dims里的分量都进入一个为hidden_size长的隐藏层。

5:hi是上一个时间步的值,模长为hidden_size,它对应的系数为U,模长也为hidden_size。

所以最终需要训练的参数为:
嵌入层:len(vocabulary)*embeding_dims
LSTM层:对每一个xi,都有4*(hidden_size*embedding_dim (系数W)+ hidden_size*hidden_size (系数U)+hidden_size)。因而总共需要再乘上len(vocabulary)的大小

理论原理:

语句的相关度是指,两个句子在语言,结构上的相似程度。为了实现语句的相关度分析,需要我们把控语句的整体含义,所以我们需要将每一个句子里的词语,按照语句的顺序,全部关联起来。例如:How can I be a good geologist?,需要把how,be,geologist,等里面所有的词语全部联系起来才能理解语句的意思。同时与句子,What should I do to be a great geologist?进行相关度分析。
在训练的过程中,示例1:How can I be a good geologist?,What should I do to be a great geologist?,1(语句含义一样)
模型会学习训练集的特征来更新模型的参数,(当成立示例1时的满足的参数),当训练集足够大时,模型的预测性好,泛化能力强。

模型的流程图

数据处理:

  1. 先对数据进行正则化处理,删除句子里的“无用词”以减少其对理解句子含义的难度

train_df = pd.read_csv('train.csv')
test_df = pd.read_csv('test.csv')
print(len(train_df), len(test_df))
train_df.head()

stops = set(stopwords.words('english'))


def preprocess(text):
    # input: 'Hello are you ok?'
    # output: ['Hello', 'are', 'you', 'ok', '?']
    text = str(text)
    text = text.lower()

    text = re.sub(r"[^A-Za-z0-9^,!.\/'+-=]", " ", text)  # 去掉其他符号
    text = re.sub(r"what's", "what is ", text)  # 缩写
    text = re.sub(r"\'s", " is ", text)  # 缩写
    text = re.sub(r"\'ve", " have ", text)  # 缩写
    text = re.sub(r"can't", "cannot ", text)  # 缩写
    text = re.sub(r"n't", " not ", text)  # 缩写
    text = re.sub(r"i'm", "i am ", text)  # 缩写
    text = re.sub(r"\'re", " are ", text)  # 缩写
    text = re.sub(r"\'d", " would ", text)  # 缩写
    text = re.sub(r"\'ll", " will ", text)  # 缩写
    text = re.sub(r",", " ", text)  # 去除逗号
    text = re.sub(r"\.", " ", text)  # 去除句号
    text = re.sub(r"!", " ! ", text)  # 保留感叹号
    text = re.sub(r"\/", " ", text)  # 去掉右斜杠
    text = re.sub(r"\^", 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值