Zalecenie dotyczące wiadomości firmy Microsoft

Microsoft News Dataset (MIND) to duży zestaw danych 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 zawartość tekstową sformatowaną, w tym tytuł, abstrakcyjny, treść, kategoria 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. Aby uzyskać bardziej szczegółowe informacje na temat zestawu danych MIND, możesz zapoznać się z dokumentem MIND: A Large-scale Dataset for News Recommendation (Umysł: zestaw danych na dużą skalę dla rekomendacji dotyczącej wiadomości).

Objętość

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. Zawiera pięć kolumn podzielonych przez symbol karty:

  • Identyfikator wrażenia. Identyfikator wrażenia.
  • Identyfikator użytkownika. Anonimowy identyfikator użytkownika.
  • Czas. Czas wrażenia z formatem "MM/DD/RRRR 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 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ŚĆ
Identyfikator wrażenia 123
Identyfikator użytkownika U131
Czas 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żowanymi w plik behaviors.tsv. Zawiera siedem kolumn, które są podzielone przez symbol karty:

  • Identyfikator wiadomości
  • Kategoria
  • Podkategoria
  • Tytuł
  • Abstract
  • 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 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ŚĆ
Identyfikator wiadomości N37378
Kategoria sports
Podkategoria golf
Tytuł PGA Tour winners
Abstract Galeria ostatnich zwycięzców turniejów z cyklu PGA Tour.
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

plik entity_embedding.vec i 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 uczenia osadzania z podgrafu kilka jednostek może nie mieć osadzonych w pliku entity_embedding.vec.

Lokalizacja usługi Storage

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 odpowiednio do pliku 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. Skontaktuj się, mind@microsoft.com jeśli masz pytania dotyczące zestawu danych.

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 przypadku obliczeń 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 serwerze MIND z repozytorium Microsoft Recommenders

Wyświetl pozostałe zestawy danych w katalogu Open Datasets (Otwieranie zestawów danych).