質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

711閲覧

次元数が違う文書間でのコサイン類似度の求め方について(python3)

pi-chan-taro-ch

総合スコア1

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2023/02/23 12:42

実現したいこと

pythonで次元数が違う文書間でコサイン類似度を求める

前提

python入門者です。
https://qiita.com/Qiitaman/items/fa393d93ce8e61a857b1
を参考にpythonでコサイン類似度の関数を実装する方法を理解しようとしていたのですが、次元数が違う文書間でコサイン類似度を求めようとするとエラーが発生しました。
解決方法等教えていただけますと幸いです。

発生している問題・エラーメッセージ

ValueError: shapes (2,) and (4,) not aligned: 2 (dim 0) != 4 (dim 0)

該当のソースコード

python3

1import numpy as np 2 3def cos_sim(v1, v2): 4 return np.dot(v1, v2) / (np.linalg.norm(v1) * np.linalg.norm(v2)) 5 6X = np.array([0.789, 0.515,0.231]) 7Y = np.array([0.832, 0.555,0.432,0.541]) 8 9# cos(X,Y) = (0.789×0.832)+(0.515×0.555)+(0.231×0.432)+(0.541) 10print(cos_sim(X, Y))

試したこと

補足情報

Ubuntu 20.04 LTS
Python3

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

コサイン類似度は、two n-dimensional vectorsに対して定義されるかと思います。省略している次元があるのであれば、(元のデータの意味に依存しますが)0などでパディングするなどして、計算できないでしょうか?

python

1X = np.array([0.789, 0.515, 0.231, 0]) 2Y = np.array([0.832, 0.555, 0.432, 0.541])

(0.789×0.832)+(0.515×0.555)+(0.231×0.432)+(0.541)

とありますが、計算上np.linalg.normで正規化していますし、パディングする値(ex. (0.541 x 1.0) or (0.541 x 0.0))によっても、値が変わってしまうように思います。データの意味付けに合わせて、次元を揃える処理を事前に加える必要があるのではないでしょうか?

投稿2023/02/23 13:16

編集2023/02/23 13:17
knuser

総合スコア178

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

# cos(X,Y) = (0.789×0.832)+(0.515×0.555)+(0.231×0.432)+(0.541)

python

1l = min(len(X), len(Y)) 2print(np.sum([cos_sim(X[:l], Y[:l]), *X[l:], *Y[l:]])) 3 4# 1.5269915259393596

投稿2023/02/23 13:04

melian

総合スコア19798

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問