O corpus contém perguntas e respostas coletadas no site Biblioteca de Seguros.
Até onde sabemos, no momento em que este conjunto de dados foi lançado, em 2017, era o primeiro corpus aberto de controle de qualidade na área de seguros:
O conteúdo deste corpus é gerado por usuários do mundo real, e respostas de alta qualidade são fornecidas por profissionais com profundo conhecimento do domínio. Portanto, este é um corpus de valor real, não um brinquedo.
No artigo acima, o corpus é utilizado para a tarefa de seleção de respostas. Por outro lado, outros usos deste corpus também são possíveis. Por exemplo, a aprendizagem independente através da leitura e compreensão de respostas, aprendizagem observacional, etc. permite que o sistema finalmente apresente as suas próprias respostas a perguntas invisíveis.
O conjunto de dados é dividido em duas partes: “corpus de perguntas e respostas” e “corpus de pares de perguntas e respostas”. O corpus de perguntas e respostas é traduzido dos dados originais em inglês sem outro processamento. O corpus de perguntas e respostas é baseado no corpus de perguntas e respostas. Ele também realiza segmentação de palavras, desrotulagem e parada, e adiciona rótulos. Portanto, o “corpus de perguntas e respostas” pode ser diretamente conectado às tarefas de aprendizado de máquina. Se você não estiver satisfeito com o formato dos dados ou com o efeito de segmentação de palavras, poderá usar diretamente outros métodos para processar o "corpus de perguntas e respostas" para obter dados que podem ser usados para treinar o modelo.
pip install -U insuranceqa_data
Entre no armazenamento de certificados, adquira o certificado, insira [Certificado - Detalhes] após a compra e clique em [Copiar identidade do certificado].
Em seguida, defina a variável de ambiente INSQA_DL_LICENSE
, como usando o terminal de linha de comando:
# Linux / macOS
export INSQA_DL_LICENSE=YOUR_LICENSE
# # e.g. if your license id is `FOOBAR`, run `export INSQA_DL_LICENSE=FOOBAR`
# Windows
# # 1/2 Command Prompt
set INSQA_DL_LICENSE=YOUR_LICENSE
# # 2/2 PowerShell
$env :INSQA_DL_LICENSE= ' YOUR_LICENSE '
Por fim, execute o seguinte comando para concluir o download dos dados.
python -c " import insuranceqa_data; insuranceqa_data.download_corpus() "
Os dados são divididos em dois tipos: formato POOL; Dentre eles, o formato PAIR é mais adequado para modelos de treinamento de aprendizado de máquina.
import insuranceqa_data as insuranceqa
train_data = insuranceqa . load_pool_train () # 训练集
test_data = insuranceqa . load_pool_test () # 测试集
valid_data = insuranceqa . load_pool_valid () # 验证集
# valid_data, test_data and train_data share the same properties
for x in train_data : # 打印数据
print ( 'index %s value: %s ++$++ %s ++$++ %s' %
( x , train_data [ x ][ 'zh' ], train_data [ x ][ 'en' ], train_data [ x ][ 'answers' ], train_data [ x ][ 'negatives' ]))
answers_data = insuranceqa . load_pool_answers ()
for x in answers_data : # 答案数据
print ( 'index %s: %s ++$++ %s' % ( x , answers_data [ x ][ 'zh' ], answers_data [ x ][ 'en' ]))
- | pergunta | Responder | Vocabulário (Inglês) |
---|---|---|---|
trem | 12.889 | 21.325 | 107.889 |
verificar | 2.000 | 3354 | 16.931 |
teste | 2.000 | 3308 | 16.815 |
Cada dado inclui chinês e inglês da pergunta, exemplos positivos da resposta e exemplos negativos da resposta. Deve haver pelo menos um exemplo positivo do caso, basicamente os itens 1 a 5 , sendo todos respostas corretas. Existem 200 exemplos negativos de respostas. Os exemplos negativos são criados com base na pergunta usando métodos de pesquisa, portanto estão relacionados à pergunta, mas não são a resposta correta.
{
"INDEX": {
"zh": "中文",
"en": "英文",
"domain": "保险种类",
"answers": [""] # 答案正例列表
"negatives": [""] # 答案负例列表
},
more ...
}
Treinamento: corpus/pool/train.json.gz
Validação: corpus/pool/valid.json.gz
Teste: corpus/pool/test.json.gz
Resposta: corpus/pool/answers.json
tem um total de 27.413 respostas e o formato dos dados é json
:
{
"INDEX": {
"zh": "中文",
"en": "英文"
},
more ...
}
格式 INDEX ++$++ 保险种类 ++$++ 中文 ++$++ 英文
corpus/pool/train.txt.gz
, corpus/pool/valid.txt.gz
, corpus/pool/test.txt.gz
.
格式 INDEX ++$++ 中文 ++$++ 英文
corpus/pool/answers.txt.gz
O corpus é compactado usando gzip para reduzir o tamanho, e os dados podem ser acessados usando comandos como zmore, zless, zcat e zgrep.
zmore pool/test.txt.gz
Usando "dados de perguntas e respostas", você ainda precisa fazer muito trabalho para entrar no modelo de aprendizado de máquina, como segmentação de palavras, remoção de palavras irrelevantes, remoção de sinais de pontuação e adição de tags de rótulo. Portanto, podemos continuar o processamento com base em "dados de perguntas e respostas", mas em tarefas como segmentação de palavras, podemos usar diferentes ferramentas de segmentação de palavras, o que tem impacto no treinamento do modelo. Para disponibilizar os dados rapidamente, insuranceqa-corpus-zh fornece um conjunto de dados usando segmentação de palavras HanLP, desmarcação, desparagem e adição de rótulos. Este conjunto de dados é totalmente baseado em "dados de perguntas e respostas".
import insuranceqa_data as insuranceqa
train_data = insuranceqa . load_pairs_train ()
test_data = insuranceqa . load_pairs_test ()
valid_data = insuranceqa . load_pairs_valid ()
# valid_data, test_data and train_data share the same properties
for x in test_data :
print ( 'index %s value: %s ++$++ %s ++$++ %s' %
( x [ 'qid' ], x [ 'question' ], x [ 'utterance' ], x [ 'label' ]))
vocab_data = insuranceqa . load_pairs_vocab ()
vocab_data [ 'word2id' ][ 'UNKNOWN' ]
vocab_data [ 'id2word' ][ 0 ]
vocab_data [ 'tf' ]
vocab_data [ 'total' ]
vocab_data
contém word2id
(dict, de palavra para id), id2word
(dict, de id para palavra), tf
(dict, estatísticas de frequência de palavras) e total
(número total de palavras). Dentre eles, o identificador das palavras não registradas é UNKNOWN
e o id das palavras não registradas é 0.
Os formatos de dados de train_data
, test_data
e valid_data
são os mesmos. qid
é o ID da pergunta, question
é a pergunta, utterance
é a resposta, se label
for [1,0]
significa que a resposta é a resposta correta, [0,1]
significa que a resposta não é a resposta correta, então utterance
contém os dados de exemplos positivos e negativos. Cada questão contém 10 exemplos negativos e 1 exemplo positivo.
train_data
contém 12.889 perguntas, 141779
dados, exemplos positivos: exemplos negativos = 1:10 test_data
contém 2.000 perguntas, 22000
dados, exemplos positivos: exemplos negativos = 1:10 valid_data
contém 2.000 perguntas, 22000
dados, exemplos positivos: exemplo negativo = 1: 10
Comprimento da frase:
max len of valid question : 31, average: 5(max)
max len of valid utterance: 878(max), average: 165(max)
max len of test question : 33, average: 5
max len of test utterance: 878, average: 161
max len of train question : 42(max), average: 5
max len of train utterance: 878, average: 162
vocab size: 24997
Você pode usar este corpus com o seguinte código-fonte aberto
deep-qa-1: modelo de linha de base
SeguroQA TensorFlow: CNN com TensorFlow
n-grams-get-started: modelo N-gram
word2vec-get-started: modelo de vetor de palavras
Declaração 1: seguroqa-corpus-zh
Este conjunto de dados foi gerado usando seguro de traduçãoQA, e o código é lançado sob a Licença Pública Chunsong, versão 1.0. Os dados são apenas para fins de pesquisa e devem ser citados e abordados quando publicados em qualquer mídia, periódico, revista ou blog.
InsuranceQA Corpus, Chatopera Inc., https://github.com/chatopera/insuranceqa-corpus-zh, 07 27, 2017
Quaisquer dados derivados do insuranceqa-corpus também precisam ser abertos e devem declarar conteúdo consistente com a "Declaração 1" e a "Declaração 2".
Declaração 2: seguroQA
Este conjunto de dados é fornecido apenas para fins de pesquisa. Se você publicar algo usando esses dados, cite nosso artigo: Aplicando aprendizado profundo à seleção de respostas: um estudo e uma tarefa aberta. Minwei Feng, Bing Xiang, Michael R. Glass, Lidan Wang, Bowen Zhou @ 2015