Skip to content

Reproducing the same RECALL@1 and MRR values #36

Description

@TakahiroHaruyama

Hi,

Thank you for publishing your research results as open source!

I got interested in your research and tried to reproduce the same RECALL@1 and MRR values using postprocess/1.generate_testing/configures/full/xm-1000-10000_Ds1.json after generating input data of Dataset-1 on my own and training/inferring. However, the values were 0.405 and 0.48, slightly different from the values shown in the paper (0.438/0.508).

Next, I trained and inferred the model in the same way using the input data you provided. The results were almost the same as those in the paper (0.445/0.515). So I compared the input files.

Provided *_55.0.pkl (extracted from inputs.tar.xz):

-rwx------@ 1 xxxx  staff  2622071486  5 24  2023 inputs/pcode_raw/pcode_sog/Dataset-1_training/graph_func_dict_opc_55.0.pkl*
-rwx------@ 1 xxxx  staff  124962329  5 25  2023 inputs/pcode_raw/pcode_sog/Dataset-1_validation/graph_func_dict_opc_55.0.pkl*
-rwx------@ 1 xxxx  staff  6088681810  5 25  2023 inputs/pcode_raw/pcode_sog/Dataset-1_testing/graph_func_dict_opc_55.0.pkl*

My generated *_True.pkl:

-rw-r--r--@ 1 xxxx  staff  4471414394  5  8 12:48 inputs/pcode_raw/pcode_sog/Dataset-1_training/graph_func_dict_opc_True.pkl
-rw-r--r--@ 1 xxxx  staff  218257863  5  8 12:51 inputs/pcode_raw/pcode_sog/Dataset-1_validation/graph_func_dict_opc_True.pkl
-rw-r--r--@ 1 xxxx  staff  10133205287  5  8 15:05 inputs/pcode_raw/pcode_sog/Dataset-1_testing/graph_func_dict_opc_True.pkl

Clearly, my input files are getting much larger. In the previous issue, you said the token mapping algorithm and parameters didn't change, so I'm not sure why there is a big difference.

Next, I compared the token mapping files.

Provided files (extracted from inputs.tar.xz):

-rwx------@ 1 haru  staff  23628234  5 24  2023 opc_counter.json*
-rwx------@ 1 haru  staff  23628201  5 24  2023 opc_occurs.json*
-rwx------@ 1 haru  staff      8209  5 24  2023 opcodes_dict.json*

My generated files:

-rw-r--r--@ 1 haru  staff  22342663  5  8 11:47 opc_counter.json
-rw-r--r--@ 1 haru  staff  22342625  5  8 11:47 opc_occurs.json
-rw-r--r--@ 1 haru  staff      7575  5  8 11:47 opcodes_dict.json

I checked the data in the files too.

In [2]: opc_cnt_ext = json.load(open('pcode_raw_extracted/pcode_sog/opc_counter_extracted.json'))
In [3]: opc_ocu_ext = json.load(open('pcode_raw_extracted/pcode_sog/opc_occurs_extracted.json'))
In [4]: opc_dict_ext = json.load(open('pcode_raw_extracted/pcode_sog/opcodes_dict_extracted.json'))
In [5]: opc_cnt = json.load(open('inputs/pcode_raw/pcode_sog/opc_counter.json'))
In [6]: opc_ocu = json.load(open('inputs/pcode_raw/pcode_sog/opc_occurs.json'))
In [7]: opc_dict = json.load(open('inputs/pcode_raw/pcode_sog/opcodes_dict.json'))
In [13]: opc_cnt['opc']['IADD']
Out[13]: 20736548
In [14]: opc_cnt_ext['opc']['IADD']
Out[14]: 21875459
In [19]: opc_ocu['opc']['ISUB']
Out[19]: 197988
In [20]: opc_ocu_ext['opc']['ISUB']
Out[20]: 198219
In [26]: opc_ocu['num_funcs']
Out[26]: 256625
In [27]: opc_ocu_ext['num_funcs']
Out[27]: 256625
In [33]: len(opc_dict.keys())
Out[33]: 422
In [34]: len(opc_dict_ext.keys())
Out[34]: 461

The extracted json files likely have more instructions than mine though the number of analyzed functions matched. So I guess there is a difference in lifting (command line option in GSAT?).

Is it possible to reproduce the same accuracy using the current version of the scripts? If not, could you tell me how to change the scripts?
I generated my input data using the shell scripts provided in the repository. No change in the lifting/preprocessing python scripts. I used gsat-1.0.jar.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions