Bagikan melalui


Rekomendasi Microsoft News

Microsoft News Dataset (MIND) adalah himpunan data skala besar untuk penelitian rekomendasi berita. MIND dikumpulkan dari log perilaku anonim dari situs web Microsoft News. Misi MIND adalah menjadi tolok ukur himpunan data untuk rekomendasi berita dan memfasilitasi penelitian dalam rekomendasi berita dan area sistem pemberi rekomendasi.

MIND berisi sekitar 160 ribu artikel berita Bahasa Inggris dan lebih dari 15 juta log tayangan yang dihasilkan oleh 1 juta pengguna. Setiap artikel berita berisi konten tekstual yang kaya termasuk judul, abstrak, tubuh, kategori, dan entitas. Setiap log tayangan berisi peristiwa klik, peristiwa nonklik, dan perilaku klik berita historis pengguna ini sebelum tayangan ini. Untuk melindungi privasi pengguna, setiap pengguna diputuskan tautannya dari sistem produksi ketika di-hash dengan aman ke dalam ID anonim. Untuk informasi lebih rinci tentang himpunan data MIND, Anda dapat merujuk ke artikel MIND: A Large-scale Dataset for News Recommendation.

Volume

Baik data pelatihan dan validasi adalah folder zip, yang berisi empat file berbeda:

NAMA FILE DESKRIPSI
behaviors.tsv Riwayat klik dan log tayangan pengguna
news.tsv Informasi artikel berita
entity_embedding.vec Penyematan entitas dalam berita yang diekstrak dari grafik pengetahuan
relation_embedding.vec Penyematan hubungan antarentitas yang diekstrak dari grafik pengetahuan

behaviors.tsv

File behaviors.tsv berisi log tayangan dan riwayat klik berita pengguna. File ini memiliki lima kolom dibagi dengan simbol tab:

  • ID Tayangan. ID tayangan.
  • ID pengguna. ID anonim pengguna.
  • Waktu. Waktu tayangan dengan format “MM/DD/YYYY HH:MM:SS AM/PM”.
  • Riwayat. Riwayat klik berita (daftar ID berita yang diklik) pengguna ini sebelum tayangan ini.
  • Tayangan. Daftar berita yang ditampilkan dalam tayangan ini dan perilaku klik pengguna pada tayangan tersebut (1 untuk klik dan 0 untuk nonklik).

Contoh ditunjukkan dalam tabel di bawah ini:

KOLOM KONTEN
ID tayangan 123
Id Pengguna U131
Waktu 13/11/2019 Pukul 8.36.57
Riwayat N11 N21 N103
Tayangan N4-1 N34-1 N156-0 N207-0 N198-0

news.tsv

File news.tsv berisi informasi rinci artikel berita yang terlibat dalam file behaviors.tsv. File ini memiliki tujuh kolom, yang dibagi dengan simbol tab:

  • ID Berita
  • Kategori
  • Subkategori
  • Judul
  • Abstrak
  • URL
  • Entitas Judul (entitas yang terkandung dalam judul berita ini)
  • Entitas Abstrak (entitas yang terkandung dalam abstrak berita ini)

Tubuh konten lengkap artikel berita MSN tidak tersedia untuk diunduh, dikarenakan struktur lisensi. Namun, untuk kenyamanan Anda, kami telah menyediakan skrip utilitas untuk membantu mengurai halaman web berita dari URL MSN di himpunan data. Dikarenakan pembatasan waktu, beberapa URL kedaluwarsa dan tidak dapat diakses dengan. Saat ini, kami berusaha sebaik mungkin untuk menyelesaikan masalah ini.

Contoh ditunjukkan dalam tabel berikut:

