16

スタンフォードNLPツールの最後のバージョンでcorefリゾルバーに加えられた変更を理解するのに問題があります。例として、以下は文と対応するCorefChainAnnotationです。

The atom is a basic unit of matter, it consists of a dense central nucleus surrounded by a cloud of negatively charged electrons.

{1=[1 1, 1 2], 5=[1 3], 7=[1 4], 9=[1 5]}

これらの数字の意味がよくわかりません。ソースを見ても実際には役に立ちません。

ありがとうございました

4

3 に答える 3

17

私は共参照依存関係グラフを使用してきましたが、この質問に対する他の回答を使用することから始めました。しばらくして、上記のアルゴリズムが正確に正しくないことに気づきました。それが生成した出力は、私が持っている修正バージョンにさえ近くありません。

この記事を使用する他の人のために、これが私が最終的に得たアルゴリズムです。これは、すべてのrepresentativeMentionも自分自身に言及し、多くの言及は自分自身を参照するだけなので、自己参照も除外します。

Map<Integer, CorefChain> coref = document.get(CorefChainAnnotation.class);

for(Map.Entry<Integer, CorefChain> entry : coref.entrySet()) {
    CorefChain c = entry.getValue();

    //this is because it prints out a lot of self references which aren't that useful
    if(c.getCorefMentions().size() <= 1)
        continue;

    CorefMention cm = c.getRepresentativeMention();
    String clust = "";
    List<CoreLabel> tks = document.get(SentencesAnnotation.class).get(cm.sentNum-1).get(TokensAnnotation.class);
    for(int i = cm.startIndex-1; i < cm.endIndex-1; i++)
        clust += tks.get(i).get(TextAnnotation.class) + " ";
    clust = clust.trim();
    System.out.println("representative mention: \"" + clust + "\" is mentioned by:");

    for(CorefMention m : c.getCorefMentions()){
        String clust2 = "";
        tks = document.get(SentencesAnnotation.class).get(m.sentNum-1).get(TokensAnnotation.class);
        for(int i = m.startIndex-1; i < m.endIndex-1; i++)
            clust2 += tks.get(i).get(TextAnnotation.class) + " ";
        clust2 = clust2.trim();
        //don't need the self mention
        if(clust.equals(clust2))
            continue;

        System.out.println("\t" + clust2);
    }
}

そして、あなたの例文の最終的な出力は次のとおりです。

representative mention: "a basic unit of matter" is mentioned by:
The atom
it

通常、「アトム」が代表的な言及になりますが、驚くことではありません。少し正確な出力の別の例は、次の文の場合です。

アメリカ独立戦争は1700年代に発生し、アメリカで最初の戦争でした。

次の出力を生成します。

representative mention: "The Revolutionary War" is mentioned by:
it
the first war in the United States
于 2011-12-16T13:43:58.120 に答える
9

最初の番号はクラスターID(同じエンティティを表すトークンを表す)です。のソースコードを参照してくださいSieveCoreferenceSystem#coref(Document)。ペア番号はCorefChain#toString()から外れています:

public String toString(){
    return position.toString();
}

ここで、positionは、言及しているエンティティの位置ペアのセットです(それらを使用させるためCorefChain.getCorefMentions())。位置からトークンに移動する方法を示す完全なコード( groovy )の例を次に示します。

class Example {
    public static void main(String[] args) {
        Properties props = new Properties();
        props.put("annotators", "tokenize, ssplit, pos, lemma, ner, parse, dcoref");
        props.put("dcoref.score", true);
        pipeline = new StanfordCoreNLP(props);
        Annotation document = new Annotation("The atom is a basic unit of matter, it   consists of a dense central nucleus surrounded by a cloud of negatively charged electrons.");

        pipeline.annotate(document);
        Map<Integer, CorefChain> graph = document.get(CorefChainAnnotation.class);

        println aText

        for(Map.Entry<Integer, CorefChain> entry : graph) {
          CorefChain c =   entry.getValue();                
          println "ClusterId: " + entry.getKey();
          CorefMention cm = c.getRepresentativeMention();
          println "Representative Mention: " + aText.subSequence(cm.startIndex, cm.endIndex);

          List<CorefMention> cms = c.getCorefMentions();
          println  "Mentions:  ";
          cms.each { it -> 
              print aText.subSequence(it.startIndex, it.endIndex) + "|"; 
          }         
        }
    }
}

出力(「s」がどこから来ているのかわかりません):

The atom is a basic unit of matter, it consists of a dense central nucleus surrounded by a cloud of negatively charged electrons.
ClusterId: 1
Representative Mention: he
Mentions: he|atom |s|
ClusterId: 6
Representative Mention:  basic unit 
Mentions:  basic unit |
ClusterId: 8
Representative Mention:  unit 
Mentions:  unit |
ClusterId: 10
Representative Mention: it 
Mentions: it |
于 2011-07-06T12:42:35.153 に答える
0

これらは、アノテーターからの最近の結果です。

  1. [1、1]1原子
  2. [1、2]1物質の基本単位
  3. [1、3] 1 it
  4. [1、6]6つの負に帯電した電子
  5. [1、5]5負に帯電した電子の雲

マーキングは次のとおりです。

[Sentence number,'id']  Cluster_no  Text_Associated

同じクラスターに属するテキストは、同じコンテキストを参照しています。

于 2017-07-18T07:00:50.817 に答える