Doporučení microsoftu pro novinky
Microsoft News Dataset (MIND) je rozsáhlá datová sada pro výzkum doporučení zpráv. Byla shromážděna z anonymizovaných protokolů chování na webu Microsoft News. MIND si klade za cíl sloužit jako srovnávací datová sada pro doporučení zpravodajství a podporovat výzkum v oblasti doporučení zpravodajství a doporučovacích systémů.
Sada MIND obsahuje přibližně 160 000 zpravodajských článků v angličtině a více než 15 milionů protokolů impresí vygenerovaných více než 1 milionem uživatelů. Každý článek obsahuje bohatý textový obsah, včetně názvu, abstraktu, textu, kategorie a entit. Každý protokol imprese obsahuje události kliknutí, neklikané události a historické chování kliknutí na zprávy tohoto uživatele před tímto impresí. V rámci zajištění ochrany osobních údajů byli jednotliví uživatelé po úspěšném zahashování na anonymizované ID odpojeni od produkčního systému. Podrobnější informace o datové sadě MIND najdete v dokumentu MIND: Rozsáhlá datová sada pro doporučení k zprávám.
Objem
Trénovací i ověřovací data jsou v zazipované složce, která obsahuje čtyři různé soubory:
NÁZEV SOUBORU | POPIS |
---|---|
behaviors.tsv | Historie kliknutí a protokoly impresí uživatelů |
news.tsv | Informace o zpravodajských článcích |
entity_embedding.vec | Vložení entit extrahovaných z grafu znalostí ve zpravodajství |
relation_embedding.vec | Vložení relací mezi entitami extrahovanými z grafu znalostí |
behaviors.tsv
Soubor behaviors.tsv obsahuje protokoly zobrazení a historie kliknutí na zprávy uživatelů. Má pět sloupců rozdělených symbolem tabulátoru:
- ID imprese Identifikátor imprese
- ID uživatele. Anonymní ID uživatele
- Čas. Doba imprese ve formátu MM/DD/RRRR HH:MM:SS AM/PM.
- Historie. Historie kliknutí (seznam ID prokliknutých zpravodajských zpráv) příslušného uživatele před touto impresí
- Imprese Seznam zpráv zobrazených v tomto zobrazení a chování kliknutí uživatele (1 pro kliknutí a 0 pro neklikání).
Příklad je uvedený v následující tabulce:
SLOUPEC | OBSAH |
---|---|
ID imprese | 123 |
ID uživatele | U131 |
Čas | 11/13/2019 8:36:57 AM |
Historie | N11 N21 N103 |
Imprese | N4-1 N34-1 N156-0 N207-0 N198-0 |
news.tsv
Soubor news.tsv obsahuje podrobné informace o zprávách, které jsou součástí souboru behaviors.tsv. Má sedm sloupců, které jsou rozděleny symbolem tabulátoru:
- ID zpravodajství
- Kategorie
- Podkategorie
- Nadpis
- Shrnutí
- Adresa URL
- Entity nadpisu (entity obsažené v názvu této zpravodajské zprávy)
- Entity shrnutí (entity obsažené ve shrnutí této zpravodajské zprávy)
Kvůli struktuře licencování nejsou k dispozici úplná obsahová těla novinek MSN ke stažení. Pro usnadnění práce ale poskytujeme pomocný skript, který pomáhá parsovat zpravodajské webové stránky z adres URL pro MSN v této datové sadě. Vzhledem k časovým omezením platnost některých adres URL vypršela a nejde k nim získat přístup. Aktuálně se snažíme tento problém vyřešit.
Příklad je uvedený v následující tabulce:
SLOUPEC | OBSAH |
---|---|
ID zpravodajství | N37378 |
Kategorie | sport |
Podkategorie | golf |
Nadpis | Vítězové PGA Tour |
Shrnutí | Galerie nedávných vítězů PGA Tour |
Adresa URL | https://www.msn.com/en-us/sports/golf/pga-tour-winners/ss-AAjnQjj?ocid=chopendata |
Entity nadpisu | [{"Popisek": "PGA Tour", "Type": "O", "WikidataId": "Q910409", "Confidence": 1.0, "OccurrenceOffsets": [0], "SurfaceForms": ["PGA Tour"]}] |
Entity shrnutí | [{"Label": "PGA Tour", "Type": "O", "WikidataId": "Q910409", "Confidence": 1.0, "OccurrenceOffsets": [35], "SurfaceForms": ["PGA Tour"]}] |
Popisy klíčů slovníku ve sloupci Entity jsou uvedeny takto:
KLÍČE | POPIS |
---|---|
Popisek | Název entity v grafu znalostí Wikidata |
Typ | Typ této entity ve Wikidata |
WikidataId | ID entity ve Wikidata |
Spolehlivost | Spolehlivost spojování entit |
OccurrenceOffsets | Posun entity v textu názvu nebo shrnutí (na úrovni znaků) |
SurfaceForms | Nezpracované názvy entit v původním textu |
entity_embedding.vec a relation_embedding.vec
Soubory entity_embedding.vec a relation_embedding.vec obsahují 100rozměrné vkládání entit a vztahů získaných z podgrafu (z grafu znalostí WikiData) metodou TransE. Prvním sloupec v obou souborech tvoří ID entity nebo relace a ostatní sloupce jsou vektorové hodnoty příslušných vložení. Doufáme, že vám tato data pomohou při výzkumu doporučení pro zpravodajství na základě znalostí. Příklad najdete níže:
ID | VKLÁDÁNÍ HODNOT |
---|---|
Q42306013 | 0.014516 -0.106958 0.024590 … -0.080382 |
Z některých důvodů při učení vkládání z podgrafu nemusí do souboru entity_embedding.vec vkládat několik entit.
Dočasné úložiště
Data jsou uložená v objektech blob v datacentru USA – západ/východ v následujícím kontejneru objektů blob: 'https://mind201910small.blob.core.windows.net/release/'.
V rámci kontejneru se trénovací a ověřovací sada komprimují do MINDlarge_train.zip a MINDlarge_dev.zip.
Další informace
Datová sada MIND je pro účely výzkumu volně ke stažení v rámci licenčních podmínek Microsoftu pro výzkum. Pokud máte nějaké dotazy k datové sadě, kontaktujte mind@microsoft.com ho.
Přístup k datům
Azure Notebooks
Ukázkový poznámkový blok pro přístup k datům MIND v Azure
Tento poznámkový blok poskytuje příklad přístupu k datům MIND z úložiště objektů blob v Azure.
Data MIND se ukládají v datacentru USA – západ/východ, takže tento poznámkový blok bude efektivněji fungovat na výpočetních prostředcích Azure umístěných v oblasti USA – západ/východ.
Importy a prostředí
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'
Funkce
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
Stažení a extrahování souborů
# 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)
Čtení souborů pomocí knihovny 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
Vyčištění dočasných souborů
shutil.rmtree(temp_dir)
Příklady
Podívejte se na následující příklady použití datové sady Microsoft News Recommender:
Další kroky
Podívejte se na několik standardních modelů doporučení zpráv vyvinutých na webu MIND z úložiště Microsoft Recommenders
Prohlédněte si zbývající datové sady v katalogu Open Datasets.