zalecenie dotyczące Microsoft News

MicrosoftNewsDataset (MIND) to zestaw danych na dużą skalę na potrzeby badań rekomendacji wiadomości. Został on zebrany na podstawie zanonimizowanych dzienników zachowań z witryny internetowej Microsoft News. Zestaw danych MIND służy jako zestaw danych testu porównawczego dla rekomendacji wiadomości i ułatwia badania w obszarze rekomendacji wiadomości oraz systemów rekomendacji.

Zestaw danych MIND zawiera ponad 160 tys. artykułów z wiadomościami i ponad 15 mln dzienników wrażeń wygenerowanych przez ponad 1 mln użytkowników. Każdy artykuł z wiadomościami zawiera zawartość tekstową sformatowaną, w tym tytuł, abstrakcję, treść, kategorię i jednostki. Każdy dziennik wyświetleń zawiera zdarzenia kliknięcia, zdarzenia nie kliknięć i historyczne zachowania kliknięć wiadomości tego użytkownika przed tym wrażeniem. Aby chronić prywatność użytkownika, każdy użytkownik został odłączony od systemu produkcyjnego po bezpiecznym utworzeniu skrótu do zanonimizowanego identyfikatora użytkownika. Bardziej szczegółowe informacje o zestawie danych MIND możesz znaleźć w dokumencie MIND: A Large-scale Dataset for News Recommendation (Zestaw danych o dużej skali na potrzeby rekomendacji wiadomości).

Wolumin

Dane szkoleniowe oraz dane na potrzeby weryfikacji mają postać skompresowanych folderów w formacie ZIP, które zawierają cztery różne pliki:

NAZWA PLIKU OPIS
behaviors.tsv Historie związane z kliknięciami i dzienniki wrażeń użytkowników
news.tsv Informacje zawarte w artykułach z wiadomościami
entity_embedding.vec Osadzenia jednostek w wiadomościach wyodrębnione z grafu wiedzy
relation_embedding.vec Osadzenia relacji między jednostkami wyodrębnione z grafu wiedzy

behaviors.tsv

Plik behaviors.tsv zawiera dzienniki wyświetleń i historie kliknięć wiadomości użytkowników. Ma pięć kolumn podzielonych przez symbol karty:

  • Identyfikator wrażenia. Identyfikator wrażenia.
  • Identyfikator użytkownika. Anonimowy identyfikator użytkownika.
  • Data. Czas wrażenia z formatem "MM/DD/RRRR GG:MM:SS AM/PM".
  • Historia. Historia kliknięć wiadomości (lista identyfikatorów klikniętych wiadomości) tego użytkownika przed danym wrażeniem.
  • Wrażenia. Lista wiadomości wyświetlanych w tym wrażeniach i zachowaniach kliknięć użytkownika (1 dla kliknięcia i 0 dla nie-kliknięcia).

Przykład został przedstawiony w poniższej tabeli:

KOLUMNA ZAWARTOŚCI
Identyfikator wrażenia 123
Identyfikator użytkownika U131
Godzina 13.11.2019 8:36:57
Historia N11 N21 N103
Wrażenia N4-1 N34-1 N156-0 N207-0 N198-0

news.tsv

Plik news.tsv zawiera szczegółowe informacje o artykułach z wiadomościami zaangażowanych w plik behaviors.tsv. Zawiera ona siedem kolumn, które są podzielone za pomocą symbolu karty:

  • Identyfikator wiadomości
  • Kategoria
  • Subcategory (Podkategoria)
  • Tytuł
  • Abstract
  • Adres URL
  • Jednostki tytułu (jednostki zawarte w tytule tej wiadomości)
  • Jednostki abstraktu (jednostki zawarte w abstrakcie tej wiadomości)

Pełne treści artykułów z wiadomościami w witrynie MSN nie są udostępniane do pobrania ze względu na strukturę licencjonowania. Jednak dla Twojej wygody udostępniliśmy skrypt narzędziowy ułatwiający parsowanie witryny internetowej z wiadomościami na podstawie adresów URL witryny MSN znajdujących się w zestawie danych. Ze względu na ograniczenia czasowe niektóre adresy URL wygasły i nie można do nich uzyskać dostępu. Aktualnie staramy się rozwiązać ten problem.

