Rekommendation för Microsoft News
Microsoft News Dataset (MIND) är en storskalig datamängd för nyhetsrekommendationsforskning. Den har samlats in från anonyma beteendeloggar på webbplatsen för Microsoft News. Syftet med MIND är att fungera som en benchmark-datamängd för nyhetsrekommendationer och underlätta sökning i nyhetsrekommendationer och rekommendationssystem.
MIND innehåller cirka 160 000 engelska nyhetsartiklar och drygt 15 miljoner loggar som genererats av 1 miljon användare. Varje nyhetsartikel innehåller RTF-innehåll, inklusive rubrik, abstrakt, brödtext, kategori och entiteter. Varje visningslogg innehåller klickhändelser, icke-klickade händelser och historiska nyhetsklicksbeteenden för den här användaren före det här intrycket. För att skydda användarsekretessen har varje användarlänk tagits bort från produktionssystemet och skyddats med en hashkodning i ett anonymt ID. Mer detaljerad information om MIND-datamängden finns i artikeln MIND: A Large-scale Dataset for News Recommendation (Mind: A Large-scale Dataset for News Recommendation).
Volume
Både tränings- och valideringsdata finns i en komprimerad mapp som innehåller fyra olika filer:
FILNAMN | BESKRIVNING |
---|---|
behaviors.tsv | Klickhistorik och visningsloggar för användare |
news.tsv | Information om nyhetsartiklar |
entity_embedding.vec | Inbäddade entiteter i nyheter som extraherats från en kunskapsgraf |
relation_embedding.vec | Inbäddade relationer mellan entiteter som extraherats från en kunskapsgraf |
behaviors.tsv
Filen behaviors.tsv innehåller visningsloggarna och användarnas nyhetsklickshistorik. Den har fem kolumner dividerade med fliksymbolen:
- Visnings-ID. ID för en visning.
- Användar-ID. Anonymt ID för användaren.
- Tid. Visningstiden med formatet "MM/DD/ÅÅÅÅÅ HH:MM:SS AM/PM".
- Historik. Klickhistorik för nyheterna (ID-lista med klickade nyheter) från aktuell användare före denna visning.
- Visningar. Lista över nyheter som visas i det här intrycket och användarens klickbeteenden på dem (1 för klick och 0 för icke-klick).
Ett exempel visas i tabellen nedan:
KOLUMN | INNEHÅLL |
---|---|
Visnings-ID | 123 |
Användar-ID | U131 |
Tid | 11/13/2019 8:36:57 AM |
Historik | N11 N21 N103 |
Visningar | N4-1 N34-1 N156-0 N207-0 N198-0 |
news.tsv
Filen news.tsv innehåller detaljerad information om nyhetsartiklar som ingår i filen behaviors.tsv. Den har sju kolumner, som delas med fliksymbolen:
- Nyhets-ID
- Kategori
- Underkategori
- Title
- Sammanfattning
- webbadress
- Rubrikentiteter (entiteter i nyheternas rubrik)
- Sammanfattningsentiteter (entiteter i nyheternas sammanfattning)
De fullständiga innehållsorganen i MSN-nyhetsartiklar görs inte tillgängliga för nedladdning på grund av licensieringsstrukturen. Men vi har ett verktygsskript som kan hjälpa dig att parsa nyhetswebbsidan från MSN:s webbadresser i datamängden. På grund av tidsbegränsningar har vissa webbadresser upphört att gälla och går inte att öppna. Vi försöker för närvarande att lösa det här problemet.
Ett exempel visas i följande tabell:
KOLUMN | INNEHÅLL |
---|---|
Nyhets-ID | N37378 |
Kategori | sport |
Underkategori | golf |
Title | Vinnare på PGA-touren |
Sammanfattning | Ett galleri med de senaste vinnarna på PGA-touren. |
webbadress | https://www.msn.com/en-us/sports/golf/pga-tour-winners/ss-AAjnQjj?ocid=chopendata |
Rubrikentiteter | [{"Label": "PGA Tour", "Type": "O", "WikidataId": "Q910409", "Confidence": 1.0, "OccurrenceOffsets": [0], "SurfaceForms": ["PGA Tour"]}] |
Sammanfattningsentiteter | [{"Label": "PGA Tour", "Type": "O", "WikidataId": "Q910409", "Confidence": 1.0, "OccurrenceOffsets": [35], "SurfaceForms": ["PGA Tour"]}] |
Beskrivningarna av ordlistenycklarna i kolumnen "Entiteter" visas på följande sätt:
NYCKLAR | BESKRIVNING |
---|---|
Etikett | Entitetsnamnet i kunskapsdiagrammet Wikidata |
Typ | Typ av entitet i Wikidata |
WikidataId | Entitets-ID i Wikidata |
Konfidensbedömning | Konfidens för entitetslänkningen |
OccurrenceOffsets | Entitetsförskjutning på teckennivå för text i rubrik eller sammanfattning |
SurfaceForms | Rådatans entitetsnamn i originaltexten |
entity_embedding.vec & relation_embedding.vec
Filerna entity_embedding.vec och relation_embedding.vec innehåller de 100-dimensionella inbäddningarna av entiteter och relationer som lärts från undergrafen (från WikiData-kunskapsdiagrammet) med TransE-metoden. I båda filerna är den första kolumnen ID:t för entiteten/relationen och de andra kolumnerna är inbäddade vektorvärden. Vi hoppas att dessa data kan underlätta sökningen i nyhetsrekommendationer. Ett exempel visas nedan:
ID | INBÄDDNINGSVÄRDEN |
---|---|
Q42306013 | 0.014516 -0.106958 0.024590 … -0.080382 |
På grund av vissa orsaker till att lära sig inbäddning från undergrafen kanske några entiteter inte har inbäddningar i filen entity_embedding.vec.
Lagringsplats
Data lagras i blobar i datacentret usa, västra/östra i följande blobcontainer: 'https://mind201910small.blob.core.windows.net/release/'.
I containern komprimeras tränings- och valideringsuppsättningen till MINDlarge_train.zip respektive MINDlarge_dev.zip.
Ytterligare information
MIND-datamängden är kostnadsfri att ladda ner för forskningssyften enligt licensvillkoren för Microsoft Research. Kontakta mind@microsoft.com om du har några frågor om datauppsättningen.
Dataåtkomst
Azure Notebooks
Demo notebook för åtkomst till MIND-data i Azure
Den här notebook-filen innehåller ett exempel på åtkomst till MIND-data från bloblagring i Azure.
MIND-data lagras i datacentret usa, västra/östra, så den här notebook-filen körs mer effektivt på Azure-beräkningen i USA, västra/östra.
Importer och miljö
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'
Funktioner
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
Ladda ned och extrahera filerna
# 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)
Läs filerna med 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
Rensa temporära filer
shutil.rmtree(temp_dir)
Exempel
Se följande exempel på hur du använder datauppsättningen Microsoft News Recommender:
- Rekommendationsutmaning för MIND News
- Microsoft Recommenders-lagringsplats
- MIND: Microsoft News Dataset
Nästa steg
Kolla in flera baslinjemodeller för nyhetsrekommendationer som utvecklats på MIND från Microsoft Recommenders Repository
Visa resten av datauppsättningarna i katalogen Öppna datamängder.