Recomendação de Notícias da Microsoft
Microsoft News Dataset (MIND) é um conjunto de dados em grande escala para pesquisa de recomendação de notícias. Foi recolhido a partir de registos de comportamento anónimos do site Microsoft News. A missão do MIND é funcionar como um conjunto de dados de referência para a recomendação de notícias e para facilitar a investigação na área da recomendação de notícias e de sistemas de recomendação.
O MIND contém cerca de 160 mil artigos de notícias em inglês e mais de 15 milhões de registos de impressões gerados por um milhão de utilizadores. Cada artigo de notícias contém conteúdo textual rico, incluindo título, resumo, corpo, categoria e entidades. Cada log de impressões contém os eventos de clique, eventos não clicados e comportamentos históricos de cliques em notícias desse usuário antes dessa impressão. Para proteger a privacidade dos utilizadores, cada utilizador foi desassociado do sistema de produção quando o ID foi tornado anónimo em segurança através de hash. Para obter informações mais detalhadas sobre o conjunto de dados MIND, consulte o artigo MIND: A Large-scale Dataset for News Recommendation.
Volume
Os dados de preparação e de validação são ambos uma pasta zip comprimida, que contêm quatro ficheiros diferentes:
NOME DO FICHEIRO | DESCRIÇÃO |
---|---|
behaviors.tsv | Os históricos de cliques e os registos de impressões dos utilizadores |
news.tsv | A informação dos artigos de notícias |
entity_embedding.vec | As incorporações de entidades em notícias extraídas do gráfico de conhecimentos |
relation_embedding.vec | As incorporações de relações entre entidades extraídas do gráfico de conhecimentos |
behaviors.tsv
O arquivo behaviors.tsv contém os logs de impressões e históricos de cliques de notícias dos usuários. Tem cinco colunas divididas pelo símbolo da guia:
- ID de Impressão. O ID de uma impressão.
- ID de Utilizador. O ID anónimo de um utilizador.
- Tempo. O tempo de impressão com o formato "MM/DD/AAAA HH:MM:SS AM/PM".
- Histórico. O histórico de cliques em notícias (lista de IDs das notícias que foram clicadas) deste utilizador antes desta impressão.
- Impressões. Lista de notícias exibidas nesta impressão e comportamentos de clique do usuário nelas (1 para clique e 0 para não clique).
Segue-se um exemplo na tabela abaixo:
COLUNA | CONTEÚDO |
---|---|
ID de Impressão | 123 |
ID de Utilizador | U131 |
Hora | 11/13/2019 8:36:57 |
Histórico | N11 N21 N103 |
Impressões | N4-1 N34-1 N156-0 N207-0 N198-0 |
news.tsv
O arquivo news.tsv contém as informações detalhadas de artigos de notícias envolvidos no arquivo behaviors.tsv. Tem sete colunas, que são divididas pelo símbolo da guia:
- ID da Notícia
- Categoria
- Subcategoria
- Título
- Abstract
- URL
- Entidades de Título (as entidades presentes no título desta notícia)
- Entidades de Resumo (as entidades presentes no resumo desta notícia)
Os corpos de conteúdo completo dos artigos de notícias do MSN não são disponibilizados para download, devido à estrutura de licenciamento. No entanto, para sua conveniência, disponibilizámos um script de utilitário para ajudar a analisar as páginas Web de notícias dos URLs do MSN no conjunto de dados. Devido às limitações de tempo, alguns URLs expiram e não é possível aceder aos mesmos com êxito. Estamos atualmente a trabalhar arduamente para resolver este problema.
É mostrado um exemplo na tabela seguinte:
COLUNA | CONTEÚDO |
---|---|
ID da Notícia | N37378 |
Categoria | desporto |
Subcategoria | golfe |
Título | Vencedores do PGA Tour |
Abstract | Galeria dos vencedores recentes do PGA Tour. |
URL | https://www.msn.com/en-us/sports/golf/pga-tour-winners/ss-AAjnQjj?ocid=chopendata |
Entidades do Título | [{"Label": "PGA Tour", "Type": "O", "WikidataId": "Q910409", "Confidence": 1.0, "OccurrenceOffsets": [0], "SurfaceForms": ["PGA Tour"]}] |
Entidades do Resumo | [{"Label": "PGA Tour", "Type": "O", "WikidataId": "Q910409", "Confidence": 1.0, "OccurrenceOffsets": [35], "SurfaceForms": ["PGA Tour"]}] |
As descrições das chaves do dicionário na coluna "Entidades" estão listadas da seguinte forma:
CHAVES | DESCRIÇÃO |
---|---|
Etiqueta | O nome da entidade no gráfico de conhecimento do Wikidata |
Type | O tipo desta entidade em Wikidata |
WikidataId | O ID da entidade em Wikidata |
Confiança | A confiança da associação de entidades |
OccurrenceOffsets | O desvio de entidades ao nível de carateres no texto do título ou do resumo |
SurfaceForms | Os nomes das entidades em bruto no texto original |
entity_embedding.vec & relation_embedding.vec
Os arquivos entity_embedding.vec e relation_embedding.vec contêm as incorporações de 100 dimensões das entidades e relações aprendidas com o subgrafo (do gráfico de conhecimento WikiData) pelo método TransE. Em ambos os ficheiros, a primeira coluna é o ID da entidade/relação e as restantes são os valores do vetor de incorporação. Esperamos que estes dados possam facilitar a investigação relativa à recomendação de notícias orientadas por conhecimentos. Apresentamos um exemplo abaixo:
ID | VALORES DE INCORPORAÇÃO |
---|---|
Q42306013 | 0.014516 -0.106958 0.024590 … -0.080382 |
Devido a algumas razões para aprender a incorporar a partir do subgráfico, algumas entidades podem não ter incorporações no arquivo entity_embedding.vec.
Localização de armazenamento
Os dados são armazenados em blobs no centro de dados Oeste/Leste dos EUA, no seguinte contêiner de blob: 'https://mind201910small.blob.core.windows.net/release/'.
Dentro do contêiner, o conjunto de treinamento e validação é compactado em MINDlarge_train.zip e MINDlarge_dev.zip, respectivamente.
Informações adicionais
A transferência do conjunto de dados MIND é gratuita para fins de investigação ao abrigo dos Termos de Licenciamento da Microsoft Research. Entre em contato mind@microsoft.com se tiver alguma dúvida sobre o conjunto de dados.
Acesso a dados
Azure Notebooks
Bloco de notas de demonstração para aceder a dados MIND no Azure
Este bloco de anotações fornece um exemplo de acesso a dados MIND do armazenamento de blob no Azure.
Os dados MIND são armazenados no centro de dados Oeste/Leste dos EUA, pelo que este bloco de notas será executado de forma mais eficiente na computação do Azure localizada no Oeste/Leste dos EUA.
Importações e ambiente
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'
Funções
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
Baixe e extraia os arquivos
# 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)
Leia os arquivos com 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
Limpar ficheiros temporários
shutil.rmtree(temp_dir)
Exemplos
Consulte os seguintes exemplos de como usar o conjunto de dados Microsoft News Recommender:
- Desafio de Recomendação de Notícias MIND
- Repositório de recomendações da Microsoft
- MIND: Conjunto de dados de notícias da Microsoft
Próximos passos
Confira vários modelos de recomendação de notícias de linha de base desenvolvidos no MIND a partir do Microsoft Recommenders Repository
Exiba o restante dos conjuntos de dados no catálogo Open Datasets.