Flairのtraining.logからmicro recallとprecisionを算出するコード

FlairでNERを実施した際,training.logというのが出力されるのだが,これにはmicro F1は載っているが,micro recallとprecisionは載っていない.このため,ログファイルからTP, FP, FNを読み取り自力で算出してみる.

import re

if __name__ == "__main__":
    logpath = "/path/to/your/result/training.log"
    
    with open(logpath, "r") as f:
        lines = f.readlines()
        
    tp, fp, fn = 0, 0, 0
        
    for line in lines:
        if re.search("f1-score:", line):
            # tokens = line.split(" ")
            tokens = ' '.join(line.split()).split(" ") # avoid multi space error
            try:
                tp += int(tokens[2])
            except:
                pass
            fp += int(tokens[5])
            fn += int(tokens[8])
            
    precision = tp / (tp + fp)
    recall = tp / (tp + fn)
    f1 = 2*recall*precision / (recall + precision)
    
    print(logpath)
    print("precision:", precision)
    print("recall:", recall)
    print("micro-f1:", f1)
Pocket