关键词的相似度计算

    技术2022-07-10  155

    关键词的相似度刚开始采用的是杰卡德相似度,但是会出现非常多0的情况,这个情况不太利于区分关键词之间的相似度。所以进行改进变为向量化关键词后算embedding的余弦相似度。

    ELMO原理 尝试ELMO模型进行单词向量化 ELMO模型的基本组成单元为lstm,输入门、遗忘门、输出门等计算公式如下图 ELMO是双向lstm语言模型,第一个是使用了多层LSTM,第二个是增加了后向语言模型,不仅可以前文预测后文,也增加了后文预测前文的内容。 elmo使用的双向lstm语言模型,论文中简称biLM。作者将公式结合起来,得到所要优化的目标:最大化对数前向和后向的似然概率 ELMo 是 biLMs 几层激活的串联。语言模型的不同层对单词上的不同类型的信息进行编码(如在双向LSTM神经网络中,词性标注在较低层编码好,而词义消歧义用上层编码更好)。连接所有层可以自由组合各种文字表示,以提高下游任务的性能。

    主要代码

    # Import our dependencies# Import import tensorflow as tf import pandas as pd import tensorflow_hub as hub import os import re from keras import backend as K import keras.layers as layers from keras.models import Model import numpy as np # Initialize session sess = tf.Session() K.set_session(sess) # Now instantiate the elmo model elmo_model = hub.Module("https://tfhub.dev/google/elmo/1", trainable=True) sess.run(tf.global_variables_initializer()) sess.run(tf.tables_initializer()) # Build our model # We create a function to integrate the tensorflow model with a Keras model # This requires explicitly casting the tensor to a string, because of a Keras quirk def ElmoEmbedding(x): return elmo_model(tf.squeeze(tf.cast(x, tf.string)), signature="default", as_dict=True)["default"] input_text = layers.Input(shape=(1,), dtype=tf.string) embedding = layers.Lambda(ElmoEmbedding, output_shape=(1024,))(input_text) dense = layers.Dense(256, activation='relu')(embedding) pred = layers.Dense(1, activation='sigmoid')(dense) model = Model(inputs=[input_text], outputs=pred) model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy']) model.summary() # Fit! model.fit(train_text, train_label, validation_data=(test_text, test_label), epochs=5, batch_size=32)

    生成关键词embedding算余弦相似度

    import numpy as np def cosine_distance(v1, v2): # 余弦距离 if type(v1)==list: v1 = np.array(v1) if type(v2)==list: v2 = np.array(v2) if v1.all() and v2.all(): return np.dot(v1, v2.T) / (np.linalg.norm(v1) * np.linalg.norm(v2)) else: return 0

    结果 对所有关键词的embedding加和求平均 ![在这里插入图片描述](https://img-blog.csdnimg.cn/2020063022415249.png 遇到的问题 在加载模型时我发现在colab里面tensorflow的版本为2.2.0,这样的话需要改为model.load,或者将colab tensorflow降为1.x版本 参考 https://blog.csdn.net/weixin_37947156/article/details/83146184?ops_request_misc=&request_id=&biz_id=102&utm_term=elmo&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-1-83146184#31-elmo训练流程

    Processed: 0.011, SQL: 9