GithubHelp home page GithubHelp logo

star_kgc's Introduction

STAR_KGC

This repo contains the source code of the paper accepted by WWW'2021. "Structure-Augmented Text Representation Learning for Efficient Knowledge Graph Completion"(WWW 2021).

🚩 If possible, could you please star this project. ⭐ ↗️

1. Thanks

The repository is partially based on huggingface transformers, KG-BERT and RotatE.

2. Installing requirement packages

  • conda create -n StAR python=3.6
  • source activate StAR
  • pip install numpy torch tensorboardX tqdm boto3 requests regex sacremoses sentencepiece matplotlib
2.1 Optional package (for mixed float Computation)

3. Dataset

  • WN18RR, FB15k-237, UMLS

    • Train and test set in ./data
    • As validation on original dev set is costly, we validated the model on dev subset during training.
    • The dev subset of WN18RR is provided in ./data/WN18RR called new_dev.dict. Use below commands to get the dev subset for WN18RR (FB15k-237 is similar without the --do_lower_case) used in training process.
     CUDA_VISIBLE_DEVICES=0 \
      python get_new_dev_dict.py \
     	--model_class bert \
     	--weight_decay 0.01 \
     	--learning_rate 5e-5 \
     	--adam_epsilon 1e-6 \
     	--max_grad_norm 0. \
     	--warmup_proportion 0.05 \
     	--do_train \
     	--num_train_epochs 7 \
     	--dataset WN18RR \
     	--max_seq_length 128 \
     	--gradient_accumulation_steps 4 \
     	--train_batch_size 16 \
     	--eval_batch_size 128 \
     	--logging_steps 100 \
     	--eval_steps -1 \
     	--save_steps 2000 \
     	--model_name_or_path bert-base-uncased \
     	--do_lower_case \
     	--output_dir ./result/WN18RR_get_dev \
     	--num_worker 12 \
     	--seed 42 \
    
     CUDA_VISIBLE_DEVICES=0 \
      python get_new_dev_dict.py \
     	--model_class bert \
     	--weight_decay 0.01 \
     	--learning_rate 5e-5 \
     	--adam_epsilon 1e-6 \
     	--max_grad_norm 0. \
     	--warmup_proportion 0.05 \
     	--do_eval \
     	--num_train_epochs 7 \
     	--dataset WN18RR \
     	--max_seq_length 128 \
     	--gradient_accumulation_steps 4 \
     	--train_batch_size 16 \
     	--eval_batch_size 128 \
     	--logging_steps 100 \
     	--eval_steps 1000 \
     	--save_steps 2000 \
     	--model_name_or_path ./result/WN18RR_get_dev \
     	--do_lower_case \
     	--output_dir ./result/WN18RR_get_dev \
     	--num_worker 12 \
     	--seed 42 \
    
  • NELL-One

    • We reformat original NELL-One as the three benchmarks above.
    • Please run the below command to get the reformatted data.
     python reformat_nell_one.py --data_dir path_to_downloaded --output_dir ./data/NELL_standard
    

4. Training and Test (StAR)

Run the below commands for reproducing results in paper. Note, all the eval_steps is set to -1 to train w/o validation and save the last checkpoint, because standard dev is very time-consuming. This can get similar results as in the paper.

4.1 WN18RR

CUDA_VISIBLE_DEVICES=0 \
python run_link_prediction.py \
    --model_class roberta \
    --weight_decay 0.01 \
    --learning_rate 1e-5 \
    --adam_betas 0.9,0.98 \
    --adam_epsilon 1e-6 \
    --max_grad_norm 0. \
    --warmup_proportion 0.05 \
    --do_train --do_eval \
    --do_prediction \
    --num_train_epochs 7 \
    --dataset WN18RR \
    --max_seq_length 128 \
    --gradient_accumulation_steps 4 \
    --train_batch_size 16 \
    --eval_batch_size 128 \
    --logging_steps 100 \
    --eval_steps 4000 \
    --save_steps 2000 \
    --model_name_or_path roberta-large \
    --output_dir ./result/WN18RR_roberta-large \
    --num_worker 12 \
    --seed 42 \
    --cls_method cls \
    --distance_metric euclidean \