KOLOM KONTEN
ID Berita N37378
Kategori olahraga
SubKategori golf
Judul Pemenang PGA Tour
Abstrak Galeri pemenang terbaru di PGA Tour.
URL https://www.msn.com/en-us/sports/golf/pga-tour-winners/ss-AAjnQjj?ocid=chopendata
Entitas Judul [{“Label”: “PGA Tour”, “Type”: “O”, “WikidataId”: “Q910409”, “Confidence”: 1.0, “OccurrenceOffsets”: [0], “SurfaceForms”: [“PGA Tour”]}]
Entitas Abstrak [{“Label”: “PGA Tour”, “Type”: “O”, “WikidataId”: “Q910409”, “Confidence”: 1.0, “OccurrenceOffsets”: [35], “SurfaceForms”: [“PGA Tour”]}]

Deskripsi kunci kamus di kolom “Entitas” dicantumkan sebagai berikut:

KUNCI DESKRIPSI
Label Nama entitas di grafik pengetahuan Wikidata
Jenis Jenis entitas ini di Wikidata
WikidataId ID entitas di Wikidata
Keyakinan Keyakinan penautan entitas
OccurrenceOffsets Offset entitas tingkat karakter dalam teks judul atau abstrak
SurfaceForms Nama entitas mentah dalam teks asli

entity_embedding.vec & relation_embedding.vec

File entity_embedding.vec dan relation_embedding.vec berisi penyematan 100 dimensi entitas dan hubungan yang dipelajari dari subgraf (dari grafik pengetahuan WikiData) dengan metode TransE. Di kedua file, kolom pertama adalah ID entitas/hubungan, dan kolom lainnya adalah nilai vektor penyematan. Kami harap data ini dapat memfasilitasi penelitian rekomendasi berita yang sadar pengetahuan. Contoh ditunjukkan di bawah ini.

ID MENYEMATKAN NILAI
Q42306013 0,014516 -0,106958 0,024590 … -0,080382

Karena beberapa alasan dalam mempelajari penyematan dari subgraf, beberapa entitas mungkin tidak memiliki penyematan dalam file entity_embedding.vec.

Lokasi penyimpanan

Data disimpan dalam blob di pusat data US Barat/Timur, dalam kontainer blob berikut: 'https://mind201910small.blob.core.windows.net/release/'.

Di dalam kontainer, set pelatihan dan validasi dikompresi ke dalam MINDlarge_train.zip dan MINDlarge_dev.zip.

Informasi Tambahan

Himpunan data MIND dapat diunduh gratis untuk tujuan penelitian berdasarkan Ketentuan Lisensi Penelitian Microsoft. Hubungi mind@microsoft.com jika Anda memiliki pertanyaan tentang himpunan data.

Akses data

Azure Notebooks

Buku catatan demo untuk mengakses data MIND di Azure

Buku catatan ini menyediakan contoh mengakses data MIND dari penyimpanan blob di Azure.

Data MIND disimpan di pusat data AS Barat/Timur, sehingga buku catatan ini akan berjalan dengan lebih efisien pada komputasi Azure yang terletak di AS Barat/Timur.

Impor dan lingkungan

import os
import tempfile
import shutil
import urllib
import zipfile
import pandas as pd

# Temporary folder for data we need during execution of this notebook (we'll clean up
# at the end, we promise)
temp_dir = os.path.join(tempfile.gettempdir(), 'mind')
os.makedirs(temp_dir, exist_ok=True)

# The dataset is split into training and validation set, each with a large and small version.
# The format of the four files are the same.
# For demonstration purpose, we will use small version validation set only.
base_url = 'https://mind201910small.blob.core.windows.net/release'
training_small_url = f'{base_url}/MINDsmall_train.zip'
validation_small_url = f'{base_url}/MINDsmall_dev.zip'
training_large_url = f'{base_url}/MINDlarge_train.zip'
validation_large_url = f'{base_url}/MINDlarge_dev.zip'

Fungsi

