私は文の類似性に関するプロジェクトに取り組んでいます。SOで何度も尋ねられたことは知っていますが、私がやっている方法で問題を解決できるかどうか、または問題へのアプローチを変更する必要があるかどうかを知りたいだけです。大まかに言えば、システムは記事のすべての文を分割し、システムに供給される他の記事の中から類似の文を見つけることになっています。
私は tf-idf 重みで余弦類似度を使用しています。それが私が行った方法です。
1- まず、すべての記事を文に分割し、次に文ごとにトライグラムを生成して並べ替えます (すべきでしょうか?)。
2- トリグラムの tf-idf 重みを計算し、すべての文のベクトルを作成します。
3- 元の文と比較する文の内積と大きさを計算します。次に、コサイン類似度を計算します。
しかし、システムは期待どおりに機能しません。ここで、いくつか疑問があります。
私が tf-idf の重みについて読んだ限りでは、同様の「ドキュメント」を見つけるのにより便利だと思います。私は文に取り組んでいるので、tf および idf 定義の式のいくつかの変数を変更して、アルゴリズムを少し変更しました (ドキュメントの代わりに、文ベースの定義を考え出そうとしました)。
tf = 文中のトライグラムの出現回数 / 文中のすべてのトライグラムの数
idf = 全記事の全文数 / トライグラムが出現する文数
この問題にそのような定義を使用しても問題ないと思いますか?
もう1つは、コサイン類似度を計算するときに正規化が何度も言及されているのを見たことです。トライグラムのベクトルが同じサイズではない可能性があるため、これは重要であると推測しています(私の場合はめったにありません)。トライグラム ベクトルのサイズが x で、もう一方のベクトルが x+1 の場合、最初のベクトルを x+1 のサイズとして扱い、最後の値は 0 です。これは正規化の意味ですか? そうでない場合、正規化を行うにはどうすればよいですか?
これらに加えて、間違ったアルゴリズムを選択した場合、そのような問題に他に何が使用できますか(できればn-gramアプローチを使用)?
前もって感謝します。