首页 > 编程知识 正文

怎样分析句子结构英语,分析句子结构英语翻译

时间:2023-05-05 09:49:49 阅读:161331 作者:426

1. DSSM模型的原理简介

DSSM模型的全称是Deep Structured Semantic Model,由微软研究院开发,采用深度神经网络将文本(句子、Query、实体等)表示为向量。

DSSM模型广泛应用于信息检索、文本排序、答疑、图像描述、机器翻译等。 此模型用于测量搜索到的关键字与单击的文本标题之间的相关性。 DSM模型原理比较简单,通过搜索引擎上Query和Document海量的点击曝光日志,利用DNN深度网络将Query和Document表示为低维语义向量,用余弦相似度计算两个语义向量的距离该模型可以预测两个句子的语义相似度,还可以得到一个句子的低维语义嵌入式向量。

图(1) DSSM模型的网络结构图

DSM模型的整体结构图如图1所示。 q表示查询信息,d表示文档信息。

表示(1)Term Vector:文本的嵌入式向量;

(2)Word Hashing技术:降维bag-of-word向量以解决Term Vector太大的问题;

(3)Multi-layer nonlinear projection:表示深度学习网络的隐藏层;

其中:

表示阶层的权重矩阵,表示阶层的bias项。

使用tanh作为隐藏层和输出层的激活函数:

33558 www.Sina.com/:表示查询和文档的最终嵌入式向量;

(4)Semantic feature表示计算Query和Document之间的余弦相似度。(5)Relevance measured by cosine similarity:

即:表示用Softmax函数将Query和正样本Document的语义相似性变换为后验概率,(6)Posterior probability computed by softmax:

其中:

是Softmax的平滑系数,是Query下的正样本,是Query的随机负样本,是Query下的整个样本空间。 在训练阶段,通过非常似然的估计来最小化丢失函数:

即:

2. DSSM 模型在推荐召回环节的应用

DSSM模型的最大特点是Query和Document是两个独立的子网。 然后,该特征被移植到推荐算法的召回环节,即为客户端(User )和物品端(Item )分别构建独立的子网塔结构。 这种方式对工业界非常友好,两个子网络产生的嵌入式向量可以自行获取和缓存。 目前工业界流行的DSSM双塔网络结构如图(2)所示。

图(2)工业界DSSM双塔模型结构图

在双塔模型两侧分别对(用户、上下文)项目)建模,在最后一层计算两者的内积。

(2.1)DSSM 模型在推荐召回环节的结构

(1)是(用户、上下文)的特征,(物品)的特征。

) )用户,上下文)最终嵌入式向量显示,显示)最终嵌入式向量显示;

)3)表示(用户、上下文)和(物)的余弦相似度。

其中:

模型训练完成后,物品的嵌入式应用程序被保存为同义词,在线APP应用程序只需查找对应的嵌入式应用程序。 因此,在线上只需计算(用户、上下文)端的嵌入式索引,并根据Annoy或Faiss技术索引得到用户喜欢的候选集。

(2.2)候选集合召回

(1)将从双塔两侧输出的Embedding进行L2标准化

)2)内积计算的结果除以固定的超参。

超参数的设定可以通过实验结果的召回率或准确率进行微调。 除以超参数的效果如下所示,可以看出Softmax的效果更明显。

使用简单的数据集来实践一下DSSM召回模型吧。 实现该模型的主要参考: python软件的DeepCtr和DeepMatch模块。

(2.3)应用Trick

. 数据处理

(1.1)加载数据

samples.txt 数据可以从百度网盘下载:

链接: https://pan.baidu.com/s/1eM4q61tSrPLurQYxC29vbg 提取码: 1mjz

import pandas as pdfrom sklearn.utils import shufflefrom sklearn.model_selection import train_test_splitfrom keras.utils import plot_model

samples_data = pd.read_csv("samples.txt", sep="t", header = None)samples_data.columns = ["user_id", "gender", "age", "hist_movie_id", "hist_len", "movie_id", "movie_type_id", "label"]samples_data.head()

本示例中包含:7个特征。

user端特征有5个,分别为["user_id", "gender", "age", "hist_movie_id", "hist_len"]; user_id 为 用户ID特征,离散特征,从1-3表示;
gender 为 用户性别特征,离散特征,从1-2表示;
age 为 用户年龄特征,离散特征,从1-3表示;
hist_movie_id 为 用户观看的movie序列特征,根据观看的时间倒排,即最新观看的movieID排在前面;
hist_len 为 用户观看的movie序列长度特征,连续特征; movie端特征有2个,为 ["movie_id", "movie_type_id"]; movie_id 为 movieID特征,离散特征,从1-208表示;
movie_type_id 为 movie类型ID特征,离散特征,从1-9表示;