CUDA_VISIBLE_DEVICES=2 \
python run_link_prediction.py \
    --model_class bert \
    --weight_decay 0.01 \
    --learning_rate 5e-5 \
    --adam_betas 0.9,0.98 \
    --adam_epsilon 1e-6 \
    --max_grad_norm 0. \
    --warmup_proportion 0.05 \
    --do_train --do_eval \
    --do_prediction \
    --num_train_epochs 7 \
    --dataset WN18RR \
    --max_seq_length 128 \
    --gradient_accumulation_steps 4 \
    --train_batch_size 16 \
    --eval_batch_size 128 \
    --logging_steps 100 \
    --eval_steps 4000 \
    --save_steps 2000 \
    --model_name_or_path bert-base-uncased \
    --do_lower_case \
    --output_dir ./result/WN18RR_bert \
    --num_worker 12 \
    --seed 42 \
    --cls_method cls \
    --distance_metric euclidean \

4.2 FB15k-237

CUDA_VISIBLE_DEVICES=0 \
python run_link_prediction.py \
    --model_class roberta \
    --weight_decay 0.01 \
    --learning_rate 1e-5 \
    --adam_betas 0.9,0.98 \
    --adam_epsilon 1e-6 \
    --max_grad_norm 0. \
    --warmup_proportion 0.05 \
    --do_train --do_eval \
    --do_prediction \
    --num_train_epochs 7. \
    --dataset FB15k-237 \
    --max_seq_length 100 \
    --gradient_accumulation_steps 4 \
    --train_batch_size 16 \
    --eval_batch_size 128 \
    --logging_steps 100 \
    --eval_steps -1 \
    --save_steps 2000 \
    --model_name_or_path roberta-large \
    --output_dir ./result/FB15k-237_roberta-large \
    --num_worker 12 \
    --seed 42 \
    --fp16 \
    --cls_method cls \
    --distance_metric euclidean \

4.3 UMLS

CUDA_VISIBLE_DEVICES=0 \
python run_link_prediction.py \
    --model_class roberta \
    --weight_decay 0.01 \
    --learning_rate 1e-5 \
    --adam_betas 0.9,0.98 \
    --adam_epsilon 1e-6 \
    --max_grad_norm 0. \
    --warmup_proportion 0.05 \
    --do_train --do_eval \
    --do_prediction \
    --num_train_epochs 20 \
    --dataset UMLS \
    --max_seq_length 16 \
    --gradient_accumulation_steps 1 \
    --train_batch_size 16 \
    --eval_batch_size 128 \
    --logging_steps 100 \
    --eval_steps -1 \
    --save_steps 200 \
    --model_name_or_path roberta-large \
    --output_dir ./result/UMLS_model \
    --num_worker 12 \
    --seed 42 \
    --cls_method cls \
    --distance_metric euclidean 

4.4 NELL-One

CUDA_VISIBLE_DEVICES=0 \
python run_link_prediction.py \
    --model_class bert \
    --do_train --do_eval --do_prediction \
    --warmup_proportion 0.1 \
    --learning_rate 5e-5 \
    --num_train_epochs 8. \
    --dataset NELL_standard \
    --max_seq_length 32 \
    --gradient_accumulation_steps 1 \
    --train_batch_size 16 \
    --eval_batch_size 128 \
    --logging_steps 100 \
    --eval_steps -1 \
    --save_steps 2000 \
    --model_name_or_path bert-base-uncased \
    --do_lower_case \
    --output_dir ./result/NELL_model \
    --num_worker 12 \
    --seed 42 \
    --fp16 \
    --cls_method cls \
    --distance_metric euclidean 

5. StAR_Self-Adp

