2

Lesk を使用して、2 つの単語 (「家」と「家」など) の類似性を見つけようとしています。

ここで与えられた lesk 値を見つけるためのデモ コードを実行しました。また、ここでオンライン ws4j デモを使用して値を見つけました。

どちらも異なる値を与えます。

WS4Jで指定されたデモコードを実行することによる値:
WUPALMER = 0.4
JIANGCONRATH = 0.08467941109843881 LEACOCKCHODOROW
= 1.1349799328389845 LIN =
0.16528546101187536
Resnik = 0.1692001111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111116




オンラインデモによる値:
wup( home#n#8 , house#n#10 ) = 1.0000
jcn( home#n#8 , house#n#10 ) = 12876699.5
lch( home#n#8 , house#n#10 ) = 3.6889
lin( home#n#8 , house#n#10 ) = 1.0000
res( home#v#1 , house#v#2 ) = 9.0735
path( home#n#8 , house#n#10 ) = 1.0000
lesk( home#n#8 , house#n#10 ) = 1571
hso( home#n#8 , house#n#10 ) = 16

両方とも同じ ws4j を使用しているのに、これら 2 つの間に大きな違いがあるのはなぜですか?? デモコードに問題はありますか??

4

3 に答える 3

1
String word1="house";
String word2="home";
RelatednessCalculator wup = new WuPalmer(db);

List<POS[]> posPairs = wup.getPOSPairs();

double maxScore = -1D;
for(POS[] posPair: posPairs) {
List<Concept> synsets1 = (List<Concept>)db.getAllConcepts(word1, posPair[0].toString());
List<Concept> synsets2 = (List<Concept>)db.getAllConcepts(word2, posPair[1].toString());

for(Concept ss1: synsets1) 
{
    for (Concept ss2: synsets2) {

        Relatedness relatedness = wup.calcRelatednessOfSynset(ss1, ss2);
        double score = relatedness.getScore();
        if (score > maxScore) { 
                 maxScore = score;
        }
         p1=ss1.getPos().toString();
         p2=ss2.getPos().toString();
    }
}} if (maxScore == -1D) {
maxScore = 0.0;}
System.out.println("sim('" + word1 +" "+ p1 +"', '" + word2 +" "+ p2+ "') =  " + maxScore);
于 2015-04-03T08:33:18.980 に答える
0

1 つには、ws4j は、オンライン デモと最新の安定版リリース (v1.0.1) の間で矛盾を示しています。関連する問題はhereにあります。

ただし、あなたの場合、ws4jライブラリのデフォルトで「mfs」フラグ(Most Frequent Senseを表す)がtrueに設定されているためです。このフラグが true の場合、類似度の計算は各単語の最も頻繁な意味に対してのみ実行されます。false の場合、類似度計算はすべてのセンスの組み合わせで計算されます。基本的には @Pranav の回答と同じです。

mfs を false に設定すると、計算負荷が大幅に増加することが予想されます。そのため、作成者がデフォルトとして true に設定したのはそのためだと思います。

コードで mfs 値を false に設定する場合は、次のようにします。

WS4JConfiguration.getInstance().setMFS(false);
于 2016-01-13T18:09:44.827 に答える
0

家と家、どちらも同じ synset にあります。したがって、wup と jcn の値は正しいようです。どのバージョンの JDK を使用していますか? このリンクを試してください - http://maraca.d.umn.edu/cgi-bin/similarity/similarity.cgi?word1=home&senses1=all&word2=house&senses2=all&measure=wup&rootnode=yes

また、同じ結果が得られます。

オンラインバージョンで「home#n#1」と「house#n#1」を使用すると、コンパイラのような結果が得られます。

于 2014-07-19T20:39:08.537 に答える