SEACrowd / seacrowd-datahub

A collaborative project to collect datasets in SEA languages, SEA regions, or SEA cultures.
Apache License 2.0
66 stars 58 forks source link

Create dataset loader for MIRACL #35

Closed SamuelCahyawijaya closed 10 months ago

SamuelCahyawijaya commented 11 months ago

Dataloader name: miracl/miracl.py DataCatalogue: http://seacrowd.github.io/seacrowd-catalogue/card.html?miracl

Dataset miracl
Description MIRACL is a multilingual dataset for ad hoc retrieval across 18 languages that collectively encompass over three billion native speakers around the world. This resource is designed to support monolingual retrieval tasks, where the queries and the corpora are in the same language. In total, we have gathered over 726k high-quality relevance judgments for 78k queries over Wikipedia in these languages, where all annotations have been performed by native speakers. MIRACL covers Indonesian and Thai languages
Subsets MIRACL Indonesian, MIRACL Thai
Languages ind, tha
Tasks Text Retrieval
License Apache license 2.0 (apache-2.0)
Homepage https://project-miracl.github.io/
HF URL https://huggingface.co/datasets/miracl/miracl
Paper URL https://direct.mit.edu/tacl/article/doi/10.1162/tacl_a_00595/117438/MIRACL-A-Multilingual-Retrieval-Dataset-Covering
danjohnvelasco commented 11 months ago

self-assign

sabilmakbar commented 11 months ago

Hi @danjohnvelasco, may I know the current status of this dataloader creation? Feel free to discuss here if you have any difficulties. Thanks!

danjohnvelasco commented 11 months ago

Hi @danjohnvelasco, may I know the current status of this dataloader creation? Feel free to discuss here if you have any difficulties. Thanks!

Hi @sabilmakbar, thanks for checking in on the status. I finished the source implemention but need opinion on how to proceed with seacrowd schema.

Here's the source schema for one example:

{
 'query_id': '140',
 'query': 'ริวเซย์โนะร็อคแมน วางจำหน่ายครั้งแรกเมื่อไหร่?',
 'positive_passages': [{'docid': '139463#0',
   'text': 'ริวเซย์โนะร็อคแมน () หรือ เมกาแมนสตาร์ฟอร์ซ (Mega Man Star Force) เป็นวิดีโอเกมประเภทเกมเล่นตามบทบาทจากประเทศญี่ปุ่น เป็นเกมที่เล่นด้วยนินเทนโดดีเอส ซึ่งอยู่ในเกมชุดร็อคแมนและเป็นเกมแรกสุดในซีรีส์เกมริวเซย์โนะร็อคแมน ผลิตโดยแคปคอม โดยวางจำหน่ายในวันที่ 14 ธันวาคม ค.ศ. 2006 ที่ประเทศญี่ปุ่น และ 7 สิงหาคม ค.ศ. 2007 ที่สหรัฐอเมริกา โดยตัวเกมออกวางจำหน่าย 3 เวอร์ชัน ได้แก่ เลโอ, ดราก้อนและเพกาซัส อย่างไรก็ตาม เวอร์ชันดราก้อนเป็นรุ่นพิเศษในอเมริกาเหนือผ่านทางเกมสต็อปสโตร์ ในขณะที่สหราชอาณาจักร มีเวอร์ชันเพกาซัสผ่านทาง Play.com โดยแต่ละเวอร์ชันจะแตกต่างกันที่ตัวละครที่ชื่อว่า "ผู้ดูแลดาวเทียม" ซึ่งผู้เล่นจะได้สู้กับตัวละครที่ต่างกันออกไปในแต่ละเวอร์ชัน รวมถึงระบบเปลี่ยนร่างซึ่งร็อคแมนจะเปลี่ยนร่างได้ต่างกันตามแต่ละเวอร์ชัน อย่างไรก็ตามผู้เล่นสามารถเปลี่ยนเป็นร่างของเวอร์ชันอื่นได้โดยใช้ระบบบราเธอร์แบนด์',
   'title': 'ริวเซย์โนะร็อคแมน (วิดีโอเกม)'}],
 'negative_passages': [{'docid': '327732#0',
   'text': 'ร็อคแมน เดอะพาวเวอร์แบทเทิล () หรือ เมก้าแมน เดอะพาวเวอร์แบทเทิล () เป็นเกมร็อคแมนซีรีส์แรกในระบบเกมตู้ ซึ่งจัดวางจำหน่ายครั้งแรกในประเทศญี่ปุ่นปีค.ศ. 1995 และตามด้วยร็อคแมน 2 เดอะพาวเวอร์ไฟท์เตอร์ในปีต่อมา โดยทั้งสองภาคนี้ได้รับการจัดทำเป็นเกมคอนโซลประจำบ้านในอเมริกาเหนือช่วงปีค.ศ. 2004 สำหรับระบบเพลย์สเตชัน 2 กับเกมคิวบ์ และในปีเดียวกันนี้ได้จัดทำเป็นเวอร์ชันญี่ปุ่นโดยใช้ชื่อว่า "ร็อคแมน พาวเวอร์แบทเทิลไฟท์เตอร์" () สำหรับระบบเพลย์สเตชัน 2 รวมทั้งดัดแปลงลงสู่ระบบนีโอจีโอพอกเก็ตคัลเลอร์โดยให้ชื่อเกมชุดนี้ว่า "ร็อคแมนแบทเทิล & ไฟท์เตอร์ส" () ด้วยเช่นกัน',
   'title': 'ร็อคแมน เดอะพาวเวอร์แบทเทิล'},
  {'docid': '48667#0',
   'text': 'ร็อคแมน (; ) หรือ เมก้าแมน () เป็นภาคแรกของวิดีโอเกมของเกมชุดร็อคแมน เป็นวิดีโอเกม ที่ผลิตและวางจำหน่ายโดยแคปคอม ออกวางจำหน่ายในปี พ.ศ. 2530 และเป็นเกมแรกในซีรีส์ชุด "ร็อคแมน" มีจุดเด่นในด้านการเป็นเกมแอ๊คชั่นที่เล่นได้ทุกวัย และมีเอกลักษณ์ของเกมคือ ผู้เล่นจะสามารถเลือกได้ว่าจะสู้กับหัวหน้าตัวใดก่อน และเมื่อเอาชนะหัวหน้าของด่านนั้นๆ ได้แล้ว จะได้อาวุธของหัวหน้าตัวนั้นมา เพื่อใช้ปราบหัวหน้าด่านอื่นๆ ต่อไป',
   'title': 'ร็อคแมน (วิดีโอเกมภาคแรก)'}]
}

