Spaces:
Sleeping
Sleeping
File size: 2,822 Bytes
a08962e 44bec05 a08962e 44bec05 a08962e 44bec05 a08962e 44bec05 a08962e 44bec05 a08962e 44bec05 230209e a08962e 44bec05 230209e a08962e a7b12c0 a08962e 44bec05 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
import gensim
from sklearn.metrics.pairwise import cosine_similarity
class CosineSimilarityCalculator:
model_path = 'ja/ja.bin'
def __init__(self):
"""
CosineSimilarityCalculatorクラスを初期化し、
事前トレーニング済みのWord2Vecモデルをロード
Parameters:
- なし
Returns:
- なし
"""
self.model = gensim.models.Word2Vec.load(CosineSimilarityCalculator.model_path)
def _convert_to_2d_array(self, vector):
"""
埋め込みベクトルを2次元配列に変換
Parameters:
- vector (numpy.ndarray): 変換する1次元配列のベクトル
Returns:
- vector_2d (numpy.ndarray): 変換後の2次元配列のベクトル
"""
return vector.reshape(1, -1)
def _calculate_cosine_similarity(self, embedding1, embedding2):
"""
cos類似度を計算
Parameters:
- embedding1 (numpy.ndarray): 1つ目の単語ベクトル(2次元配列)
- embedding2 (numpy.ndarray): 2つ目の単語ベクトル(2次元配列)
Returns:
- similarity (numpy.ndarray): cos類似度
"""
return cosine_similarity(embedding1, embedding2)
def calculate_similarity(self, search_word, article_keyword_list):
"""
指定された検索ワードと記事のキーワードリストの間のcos類似度を計算
モデルにない単語の場合はエラーメッセージを出力しブレイクする
Parameters:
- search_word (str): 検索ワード
- article_keyword_list (list): 記事のキーワードリスト
Returns:
- similarities (dict): 記事キーワードとそれぞれの検索ワードのcos類似度を含むdictを作成
モデルにない単語の場合はNoneを返す
"""
# 検索ワードの埋め込みベクトルを取得
if search_word in self.model.wv:
search_embedding = self.model.wv[search_word]
else:
return None
similarities = {}
# 記事キーワードの埋め込みベクトルを取得し、cos類似度を計算
for keyword in article_keyword_list:
if keyword in self.model.wv:
keyword_embedding = self.model.wv[keyword]
search_embedding_2d = self._convert_to_2d_array(search_embedding)
keyword_embedding_2d = self._convert_to_2d_array(keyword_embedding)
similarity = self._calculate_cosine_similarity(search_embedding_2d, keyword_embedding_2d)
similarities[keyword] = similarity[0][0]
else:
similarities[keyword] = None
return similarities |