5.1 Data preprocessing

  • Get the trained model of RotatE, more details please refer to RotatE.

  • Run the below commands sequentially to get the training dataset of StAR_Self-Adp.

    • Run the run_get_ensemble_data.py in ./StAR
     CUDA_VISIBLE_DEVICES=0 python run_get_ensemble_data.py \
     	--dataset WN18RR \
     	--model_class roberta \
     	--model_name_or_path ./result/WN18RR_roberta-large \
     	--output_dir ./result/WN18RR_roberta-large \
     	--seed 42 \
     	--fp16 
    
    • Run the ./codes/run.py in rotate. (please replace the TRAINED_MODEL_PATH with your own trained model's path)
     CUDA_VISIBLE_DEVICES=3 python ./codes/run.py \
     	--cuda --init ./models/RotatE_wn18rr_0 \
     	--test_batch_size 16 \
     	--star_info_path /home/wangbo/workspace/StAR_KGC-master/StAR/result/WN18RR_roberta-large \
     	--get_scores --get_model_dataset 
    

5.2 Train and Test

  • Run the run.py in ./StAR/ensemble. Note the --mode should be alternate in head and tail, and perform a average operation to get the final results.
  • Note: Please replace YOUR_OUTPUT_DIR, TRAINED_MODEL_PATH and StAR_FILE_PATH in ./StAR/peach/common.py with your own paths to run the command and code.
CUDA_VISIBLE_DEVICES=2 python run.py \
--do_train --do_eval --do_prediction --seen_feature \
--mode tail \
--learning_rate 1e-3 \
--feature_method mix \
--neg_times 5 \
--num_train_epochs 3 \
--hinge_loss_margin 0.6 \
--train_batch_size 32 \
--test_batch_size 64 \
--logging_steps 100 \
--save_steps 2000 \
--eval_steps -1 \
--warmup_proportion 0 \
--output_dir /home/wangbo/workspace/StAR_KGC-master/StAR/result/WN18RR_roberta-large_ensemble  \
--dataset_dir /home/wangbo/workspace/StAR_KGC-master/StAR/result/WN18RR_roberta-large \
--context_score_path /home/wangbo/workspace/StAR_KGC-master/StAR/result/WN18RR_roberta-large \
--translation_score_path /home/wangbo/workspace/StAR_KGC-master/rotate/models/RotatE_wn18rr_0  \
--seed 42 

star_kgc's People

Contributors

wangbo9719 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

star_kgc's Issues

用FB15K-237训练StAR(BERT based)时出现错误

您好,首先非常感谢您提供了代码。
我先运行了下面这个代码去获取dict的文件。

CUDA_VISIBLE_DEVICES=0 \
  python get_new_dev_dict.py \
 	--model_class bert \
 	--weight_decay 0.01 \
 	--learning_rate 5e-5 \
 	--adam_epsilon 1e-6 \
 	--max_grad_norm 0. \
 	--warmup_proportion 0.05 \
 	--do_train \
 	--num_train_epochs 7 \
 	--dataset FB15k-237 \
 	--max_seq_length 128 \
 	--gradient_accumulation_steps 4 \
 	--train_batch_size 16 \
 	--eval_batch_size 128 \
 	--logging_steps 100 \
 	--eval_steps -1 \
 	--save_steps 2000 \
 	--model_name_or_path bert-base-uncased \
 	--do_lower_case \
 	--output_dir ./result/FB15k-237_get_dev \
 	--num_worker 12 \
 	--seed 42 \

然后当我运行以下代码想要进行训练的时候,出现了错误

CUDA_VISIBLE_DEVICES=0 \
python run_link_prediction.py \
    --model_class bert \
    --weight_decay 0.01 \
    --learning_rate 1e-5 \
    --adam_betas 0.9,0.98 \
    --adam_epsilon 1e-6 \
    --max_grad_norm 0. \
    --warmup_proportion 0.05 \
    --do_train --do_eval \
    --do_prediction \
    --num_train_epochs 7. `\`
    --dataset FB15k-237 \
    --max_seq_length 100 \
    --gradient_accumulation_steps 4 \
    --train_batch_size 16 \
    --eval_batch_size 128 \
    --logging_steps 100 \
    --eval_steps -1 \
    --save_steps 2000 \
    --model_name_or_path bert-base-uncased \
    --output_dir ./result/FB15k-237_bert \
    --num_worker 12 \
    --seed 42 \
    --fp16 \
    --cls_method cls \
    --distance_metric euclidean \

错误:

    self_outputs = self.self(hidden_states, attention_mask, head_mask, encoder_hidden_states, encoder_attention_mask)
  File "/lib/python3.7/site-packages/torch/nn/modules/module.py", line 1130, in _call_impl
    return forward_call(*input, **kwargs)
  File "/StAR_KGC/StAR/transformers/modeling_bert.py", line 221, in forward
    mixed_query_layer = self.query(hidden_states)
  File "/lib/python3.7/site-packages/torch/nn/modules/module.py", line 1130, in _call_impl
    return forward_call(*input, **kwargs)
  File "/lib/python3.7/site-packages/torch/nn/modules/linear.py", line 114, in forward
    return F.linear(input, self.weight, self.bias)
  File "/lib/python3.7/site-packages/apex/amp/wrap.py", line 21, in wrapper
    args[i] = utils.cached_cast(cast_fn, args[i], handle.cache)
  File "/lib/python3.7/site-packages/apex/amp/utils.py", line 97, in cached_cast
    if cached_x.grad_fn.next_functions[1][0].variable is not x:

IndexError: tuple index out of range

The role of mixed float?

hi, Thanks for your sharing of this paper, i have a question about the 2.1 step which are the mixed float computation package, its function whether to speed ​​up training ? and the second question is "KGE/StAR_KGC/StAR/transformers/configuration_utils.py", line 182, in from_pretrained
raise EnvironmentError(msg)
OSError: Couldn't reach server at 'https://s3.amazonaws.com/models.huggingface.co/bert/bert/config.json' to download configuration file or configuration file is not a valid JSON file. Please check network or file content here: /root/.cache/torch/transformers/5c6eb663edfa884554ead90bd31a56bd13c655097d981a6a7a4f3fc67d17fdf6."
i cannot find the file according its prompt, how to solve this problem? Hope for your reply. thanks!!

running time

May I know how long it's gonna take to train each dataset with/without validation?

DATASET NELL

it went wrong when reproducing the results of NELL, usepacka was not found

structure part

How does the structure learning part mentioned in the paper add up to the loss of the bert classifier?

Inquiry about Experimental Setup and Runtime

Dear @wangbo9719
First of all, thank you for sharing your excellent work on StAR_KGC. I am particularly interested in reproducing the results presented in this paper. To ensure that I accurately replicate the experiments, I would like to ask for some details regarding the experimental setup:
Hardware Configuration: Could you please share the details of the hardware configuration used for running the experiments? Specifically, information on the GPU, would be very helpful.
Runtime: I would also appreciate it if you could give an estimate of the time it took to run the main experiments. This will help me plan my experiments more effectively.
Best regards,
yw3l

how to generate the prediction result in detail?

Hi guys, good work. I wanna to check hit@10 results in detail. I mean how to generate the candicates result for test.tsv? Which file show the result of prediction candicates in detail, not just metrices? Thanks a lot.

image

problem:11/20 10:40:54 AM: Weights from pretrained model not used in BertForPairCls: ['cls.predictions.bias', 'cls.predictions.transform.dense.weight', 'cls.predictions.transform.dense.bias', 'cls.predictions.decoder.weight', 'cls.seq_relationship.weight', 'cls.seq_relationship.bias', 'cls.predictions.transform.LayerNorm.weight', 'cls.predictions.transform.LayerNorm.bias']

在运行get_new_dev_list.py时,控制台输出日志显示:
11/20 10:40:53 AM: loading file E:/project/StAR_KGC-master/StAR_KGC-master/bert-base-uncased/bert-base-uncased-vocab.txt
11/20 10:40:53 AM: loading weights file E:/project/StAR_KGC-master/StAR_KGC-master/bert-base-uncased/bert-base-uncased-pytorch_model.bin
11/20 10:40:54 AM: Weights of BertForPairCls not initialized from pretrained model: ['proj.weight', 'proj.bias']
11/20 10:40:54 AM: Weights from pretrained model not used in BertForPairCls: ['cls.predictions.bias', 'cls.predictions.transform.dense.weight', 'cls.predictions.transform.dense.bias', 'cls.predictions.decoder.weight', 'cls.seq_relationship.weight', 'cls.seq_relationship.bias', 'cls.predictions.transform.LayerNorm.weight', 'cls.predictions.transform.LayerNorm.bias']
权重没有被加载,请问这是正常的吗?

Input

thanks for your excellent work in KGC filed.
i have not seen the code yet and i am confused about the input . the input text of entity is the short version like "Gary Rydstrom" or the long version like "Gary Roger Rydstrom is an American sound designer and director. He has won seven Academy Awards for his work in sound for movies."?

About negative sampling

Hi, I am a little confused with the negative sampling process. I saw in the paper, you have mentioned that the wrong triples are generated by replacing either the head or tail entity with another entity randomly sampled. But in the negetive_sampling function in kb_dataset.py, it has the probability to generate wrong triples through corrupting the relation. So, may I ask if there is a difference between these two methods? Hope you could help me with this problem, thanks a lot!

How to generate the new_dev.dict?

Hi Guy, good job. I met some problem when I try to run my dataset. I wanna know How to generate the new_dev.dict?

I use "--do_eval" in link prediction, it will show an error below:
Traceback (most recent call last):
File "run_link_prediction.py", line 4, in
main()
File "/data2/lidj/projects/StAR_KGC/StAR/link_prediction/train.py", line 950, in main
train(args, train_dataset, model, tokenizer, eval_dataset=dev_dataset, eval_fn=evaluate_pairwise_ranking)
File "/data2/lidj/projects/StAR_KGC/StAR/kbc/utils_fn.py", line 279, in train
args, eval_dataset, model, tokenizer, global_step=global_step, file_prefix="eval_")
File "/data2/lidj/projects/StAR_KGC/StAR/link_prediction/train.py", line 625, in evaluate_pairwise_ranking
dev_dict = torch.load("./data/" + args.dataset + "/new_dev.dict")
File "/data2/lidj/venv/StAR/lib/python3.6/site-packages/torch/serialization.py", line 579, in load
with _open_file_like(f, 'rb') as opened_file:
File "/data2/lidj/venv/StAR/lib/python3.6/site-packages/torch/serialization.py", line 230, in _open_file_like
return _open_file(name_or_buffer, mode)
File "/data2/lidj/venv/StAR/lib/python3.6/site-packages/torch/serialization.py", line 211, in init
super(_open_file, self).init(open(name, mode))
FileNotFoundError: [Errno 2] No such file or directory: './data/ctd/new_dev.dict'

However, if i didn't use "--do_eval" in link prediction, it will generate new_dev.dict at last. Do we have any method to generate the new_dev.dict before running link prediction?

Hope you reply. Thanks a lot.

DATASET

hi, I'm a little confused ,why to reformat original NELL-One as the three benchmarks above

Training time

hello. I have a question about learning the Star model. now

 CUDA_VISIBLE_DEVICES=0 \
  python get_new_dev_dict.py \
 --model_class bert \
 --weight_decay 0.01 \
 --learning_rate 5e-5 \
 --adam_epsilon 1e-6 \
 --max_grad_norm 0.\
 --warmup_proportion 0.05 \
 --do_train\
 --num_train_epochs 7 \
 --dataset WN18RR\
 --max_seq_length 128 \
 --gradient_accumulation_steps 4 \
 --train_batch_size 16 \
 --eval_batch_size 128 \
 --logging_steps 100 \
 --eval_steps -1 \
 --save_steps 2000 \
 --model_name_or_path bert-base-uncased \
 --do_lower_case \
 --output_dir ./result/WN18RR_get_dev \
 --num_worker 12 \
 --seed 42 \

This process is in progress, and the dataset is using FB15k-237 and WN18RR using different GPUs. However, for both data sets, this process takes too long. is this normal? In the case of FB15k-237, iteration took 50 hours to do train once. In the case of WN18RR, it takes about 15 hours per Iteration. is this normal?

StAR inference (reproducibility of test_head_full_scores.list file)

Hi, I've been working with your codebase a while but there is one issue, which occurred along the path and I haven't been able to overcome it so far. For a start, my usage of StAR (ensemble, and others) is a little bit different. I don't work with batches, rather than that I need one single object (let's say EnsembeModel or StarModel) which I query using a triple and get a probability value of that particular triple in return.

So far, I managed to dig through the codebase to do the things I need, but when I started verifying my implementation with your results, I failed to obtain the same results. So, please, how can I replicate those values that are in StAR model, e.g. WN18RR_roberta-large/test_head_full_scores.list ?

I got that I should do something like

with torch.no_grad():
  logits = model.classifier(_rep_src, _rep_tgt)
  logits = torch.softmax(logits, dim=-1)
  local_scores = logits.detach().cpu().numpy()[:, 1]
  resultForTheTriple = local_scores[0]

Right?

I've been following the method get_ensemble_data.py:get_scores which is buggy (namely because of id2ent_list = dataset.id2ent_list), and secondly, it is not invoked anywhere in the codebase (I haven't found such invocation :( hope I am mistaken).
Anyhow, when I use this method to get the result for the first test-query (['06845599', '_member_of_domain_usage', '03754979']) in the WN18RR dataset I get something like 0.017418645322322845 which is not the value stored in WN18RR_roberta-large/test_head_full_scores.list (actually, loading this file, e.g. l = toch.load("test_head_full_scores.list"), and then inferring the value, e.g. l[0][1][l[0][0]], yields something like 0.9994868.
Secondly, when I tried to implement the same method on my own, I ran into indeterminism, e.g. running the exact same script resulted in different scores (for the first test-query mentioned above). I checked that the embeddings are the same in both places (they are, I'm using your loading of embeddings), but the output of the model, e.g. model.classifier(_rep_src, _rep_tgt), differ every time. Have you seen anything like this? For example, is there some drop-out or something similar in (Ro)Berta model that should be set up prior to evaluation besides "model.eval()"?

So, you see that I actually want to produce a file with StAR scores on my own (e.g. WN18RR_roberta-large/test_head_full_scores.list) but am unable to do so (and deterministically). Please, can you point me to the place in the code where this is happening or say where I made any mistake? I would appreciate it all :) Thanks a lot.

best, Martin

problem of "new_dev.dict"

for the script "get_new_dev_dict.py", it need "new_dev.dict" in "evaluate", however, only WN18RR already have "new_dev.dict".

code problem

hi, I'm a little confused ,what mean self.config.num_labels?I can't find the value of this parameter in the code

Reproducibility

Hi guys, good work, but I struggle a bit with reproducing your results. It's nothing serious, but it would be better to have clone-and-use approach. So far I encounter these little obstacles:

  • hardcoded paths, e.g. USER_HOME+"/workspace/StAR/data/"
  • It's a handy thing to have the exact commands to reproduce WN18RR in the readme, but I guess there are some incorrect paths, e.g. to run.py in RotatE/ folder with ./result/WN18RR_roberta-large/ (that should be ../StAR/results/WN18RR_roberta-large, right?); also guessing there is a typo in --output_dir ./result/FB15k-237_roberta-largel
  • When I followed your readme's commands exactly, I ended up with FileNotFoundError: [Errno 2] No such file or directory: './result/UMLS_model_roberta-large/similarity_score_mtx.npy'. The only place where */similarity_score_mtx.npy is saved is in get_ensembled_data.py which is not invocated anywhere in the project (although commented in get_ensembled_data.py).

Please, can you provide a fix for the similarity_score_mtx.npy missing file? I could simply remove the commented line but there is no mention of how to use get_ensembled_data.py.

best
Martin

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.