(1.2)打乱数据集

samples_data = shuffle(samples_data)X = samples_data[["user_id", "gender", "age", "hist_movie_id", "hist_len", "movie_id", "movie_type_id"]]y = samples_data["label"]

(1.3)转换数据存储格式

train_model_input = {"user_id": np.array(X["user_id"]), "gender": np.array(X["gender"]), "age": np.array(X["age"]), "hist_movie_id": np.array([[int(i) for i in l.split(',')] for l in X["hist_movie_id"]]), "hist_len": np.array(X["hist_len"]), "movie_id": np.array(X["movie_id"]), "movie_type_id": np.array(X["movie_type_id"])}train_label = np.array(y)

2. 构建模型

(2.1)统计每个离散特征的词频量,构造特征参数

import pandas as pdfrom deepctr.inputs import SparseFeat, VarLenSparseFeatfrom sklearn.preprocessing import LabelEncoderfrom tensorflow.python.keras.models import Modelfrom deepmatch.models import *embedding_dim = 32SEQ_LEN = 50user_feature_columns = [SparseFeat('user_id', max(samples_data["user_id"])+1, embedding_dim), SparseFeat("gender", max(samples_data["gender"])+1, embedding_dim), SparseFeat("age", max(samples_data["age"])+1, embedding_dim), VarLenSparseFeat(SparseFeat('hist_movie_id', max(samples_data["movie_id"])+1, embedding_dim, embedding_name="movie_id"), SEQ_LEN, 'mean', 'hist_len'), ]item_feature_columns = [SparseFeat('movie_id', max(samples_data["movie_id"])+1, embedding_dim), SparseFeat('movie_type_id', max(samples_data["movie_type_id"])+1, embedding_dim)]

(2.2)构建模型

from deepctr.inputs import build_input_features, combined_dnn_input, create_embedding_matrixfrom deepctr.layers.core import PredictionLayer, DNNfrom tensorflow.python.keras.models import Modelfrom deepmatch.inputs import input_from_feature_columnsfrom deepmatch.layers.core import Similaritydef DSSM(user_feature_columns, item_feature_columns, user_dnn_hidden_units=(64, 32), item_dnn_hidden_units=(64, 32), dnn_activation='tanh', dnn_use_bn=False, l2_reg_dnn=0, l2_reg_embedding=1e-6, dnn_dropout=0, init_std=0.0001, seed=1024, metric='cos'): embedding_matrix_dict = create_embedding_matrix(user_feature_columns + item_feature_columns, l2_reg_embedding, init_std, seed, seq_mask_zero=True) user_features = build_input_features(user_feature_columns) user_inputs_list = list(user_features.values()) user_sparse_embedding_list, user_dense_value_list = input_from_feature_columns(user_features, user_feature_columns, l2_reg_embedding, init_std, seed, embedding_matrix_dict=embedding_matrix_dict) user_dnn_input = combined_dnn_input(user_sparse_embedding_list, user_dense_value_list) item_features = build_input_features(item_feature_columns) item_inputs_list = list(item_features.values()) item_sparse_embedding_list, item_dense_value_list = input_from_feature_columns(item_features, item_feature_columns, l2_reg_embedding, init_std, seed, embedding_matrix_dict=embedding_matrix_dict) item_dnn_input = combined_dnn_input(item_sparse_embedding_list, item_dense_value_list) user_dnn_out = DNN(user_dnn_hidden_units, dnn_activation, l2_reg_dnn, dnn_dropout, dnn_use_bn, seed, )(user_dnn_input) item_dnn_out = DNN(item_dnn_hidden_units, dnn_activation, l2_reg_dnn, dnn_dropout, dnn_use_bn, seed)(item_dnn_input) score = Similarity(type=metric)([user_dnn_out, item_dnn_out]) output = PredictionLayer("binary", False)(score) model = Model(inputs=user_inputs_list + item_inputs_list, outputs=output) model.__setattr__("user_input", user_inputs_list) model.__setattr__("item_input", item_inputs_list) model.__setattr__("user_embedding", user_dnn_out) model.__setattr__("item_embedding", item_dnn_out) return model

(2.3)编译模型及训练模型

model = DSSM(user_feature_columns, item_feature_columns)model.compile(optimizer='adagrad', loss="binary_crossentropy", metrics=['accuracy'])history = model.fit(train_model_input, train_label, batch_size=256, epochs=10, verbose=1, validation_split=0.2, )

训练过程如图所示:

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。