Microsoft News zalecenia

Mi crosoft N ews D ataset (MIND) to zestaw danych na dużą skalę do 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 bogatą zawartość tekstową, w tym tytuł, abstrakt, treść, kategorię i jednostki. Każdy dziennik wrażenia zawiera zdarzenia kliknięcia, zdarzenia nie kliknął i historyczne zachowania kliknięcia 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 wrażenia i historie kliknięcia 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 w formacie "MM/DD/YYYY HH: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 wyświetleniu i zachowaniach użytkowników w przypadku kliknięcia (1 w przypadku kliknięcia i 0 w przypadku braku 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 dotyczące artykułów z wiadomościami związanych z plikiem behaviors.tsv. Ma siedem kolumn, które są podzielone przez symbol 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łna treść artykułów z wiadomościami w witrynie MSN nie jest dostępna 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 osadzenia jednostek i relacji nauczone z podgrafu (z grafu wiedzy WikiData) za pomocą metody 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 WARTOŚCI OSADZANIA
Q42306013 0.014516 -0.106958 0.024590 ... -0.080382

Z pewnych powodów, dla których uczenie się osadzania z podgrafu, kilka jednostek może nie mieć osadzeń 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 szkoleniowy i weryfikacyjny są kompresowane 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 mind@microsoft.com masz pytania dotyczące zestawu danych, skontaktuj się z nami.

Dostęp do danych

Azure Notebooks

Notes demonstracyjny na temat uzyskiwania 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 regionach 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ą 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

Zobacz następujące przykłady użycia zestawu danych Microsoft News Recommender:

Następne kroki

Zapoznaj się z kilkoma bazowymi modelami rekomendacji wiadomości opracowanymi na platformie MIND z repozytorium Microsoft Recommenders

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