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 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. 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:
- MIND News Recommendation Challenge
- Repozytorium osób polecających firmy Microsoft
- MIND: Microsoft News Dataset
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).