Как лучше всего хранить лексическую информацию на промежуточных этапах конвейера НЛК spaCy - PullRequest
1 голос
/ 17 октября 2019

У меня есть конвейер NLP на основе spaCy, который обрабатывает большие корпуса, затем ищет совпадения по определенным словам (лемма плюс часть речи), а затем записывает подробную лексическую информацию для каждого совпадения. В результате получается словарь Python, структурированный как в следующем (упрощенном) фрагменте, где w - это соответствующий токен, а sent_id - уникальный хэш предложения / корпуса, в котором был найден токен:

this_match = {"tag": w.tag_,
              "dep": w.dep_,
              "parent": w.head_,
              "children": [{"lemma": c.lemma_,
                            "tag": c.tag_}
                            for c in w.children if not c.is_punct]
              "sent_id": sent_id}

Эти меньшие словари, каждый из которых представляет лингвистический контекст, в котором появляется слово, затем добавляются в словарь верхнего уровня, который связан с леммой / POS каждого маркера соответствия w. Этот словарь служит хранилищем лексической информации для расчета различной статистики по лингвистическим характеристикам слов.

Как вы можете видеть, наша структура данных представляет собой простой JSON со словарями и массивами словарей текста. Как мне хранить его для последующего анализа? В данный момент мне нужно только локальное решение, но если (как Elasticsearch, на 2. ниже), решениеявно масштабируемый, тогда еще лучше. Вот некоторые варианты, которые я рассмотрел:

  1. Просто сохраните их все как JSON и загружайте их каждый раз, когда вы работаете со статистикой.

  2. Загрузите их в индекс Elasticsearch. (Точки данных сами по себе не являются документами, поэтому Elasticsearch кажется излишним.)

  3. Используйте какой-то другой более легкий и простой формат базы данных (TinyDB?).

  4. Pickle для .pkl архива. (Слишком большой; его нелегко передать другим разработчикам / средам.)

Что вы использовали в прошлом для хранения данных с лексической индексацией? Есть ли полезность для этого варианта использования? И как мне обеспечить масштабируемость моего хранилища данных?

Этот вопрос более открытый, чем я обычно хотел бы задать или посмотреть в Stackoverflow, но я думаю, что он будет полезен длядостаточно много других разработчиков, работающих в НЛП, о которых стоит все равно спросить.

...