关键词的相似度计算

关键词的相似度刚开始采用的是杰卡德相似度,但是会出现非常多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训练流程

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Python中计算关键词相似度可以使用多种方法。其中一种常用的方法是使用编辑距离。编辑距离是一种用于计算字符串之间差异或相似度的经典距离计算方法。它衡量了将一个字符串转换为另一个字符串所需的最少编辑操作次数,包括插入、删除和替换字符。 另外一种常用的方法是使用余弦相似度。余弦相似度是一种基于向量空间模型的相似度计算方法。它通过计算两个向量之间的夹角来衡量它们的相似度,值越接近1表示越相似,值越接近0表示越不相似。 除了这些方法之外,还有其他一些相似度计算方法可以在Python中使用,如杰卡德相似系数。杰卡德相似系数主要用于计算符号度量或布尔值度量的个体间的相似度,适用于计算具有共同特征的个体之间的相似度。 要在Python中计算关键词相似度,你可以选择适合你需求的方法,并使用相应的库或算法实现。例如,使用NLTK库可以计算余弦相似度,使用编辑距离可以使用python-Levenshtein库。 总结来说,Python提供了许多方法和库来计算关键词相似度,包括编辑距离、余弦相似度和杰卡德相似系数等。选择适合你需求的方法,并使用相应的库来进行实现。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [python实现常用的相似度计算方法](https://blog.csdn.net/Together_CZ/article/details/89927608)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值