テンソルを使用していくつかのRDFトリプルを表現することについての質問。
シナリオ:
RDFトリプルは、リソース、フォーマット(主語、述語、目的語)に関する単純なステートメントを表現するために使用されます。
次のように、2つの述語があります。1つはplay_for、もう1つはrace_forで、それぞれにn個のトリプルが含まれています。
1番目の述語:play_for; nトリプル:(Ray Allen、play_for、Boston Celtics)、(Kobe Bryant、play_for、Lakers)、...略して、(A_i、play for、T_i)for i=1からn。
2番目の述語:race_for; nトリプル:(ボストンセルティックス、race_for、NBAチャンピオンシップ)、(レイカーズ、race_for、NBAチャンピオンシップ)、...略して、(T_i、レースフォー、NBA)for i=1からn。
テンソル表現は、この2nトリプルをモデル化する1つの方法です。テンソル分解を使用してデータセットの潜在意味構造を見つけるために、マクシミリアンニッケルの論文を研究しています。そして最初のステップは、テンソルを使用してデータセットを表現することです。
テンソルエントリX_ijk=1は、関係(i番目のエンティティ、k番目の述語、j番目のエンティティ)が存在するという事実を示します。それ以外の場合、存在しない不明な関係の場合、エントリはゼロに設定されます。たとえば、この2nトリプルは、テンソルによって次のようにモデル化できます。
One slice: (A_i, play for, T_i)
A1, A2,...,An, T1, T2,...,Tn, NBA
A1 0 0 0 1 0 0 0
A2 0 0 0 0 1 0 0
:
An 0 0 0 0 0 1 0
T1 0 0 0 0 0 0 0
T2 0 0 0 0 0 0 0
:
Tn 0 0 0 0 0 0 0
NBA 0 0 0 0 0 0 0
The other slice: (T_i, race for, NBA)
A1, A2,...,An, T1, T2,...,Tn, NBA
A1 0 0 0 0 0 0 0
A2 0 0 0 0 0 0 0
:
An 0 0 0 0 0 0 0
T1 0 0 0 0 0 0 1
T2 0 0 0 0 0 0 1
:
Tn 0 0 0 0 0 0 1
NBA 0 0 0 0 0 0 0
RDFトリプルが「test.txt」に保存されていると仮定します。私の質問は、Pythonを使用してこのモデリングプロセスをプログラミングする方法です。
これが私が思うことです:
最も難しいのは、テンソル内の非ゼロの位置に対応するRDFトリプルの座標を取得する方法です。最初に、ここにすべてのエンティティを含むリストがあります:
T = ['A1',...,'An','T1',...'Tn','NBA']
データセット内のすべてのRDFトリプル(Subject_i、Predicate_k、Object_j)に対して、テンソル内のX_ijk = 1の位置を表す座標(i、j、k)があります。たとえば、既存のRDFトリプル(A_i、play for、T_i)の座標は(5、1、13)です。これは、最初のスライス行列でX(5,13)=1であることを意味します。しかし、この座標を取得する方法がわかりません。トリプルを保存するために辞書を使用する必要がありますか?
私はPythonにあまり詳しくなく、解決策を見つけようとしましたが、それを解決する方法がわかりません。どんな助けでも大歓迎です。
編集:簡潔さと読みやすさのために、RDFの説明を削除しました。