Do you have any suggestions on how to fit this to seacrowd schema? (cc @holylovenia @SamuelCahyawijaya)

Thanks!

sabilmakbar commented 11 months ago

Thanks for asking; it's a great question. Although the task of Information/Text Retrieval is available on the form, it's yet to be there on SEACrowd Config, and I'll add this task shortly on the config (and link to this issue).

From my experience, the standard schema of Information Retrieval Task usually consists of Query - Positive Doc - Negative Docs, even though for each datapoint the number of both Positive & Negative Pairs can be more than 1, and sometimes its Positive/Negative label can be split into more granular label; i.e Hard-Negative, Easy-Negative.

We do have a config that is suited well for this, a Text Pair SEACrowd Schema. I'm going to link Tasks.TEXT_RETRIEVAL with that data schema, in the meantime you may create the SEACrowd Dataloader from that. (cc @holylovenia & @SamuelCahyawijaya)

Shall you have any followup inquiries, let's discuss in this Issue Thread, or in the SEACrowd discord if you have joined that.

danjohnvelasco commented 11 months ago

Thanks for asking; it's a great question. Although the task of Information/Text Retrieval is available on the form, it's yet to be there on SEACrowd Config, and I'll add this task shortly on the config (and link to this issue).

From my experience, the standard schema of Information Retrieval Task usually consists of Query - Positive Doc - Negative Docs, even though for each datapoint the number of both Positive & Negative Pairs can be more than 1, and sometimes its Positive/Negative label can be split into more granular label; i.e Hard-Negative, Easy-Negative.

We do have a config that is suited well for this, a Text Pair SEACrowd Schema. I'm going to link Tasks.TEXT_RETRIEVAL with that data schema, in the meantime you may create the SEACrowd Dataloader from that. (cc @holylovenia & @SamuelCahyawijaya)

Shall you have any followup inquiries, let's discuss in this Issue Thread, or in the SEACrowd discord if you have joined that.

Thanks for the suggestion. Please check if my understanding is correct. If we will use the Text Pair SEACrowd Schema, we can do this by flattening the source schema of MIRACL.

For example, one item from the source dataset:

{
  query_id: 104,
  query: "When was quantum field theory developed?",
  positive_passages: [doc1],
  negative_passages: [doc3, doc2]
}

To fit this to Text Pair SEACrowd Schema, we flatten source schema to this:

{
  id (query_id): 104, 
  text_1 (query): "When was quantum field theory developed?",
  text_2 (passage): doc1,
  label (pos|neg): pos
}

{
  id (query_id): 104, 
  text_1 (query): "When was quantum field theory developed?",
  text_2 (passage): doc3,
  label (pos|neg): neg
}

{
  id (query_id): 104, 
  text_1 (query): "When was quantum field theory developed?",
  text_2 (passage): doc2,
  label (pos|neg): neg
}

Please let me know your thoughts. Thanks!

sabilmakbar commented 11 months ago

Yes, exactly as what you explained above.