Microsoft News Recommendation
MIcrosoft News Dataset (MIND) — это крупномасштабный набор данных для исследования рекомендаций новостей. Данные для него собраны из анонимизированных журналов поведения пользователей веб-сайта Microsoft News. Задача MIND — служить эталонным набором данных для рекомендаций по новостям и содействовать исследованиям в области рекомендаций новостей и систем рекомендаций.
MIND содержит около 160 тыс. новостных статей на английском языке и более 15 млн журналов просмотров от 1 млн пользователей. Каждая новостная статья содержит расширенное текстовое содержимое, включая заголовок, аннотацию, текст, категорию и сущности. В каждом журнале просмотров содержатся события щелчка мышью, события без щелчка и исторические данные о поведении этого пользователя, касающиеся щелчков новостей, до этого просмотра. Для защиты конфиденциальности пользователей была удалена связь каждого пользователя с рабочей системой, а его данные надежно хэшированы в анонимный идентификатор. Дополнительные сведения о наборе данных MIND см. в документе MIND: масштабируемый набор данных для рекомендаций новостей.
Громкость
Данные для обучения и проверки содержатся в сжатой папке формата ZIP, состоящей из четырех разных файлов:
ИМЯ ФАЙЛА | ОПИСАНИЕ |
---|---|
behaviors.tsv | Журналы щелчков и просмотров пользователей |
news.tsv | Сведения из новостных статей |
entity_embedding.vec | Внедрение сущностей в новостях, извлеченных из графа знаний |
relation_embedding.vec | Внедрение отношений между сущностями, извлеченными из графа знаний |
behaviors.tsv
Файл behaviors.tsv содержит журналы просмотров и историю щелчков пользователей по новостям. В нем есть пять столбцов, разделенных символами табуляции.
- Impression ID. Идентификатор просмотра.
- ИД пользователя Анонимный идентификатор пользователя.
- Время. Время просмотра в формате ММ/ДД/ГГГГ ЧЧ:ММ:СС (до полудня/после полудня).
- Исторические данные. Журнал щелчков по новостям (список идентификаторов новостей, по которым был осуществлен щелчок) этого пользователя до этого просмотра.
- Impressions. Список новостей, отображенных при этом просмотре, и поведение пользователя, касающееся щелчков по этим новостям (1 — щелчок, 0 — отсутствие щелчка).
Пример показан в таблице ниже.
СТОЛБЕЦ | CONTENT |
---|---|
Impression ID | 123 |
Идентификатор пользователя | U131 |
Время | 11/13/2019 8:36:57 AM |
Журнал | N11 N21 N103 |
Impressions | N4-1 N34-1 N156-0 N207-0 N198-0 |
news.tsv
Файл news.tsv содержит подробную информацию о новостных статьях из файла behaviors.tsv. В нем есть семь столбцов, разделенных символами табуляции.
- News ID
- Категория
- Подкатегории
- Заголовок
- Краткие сведения
- URL
- Title Entities (Сущности из заголовка) — сущности, указанные в заголовке новости;
- Abstract Entities (Сущности из аннотации) — сущности, указанные в аннотации к новости.
Полное содержание новостных статей MSN недоступно для скачивания из-за структуры лицензирования. Однако для вашего удобства мы предоставляем служебный скрипт, с помощью которого можно проанализировать веб-страницу новостей на основе URL-адресов MSN в наборе данных. Из-за ограничений по времени некоторые URL-адреса устарели, и к ним нельзя получить доступ. Сейчас мы стараемся решить эту проблему.
Пример приведен в следующей таблице.
СТОЛБЕЦ | CONTENT |
---|---|
News ID | N37378 |
Категория | sports (спорт) |
SubCategory | golf |
Заголовок | PGA Tour winners (Победители PGA Tour) |
Краткие сведения | A gallery of recent winners on the PGA Tour (Галерея победителей последнего соревнования PGA Tour). |
URL | https://www.msn.com/en-us/sports/golf/pga-tour-winners/ss-AAjnQjj?ocid=chopendata |
Title Entities | [{"Label": "PGA Tour", "Type": "O", "WikidataId": "Q910409", "Confidence": 1.0, "OccurrenceOffsets": [0], "SurfaceForms": ["PGA Tour"]}] |
Abstract Entites | [{"Label": "PGA Tour", "Type": "O", "WikidataId": "Q910409", "Confidence": 1.0, "OccurrenceOffsets": [35], "SurfaceForms": ["PGA Tour"]}] |
Описания ключей словаря в столбце Entities приведены в следующем виде.
KEYS | ОПИСАНИЕ |
---|---|
Подпись | Название сущности в графе знаний Викиданных |
Тип | Тип этой сущности в Викиданных |
WikidataId | Идентификатор сущности в Викиданных |
Достоверность | Достоверность связывания сущностей |
OccurrenceOffsets | Смещение сущности на уровне символов в тексте заголовка или аннотации |
SurfaceForms | Необработанные имена сущностей в исходном тексте |
entity_embedding.vec & relation_embedding.vec
Файлы entity_embedding.vec и relation_embedding.vec содержат 100-мерные внедрения сущностей и отношений, полученные из подграфа (из графа знаний Викиданных) методом TransE. В обоих файлах в первом столбце указывается идентификатор сущности или отношения, а в остальных столбцах — векторные значения внедрения. Мы надеемся, что эти данные помогут в исследовании рекомендаций по новостям, основанных на знаниях. Пример приведен ниже:
Идентификатор | Значения внедрения |
---|---|
Q42306013 | 0,014516 –0,106958 0,024590… –0,080382 |
По некоторым причинам, связанным с обучением внедрению из подграфа, некоторые сущности могут не иметь внедрений в файле entity_embedding.vec.
Место хранения
Данные хранятся в виде больших двоичных объектов в центре обработки данных региона "Западная часть США" или "Восточная часть США". Адрес контейнера: "https://mind201910small.blob.core.windows.net/release/".
В этом контейнере наборы данных для обучения и проверки содержатся в сжатом виде в файлах MINDlarge_train.zip и MINDlarge_dev.zip соответственно.
Дополнительная информация:
Набор данных MIND можно скачать бесплатно для исследовательских целей согласно условиями лицензии Майкрософт для исследований. Если у вас возникли вопросы о наборе данных, напишите по адресу mind@microsoft.com.
Доступ к данным
Записные книжки Azure
Демонстрационная записная книжка для доступа к данным MIND в Azure
В этой записной книжке представлен пример доступа к данным MIND из хранилища BLOB-объектов в Azure.
Данные MIND хранятся в центре обработки данных в западной или восточной части США, поэтому эта записная книжка будет работать эффективнее на основе вычислительных ресурсов Azure, расположенных в регионе "Западная часть США" или "Восточная часть США".
Импортируемые файлы и среда
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'
Функции
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
Скачивание файлов и извлечение их содержимого
# 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)
Чтение файлов с помощью 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
Очистка временных файлов
shutil.rmtree(temp_dir)
Примеры
См. следующие примеры использования набора данных Microsoft News Recommender:
- Задача, связанная с использованием MIND News Recommendation
- Репозиторий Microsoft Recommenders
- MIND: набор данных новостей от корпорации Майкрософт
Следующие шаги
Ознакомьтесь с несколькими базовыми моделями рекомендаций в отношении новостей, разработанными в MIND, в репозитории Microsoft Recommenders.
Ознакомьтесь с другими наборами в каталоге Открытых наборов данных.