前提・実現したいこと
こちらのサイト
https://qiita.com/yoppe/items/512c7c072d08c64afa7e
を参考に複数の文章の類似度を算出するプログラムを作成しようと思い、とりあえず3つ目の文章を追加したところ下記のようなエラーが出ました。
発生している問題・エラーメッセージ
ValueError: Input weights should be all non-negative
該当のソースコード
import gensim import MeCab import numpy as np from scipy import spatial mecab = MeCab.Tagger(" -Owakati") # 文章で使用されている単語の特徴ベクトルの平均を算出 def avg_feature_vector(sentence, model, num_features): words = mecab.parse(sentence).replace(' \n', '').split() # mecabの分かち書きでは最後に改行(\n)が出力されてしまうため、除去 feature_vec = np.zeros((num_features,), dtype="float32") # 特徴ベクトルの入れ物を初期化 for word in words: feature_vec = np.add(feature_vec, model[word]) if len(words) > 0: feature_vec = np.divide(feature_vec, len(words)) return feature_vec # 3つの文章の類似度を算出 def sentence_similarity(sentence_1, sentence_2 ,sentence_3): # 今回使うWord2Vecのモデルは300次元の特徴ベクトルで生成されているので、num_featuresも300に指定 num_features=300 sentence_1_avg_vector = avg_feature_vector(sentence_1, word2vec_model, num_features) sentence_2_avg_vector = avg_feature_vector(sentence_2, word2vec_model, num_features) sentence_3_avg_vector = avg_feature_vector(sentence_3, word2vec_model, num_features) # 1からベクトル間の距離を引いてあげることで、コサイン類似度を計算 return 1 - spatial.distance.cosine(sentence_1_avg_vector, sentence_2_avg_vector, sentence_3_avg_vector) result = sentence_similarity( "彼は昨日、激辛ラーメンを食べてお腹を壊した", "昨日、僕も激辛の中華料理を食べてお腹を壊した", "昨日、僕も激辛の麻婆豆腐を食べてお腹を壊した" ) print(result)
試したこと
単純にsentence_3を追加するだけではダメなのでしょうか?
補足情報(FW/ツールのバージョンなど)
google colaboratoryにて実行しています。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/12/16 11:12
2021/12/16 11:22
2021/12/16 11:44
2021/12/16 14:51
2021/12/16 23:50
2021/12/17 03:24