はじめに
LLMを使ったRAGが大流行です。
そこで気になったのがRAGでのLLMは日本語をどの程度理解してくれているのか、です。
日本に住む平均的な人であれば
「私は巨人の星が好きです」
に対して以下の2つの文
①「私は漫画が好きです」
②「私は星が好きです」
があれば、①の方が類似度が高いと判断できるでしょう。
「巨人の星」は「漫画」の一つであり、「巨人の星」の上位概念の一つは「漫画」だからです。
いや、年代によっては「巨人の星」を知らないかもですが。
intfloat/multilingual-e5-large
では
「私は巨人の星が好きです」
に対して以下の2つの文
①「私は漫画が好きです」
②「私は星が好きです」
の類似度をmultilingual-e5-largeで比較してみます。
比較1
「私は巨人の星が好きです」
と
①「私は漫画が好きです」
の比較結果(ベクトルのコサイン類似度)は
0.8799271583557129
でした。
次に
「私は巨人の星が好きです」
と
②「私は星が好きです」
の比較結果(ベクトルのコサイン類似度)は
0.9378243684768677
でした。
考察1
あらら... multilingual-e5-large ではこの文を正しく比較はできないようです。
multilingual-e5-large では固有名詞を含む文に対しての「類似度」の判定が難しいのだと思われます。
対策
固有名詞である「巨人の星」を別の語で置き換えてみましょう。
国語辞書に「巨人の星」の定義は無いと思われるので、みんな大好きWikipediaを見てみます。
Wikipediaには以下の文がありました。
『巨人の星』(きょじんのほし)は、原作:梶原一騎・作画:川崎のぼるによる日本の漫画作品。
この定義を基に
「巨人の星」→「原作:梶原一騎・作画:川崎のぼるによる日本の漫画作品。」
に置き換えて比較してみましょう。(※「星」という文字も消してあります)
比較2
「私は(原作:梶原一騎・作画:川崎のぼるによる日本の漫画作品。)が好きです」
と
①「私は漫画が好きです」
の比較結果(ベクトルのコサイン類似度)は
0.8921971321105957
でした。
次に
「私は(原作:梶原一騎・作画:川崎のぼるによる日本の漫画作品。)が好きです」
と
②「私は星が好きです」
の比較結果(ベクトルのコサイン類似度)は
0.8658530712127686
でした。
考察2
おお、比較の結果が逆転しました。
つまり「固有名詞を含む文を multilingual-e5-largeを用いて類似度を計算すると、固有名詞の意味が反映されていないようであるが、固有名詞を「固有名詞を説明する文」に置き換えると、結構いい感じで類似度を出してくれる可能性が高い」ということではないかと思います。
以上。