def download_url(url,
                 destination_filename=None,
                 progress_updater=None,
                 force_download=False,
                 verbose=True):
    """
    Download a URL to a temporary file
    """
    if not verbose:
        progress_updater = None
    # This is not intended to guarantee uniqueness, we just know it happens to guarantee
    # uniqueness for this application.
    if destination_filename is None:
        url_as_filename = url.replace('://', '_').replace('/', '_')
        destination_filename = \
            os.path.join(temp_dir,url_as_filename)
    if (not force_download) and (os.path.isfile(destination_filename)):
        if verbose:
            print('Bypassing download of already-downloaded file {}'.format(
                os.path.basename(url)))
        return destination_filename
    if verbose:
        print('Downloading file {} to {}'.format(os.path.basename(url),
                                                 destination_filename),
              end='')
    urllib.request.urlretrieve(url, destination_filename, progress_updater)
    assert (os.path.isfile(destination_filename))
    nBytes = os.path.getsize(destination_filename)
    if verbose:
        print('...done, {} bytes.'.format(nBytes))
    return destination_filename

Unduh dan ekstrak file

# For demonstration purpose, we will use small version validation set only.
# This file is about 30MB.
zip_path = download_url(validation_small_url, verbose=True)
with zipfile.ZipFile(zip_path, 'r') as zip_ref:
    zip_ref.extractall(temp_dir)

os.listdir(temp_dir)

Baca file dengan pandas

# The behaviors.tsv file contains the impression logs and users' news click histories. 
# It has 5 columns divided by the tab symbol:
# - Impression ID. The ID of an impression.
# - User ID. The anonymous ID of a user.
# - Time. The impression time with format "MM/DD/YYYY HH:MM:SS AM/PM".
# - History. The news click history (ID list of clicked news) of this user before this impression.
# - Impressions. List of news displayed in this impression and user's click behaviors on them (1 for click and 0 for non-click).
behaviors_path = os.path.join(temp_dir, 'behaviors.tsv')
pd.read_table(
    behaviors_path,
    header=None,
    names=['impression_id', 'user_id', 'time', 'history', 'impressions'])
# The news.tsv file contains the detailed information of news articles involved in the behaviors.tsv file.
# It has 7 columns, which are divided by the tab symbol:
# - News ID
# - Category
# - Subcategory
# - Title
# - Abstract
# - URL
# - Title Entities (entities contained in the title of this news)
# - Abstract Entities (entities contained in the abstract of this news)
news_path = os.path.join(temp_dir, 'news.tsv')
pd.read_table(news_path,
              header=None,
              names=[
                  'id', 'category', 'subcategory', 'title', 'abstract', 'url',
                  'title_entities', 'abstract_entities'
              ])
# The entity_embedding.vec file contains the 100-dimensional embeddings
# of the entities learned from the subgraph by TransE method.
# The first column is the ID of entity, and the other columns are the embedding vector values.
entity_embedding_path = os.path.join(temp_dir, 'entity_embedding.vec')
entity_embedding = pd.read_table(entity_embedding_path, header=None)
entity_embedding['vector'] = entity_embedding.iloc[:, 1:101].values.tolist()
entity_embedding = entity_embedding[[0,
                                     'vector']].rename(columns={0: "entity"})
entity_embedding
# The relation_embedding.vec file contains the 100-dimensional embeddings
# of the relations learned from the subgraph by TransE method.
# The first column is the ID of relation, and the other columns are the embedding vector values.
relation_embedding_path = os.path.join(temp_dir, 'relation_embedding.vec')
relation_embedding = pd.read_table(relation_embedding_path, header=None)
relation_embedding['vector'] = relation_embedding.iloc[:,
                                                       1:101].values.tolist()
relation_embedding = relation_embedding[[0, 'vector'
                                         ]].rename(columns={0: "relation"})
relation_embedding

Bersihkan file sementara

shutil.rmtree(temp_dir)

Contoh

Lihat contoh berikut tentang cara menggunakan himpunan data Pemberi Rekomendasi Microsoft News:

Langkah berikutnya

Lihat beberapa model rekomendasi berita garis besar yang dikembangkan di MIND dari Repositori Microsoft Recommenders

Lihat himpunan data lainnya di katalog Open Datasets.