Как создать набор данных таким же образом, как был создан MedNLI? - PullRequest
0 голосов
/ 09 мая 2020

Я пытаюсь сгенерировать данные, которые будут совместимы с форматом, используемым в проекте MedNLI ( MedNLI - Естественный язык в клинических текстах ). Мне известно, что этот проект уже содержит несколько наборов данных (таких как SNLI, MultiNLI и MedNLI), но я хочу воспроизвести те же результаты в своем собственном наборе данных.

Проблема в том, что я не могу кажется, можно создать входные данные в том же формате. Согласно этой статье , образец записи из обучающего набора выглядит так:

    {
       "sentence1":"Labs were notable for Cr 1.7 (baseline 0.5 per old records) and lactate 2.4.",
       "pairID":"23eb94b8-66c7-11e7-a8dc-f45c89b91419",
       "sentence1_parse":"(ROOT (S (NP (NNPS Labs)) (VP (VBD were) (ADJP (JJ notable) (PP (IN for) (NP (NP (NP (NN Cr) (CD 1.7)) (PRN (-LRB- -LRB-) (NP (NP (NN baseline) (CD 0.5)) (PP (IN per) (NP (JJ old) (NNS records)))) (-RRB- -RRB-))) (CC and) (NP (NN lactate) (CD 2.4)))))) (. .)))",
       "sentence1_binary_parse":"( Labs ( ( were ( notable ( for ( ( ( ( Cr 1.7 ) ( -LRB- ( ( ( baseline 0.5 ) ( per ( old records ) ) ) -RRB- ) ) ) and ) ( lactate 2.4 ) ) ) ) ) . ) )",
       "sentence2":" Patient has elevated Cr",
       "sentence2_parse":"(ROOT (S (NP (NN Patient)) (VP (VBZ has) (NP (JJ elevated) (NN Cr)))))",
       "sentence2_binary_parse":"( Patient ( has ( elevated Cr ) ) )",
       "gold_label":"entailment"
    }

Это означает, что для каждого предложения я должен сгенерировать sentence_parse и sentence_binary_parse. Я использую библиотеку Stanford Parser (в настоящее время Python интерфейс , созданный с использованием JPype Стефаном ie Tellex), чтобы генерировать результаты на моих собственных предложениях.

Мне удалось решить проблему создания sentence_parse: я использовал синтаксический анализатор Стэнфордского университета, чтобы сгенерировать этот синтаксический анализ; и удалил избыточные данные с помощью простого регулярного выражения.

Но я потратил много времени и не смог сгенерировать часть sentence_binary_parse. Я пробовал следующие методы:

  1. Я попытался найти соответствующий код в гитхабе MedNLI. Не повезло :( Боюсь, в репозитории нет кода, отвечающего за создание набора данных.

  2. Я попытался взять sentence_parse и удалить все токены, кроме токенов, из исходное предложение, затем удалив лишние скобки, чтобы получить упрощенный результат. Эта обработка оказалась очень сложной и включает в себя множество крайних случаев, которые, как я беспокоюсь, пропустить.

  3. Потому что я получить объект дерева в анализаторе, я думал, что просто итерация по дереву и его текстовая печать будут работать. Простой фрагмент python для этого:

from stanford_parser.parser import Parser

target_sentence = "Labs were notable for Cr 1.7 (baseline 0.5 per old records) and lactate 2.4."
parser = Parser()
_, tree = parser.parse(target_sentence)

def tree_to_binary_parse(tree):
    if tree.isLeaf():
        return tree.value() + " "

    if len(tree.children()) == 1:
        return tree_to_binary_parse(tree.children()[0])

    binary_parse = ""
    binary_parse += "( "
    for child in tree.children():
        binary_parse += tree_to_binary_parse(child)
    binary_parse += ") "
    return binary_parse

print(tree_to_binary_parse(tree))

Но результат неверен - я не получаю того же результата, что и в этом примере записи. Это заставляет меня думать, что я не понимаю, что именно это за формат. Я использовал stanford-parser-corenlp GUI для визуализации дерева Я пытался отформатировать.

Одно предположение, которое у меня было, заключалось в том, что, поскольку дерево не двоичное, я получаю неверные результаты. Поэтому я использовал класс парсера TreeBinarizer в или der, чтобы преобразовать дерево в двоичное, но результаты все равно неверны.

Я чувствую, что есть что-то тривиальное, чего я здесь скучаю. быть стандартным способом (поскольку SNLI, MultiNLI и MedNLI используют один и тот же формат), но я просто не могу найти документацию или какой-либо простой способ сгенерировать данные таким же образом для моих собственных настраиваемых предложений.

Я очень ценю вашу помощь. Спасибо!

...