Przykład przedstawiono w następującej tabeli:

KOLUMNA ZAWARTOŚCI
Identyfikator wiadomości N37378
Kategoria sports
SubCategory golf
Tytuł PGA Tour winners
Abstract Galeria ostatnich zwycięzców turniejów z cyklu PGA Tour.
Adres URL https://www.msn.com/en-us/sports/golf/pga-tour-winners/ss-AAjnQjj?ocid=chopendata
Jednostki tytułów [{"Label": "PGA Tour", "Type": "O", "WikidataId": "Q910409", "Confidence": 1.0, "OccurrenceOffsets": [0], "SurfaceForms": ["PGA Tour"]}]
Jednostki abstraktów [{"Label": "PGA Tour", "Type": "O", "WikidataId": "Q910409", "Confidence": 1.0, "OccurrenceOffsets": [35], "SurfaceForms": ["PGA Tour"]}]

Opisy kluczy słownika w kolumnie "Jednostki" są wymienione w następujący sposób:

KLUCZE OPIS
Etykieta Nazwa jednostki na wykresie wiedzy wikidata
Typ Typ jednostki w ramach danych Wikidata
WikidataId Identyfikator jednostki w ramach danych Wikidata
Ufność Ufność łączenia jednostek
OccurrenceOffsets Przesunięcie jednostek na poziomie charakteru w tekście tytułu lub abstraktu
SurfaceForms Nieprzetworzone nazwy jednostek w ramach tekstu oryginalnego

entity_embedding.vec & relation_embedding.vec

Pliki entity_embedding.vec i relation_embedding.vec zawierają 100-wymiarowe osadzanie jednostek i relacji poznanych na podstawie podgrafu (z grafu wiedzy WikiData) przez metodę TransE. W obu tych plikach pierwsza kolumna to identyfikator jednostki/relacji, a pozostałe kolumny to wartości wektora osadzania. Mamy nadzieję, że te dane umożliwiają przeprowadzenie badania rekomendacji dotyczących wiadomości uwzględniających wiedzę. Przykład przedstawiono poniżej:

ID OSADZANIE WARTOŚCI
Q42306013 0.014516 -0.106958 0.024590 ... -0.080382

Ze względu na niektóre przyczyny osadzania z podgrafu kilka jednostek może nie mieć osadzonych w pliku entity_embedding.vec.

Lokalizacja magazynu

Dane są przechowywane w obiektach blob w centrum danych Zachodnie/Wschodnie stany USA w następującym kontenerze obiektów blob: "https://mind201910small.blob.core.windows.net/release/".

W kontenerze zestaw trenowania i walidacji są kompresowane odpowiednio do MINDlarge_train.zip i MINDlarge_dev.zip.

Dodatkowe informacje

Zestaw danych MIND można pobrać bezpłatnie na potrzeby badań zgodnie z postanowieniami licencyjnymi działu Microsoft Research. Jeśli masz pytania dotyczące zestawu danych, skontaktuj się z mind@microsoft.com nami.

Dostęp do danych

Azure Notebooks

Notes demonstracyjny umożliwiający uzyskiwanie dostępu do danych MIND na platformie Azure

Ten notes zawiera przykład uzyskiwania dostępu do danych MIND z magazynu obiektów blob na platformie Azure.

Dane MIND są przechowywane w centrum danych Zachodnie/Wschodnie stany USA, więc ten notes będzie działać wydajniej w obliczeniach platformy Azure znajdujących się w regionie Zachodnie/Wschodnie stany USA.

Importy i środowisko

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'

Funkcje

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

Pobieranie i wyodrębnianie plików

# 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)

Odczytywanie plików za pomocą biblioteki 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

Czyszczenie plików tymczasowych

shutil.rmtree(temp_dir)

Przykłady

Zapoznaj się z poniższymi przykładami używania zestawu danych Microsoft News Recommender:

Następne kroki

Zapoznaj się z kilkoma podstawowymi modelami rekomendacji dotyczących wiadomości opracowanymi na platformie MIND z repozytorium microsoft Recommenders

Wyświetl pozostałe zestawy danych w katalogu Open Datasets (Otwarte zestawy danych).